<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.de/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Rick Minerich's Development Wonderland</title><link>http://www.atalasoft.de/cs/blogs/rickm/default.aspx</link><description>A Software Engineering, Algorithms and Programming Language Blog</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>F# Discoveries This Week 07/30/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx</link><pubDate>Fri, 30 Jul 2010 19:03:57 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20927</guid><dc:creator>RickM</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20927.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20927</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20927</wfw:comment><description>&lt;p&gt;It’s Friday and once again I’ve gathered up more F# content for your viewing pleasure.&amp;#160; If you happen find yourself in the Boston area this next Monday come meet me for our &lt;a href="http://www.fsug.org/"&gt;New England F# User Group meeting&lt;/a&gt;.&amp;#160; We are always happy to have new people interested in checking out functional programming.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;News&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/lisa/archive/2010/07/25/vs-2010-keyboard-shortcuts-for-c-vb-c-f-now-available-in-letter-8-5x11in-and-a4-210-215-297mm-print-ready-sizes.aspx"&gt;VS2010 Keyboard Shortcuts Now Available in Letter and A4 Size&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://langref.org/fsharp+clojure+scala+haskell"&gt;F# samples are 74% complete on langref.org&lt;/a&gt; (nudge nudge)&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/07/24/contract-position-f-interactive-in-silverlight.aspx"&gt;Two Contract Positions: F# Interactive in Silverlight&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://fsug.org/"&gt;Scott Theleman will be speaking at New England FSUG on 8/2&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Audio / Video&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://tv.devexpress.com/#XPOFSharp.movie"&gt;eXpress Persistant Objects and the F# Language&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Articles&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/07/29/some-f-project-templates-available-online.aspx"&gt;Don Syme’s Some F# Project Templates Available Online&lt;/a&gt; and &lt;a href="http://bloggemdano.blogspot.com/2010/07/f-silverlight-mvvm-multi-project.html"&gt;Daniel Mohl’s An F# Silverlight MVVM Mutli-Project Template&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you have your own templates or projects-that-could-be-turned-into-templates, here are the steps to make and publish a template to the Visual Studio Gallery, making it really easy to access by the whole community.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://benhutchison.wordpress.com/2009/06/02/study-functional-programming-or-be-ignorant/"&gt;Ben Hutchison’s Study Functional Programming or Be Ignorant&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Right now, if you want to understand the state of the art in computer programming, those are your choices as I see them.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bohdanszymanik.blogspot.com/2010/07/heatimage-mapping-with-netf.html"&gt;Bohdan Szymanik’s Heat/Image Mapping with .NET/F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Most of the effort was spent aggregating and binning the data, the actual image prep was trivial. The following assumes you have an array of data to display.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/cartesian"&gt;Neil Carrier’s Cartesian Product of Lists in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;So without further ado (other than to note that all the code here is presented &amp;quot;as-is&amp;quot; and without warranty or implied fitness of any kind; use at your own risk) here is my Cartesian product of lists code.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/jaredpar/archive/2010/07/27/converting-system-func-lt-t1-tn-gt-to-fsharpfunc-lt-t-"&gt;Jared Parsons’ Converting System.Func&amp;lt;T1..TN&amp;gt; to FSharpFunc&amp;lt;T,TResult&amp;gt;&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Interop of delegate style types between F# and other .Net languages is a pain point that results from a fundamental difference in how delegates are represented in the F# language. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/stevehawley/archive/2010/07/26/limit-your-memoization-please.aspx"&gt;Steve Hawley’s Limit Your Memoization, Please&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;So the lesson in this (and in many CS problems) is that you need to really understand the specific domain of your problem before applying a sweeping technique like memoization.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blog.ctaggart.com/2010/07/exploring-gac-with-f-and-monocecil.html"&gt;Cameron Taggart’s Exploring the GAC with F# and Mono.Cecil&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Mono.Cecil can be used to look inside assemblies. May be you want to search GAC to find types that implement a certain interface. In this post, I’ll show how to find all the types that implement IDisposable as an example.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blog.ctaggart.com/2010/07/find-authenticode-signed-assemblies.html"&gt;Cameron Taggart’s Find Authenticode Signed Assemblies&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Mono.Security can be used to check for the presence of an Authenticode signature on a assembly.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://community.devexpress.com/blogs/garyshort/archive/2010/07/26/xpo-f-lists-and-seqs-oh-my.aspx"&gt;Gary Short’s XPO – F# Lists and Seqs Oh My!&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Let’s assume we have a small database of people and we wish to calculate the combined age. The functional method of doing that would be to “fold” the elements of a collection of People over a function that accumulates the age of each person, in an accumulator value, which is threaded through the fold.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/07/27/f-euler-problem-9.aspx"&gt;Mark Pearl’s F# Euler Problem 9&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;After some more thinking, I decided to use tuples instead and generate the permutations using the Seq.unfold method.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://tabbles.net/blog/2010/07/29/fsharp-tutorial-how-fsharp-adapts-to-how-we-think-part1/"&gt;Maurizio Colucci’s How F# adapts to the way we think – part1&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is the first episode of a series meant to show how easily F# adapts to the way we think. I assume no knowledge of functional languages, but I do assume knowledge of an imperative language such as C#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.codeproject.com/KB/recipes/FSharpasyncronous.aspx"&gt;Wiston Gubantes’ F# Asynchronous Programming&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Async programming in functional languages such as F# is such a breeze.... &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Community&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://stackoverflow.com/questions/3233473/immutable-data-structures-performance"&gt;Stack Overflow: Immutable data structures performance&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://stackoverflow.com/questions/3350644/functional-reactive-f-storing-states-in-games"&gt;Stack Overflow: Functional Reactive F# - Storing States in Games&lt;/a&gt;&lt;/h3&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+07%2f30%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f30%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+07%2f30%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f30%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f30%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/30/f-discoveries-this-week-07-30-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20927" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/memoization/default.aspx">memoization</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsug/default.aspx">fsug</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/asynchronous/default.aspx">asynchronous</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Euler/default.aspx">Euler</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/modeling/default.aspx">modeling</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/VS2010/default.aspx">VS2010</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/templates/default.aspx">templates</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/mono/default.aspx">mono</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/authenticode/default.aspx">authenticode</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/internals/default.aspx">internals</category></item><item><title>F# Discoveries This Week 07/23/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx</link><pubDate>Fri, 23 Jul 2010 19:54:12 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20912</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20912.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20912</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20912</wfw:comment><description>&lt;p&gt;One of my favorite things about the F# community is that its members tend to build things that are a bit more interesting, and think about concepts that are a bit deeper.&amp;#160; This week is no exception.&amp;#160; Come on in and see what’s been happening in the F# world.&lt;/p&gt;  &lt;p&gt;A quick note to those giving F# talks or running events: If you would like listed here please don’t hesitate to contact me via the email link at the top of the page.&amp;#160; I’d love to help you help others to learn F#.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Events&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/07/nashville-geek-lunch-1130-am-next.html"&gt;Nashville Geek Lunch 11:30 AM Next Tuesday (7/27/2010)&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Articles&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://tomasp.net/blog/event-object-duality.aspx"&gt;Tomas Petricek’s The Duality of Object and Event references&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In this article, I'll talk about an interesting example of duality that (to my best knowledge) wasn't described by anyone before. The two dual structures are references between objects in a normal program and references between events in a reactive application.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://mariusbancila.ro/blog/2010/07/18/resources-for-the-f-presentation-at-ronua-roadshow/"&gt;Marius Bancila’s Resources for the F# Presentation at Ronua Roadshow&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The program that I shown exhibits traits of both functional (for computing the fractal) and object oriented (for displaying the fractal) paradigms.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/two-instruction-virtual-computer.html"&gt;Neil Carrier’s A Two-Instruction Virtual RISC&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of my favorite hobbies is building really tiny virtual computers. The experience has even paid off a time or two when I needed to create a compact domain-specific language (DSL).&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/this-post-is-about-pair-of-f-operators.html"&gt;Neil Carrier’s F#'s Little-Known (?) and (?&amp;lt;-) Operators&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;These two operators work similar to the C/C++ “stringizing” pre-processor operator. That is, they convert non-string code (limited to simple identifiers in the case of F#) into strings according to the following translation patterns:&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/17/arbitraging-bookmakers-with-f"&gt;Julien Ortin’s Arbitraging bookmakers with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The principle is rather simple.&amp;#160; Take the best quotes for each outcome, and process.&amp;#160; If the sum of 1/quote_i is less than one, an arbitrage opportunity exists.&amp;#160; The amount to bet on each outcome is 100/quote. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/07/tricky-late-binding-operators.html"&gt;Vladimir Matveev’s Tricky late binding operators&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F# Dynamic and DynamicAssignment operators are not as simple as they appear ex facte. Most popular sample of their usage is something like this:&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/06/playing-with-websharper.html"&gt;Vladimir Matveev’s Playing with WebSharper&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As a sample we’ll make simple StickyNotes application. Web design is not my primary and favorite skill, so I'll omit cross-browser compatibility and bind all styles to Firefox.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://naveensrinivasan.com/2010/07/16/using-f-to-automate-reading%E2%80%93the-morning-brew/"&gt;Naveen Srinivasan’s Using F# to Automate Reading–The Morning Brew&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I like to try and automate most of the stuff . So I thought why not write a script that reads the Morning Brew feed, filter the excluded content that I am not interested in and open the urls before I come in.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://stevegilham.blogspot.com/2010/07/building-partcover-4-on-vista.html"&gt;Steve Gilham’s Building PartCover 4 on Vista&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Following on from earlier in the week, I pulled the current trunk from SourceForge, and set about building it then putting it to work on some F# code which had caused&lt;/em&gt; an earlier version (the most recent available at the end of last year) to balk.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.codeproject.com/KB/net-languages/FS_Recursion_on_Reader.aspx"&gt;Gert-Jan van der Kamp’s Using a DataReader like a list in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This article demonstrates a technique how you can write recursive algorithms in F# using a Reader instead of a list, so you don't have to load all your data into memory first.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://saladwithsteve.com/2010/07/building-fsharp-on-the-mac.html"&gt;Steve Jenson’s Building F# on Mac OS X&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Joe says his team at Microsoft runs into these issues often with users and was kind enough to walk me through the steps to get F# running on the mac.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+07%2f23%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f23%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+07%2f23%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f23%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f23%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/23/f-discoveries-this-week-07-23-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20912" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/WebSharper/default.aspx">WebSharper</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/automation/default.aspx">automation</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/late+binding/default.aspx">late binding</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/_3F003C00_-/default.aspx">?&lt;-</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Duality/default.aspx">Duality</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/RISC/default.aspx">RISC</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/_3F00_/default.aspx">?</category></item><item><title>F# Discoveries This Week 07/16/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx</link><pubDate>Fri, 16 Jul 2010 15:49:19 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20903</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20903.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20903</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20903</wfw:comment><description>&lt;p&gt;As promised, a fresh batch of links to sooth your aching desire for more F#.&amp;#160; I’m particularly excited to announce I’ll give giving a F# tutorial this year at the &lt;a href="http://cufp.org/"&gt;Commercial Users of Functional Programming&lt;/a&gt; conference.&amp;#160; CUFP is going to have a lot of great content this year and will be well worth attending for anyone interested in functional programming. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;News &lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://www.navision-blog.de/2010/07/14/fake-f-make-1-40-5-0-released-bugfixes-for-cruisecontrol-net/"&gt;FAKE – F# Make 1.40.5.0 Released&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/07/15/f-jobs-at-credit-suisse-london.aspx"&gt;F# Jobs at Credit Suisse, London&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://cufp.org/f-20-day-beach-rick-minerich"&gt;I’ll be giving a F# tutorial at CUFP&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Video&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://vimeo.com/13215304"&gt;Steffen Forkmann speaks on F# Open Source Tools at the New England F# User Group&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Presented at the &lt;a href="http://fsug.org"&gt;New England F# User Group&lt;/a&gt; on June 7, 2010, Steffen discusses FAKE and NaturalSpec. Steffen is the author of the two open source F# projects &amp;quot;FAKE - F# Make&amp;quot; and &amp;quot;NaturalSpec&amp;quot;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Articles&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://www.russiantequila.com/wordpress/?p=149"&gt;Alex Pedenko’s Introducing Furious – A proof-of-concept RRM for F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Meet furious. Furious is a RRM - a Record Relation Mapping system. It is a database-independent object query dsl for records, that currently has a (barebones) mysql implementation. Here's how it works. Suppose you have a record graph like so…&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.codeproject.com/KB/net-languages/ExploringAmazonwithFsharp.aspx"&gt;Vagif Abilov’s Exploring Amazon S3 with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The purpose of this article is to show how fast you can dig into low level details of an unknown technology using F#, and how little code you need to write. Therefore I keep the text of the article short, focusing just on the required steps.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fdatamining.blogspot.com/2010/07/f-async-workflow-application-flickr.html"&gt;Yin Zhu’s F# Async workflow application: a Flickr crawler&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;My strategy is to use the search query to search images with some specific tags and from the result page(as shown below), the url of each image is extracted, from which the image and its tags are then crawled. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.whattofix.com/blog/archives/2010/07/f-versus-micros.php"&gt;Daniel Markham’s F# Versus Microsoft's Regex. A Lesson in Types&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I was doing some text processing. As part of that, I set up a few RegExes. As I continued coding, I realized that I was following a pattern: apply the regex, check the match count, and if there were a bunch of matches, either get the first or last item.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/07/f-vs-mathematica-even-faster-pricer-for.html"&gt;Jon Harrop’s F# vs Mathematica: an even faster pricer for American options&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This new optimized and parallelized F# solution is now a whopping 960× faster than the original Mathematica code from Sal Mangano's Mathematica Cookbook.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/pure-oop-personal-retrospective.html"&gt;Neil Carrier’s Pure OOP – A Personal Retrospective&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Almost instantly, my thoughts about the problem undergo a phase change, and I re-write my earlier code to be more succinct, maintainable, and composable, and usually more computationally efficient.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/integer-square-roots.html"&gt;Neil Carrier’s Integer Square Roots&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is an old algorithm, once popular in assembly language programs on small processors. The fact that it uses only integers, addition, subtraction, and less-than branching, mean that its hardware and software requirements are at rock bottom.&lt;/em&gt;&lt;/p&gt;   &lt;em&gt;&lt;/em&gt;    &lt;p&gt;&lt;/p&gt;   &lt;em&gt;&lt;/em&gt;&lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/13/f-event-module-extension"&gt;Julien Ortin’s F# Event module extension&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Functions to extend the F# Event module.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/09/socket-helpers-in-f"&gt;Julien Ortin’s Socket helpers in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This post describes a module to perform common socket operations using asynchronous operations and reactive programming.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/07/european-central-bank-extracting-reference-rates-with-f"&gt;Julien Ortin’s European Central Bank – extracting reference rates with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Every day, the European Central Bank publishes “official” reference FX (foreign exchange) rates where currencies are quoted against the Euro (expressed as EUR/XXX), or 1 EUR = xxx XXX.&amp;#160; The exchange rates of the last thirty sessions are available in xml format which we shall try to parse.&amp;#160; In order to do so, we use F# and active patterns, based on Don Syme’s draft paper.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Petr Lepilov’s F# interactive, AppFabric cache and PowerShell &lt;a href="http://sharpamqp.net/blog/post/F-interactive-AppFabric-cache-and-PowerShell-%28Part-1%29.aspx"&gt;Part 1&lt;/a&gt; and &lt;a href="http://sharpamqp.net/blog/post/F-interactive-AppFabric-cache-and-PowerShell-%28Part-2%29.aspx"&gt;Part 2&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Applications can store any serializable CLR object without worrying about where the object gets stored. Scalability can be achieved by simply adding more computers on demand. The cache also allows for copies of data to be stored across the cluster, thus protecting data against failures. It runs as a service accessed over the network.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://stevegilham.blogspot.com/2010/07/dotcover-10-beta-first-impressions.html"&gt;Steve Gilham’s dotcover 1.0 beta – first impressions&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Not having R# at home -- because I rarely use C# even if I'm writing for .net -- it's this which interested me more. So, I gave it a try on my current F# project&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fortysix-and-two.blogspot.com/2010/07/f-and-code-contracts-not-quite-there.html"&gt;Kurt Schelfthout’s F# and Code Contracts: not quite there yet&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In this post I’ll show how you can get Code Contracts sort of working for F#. From my very initial explorations, I would conclude that they seem basically usable for F# programming – but you’ll need some glue and tape, and not everything works as you’d expect.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Edmon Begoli’s Scala vs. F#, Application Programming Features &lt;a href="http://www.developer.com/lang/other/article.php/3883051/Scala-vs-F-Comparing-Functional-Programming-Features"&gt;Round 1&lt;/a&gt; and &lt;a href="http://www.developer.com/net/article.php/10916_3890906_1/Scala-vs-F-Round-2-Application-Programming-Features.htm"&gt;Round 2&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F# and Scala, two relatively recent programming languages, provide most .NET and Java software developers with new functional programming features that are worth understanding and evaluating.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Ivan Towlson’s F# pattern matching for beginners, &lt;a href="http://hestia.typepad.com/flatlander/2010/07/f-pattern-matching-for-beginners-part-1-getting-started.html"&gt;Part 1&lt;/a&gt;, &lt;a href="http://hestia.typepad.com/flatlander/2010/07/f-pattern-matching-for-beginners-part-2-decomposition.html"&gt;Part 2&lt;/a&gt; and &lt;a href="http://hestia.typepad.com/flatlander/2010/07/f-pattern-matching-for-beginners-part-3-guards.html"&gt;Part 3&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Pattern matching provides a concise but clear and highly expressive way of writing conditional logic, because it combines the conditional flow with the ability to extract values of interest&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f16%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20903" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/events/default.aspx">events</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/cufp/default.aspx">cufp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fake/default.aspx">fake</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Mathematica/default.aspx">Mathematica</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/sockets/default.aspx">sockets</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/furious/default.aspx">furious</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Flickr/default.aspx">Flickr</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/contracts/default.aspx">contracts</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/S3/default.aspx">S3</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/options/default.aspx">options</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Regex/default.aspx">Regex</category></item><item><title>VerCache Madness with .NET ActiveX Controls</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx</link><pubDate>Tue, 13 Jul 2010 15:37:39 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20896</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20896.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20896</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20896</wfw:comment><description>&lt;p&gt;About a year ago I was working on building our DotTwain ActiveX control and wrote &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/06/03/net-2-0-activex-control-gotchas-safe-for-scripting-and-hooking-into-events.aspx"&gt;two&lt;/a&gt; &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/07/14/net-2-0-activex-controls-part-2-controlling-internet-explorer-via-iwebbrowser.aspx"&gt;articles&lt;/a&gt; on some useful tips that I discovered.&amp;#160; Since that time, I’ve seen a problem on a few customer computers where, after upgrading once, the control would never run.&amp;#160; Instead, it would just try to reinstall after every page load. &lt;/p&gt;  &lt;p&gt;After much frustration, it turned out that the problem is related to a little-known Internet Explorer registry entry called VerCache.&amp;#160; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Settings\{GUID}] &amp;quot;VerCache&amp;quot;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I figured this out after noticing that every machine exhibiting this problem had the same value for VerCache.&amp;#160; Once the VerCache was set to this value, uninstalling did nothing.&amp;#160; The repeated-reinstallation behavior happened with any new version installed which shared the control GUID.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s a VerCache?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Strangely enough, searching for &lt;em&gt;&lt;a href="http://www.google.com/#hl=en&amp;amp;source=hp&amp;amp;q=&amp;ldquo;VerCache&amp;rdquo;+ActiveX"&gt;“VerCache” ActiveX&lt;/a&gt;&lt;/em&gt; gives you little more than an &lt;a href="http://blogs.msdn.com/b/askie/archive/2009/05/22/why-doesn-t-my-activex-control-fail-to-update-in-internet-explorer.aspx"&gt;IE Team blog post&lt;/a&gt; and &lt;a href="http://social.answers.microsoft.com/Forums/en-US/InternetExplorer/thread/cc0e30bd-ca53-4158-b6c0-5988eccd47a5"&gt;one MSDN forums entry&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;At first, I was very excited when I found this IE team blog post.&amp;#160; It appeared that I had found my solution. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Here in the above mentioned screenshots they both are having same file date time stamps and that Causes the VerCache registry key to not get updated.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;To resolve this , ensure that at least one of these parameters - “Created” date time stamp, “Modified” date time stamp or the file size, on the updated control is different from the old version of the control and you should be GTG!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Unfortunately, this information seems to be incorrect, or at least overly vague.&amp;#160; I observed the same bad VerCache value on different machines with different version of the control.&amp;#160; Each of these had different “created” and “modified” time stamps.&amp;#160; In fact, the CAB, the installer in the CAB, and the control assembly itself each had different “created” and “modified” time stamps for every single version.&amp;#160; I even tried updating the INF and setup launcher timestamps to no avail.&lt;/p&gt;  &lt;p&gt;The only thing which did not vary consistently was file size as we rebuild and repackage our control for each DotImage version we release.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Some of the things I tried or considered.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Early on, I discovered simply deleting the registry key after uninstalling fixed the issue temporarily and was under the impression that it was a single bad version of the control causing this.&amp;#160; So, I wrote a small cleaner utility to fix the issue.&amp;#160; However, as time wore on it was apparent that this issue occurred in a somewhat random fashion with all versions of the control.&lt;/p&gt;  &lt;p&gt;Another simple fix I thought about was updating the control GUID with each version.&amp;#160; However, this would require updating both our documentation and demos with every build.&amp;#160; Additionally, our customers would need to update their javascript with every upgrade.&amp;#160; This was unacceptable.&lt;/p&gt;  &lt;p&gt;The next thing I tried was to have the installer launch a custom console program on install which cleaned the registry value.&amp;#160; This worked great in XP.&amp;#160; However, in Windows 7 the console program, even as admin, did not have access to the registry values I wanted to delete.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Finally, a solution.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In the end the only solution I found worked consistently and met our needs was to put custom installer actions into the control itself.&amp;#160; When both installing and uninstalling the installer calls the control’s custom actions which removes any existing VerCache value for the control.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First, I snagged a class I had made previously for cleaning guid-based registry entries:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4fcde709-6e98-4cb7-9762-8821089cdbb1" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;white-space:nowrap;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegActionBreakOnTrue&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;RegistryKey&lt;/span&gt; basekey, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; key);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; T eventData; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; EventArgs(T eventData) { &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.eventData = eventData; } &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; T EventData { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; eventData; } } } &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegGuidCleaner&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; _guid;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; RegGuidCleaner(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; guid)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        _guid = guid;&lt;/li&gt; &lt;li&gt;        Locations = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] {};&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] Locations { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegistryKey&lt;/span&gt; GetPathBase(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; path)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#2b91af;"&gt;RegistryKey&lt;/span&gt; baseKey;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (path.StartsWith(&lt;span style="color:#a31515;"&gt;@&amp;quot;HKEY_CURRENT_USER&amp;#92;&amp;quot;&lt;/span&gt;))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            baseKey = &lt;span style="color:#2b91af;"&gt;Registry&lt;/span&gt;.CurrentUser;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (path.StartsWith(&lt;span style="color:#a31515;"&gt;@&amp;quot;HKEY_LOCAL_MACHINE&amp;#92;&amp;quot;&lt;/span&gt;))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            baseKey = &lt;span style="color:#2b91af;"&gt;Registry&lt;/span&gt;.LocalMachine;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ApplicationException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Unexpected location type: &amp;quot;&lt;/span&gt; + path);&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; baseKey;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetBaselessPath(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; location)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; truncatedLoc = location.Substring(location.IndexOf(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;#92;&amp;#92;&amp;#39;&lt;/span&gt;) + 1);&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; truncatedLoc;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; PerformRegActionForEach(&lt;span style="color:#2b91af;"&gt;RegActionBreakOnTrue&lt;/span&gt; action)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; location &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; Locations)&lt;/li&gt; &lt;li&gt;        {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; fullPath = location + _guid;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#2b91af;"&gt;RegistryKey&lt;/span&gt; baseKey = GetPathBase(fullPath);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; baselessPath = GetBaselessPath(fullPath);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (action(baseKey, baselessPath))&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        }&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; EnteriesExist&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        {&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; doesKeyExist = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            PerformRegActionForEach((baseKey, subkey) =&amp;gt;&lt;/li&gt; &lt;li&gt;            {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; key = baseKey.OpenSubKey(subkey);&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (key != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                {&lt;/li&gt; &lt;li&gt;                    doesKeyExist = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;                }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/li&gt; &lt;li&gt;                    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            });&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; doesKeyExist;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        }&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; DeleteEntries()&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        PerformRegActionForEach((baseKey, subkey) =&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        {&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            {&lt;/li&gt; &lt;li&gt;                Messages(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;&amp;gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Deleting Registry Key: &amp;quot;&lt;/span&gt; + baseKey.ToString() + &lt;span style="color:#a31515;"&gt;@&amp;quot;&amp;#92;&amp;quot;&lt;/span&gt; + subkey));&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                baseKey.DeleteSubKeyTree(subkey);&lt;/li&gt; &lt;li&gt;            }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; ex) &lt;/li&gt; &lt;li&gt;            {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                Messages(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;&amp;gt;(ex.ToString()));&lt;/li&gt; &lt;li&gt;            }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        });&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;&amp;gt;&amp;gt; Messages = &lt;span style="color:#0000ff;"&gt;delegate&lt;/span&gt; { };&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Please forgive the catch (Exception ex).&amp;#160; So far it has been unnecessary to handle failure cases for anything other than logging.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next, I added a custom installer class to remove the entries: &lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:25bc1176-eb8d-4735-84b6-81686d4a70df" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;white-space:nowrap;"&gt; &lt;li&gt;[&lt;span style="color:#2b91af;"&gt;RunInstaller&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegistryCleanerInstallerClass&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;Installer&lt;/span&gt;&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; RegistryCleanerInstallerClass()&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        InitializeComponent();&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CleanVerCache()&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        {&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#2b91af;"&gt;RegGuidCleaner&lt;/span&gt; cleaner = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegGuidCleaner&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;{&amp;quot;&lt;/span&gt; + &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;AcquisitionControl&lt;/span&gt;).GUID + &lt;span style="color:#a31515;"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            cleaner.Locations = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] { &lt;/li&gt; &lt;li&gt;                &lt;span style="color:#a31515;"&gt;@&amp;quot;HKEY_CURRENT_USER&amp;#92;Software&amp;#92;Microsoft&amp;#92;Windows&amp;#92;CurrentVersion&amp;#92;Ext&amp;#92;Settings&amp;#92;&amp;quot;&lt;/span&gt;, &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;             };&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            cleaner.DeleteEntries();&lt;/li&gt; &lt;li&gt;        }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; { }&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Install(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; stateSaver)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Install(stateSaver);&lt;/li&gt; &lt;li&gt;        CleanVerCache();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Commit(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; savedState)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Commit(savedState);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Rollback(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; savedState)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Rollback(savedState);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        CleanVerCache();&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Uninstall(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; savedState)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Uninstall(savedState);&lt;/li&gt; &lt;li&gt;        CleanVerCache();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I also decided to move the com registration into a custom action as well.&amp;#160; The installer-based registration had been intermittently not working which caused us to hand test every release version of the control before sending it out. &lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:89c375a9-4a17-41f4-bfa6-46ee72dfea29" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;white-space:nowrap;"&gt; &lt;li&gt;[&lt;span style="color:#2b91af;"&gt;RunInstaller&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ComRegisterInstallerClass&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;Installer&lt;/span&gt;&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ComRegisterInstallerClass()&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        InitializeComponent();&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Install(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; stateSaver)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Install(stateSaver);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#2b91af;"&gt;RegistrationServices&lt;/span&gt; regSrv = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; System.Runtime.InteropServices.&lt;span style="color:#2b91af;"&gt;RegistrationServices&lt;/span&gt;();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!regSrv.RegisterAssembly(&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.GetType().Assembly, &lt;span style="color:#2b91af;"&gt;AssemblyRegistrationFlags&lt;/span&gt;.SetCodeBase))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            {&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;InstallException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Failed to register componenet for COM interop&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            }&lt;/li&gt; &lt;li&gt;        }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        }&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Commit(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; savedState)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Commit(savedState);&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Rollback(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; savedState)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Rollback(savedState);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#2b91af;"&gt;RegistrationServices&lt;/span&gt; regSrv = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; System.Runtime.InteropServices.&lt;span style="color:#2b91af;"&gt;RegistrationServices&lt;/span&gt;();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!regSrv.UnregisterAssembly(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.GetType().Assembly))&lt;/li&gt; &lt;li&gt;            {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;InstallException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Failed to unregister componenet for COM interop&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;            }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        }&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        {&lt;/li&gt; &lt;li&gt;        }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    [System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityPermission&lt;/span&gt;(System.Security.Permissions.&lt;span style="color:#2b91af;"&gt;SecurityAction&lt;/span&gt;.Demand)]&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Uninstall(&lt;span style="color:#2b91af;"&gt;IDictionary&lt;/span&gt; savedState)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.Uninstall(savedState);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        {&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#2b91af;"&gt;RegistrationServices&lt;/span&gt; regSrv = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; System.Runtime.InteropServices.&lt;span style="color:#2b91af;"&gt;RegistrationServices&lt;/span&gt;();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!regSrv.UnregisterAssembly(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.GetType().Assembly))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            {&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;InstallException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Failed to unregister componenet for COM interop&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            }&lt;/li&gt; &lt;li&gt;        }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        }&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Finally, I added the the custom action calls to the installer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/rickm/customAction1_1431B5FB.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="customAction1" border="0" alt="customAction1" src="http://www.atalasoft.com/cs/blogs/rickm/customAction1_thumb_4F851BB9.png" width="408" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/rickm/customAction2_27DE9F8F.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="customAction2" border="0" alt="customAction2" src="http://www.atalasoft.com/cs/blogs/rickm/customAction2_thumb_329BF6E4.png" width="408" height="204" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This still won’t allow an existing broken control to upgrade.&amp;#160; However, after manually uninstalling the old control, the new one will install and work fine.&amp;#160; At least that’s what I’ve found in IE 8.0.7600.16385 Update 0 on Windows 7 Enterprise 64-bit.&amp;#160; ActiveX tends to be a bit of a moving target these days.&lt;/p&gt;  &lt;p&gt;Now, let’s hope I never need speak of this again.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx&amp;amp;;subject=VerCache+Madness+with+.NET+ActiveX+Controls" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx&amp;amp;;title=VerCache+Madness+with+.NET+ActiveX+Controls" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx&amp;amp;title=VerCache+Madness+with+.NET+ActiveX+Controls" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx&amp;amp;;title=VerCache+Madness+with+.NET+ActiveX+Controls" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx&amp;amp;;title=VerCache+Madness+with+.NET+ActiveX+Controls&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/13/vercache-madness-with-net-activex-controls.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20896" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/activex/default.aspx">activex</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/activex+control/default.aspx">activex control</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/com/default.aspx">com</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/winforms/default.aspx">winforms</category></item><item><title>F# Discoveries this Week 07/09/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx</link><pubDate>Fri, 09 Jul 2010 17:42:10 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20886</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20886.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20886</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20886</wfw:comment><description>&lt;p&gt;This week we once again reap another huge crop of fantastic F# content.&amp;#160; In fact, it’s been getting so overwhelming that I’ll be moving to an every week format from here on out.&amp;#160; Please come in, read, and enjoy!&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;News&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?casestudyid=4000006794"&gt;A New F# Case Study on Microsoft.com&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;With its new tools, the bank can speed development by 50 percent or more, improve quality, and reduce costs.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.meetup.com/FSharpLondon/"&gt;Next F# London Meetup Announced: July 28th&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The next meetup of the F#unctional London Meetup Group will be held on July 28, with Zach Bray talking on Agile Acceptance Testing with F#&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.itwriting.com/blog/articles/don-syme-on-f-microsofts-functional-programming-language-for-net"&gt;Tim Anderson (of The Register) Interviews Don Syme&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I met Syme at the QCon conference in London, in March 2010, and interviewed him shortly afterwards. Some quotes from that interviewed have already been published in an article for The Register, but I am now posting nearly all of it here.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://dotnetkicks.com/fsharp"&gt;DotNetKicks Now has a F# Section&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Thanks to everyone on twitter who voted!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://sourceforge.net/projects/quantifa/"&gt;Quantifa 0.0.2 Released&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Quantifa is an F# open-source library for quantitative finance and risk management. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://laurent.le-brun.eu/site/index.php/2010/06/25/58-new-fsharp-mode-for-emacs"&gt;F#-mode for Emacs updated to 0.3&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The F# mode for Emacs is two years old, and has been downloaded more than 1,000 times.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="https://blogs.msdn.com/b/dsyme/archive/2010/07/08/tabbles-organize-your-files-written-in-f.aspx"&gt;Tables: Organize Your Files. Written in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Tabbles is a new way of organizing files: it combines virtual folders and tags, and auto-organizes and tags your files in very intelligent ways. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Audio / Video&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://channel9.msdn.com/posts/MSDNSweden/Svea-Ekonomi-uses-F-for-automated-billing-system-for-the-Telecom-industry/"&gt;Svea Ekonomi on F# for automated billing system for the Telecom industry&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In earlier versions of the billing system, much of the business logic resided in SQL Server and various Perl and Java programs. That made the solution hard to maintain and tailor to the needs of the customers. By using F# instead of an object oriented language the developers at Svea Ekonomi can be a lot more productive.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Articles&lt;/h1&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.voyce.com/index.php/2010/06/30/minilight-renderer-in-fsharp/"&gt;Ian Voyce’s Minilight renderer in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I’m a sucker for eye-candy, and the other day I came across the beautifully lit renders produced by &lt;/em&gt;&lt;em&gt;Minilight&lt;/em&gt;&lt;em&gt;. It’s a nice, minimal implementation of a global illumination renderer that’s been ported to a wide variety of different languages from C to ActionScript. So of course, I couldn’t resist trying to implement it in F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/07/f-vs-mathematica-fast-pricer-for.html"&gt;Jon Harrop’s F# vs Mathematica: fast pricer for American options&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;Another example from Sal Mangano's Mathematica Cookbook, this time taken from Andreas Lauschke's example, is a &amp;quot;fast&amp;quot; pricer for American options. The relevant section of the book stresses the importance of performance in this context and the Mathematica code presented was heavily optimized by experts.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/07/f-vs-mathematica-parametric-plots.html"&gt;Jon Harrop’s F# vs Mathematica: parametric plots&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Another example from Sal Mangano's Mathematica Cookbook (p.520) is an elegant little Mathematica program that uses a crude numerical integrator to plot the trajectory of a differential equation representing the populations of predators (foxes) and prey (rabbits):&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/07/f-vs-mathematica-red-black-trees.html"&gt;Jon Harrop’s F# vs Mathematica: red-black trees&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The simpler F# solution is also 20× faster at inserting 100k elements and 100× faster at computing the range of depths in the resulting tree.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/07/lorenz-attractor.html"&gt;Jon Harrop’s Lorenz Attractor&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The Lorenz attractor is a fractal derived from the trajectory of a 3-dimensional dynamical system that exhibits chaotic flow. This blog post describes a 35-line program that computes trajectories of this attractor and visualizes them as a beautiful whisp using Windows Presentation Foundation.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/06/composable-order-relations.html"&gt;Neil Carrier’s Composable Order Relations&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Even before I started experimenting, I realized that checking a list for sorting was just a specific example of checking whether the pairs in a list satisfied a certain binary order relation. So I decided to work directly on a more general solution.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/continuation-passing-mnemonics.html"&gt;Neil Carrier’s Continuation-Passing Mnemonics&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Learning to construct continuations can be tough. It’s easy to state how they work: they facilitate tail recursion by recursively passing the remainder of a computation. But it can be a lot harder to actually get one working from scratch.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/dijkstras-shunting-yard-algorithm.html"&gt;Neil Carrier’s Dijkstra’s Shunting-Yard Algorithm&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Without further ado, here is my first F# implementation of Dijkstra’s shunting-yard algorithm, including a basic test (based on the example at Wikipedia). This is probably not a minimal or most-efficient implementation, but it is a starting place.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/arity-and-unit-arguments-in-f-20.html"&gt;Neil Carrier’s Arity and Unit Arguments in F# 2.0&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;While working on an internal domain-specific language, I encountered a case where passing a unit into a function made the syntax somewhat more readable. The completely artificial example below illustrates the concept as the function xfer1. I also tried a two-unit version, which is illustrated as xfer2.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/07/presentation-5-best-practices-for-f.html"&gt;Daniel Mohl’s Presentation: 5 Best Practices for F# Development slides and examples&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;Thanks to all who come out to the New England F# User Group meeting tonight!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://tomasp.net/blog/dynamic-sql.aspx"&gt;Tomas Petricek’s Dynamic in F#: Reading data from SQL database&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you ever tried to call a SQL stored procedure directly using the SqlCommand, then you can surely appreciate the elegance of this code snippet. Let's now take a look at a larger example and some of the neat tricks that make this possible...&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Erik Schulz’s &lt;a href="http://gradbot.blogspot.com/2010/06/cartesian-tree-sort-revisited.html"&gt;Cartesian Tree Sort – Revisited&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/cartesian-tree-sort-skew-heap.html"&gt;Cartesian Tree Sort – Skew Heap&lt;/a&gt; and &lt;a href="http://gradbot.blogspot.com/2010/07/beating-quick-sort-cartesian-tree-merge.html"&gt;Beating Quick Sort - Cartesian Tree Merge&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;After looking at skew heap, merge sort and Cartesian tree, I figured there has to be a way to combine all three.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Julien Ortin’s &lt;a href="http://lepensemoi.free.fr/index.php/2010/06/25/seo-analysis-in-f"&gt;SEO Analysis in F#,&lt;/a&gt; and &lt;a href="http://lepensemoi.free.fr/index.php/2010/06/27/seo-analysis-in-f-a-friendly-application"&gt;SEO Analysis in F#, a friendly application&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Last time, we created a library of Search Engine Optimization (SEO) helpers. This time we’ll see how to use them to actually fetch information about your webiste rankings (and your competitors’).&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/07/european-central-bank-extracting-reference-rates-with-f"&gt;Julien Ortin’s European Central Bank – extracting reference rates with F#&lt;/a&gt; &lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Every day, the European Central Bank publishes “official” reference FX (foreign exchange) rates where currencies are quoted against the Euro (expressed as EUR/XXX), or 1 EUR = xxx XXX. The exchange rates of the last thirty sessions are available in xml format which we shall try to parse.&amp;#160; In order to do so, we use F# and active patterns, based on Don Syme’s draft paper.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.intellifactory.com/blogs/anton.tayanovskyy/2010/6/29/Optimizing-JavaScript-with-F!sharp!.article"&gt;Anton Tayanovskyy’s Optimizing JavaScript with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The need for optimizing JavaScript is very peculiar. This is not about delivering top wall-clock performance, but rather delivering the most compact (in Release mode) and most readable (in Debug mode) source. In the case of WebSharper™, it is also about relieving the compiler and the macro writer from the burden of emitting optimal code.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blog.roundthecampfire.net/2010/06/my-first-f-post.html"&gt;Chris Ballard’s My First F# Post&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;That said, this post will take you through my solution for Euler 54, which (somewhat unusually) isn't a particularly mathematical problem, but turns out to be a great way to demonstrate some of the features of the F# language. The basic principle of this problem is to compare two hands of cards in the game of poker, and to determine which is the winning hand.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blog.roundthecampfire.net/2010/06/prime-numbers-building-eulermaths.html"&gt;Chris Ballard’s Prime Numbers - Building the EulerMaths library in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Those of you who are doing Project Euler know what I am talking about by the EulerMaths library. There are certain fundamentals which crop up again and again in the questions and it is important to work these into a reusable and performant library.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/wpf-mvvm-multi-project-template.html"&gt;Daniel Mohl’s WPF MVVM Multi-Project Template: A Polyglot Approach&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As an advocate for using the right tool for the job, I have created a new WPF MVVM multi-project template composed of an C# View project, an F# ViewModel project, and an F# Model project.&amp;#160; &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.codeproject.com/KB/net-languages/FSharp_Eliza_Bot.aspx"&gt;Rodolfo Ortega’s Eliza like chat bot in F# language for fun&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is a very simple Eliza like chat bot. I call it Meliza Sharp. I wrote it for having fun learning the F# language shipped with Visual Studio 2010. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bugsquash.blogspot.com/2010/07/abusing-printfformat-in-f.html"&gt;Mauricio Scheffer’s Abusing PrintfFormat in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Pretty cool, huh? This trick can be used for other things, since PrintfFormatProc is fully reusable. For example, I'm currently using PrintfFormat manipulation to define type-safe routing in a web application&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/07/06/f-ndash-depressingly-simple-text-file-access.aspx"&gt;Mark Pearl’s Depressingly simple text file access&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Today I was doing some work work and kept having to parse a log file. After a few hours of doing the same routine stuff I thought I might try and automate it using F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Mathias’s &lt;a href="http://clear-lines.com/blog/post/On-the-road-from-C-to-F-reading-Stock-Quotes.aspx"&gt;On the road from C# to F#: reading stock quotes&lt;/a&gt; and &lt;a href="http://clear-lines.com/blog/post/From-C-Sharp-to-F-Sharp-reading-historical-stock-quotes.aspx"&gt;more stocks&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Mads Kristensen has a nice post where he shows how to read&amp;#160; stock quotes from Yahoo finance using C#, which was very helpful to get started. I figured it would be interesting to try out a conversion to F# and see what the result looked like.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx&amp;amp;;subject=F%23+Discoveries+this+Week+07%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx&amp;amp;;title=F%23+Discoveries+this+Week+07%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx&amp;amp;title=F%23+Discoveries+this+Week+07%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx&amp;amp;;title=F%23+Discoveries+this+Week+07%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx&amp;amp;;title=F%23+Discoveries+this+Week+07%2f09%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/07/09/f-discoveries-this-week-07-09-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20886" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/don+syme/default.aspx">don syme</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/wpf/default.aspx">wpf</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/WebSharper/default.aspx">WebSharper</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Sorting/default.aspx">Sorting</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/sql/default.aspx">sql</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/dotnetkicks/default.aspx">dotnetkicks</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/case+study/default.aspx">case study</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/unit/default.aspx">unit</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/arity/default.aspx">arity</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/renderer/default.aspx">renderer</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/emacs/default.aspx">emacs</category></item><item><title>F# Discoveries This Week 06/25/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx</link><pubDate>Fri, 25 Jun 2010 14:40:51 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20848</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20848.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20848</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20848</wfw:comment><description>&lt;p&gt;As always, a huge number of software releases and high quality articles this week.&amp;#160; My favorite thing about the F# community is that someone is always writing about something that tickles my brain.&amp;#160; While right out of a computer science textbook, I enjoyed Erik Schulz’s sorting animations quite a lot.&amp;#160; His animations are excellent.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;News&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!2120.entry"&gt;VS2010 Pro Power Tools Released&lt;/a&gt; (fixes scrolling reference dialog)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A set of extensions to Visual Studio Professional (and above) which improves developer productivity.&amp;#160; Includes a &lt;/em&gt;&lt;em&gt;New ‘Add Reference’ dialog: Pops up fast and is more pleasant (less frustrating) to use.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://huwmancode.codeplex.com/"&gt;HuwmanCode 0.1 Released – Simplified Windows Services in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;HuwmanCode is a collection of libraries intended to enhance the base class libraries for developers writing F#. Using HuwmanCode you can write a Windows Service in F# entirely.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsprojectextender.codeplex.com/"&gt;F# Project Extender 0.9.3 Released&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Installing F# Project Extender provides tools to better organize files in F# projects by allowing project subdirectories and separating file management in Solution Explorer from controlling compilation order.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://vcc.codeplex.com/"&gt;VCC 2.1.30625 Released (Written in F#)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;VCC is a mechanical verifier for concurrent C programs. VCC takes a C program, annotated with function specifications, data invariants, loop invariants, and ghost code, and tries to prove these annotations correct. If it succeeds, VCC promises that your program actually meets its specifications.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://github.com/sandersn/fing"&gt;Fing 0.1 Released&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Fing is F# API Search. It's inspired by Hoogle, although it is not a port.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Audio/Video&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/tomas-petricek-reactive-programming-in-fsharp"&gt;Tomas Petricek at the London F# User Group – Reactive Programming in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;During this talk, Tomas will cover two techniques. We'll start by looking at F# events and declarative approach for specifying event processing. Next, we'll look at embedding F# event handling into asynchronous workflows and programming using &amp;quot;state machines&amp;quot;. We'll also briefly mention how this relates to more general functional programming &amp;quot;design patterns&amp;quot;.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&lt;a href="http://www.fsug.org/OtherEvents/TechEdOnline/tabid/69/Default.aspx"&gt;A Listing of F# TechEd Talks, at the New England F# User Group&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;A complete listing of all TechEd talks pertaining to F#.&amp;#160; Thanks Talbott!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Articles&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://programmingzen.com/2010/06/23/how-microsoft-is-changing-the-programming-world/"&gt;Antonio Cangiano’s How Microsoft is changing the programming world.&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The end result of Microsoft’s new approach is that now Joes everywhere are getting exposed to functional programming (masses of people who would otherwise be virtually shielded from the rest of the programming world).&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://gradbot.blogspot.com/2010/06/cartesian-tree-sort.html"&gt;Erik Schulz’s Cartesian Tree Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/insertion-sort.html"&gt;Insertion Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/priority-queue-heap-sort.html"&gt;Priority Queue &amp;amp; Heap Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/heap-sort.html"&gt;Heap Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/selection-sort.html"&gt;Selection Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/quick-sort.html"&gt;Quick Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/gnome-sort.html"&gt;Gnome Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/comb-sort.html"&gt;Comb Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/06/odd-even-sort.html"&gt;Odd-even Sort&lt;/a&gt;, &lt;a href="http://gradbot.blogspot.com/2010/05/cocktail-sort.html"&gt;Cocktail Sort&lt;/a&gt;, and &lt;a href="http://gradbot.blogspot.com/2010/05/bubble-sort.html"&gt;Bubble Sort&lt;/a&gt;.&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Inspired be Wikipedia's algorithm pages I decided to recreate their animations using JavaSrcipt and HTML5 canvas elements. IE 8 does not support canvas however new versions of all other modern browsers do. Mozilla Firefox, Google Chrome, Safari, and Opera.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://laurent.le-brun.eu/site/index.php/2010/06/23/57-fsharp-opengl-a-cross-platform-sample"&gt;Laurent Le Brun’s F# + OpenGL: a cross-platform sample&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The nice thing is that the application was cross-platform. I tried it on Windows, Linux and Mac, it worked everywhere, without changing a single line. It seems like F# is ready to make great cross-platform 3D applications!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/f-wpf-mvvm-project-template.html"&gt;Daniel Mohl’s An F# WPF MVVM Project Template&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I've been planning for a while to create an F# WPF MVVM Template to add to the other templates that have been announced on this blog.&amp;#160; A resent post by Mark Pearl provided a great simple example which helped kick me into gear and bring this plan to fruition.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/jomo_fisher/archive/2010/06/15/use-fslex-and-fsyacc-to-make-a-parser-in-f.aspx"&gt;Jomo Fisher’s Use FsLex and FsYacc to make a parser in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The starter project implements a simple calculator language that you can grow into a more sophisticated Domain Specific Language or text processing application.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/06/15/seo-helpers-in-f"&gt;Julien Ortin’s SEO helpers in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In this post, we describe how to implement functions that help fetch information that can be used to study how well (or bad) the keywords are used on a given website in comparison with other (successful) competitors.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/06/flip-operator-for-f.html"&gt;Neil Carrier’s Flip Operator for F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I ask again: is there a good native way to do this in F#? If not, it might well worth standardizing this. (And potentially other FORTH-like operators like “over” and “rot,” perhaps with an extensible syntax.)&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.intellifactory.com/blogs/joel.bjornson/2010/6/18/Fun-with-dependent-formlets.article"&gt;Joel Björnson’s Fun with dependent formlets&lt;/a&gt; (in WebSharper)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;To give some hints of what you can do with the WebSharper formlet library, the objective of the following exercise is to create a simple spread-sheet like widget based on formlets. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.intellifactory.com/blogs/joel.bjornson/2010/6/17/More-of-Ext-JS-and-WebSharper.article"&gt;Joel Björnson’s More of Ext JS and WebSharper&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In general, seamlessly being able to create data abstractions and transfer data back and forth between the server and client is a very strong incentive for using the WebSharper extension.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.intellifactory.com/blogs/joel.bjornson/2010/6/17/Reactive-programming-with-WebSharper.article"&gt;Joel Björnson’s Reactive programming with WebSharper&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In following post I'd like to highlight F# (and WebSharper) support for asynchronous and reactive programming.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/06/23/f-seq.unfold.aspx"&gt;Mark Pearl’s F# Seq.Unfold&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The more I play the more I am really loving F# and how succinct the language is.&amp;#160; Today I thought I would put up a brief post on the Seq.unfold function.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blog.codingadventure.com/2010/06/21/testing-f/"&gt;Daniel Merino’s Testing F#&lt;/a&gt; (with Traveling Salesmen)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The next example is a little snippet that returns a dictionary distances between cities for a small distributed traveling salesman problem I did last year to test F# on a software engineering class.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://richardminerich.com/2010/06/love-the-lambda/"&gt;Richard Minerich’s Love the Lambda&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;So the idea for Love the Lambda was born:&amp;#160; I would demonstrate both the usefulness and sheer novelty of first class functions and do so simultaneously in C# and F#.&amp;#160; More than that, I would use the opportunity as a kind of F# omnibus.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.petehunt.net/blog/?p=15"&gt;Pete Hunt’s F# rocks (so far)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have to say, I really like F# so far. For those of you not in the know, F# is Microsoft’s new first-class language that has been in development since 2002 but debuted in Visual Studio 2010. It is basically a dialect of O’Caml that runs on .NET and has full Visual Studio support.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+06%2f25%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f25%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+06%2f25%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f25%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f25%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/25/f-discoveries-this-week-06-25-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20848" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/WebSharper/default.aspx">WebSharper</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Fing/default.aspx">Fing</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/FsYacc/default.aspx">FsYacc</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_+Project+Extender/default.aspx">F# Project Extender</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/VC2010+Pro+Power+Tools/default.aspx">VC2010 Pro Power Tools</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Sorting/default.aspx">Sorting</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/OpenGL/default.aspx">OpenGL</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Reactive+Programming/default.aspx">Reactive Programming</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/SEO/default.aspx">SEO</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Parsers/default.aspx">Parsers</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/FsLex/default.aspx">FsLex</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/VCC/default.aspx">VCC</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/HuwmanCode/default.aspx">HuwmanCode</category></item><item><title>F# Discoveries This Week 06/14/2010 - TechEd Edition</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx</link><pubDate>Mon, 14 Jun 2010 21:25:47 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20792</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20792.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20792</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20792</wfw:comment><description>&lt;p&gt;Despite the small number of talks on F#, it seemed the language was on everyone’s lips this TechEd.&amp;#160; Whether working at the Visual Studio Languages booth or hanging out at the parties afterward, almost everyone I talked to was actively investigating or making plans to explore the language.&amp;#160; &lt;/p&gt;  &lt;p&gt;Of course, this is great news.&amp;#160; A quiet tide of interest is quickly rising.&amp;#160; Now we just need to give those who are interested the resources they need to be successful and comfortable using F#.&amp;#160; &lt;/p&gt;  &lt;p&gt;For this reason, each and every F# speaker and blogger is critically important right now.&amp;#160; If you haven’t, don’t be afraid to give blogging a try.&amp;#160; The F# community is helpful and very forgiving of mistakes.&amp;#160; If you are already blogging, consider giving a talk at your local user group or code camp.&amp;#160; Now is the best time to help and educate.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;News&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/f-presentation-for-new-england-f-user.html"&gt;Daniel Mohl will be speaking at FSUG on 7/5&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.itu.dk/courses/BPRD/E2009/"&gt;IT University of Copenhagen uses F# as presentation language in a course: “Programming Language Concepts for Software Developers”&lt;/a&gt; (Thanks Pheophan)&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/06/07/project-emporia-a-personal-view-on-twitter-implemented-in-f.aspx"&gt;Project Emporia Released, on Azure with a F# Core&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://fscheck.codeplex.com/"&gt;FsCheck 0.7 Released&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;Video / Audio&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;Luke Hoban’s &lt;a href="http://www.msteched.com/2010/NorthAmerica/DEV307"&gt;F# in Microsoft Visual Studio 2010 (video)&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/lukeh/archive/2010/06/13/f-scaling-from-explorative-to-net-component-f-talk-teched-2010.aspx"&gt;F# Scaling from Explorative to .NET Component (blog)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The TechEd talk covered a number of interesting aspects of using F# in Visual Studio - tools, core syntax, some examples of current commercial users, and the physical structure of F# projects used in client applications.&amp;#160; But the theme of scaling from explorative programming to .NET component is one that I find particularly powerful, and which is a really unique strength of the F# language.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.infoq.com/interviews/john-hughes-fp"&gt;John Hughes on Why Functional Programming Matters&lt;/a&gt; (video)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;John Hughes is the author of “Why functional programming matters” paper and in this interview he outlines the merits of functional programming and the reason for his involvement with it. He also goes over several core principles of functional programming like monads, handling of side-effects, etc.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.talkingshopdownunder.com/2010/06/episode-16-f-with-joel-pobar.html"&gt;Talking Shop Down Under with Joel Pobar&lt;/a&gt; (audio)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This week see's Richard talking with Joel Pobar about F# and languages in general. Functional programming is coming more and more to the fore and this is a great episode to find out more about F#, try and get your head around monads and think more about the way you approach programming in general and wether the general purpose languages that you use currently are always the best choice for the job at hand.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;Articles&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/ff714588.aspx"&gt;Luke Hoban’s F# Fundamentals on MSDN Magazine&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This article takes a look at some of the core concepts of the F# language and its implementation on top of the CLR.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/ashleyf/archive/2010/06/08/wolfram-a-new-kind-of-turing-machine.aspx"&gt;Ashley Feniello’s Wolfram – A New Kind of Turing Machine&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Stephen Wolfram’s book, “A New Kind of Science” is flippin’ brilliant! (or perhaps I'm just not brilliant enough to realize he's a mad man) 1,280 pages packed with beautiful insights and Tufte-worthy visualizations. I remember discovering it while randomly browsing the MS library one day. I became so enthralled, an hour passed just standing there reading it!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.codeproject.com/KB/net-languages/SymbolicCalcInFS.aspx"&gt;Vagif Abilov’s Symbolic Calculation in F# on CodeProject&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of the best areas to use a functional language is to apply it to symbolic calculations. Like transforming algebraic expressions or evaluating function derivatives. I remember how I was impressed many years ago when I looked at a program in Prolog that occupied not more than one computer screen but could tell me that derivative of sin(x) was cos(x). So I wanted to do the same in F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/06/04/html5-programming-with-f.aspx"&gt;Don Syme’s HTML5 Programming with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Now that WebSharper has been released and matured, it will be great to see it used more widely by F# users.&amp;#160; Given the importance of both HTML5 and Silverlight, F# users interested in shipping visualization apps should really make sure they know how to use F# to program these, using the Silverlight SDK (for Silverlight) or tools such as WebSharper (for HTML5).&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://achrissmith.blogspot.com/2010/06/f-active-pattern-seven-tag-limit.html"&gt;Chris Smith’s F# active pattern seven-tag limit&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Once he went into the theory behind active patterns I agreed that the limit was reasonable and didn't push for us to change the design. This doesn't mean you can't use active patterns with greater than seven tags, it just means that you need to use a different language construct -- the partial active pattern -- instead.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Phillip Trelford’s &lt;a href="http://www.trelford.com/blog/post/Runtime-Units-of-Measure-for-F.aspx"&gt;Runtime Units of Measure for F#&lt;/a&gt; and &lt;a href="http://www.trelford.com/blog/post/Units-of-measure-auto-conversion.aspx"&gt;Units of measure auto-conversion&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The F# compiler includes a Units of Measure feature which infers a measure type at compile time, which means you get measure type safety with uncompromised runtime performance. […] Sometimes you might also want to actually infer units of measure at runtime, say to display the inferred unit type at the UI. The following F# code prototype provides such inference. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/Silverlight-4-Calculator-Sample-in-F.aspx"&gt;Phillip Trelford’s Silverlight 4 Calculator Sample in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The sample demonstrates creating a View in WPF or Silverlight without XAML. The idea is to make things a little easier from F# by implementing a (+) operator overload to attach dependency properties.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/28/creating-an-odata-web-service-with-f.aspx"&gt;Creating an OData Web Service with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you’d like to take a look at the service I wrote, I published it on Visual Studio Gallery. You just need to go to File\New Project in Visual Studio 2010: &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/06/dragon-curve-in-17-lines-of-f.html"&gt;Jon Harrop’s A dragon curve in 17 lines of F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Dragon curves are a family of self-similar fractal curves. The following 17-line F# program uses Windows Presentation Foundation to visualize the results of a simple recursively-constructed dragon curve.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s &lt;a href="http://techneilogy.blogspot.com/2010/05/list-collect-implementations-with.html"&gt;List&amp;lt;&amp;gt;.collect Implementations with Benchmarks&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/06/one-more-list-collect-implementation.html"&gt;One more List&amp;lt;&amp;gt;.collect Implementation&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I had a situation come up in my proof-of-concept where I needed to do a collect on a .NET List&amp;lt;&amp;gt;. So I did some experiments with how it might best be accomplished. A key factor was that this is something that may be done literally millions of times a day if the application makes it to deployment; so I was concerned with performance.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/06/easy-no-compile-dfas.html"&gt;Neil Carrier’s Easy, No-Compile DFAs&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The methods for compiling a set of finite automata DFAs or NFAs into a composite DFA are found in most introductory compiler texts. But how easy is it to construct a simple engine in F# which recognizes a series of patterns? As it turns out, pretty simple.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/06/surfing-tuple-pipeline.html"&gt;Neil Carrier’s Surfing the Tuple Pipeline&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;It turns out that I like the RWFP approach better than mine, but the special tuple pipelines I came up with are not without interest, so I decided to post them here.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s This is why I love F# &lt;a href="http://techneilogy.blogspot.com/2010/06/this-is-why-i-love-f.html"&gt;Part One&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/06/why-i-love-f-part-2.html"&gt;Part Two&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I can’t imagine having any trouble explaining the operation of this program to someone with a basic knowledge of statistics but no computer programming experience. It simply looks like what it does in a way that is succinct and comprehensible.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/standard-wcf-service-application.html"&gt;Daniel Mohl’s The Standard WCF Service Application Template for F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In the interest of building up a larger set of installed templates for F#, I've ported the standard C# WCF Service Application to F# and packaged it into a .vsi file.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a name="1997119761320975706"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/fsharpcouch-simple-couchdb-net-api-in-f.html"&gt;Daniel Mohl’s FSharpCouch: A Simple CouchDB .NET API in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;To interact with CouchDB, I primarily use Relax (a full featured &amp;quot;.NET API abstraction of CouchDB's (excellent) RESTful API&amp;quot;); however, I thought it might be fun and educational to create a simple CouchDB .NET API abstraction in F#.&amp;#160; Note: The code provided&amp;#160; here is loosely based on SharpCouch.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/05/f-parsing-simple-language.html"&gt;Vladimir Matveev’s F# Parsing simple language&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;During my professional career I often met the task of code generation based on some source data. Last time it was analogue of BCL compiler for ExpressionTrees and then C# compiler have done mostly all the required job with parsing expressions.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Vladimir Matveev’s &lt;a href="http://v2matveev.blogspot.com/2010/06/f-performance-of-events.html"&gt;F# Performance of events&lt;/a&gt; and &lt;a href="http://v2matveev.blogspot.com/2010/06/f-performance-of-events-update.html"&gt;F# Performance of events (update)&lt;/a&gt; and &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;Rick Minerich’s A Speedy Alternative to F# DelegateEvents&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As you see compiler have inlined code of Trigger method inside Run&amp;#160; and accessed field multicast directly. That’s why we replaced let binding with val.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://laurent.le-brun.eu/site/index.php/2010/06/07/54-fsharp-and-fparsec-a-glsl-parser-example"&gt;Laurent Le Brun’s F# and FParsec: a GLSL parser example&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of my side-projects is GLSL Minifier.&amp;#160; GLSL is the shading language of OpenGL, that is a language designed to run on the GPU, in order to control the graphics pipeline and create nice realtime graphical effects. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://laurent.le-brun.eu/site/index.php/2010/06/08/55-fsharp-getopt-to-parse-the-command-line"&gt;Laurent Le Brun’s F# getopt to parse the command line&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Many programs (especially console applications) need to parse the command line, and find which options the user want to set. As far as I know, .NET doesn't provide any function for this, but there several third-party libraries to do it.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fdatamining.blogspot.com/2010/06/note-on-efficiency-in-f-part-i-small.html"&gt;Yin Zhu’s A note on efficiency in F#, part I: small things first&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As a functional programming language, F# programs are kind of high-level, thus harder to reason its performance than imperative programs. Not the big-O thing, it is the constant. This series contains little tips about performance.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/06/10/f-wpf-form-ndash-the-basics.aspx"&gt;Mark Pearl’s F# WPF Form – the basics&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have been keeping my eye out for some examples of creating a WPF form in a F# project and came across &lt;/em&gt;&lt;em&gt;Tim’s F# Twitter Stream Sample [..]&lt;/em&gt;&lt;em&gt; So today I am going to make just the very basic WPF form with all the goodness of a XAML window.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/06/09/simple-mouse-move-event-in-f-with-winforms.aspx"&gt;Mark Pearl’s Simple Mouse Move Event in F# with WinForms&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In Thomas’s post he has a form with an ellipse on it that when he clicks on the ellipse it pops up a message box with the button clicked… awesome. Something that got me on the post though was the code similar to the one below…&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://shinkirou.org/blog/2010/06/f-multidimensional-arrays-and-jagged-arrays/"&gt;Ming Tang’s F# Multidimensional Arrays and Jagged Arrays&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The problem is that, an array is initialized per every rows, which wastes computational resource. Because the widths of each row are constant, why not make a 1d array and access pixels like y * width + x.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://community.livejournal.com/visual_fsharp/3090.html"&gt;Pheophan’s Fun with Fibonacci&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Horrible performance. fibnaive 40 took 16.6 sec on my laptop&amp;quot; […] “It’s also pretty fast. Here are results of calculating 1000 Fibonacci numbers: Real: 00:00:00.001, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0”&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20792" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/parser/default.aspx">parser</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/units+of+measure/default.aspx">units of measure</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/FsCheck/default.aspx">FsCheck</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/events/default.aspx">events</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/tuning/default.aspx">tuning</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Active+Patterns/default.aspx">Active Patterns</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/HTML5/default.aspx">HTML5</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/symbolic+calculation/default.aspx">symbolic calculation</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/DFA/default.aspx">DFA</category></item><item><title>A Speedy Alternative to F# DelegateEvents</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx</link><pubDate>Fri, 04 Jun 2010 16:19:58 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20757</guid><dc:creator>RickM</dc:creator><slash:comments>4</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20757.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20757</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20757</wfw:comment><description>&lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;DelegateEvents use DynamicInvoke under the hood and so can be slow when trigged frequently.&amp;#160; As we have an existing model which requires an event interface, this was was causing our F# implementation to be a bit slower than the C# we were comparing it to.&amp;#160; Thankfully, F# allows you to implement your own eventing via IDelegateEvent.&amp;#160; With a standard Invoke version of DelegateEvent provided by James Margetson, our implementation in F# is running at equivalent speed to C#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The other day I was working with &lt;a href="http://www.atalasoft.com/cs/blogs/stevehawley/"&gt;Steve&lt;/a&gt; on trying to discover why a particular segment of apparently equivalent code was running ~25% slower in F# when compared to C#.&amp;#160; We broke out &lt;a href="http://www.automatedqa.com/products/aqtime/"&gt;AQTime&lt;/a&gt; and did a line by line release-mode profile.&amp;#160; The frequent triggering of a &lt;a href="http://msdn.microsoft.com/en-us/library/ee370450.aspx"&gt;DelegateEvent&lt;/a&gt; immediately jumped out as the cause.&amp;#160; &lt;/p&gt;  &lt;p&gt;Needless to say, I was a bit concerned.&amp;#160; What could be causing this slow eventing in my favorite language?&amp;#160; After a brief review of the generated IL, nothing in particular seemed fishy.&amp;#160; So, I quickly built a sample and sent it off to my favorite language team.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The contents of the F# library assembly:&lt;/strong&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dc45fc3f-9c89-49d1-bef1-39b6ee119d05" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;&lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; FsEventClass(num) =&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; event = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DelegateEvent&amp;lt;System.EventHandler&amp;lt;System.EventArgs&amp;gt;&amp;gt;()&lt;br&gt;     &lt;br&gt;     [&amp;lt;CLIEvent&amp;gt;]&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; this.Event = event.Publish&lt;br&gt;             &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; this.Run () = &lt;br&gt;         &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; args = [| this :&amp;gt; obj ; System.EventArgs.Empty :&amp;gt; obj |]&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; i &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; 1 .. num &lt;span style="color:#0000ff;"&gt;do&lt;/span&gt;&lt;br&gt;             args.[1] &amp;lt;- &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; System.EventArgs() :&amp;gt; obj&lt;br&gt;             event.Trigger( args )&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;And this, the C# client:&lt;/strong&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2dcf6ed5-ad9a-4cde-afbc-7e65fb9a81a1" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; iters = 1000000;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt; fsStart = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now;&lt;br&gt;     &lt;span style="color:#2b91af;"&gt;FSharpEventingLib&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;FsEventClass&lt;/span&gt; fs = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FSharpEventingLib&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;FsEventClass&lt;/span&gt;(iters);&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; fsCalled = 0;&lt;br&gt;     fs.Event += (s, a) =&amp;gt; fsCalled++;&lt;br&gt;     fs.Run();&lt;br&gt;     &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt; fsEnd = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now;&lt;br&gt;     &lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt; fsTime = fsEnd - fsStart;&lt;br&gt;     System.&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;F# took: {0} when called {1} times&amp;quot;&lt;/span&gt;, fsTime, fsCalled)); &lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Finally, the program output:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;F# took: 00:00:05.6830000 when called 1000000 times&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As it turns out, the F#’s current &lt;a href="http://msdn.microsoft.com/en-us/library/ee370450.aspx"&gt;DelegateEvent&lt;/a&gt; uses a DynamicInvoke under the hood and that can slow things down quite a bit.&amp;#160; This won’t be important in most cases as Event is implemented with a standard Invoke.&amp;#160; However, in our case we had to fit to an existing C# model and so needed to do an event trigger for each resulting scanline of an image.&lt;/p&gt;  &lt;p&gt;A big thanks to James Margetson of the F# Team for the following fast replacement for DelegateEvent.&amp;#160; Within same day I had mentioned my issue he had this solution for me.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The new library contents:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:75d3ea67-e88d-4308-bffc-de81cd96ed5f" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;&lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; FastDelegateEvent() =&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;mutable&lt;/span&gt; multicast : System.EventHandler = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; x.Trigger(sender:obj,args:System.EventArgs) =&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;match&lt;/span&gt; multicast &lt;span style="color:#0000ff;"&gt;with&lt;/span&gt;&lt;br&gt;         | &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; ()&lt;br&gt;         | d &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; d.Invoke(sender,args)   &lt;span style="color:#008000;"&gt;// DelegateEvent used: d.DynamicInvoke(args) |&amp;gt; ignore&lt;/span&gt;&lt;br&gt;  &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; x.Publish =&lt;br&gt;         { &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; IDelegateEvent&amp;lt;System.EventHandler&amp;gt; &lt;span style="color:#0000ff;"&gt;with&lt;/span&gt;&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; x.AddHandler(d) =&lt;br&gt;                 multicast &amp;lt;- System.Delegate.Combine(multicast, d) :?&amp;gt; System.EventHandler&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; x.RemoveHandler(d) =&lt;br&gt;                 multicast &amp;lt;- System.Delegate.Remove(multicast, d)  :?&amp;gt; System.EventHandler }&lt;br&gt; &lt;br&gt; &lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; FsFastEventClass(num) =&lt;br&gt;    &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; event = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FastDelegateEvent()&lt;br&gt; &lt;br&gt;    [&amp;lt;CLIEvent&amp;gt;]&lt;br&gt;    &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; this.Event = event.Publish&lt;br&gt; &lt;br&gt;    &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; this.Run () =&lt;br&gt;        &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; i &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; 1 .. num &lt;span style="color:#0000ff;"&gt;do&lt;/span&gt;           &lt;br&gt;            event.Trigger(this, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; System.EventArgs())&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The program output with FastDelegateEvent:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;F# took: 00:00:00.0390000 when called 1000000 times&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This new event class completely resolved our issue.&amp;#160; With it our F# version is just as fast, if not faster, than the C# equivalent.&amp;#160; &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx&amp;amp;;subject=A+Speedy+Alternative+to+F%23+DelegateEvents" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx&amp;amp;;title=A+Speedy+Alternative+to+F%23+DelegateEvents" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx&amp;amp;title=A+Speedy+Alternative+to+F%23+DelegateEvents" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx&amp;amp;;title=A+Speedy+Alternative+to+F%23+DelegateEvents" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx&amp;amp;;title=A+Speedy+Alternative+to+F%23+DelegateEvents&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20757" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/delegates/default.aspx">delegates</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/interop/default.aspx">interop</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/DelegateEvent/default.aspx">DelegateEvent</category></item><item><title>F# Discoveries This Week 05/28/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx</link><pubDate>Fri, 28 May 2010 17:24:01 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20735</guid><dc:creator>RickM</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20735.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20735</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20735</wfw:comment><description>&lt;p&gt;Come in and see what’s new in the F# world.&amp;#160; Every week is seems there is ever more content on an increasingly wider variety of topics.&amp;#160; The community is growing at a very fast pace.&amp;#160; Because of this, I’ve decided to change things up a bit with a new format.&amp;#160; I hope you’ll find it enhances your experience in exploring this mountain of fresh F# information.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2 align="center"&gt;News&lt;/h2&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/mulambda/archive/2010/05/15/f-on-silverlight-4.aspx"&gt;Silverlight 4 runtime has been released with F# support&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/mulambda/archive/2010/05/21/f-powerpack-may-2010-now-for-silverlight.aspx"&gt;The F# PowerPack 2.0.0.0 is out and supports Silverlight 3 and 4&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.intellifactory.com/blogs/adam.granicz/2010/5/22/WebSharper-2010-Standard-is-available.article"&gt;WebSharper 2010 1.0 is out and is free for commercial use&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://fsprojectextender.codeplex.com/"&gt;F# Project Extender 0.9.2.1 has been released&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;The &lt;a href="http://www.intellifactory.com/blogs/adam.granicz/2010/3/5/Call-for-Presentations---CUFP-2010.article"&gt;CUFP 2010&lt;/a&gt; and &lt;a href="http://www.intellifactory.com/blogs/adam.granicz/2010/3/5/Call-for-Presentations---ML-2010.article"&gt;ML 2010&lt;/a&gt; Call for Presentations is active&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.informationweek.com/news/global-cio/trends/showArticle.jhtml?articleID=219700406&amp;amp;pgno=4#GrangeInsurance"&gt;F# is on InformationWeek 500: 20 Great Ideas To Steal&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2 align="center"&gt;Video / Audio&lt;/h2&gt;  &lt;h3&gt;&lt;a href="http://www.infoq.com/interviews/don-syme-fsharp-2_0"&gt;Don Syme Talks with Sadek Drobi About F# 2.0, a First Class Citizen in Visual Studio 2010&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;Don Syme speaks about F# 2.0, its application fields, its integration in Visual Studio 2010 and F# open source Power Pack library. Don also discusses the genesis of F#, the ties with OCaml as well as its specificity. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.infoq.com/interviews/F-Sharp-Don-Syme"&gt;Don Syme Answering Questions on F#, C#, Haskell and Scala&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;In this interview made by InfoQ’s Sadek Drobi, Don Syme, a Senior Researcher at Microsoft Research, answers questions mostly on F#, but also on functional programming, C# generics, type classes in Haskell, similarities between F# and Scala.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.infoq.com/presentations/The-State-of-the-Art-on-.NET"&gt;Amanda Laucher and Josh Graham – The state of the Art on .NET&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Amanda Laucher and Josh Graham present at an introductory level some of the most important elements of the .NET ecosystem: F#, M, Boo, NUnit, RhinoMocks, Moq, NHibernate, Castle, Windsor, NVelocity, Guerilla WCF, Azure, MEF. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=560"&gt;.NET Rocks F# Panel Live from NERD Center, Cambridge, MA&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;While on the Road Trip, Carl and Richard recorded this panel discussion with Talbott Crowell, Rick Minerich and Richard Hale Shaw on F# at the Microsoft New England Research and Development Center. The panel makes a very compelling case for adding a functional language to your toolchest. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h2 align="center"&gt;Blogs&lt;/h2&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!2110.entry"&gt;Brian McNamara’s Proggit Subreddit Graph in F# and DGML&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Dear Proggit: graphs are cool, but I prefer F#, so I graphed the subreddit interconnections with F# and DGML&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://thecodedecanter.wordpress.com/2010/05/24/implementing-map-reduce-in-f-sharp/"&gt;James’ Implementing map-reduce in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Again, F# proves to be a remarkably succinct language to express problems, in this case the built in syntactic sugar for tuples is a godsend!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/05/f-and-standard-aspnet-mvc-2-web.html"&gt;Daniel Mohl’s F# ASP.NET MVC 2 Web Application Template&lt;/a&gt; and     &lt;br /&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/05/creating-f-solution-template-for-visual.html"&gt;Creating an F# Template for Visual Studio 2010&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Tomas Petricek recently provided a great blog post on creating MVC web applications in F#.&amp;#160; I thought it might be nice to also have a template that replicates the functionality of the standard C# ASP.NET MVC 2 Web Application template.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/05/simple-inversion-of-control-ioc.html"&gt;Daniel Mohl’s A Simple Inversion of Control (IoC) Container in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In this post I will show how to build a simple Inversion of Control (IoC) container in F#&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/05/getting-started-with-websharper.html"&gt;Daniel Mohl’s Getting Started with WebSharper Platform 2010&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;A little while ago a cool new product was brought to my attention that allows client-based web development in F#.&amp;#160; The name of this product is WebSharper Platform 2010.&amp;#160; In this post, I will show a simple example for getting started with WebSharper Platform 2010.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/05/computation-expressions-with-net-data.html"&gt;Neil Carrier’s Computation Expressions with .NET Data Types&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I’m still working on my proof-of-concept and it’s going well. One thing that’s been on my mind is the desire to use computation expressions in it somewhere. So I’ve been trying to make sure I understood computation expressions well enough to use them to good purpose.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/05/wow-its-been-while.html"&gt;Neil Carrier’s Active Pattern Activity&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/05/more-active-pattern-activity.html"&gt;More Active Pattern Activity&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have to say the F# proof of concept is still going a lot better than I had ever hoped. Not only is it easy to port the basic algorithms from C# where applicable, but the kind of straightforward design that “functional-thinking” encourages is making for a better program with much less source code.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/Exposing-F-Dynamic-Lookup-to-C-WPF-Silverlight.aspx"&gt;Phillip Trelford’s Exposing F# Dynamic Lookup to C#, WPF and Silverlight&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Sometimes dynamic typing can be a pragmatic way of solving a specific problem. For example say you’re a solutions provider with a core product and have a number of clients with bespoke requirements. One client asks for a product rating feature. This can be relatively easily achieved using dynamic properties:&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/F-operator-overloads-for-WPF-dependency-properties.aspx"&gt;Phillip Trelford’s F# operator overloads for WPF dependency properties&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Creating WPF elements directly from F# can produce good self-contained code, but at time is a little less readable than the XAML equivalent. Lets consider placing a button bound to a command on a grid at a certain position.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.simple-talk.com/community/blogs/clivet/archive/2010/05/20/91425.aspx"&gt;Clive Tong’s Towards an F# .NET Reflector add-in&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;When I had the opportunity to spent some time during Red Gate's recent &amp;quot;down tools&amp;quot; week on a project of my choice, the obvious project was an F# add-in for Reflector.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.simple-talk.com/community/blogs/clivet/archive/2010/05/20/91426.aspx"&gt;Clive Tong’s F# and the rose-tinted reflection&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;We're already seeing increasing use of many cores on client desktops. It is a change that has been long predicted.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/05/15/technical-analysis-indicators-in-f-metadata-reflection"&gt;Julien Ortin’s Technical analysis indicators in F# – Metadata and Reflection&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In this part, we show how to use reflection to fetch the metadata attributes we have described in the first part of the technical analysis series.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://stevegilham.blogspot.com/2010/05/f-excessively-lazy-sequences-and.html"&gt;Steve Gilham’s F# - excessively lazy sequences and stateful visitors&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Doing something a little bit complicated here: the functional equivalent of a visitor pattern, where I want to apply a few functions to a long and potentially expensive to traverse sequence of items (so ruling out a series of iterations over the visited nodes)&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/05/mini-hash-table.html"&gt;Jon Harrop’s Mini hash table&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Imagine you're stuck on a desert island with only a few keystrokes and you desperately need to create your own rudimentary hash table. What might you do?&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/25/how-to-enumerate-all-wmi-classes.aspx"&gt;Jomo Fisher’s How to Enumerate all WMI Classes&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is the F# code you would use to enumerate all WMI classes on your system and show the properties of each. of each. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://ugh.cc/f-short-hand-syntax-for-maps-and-sets/"&gt;Fredrik Holmstrom’s F# short hand syntax for maps and sets&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;I’ve always though it a shame that there is no in language short hand syntax for maps and sets in F#, something like {{foo = 1; bar = 2}} and {#1, 2#} – but having a very flexible language at my disposal I set out to find some way to achieve this, mostly for fun – but maybe someone will find a practical use of it.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h2 align="center"&gt;Community&lt;/h2&gt;  &lt;h3&gt;&lt;a href="http://stackoverflow.com/questions/2905081/scala-versus-f-question-how-do-they-unify-oo-and-fp-paradigms"&gt;From StackOverflow: Scala vs F#, How do they unify OO and FP?&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;What are the key differences between the approaches taken by Scala and F# to unify OO and FP paradigms?&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://stackoverflow.com/questions/2840714/f-static-member-type-constraints"&gt;From StackOverflow: F# Static Member Type Constraints&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I'm trying to define a function, factorize, which uses structural type constraints (requires static members Zero, One, +, and /) similar to Seq.sum so that it can be used with int, long, bigint, etc. I can't seem to get the syntax right, and can't find a lot of resources on the subject. This is what I have, please help.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+05%2f28%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f28%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+05%2f28%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f28%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f28%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/28/f-discoveries-this-week-05-28-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20735" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/lazy/default.aspx">lazy</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/mapreduce/default.aspx">mapreduce</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/powerpack/default.aspx">powerpack</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/wpf/default.aspx">wpf</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/cufp/default.aspx">cufp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/WebSharper/default.aspx">WebSharper</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Dynamic+Lookup/default.aspx">Dynamic Lookup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/metaprogramming/default.aspx">metaprogramming</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/refactor/default.aspx">refactor</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Active+Patterns/default.aspx">Active Patterns</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Computation+Expressions/default.aspx">Computation Expressions</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/IoC/default.aspx">IoC</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/ML/default.aspx">ML</category></item><item><title>F# Discoveries This Week 05/14/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx</link><pubDate>Fri, 14 May 2010 21:06:49 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20671</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20671.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20671</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20671</wfw:comment><description>&lt;p&gt;Today, I’d like to thank all of the F# users on twitter.&amp;#160; &lt;/p&gt;  &lt;p&gt;Twitter’s a great place to stay up to date on the latest F# happenings and many of the posts you see here are either written by or passed on from members of this community.&amp;#160; So, if you are interested in becoming part of the &lt;a href="http://twitter.com/rickasaurus/f-fsharp-users"&gt;F# Twitter Community&lt;/a&gt;, I suggest starting with these frequent F# tweeters: &lt;a href="http://twitter.com/dmohl"&gt;@dmohl&lt;/a&gt;, &lt;a href="http://twitter.com/TigerHasse"&gt;@TigerHasse&lt;/a&gt;, &lt;a href="mailto:r@robertpi,@sforkmann"&gt;@robertpi&lt;/a&gt;, &lt;a href="http://twitter.com/sforkmann"&gt;@sforkmann&lt;/a&gt;, and &lt;a href="http://twitter.com/ptrelford"&gt;@ptrelford&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;I’ve also been known to &lt;a href="http://twitter.com/rickasaurus"&gt;occasionally tweet&lt;/a&gt; on F# and other programming topics.&amp;#160; Now, on to the links.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!2080.entry"&gt;Brian McNamara’s More F# Screencasts&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;My previous two screencasts (‘Getting started with F# in VS2010’ and ‘Editing F# source code in VS2010’) have been moved to MSDN, which means they’re now available in a variety of video formats.&amp;#160; A new screencast (‘Managing F# projects in VS2010’) has also been added, so check it out!&lt;/em&gt;&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://strangelights.com/blog/archive/2010/05/14/1660.aspx"&gt;Robert Pickering’s F# Talks in London&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I’ve been in London for the past few days. I arrived Tuesday afternoon and gave at talk at “The F#unctional Londoners Meetup Group” on the Tuesday evening. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/ee310028.aspx"&gt;James McCaffrey’s Combinations and Permutations with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Understanding combinations and permutations is a fundamental skill in software testing. In this month’s Test Run column I show you how to work with combinations and permutations using code written in the new F# language.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.infoq.com/presentations/Pragmatic-F-Sharp-in-Action"&gt;Amanda Laucher and Josh Graham’s Pragmatic F# in Action (video)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Amanda Laucher and Josh Graham introduce the audience to F# basics showing some of its main features, emphasizing what makes it better than imperative languages.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://tomasp.net/blog/fsharp-mvc-web.aspx"&gt;Tomas Petricek’s ASP.NET and F# Part 1 – Creating MVC Web Applications in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you want to use F# for creating an MVC application, you have a few options. It should be possible to create the web application solely as an F# project. However, we'll use a more convenient approach. We'll create a standard C# MVC project and move all the actual implementation to an F# library.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.navision-blog.de/2010/05/12/fake-f-make-1-20-0-released/"&gt;Steffen Forkmann’s FAKE – F# Make 1.20.0 Released&lt;/a&gt; and     &lt;br /&gt;&lt;a href="http://www.navision-blog.de/2010/05/07/using-a-mailboxprocessor-to-speedup-fake-f-make/"&gt;Using a MailboxProcessor to speedup “FAKE – F# MAKE”&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Today I released a new bugfix release for “FAKE – F# Make”. We fixed some path and logging issues and as a new feature we introduced the @@ operator which allows to combine paths.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/Trading-on-IM-with-F.aspx"&gt;Phillip Trelford’s Trading on IM with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The slides from my Trading on IM talk will be attached to this post, and the video/podcast should be appear on the Skills Matter website. I’ll also attach the 100 lines of code for shopping checkout sample, that works with a barcode scanner, I showed at the start of my presentation.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/05/integrating-f-and-erlang-using-otpnet.html"&gt;Daniel Mohl’s Integrating F# and Erlang Using OTP.NET&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Recently, I ran across a post that talked about a .NET library named OTP.NET.&amp;#160; OTP.NET is a port of a Java library named JInterface that allows a .NET application to act as an Erlang node.&amp;#160; OTP.NET hasn't been updated in a while and the API is a bit clunky, but the provided functionality is very cool.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h5&gt;&amp;#160;&lt;/h5&gt;  &lt;h3&gt;Nick Grattan’s &lt;a href="http://nickgrattan.wordpress.com/2010/05/09/creating-web-parts-with-f/"&gt;Creating Web Parts with F#&lt;/a&gt; and     &lt;br /&gt;&lt;a href="http://nickgrattan.wordpress.com/2010/05/12/an-edsl-for-emitting-html-tables-in-web-parts-using-f-3/"&gt;An EDSL for Emitting HTML Tables in Web Parts using F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;When writing web parts in C# for SharePoint the System.Web “table” class or “table” HTML elements are most often used for controlling layout (“div” aficionados keep your ears covered…). The code quickly gets ugly and difficult to manage – there’s no direct control to ensure correct matching of opening and closing of tags. So how about writing an EDSL that provides a syntax and constructs for doing this?&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/05/tiny-expert-system-using-monads.html"&gt;Neil Carrier’s Tiny Expert System using Monads&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Below is a tiny expert system implemented using computation expressions. I managed to find a way to use the following computation expression methods: Bind, Delay, and Return.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s &lt;a href="http://techneilogy.blogspot.com/2010/05/simple-dsl-tokenization-to-evaluation.html"&gt;A Simple DSL: Tokenization to Evaluation&lt;/a&gt;,     &lt;br /&gt;&lt;a href="http://techneilogy.blogspot.com/2010/05/s-expressions-for-semantic-networks.html"&gt;S-Expressions for Semantic Networks&lt;/a&gt; and     &lt;br /&gt;&lt;a href="http://techneilogy.blogspot.com/2010/05/half-baked-scheme.html"&gt;A Half-Baked Scheme&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This post presents a small example of the above process. It implements a small interpreter which analyzes and evaluates LISP-like prefix expressions involving integers, multiplication, and division. For example: (+ (* 1 2) (* 3 4) evaluates to a data element containing the number 14. To make clear what is happening, be sure and examine the value of tokenList before it is evaluated. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Julien Ortin’s Technical analysis indicators in F# – &lt;a href="http://lepensemoi.free.fr/index.php/2010/05/05/technical-analysis-indicators-in-f-bands"&gt;Bands&lt;/a&gt;, &lt;a href="http://lepensemoi.free.fr/index.php/2010/05/10/technical-analysis-indicators-in-f-signal"&gt;Signal&lt;/a&gt; and &lt;a href="http://lepensemoi.free.fr/index.php/2010/05/10/technical-analysis-indicators-in-f-ehlers"&gt;Ehlers&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is part of a series on technical analysis indicators in F#, based on the multi-language TA-Lib.&amp;#160; Quick disclaimer : some of these indicators are not verified.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharp-euler.wikispaces.com/"&gt;Yin Zhu’s F# for Project Euler Problems&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Some problems have two versions of solutions, the version I first learned F# and the version based on my current knowledge of F#. The first version is usually quite easy to understand even if the reader does not know F#, while the second uses some nice F# feature or good functional programming practice in general.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/05/java-vs-f.html"&gt;Jon Harrop’s Java vs. F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;What Cliff forgot to mention is that .NET also provides value types and a far more compelling example than complex numbers is the humble hash table.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/timng/archive/2010/05/06/f-wpf-events.aspx"&gt;Tim Ng’s F# + WPF + Events&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I recently had to do some travelling for the VS launch event in Las Vegas and QCON event in Beijing. One of the things thats nice about travelling is that it gives you time to do some things you may not otherwise do - in my case, I had a chance to try to (re) learn WPF and see how I can use F# with WPF.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.markhneedham.com/blog/2010/05/10/f-tacit-programming/"&gt;Mark Needham’s Tacit Programming&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I realised that this approach quite closely describes what I've been trying to drive towards in my most recent playing around with F# and it's actually quite fun trying to drive any intermediate state or storing of data in variables out of a program and just relying completely on function composition and higher order functions.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://dotnet.dzone.com/news/f-my-current-coding-approach"&gt;Mark Needham’s F#: My current coding approach&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I spent a bit of time over the weekend coding a simple generic builder for test objects in F# and I noticed that although there were similarity with the ways I drive code in C# or Java my approach didn't seem to be exactly the same.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://continuousdevelopment.wordpress.com/2010/05/13/f-vs-c-samples/"&gt;Ebru Cucen’s F# vs C# Samples&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;After my talk at ldnUG yesterday, I got nice suggestions from Zi Makki, and here is the first one: comparison between F# and C#, especially using LINQ. This subject had been quite popular once in a while, now it is probably my time to focus on this subject.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.bjoernrochel.de/2010/05/12/kata-stringcalculator-in-f/"&gt;Bjorn Rochel’s Kata StringCalculator in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Two meetings ago we decided to do some coding on every meeting. The previous meeting we solved Kata FizzBuzz and on yesterday’s meeting we tried to dance with Roy Osheroves Kata StringCalculator.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://weblogs.asp.net/gunnarpeipman/archive/2010/05/12/f-in-asp-net-mathematics-and-testing.aspx"&gt;Gunnar Peipman’s F# in ASP.NET, mathematics and testing&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Starting from Visual Studio 2010 F# is full member of .NET Framework languages family. It is functional language with syntax specific to functional languages but I think it is time for us also notice and study functional languages. In this posting I will show you some examples about cool things other people have done using F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://langexplr.blogspot.com/2008/02/defining-mutually-recursive-classes-in.html"&gt;Luis Diego Fallas’s Defining mutually recursive classes in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As explained in Adventures in F#--Corecursion defining mutually recursive functions requires the use of the &lt;code&gt;and&lt;/code&gt; keyword between function definitions. As briefly mentioned in the Type Definitions section of the manual, the &lt;code&gt;and&lt;/code&gt; keyword can also be used in types.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.msdev.com/Directory/Description.aspx?EventId=1846"&gt;Nancy Strickland’s New Features in F# 2.0 Training Video&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Describes the new features in F# version 2.0, which comes included in Visual Studio 2010.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://partialclass.blogspot.com/2010/05/dotnetrocks-in-boston.html"&gt;DotNetRocks in Boston (with F# Panel)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The panel suggested we add F# to our repertoire and understand its strengths, and use it where it's beneficial. I'm going to take that advice. Bottom line is if I can replace 50 lines of confusing C# code with 10 lines of elegant F#, I've done myself a service.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+05%2f14%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f14%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+05%2f14%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f14%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f14%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/14/f-discoveries-this-week-05-14-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20671" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/math/default.aspx">math</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/dsl/default.aspx">dsl</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/twitter/default.aspx">twitter</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/wpf/default.aspx">wpf</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fake/default.aspx">fake</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/monad/default.aspx">monad</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/technical+analysis/default.aspx">technical analysis</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Euler/default.aspx">Euler</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/kata/default.aspx">kata</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Web+Parts/default.aspx">Web Parts</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/screencasts/default.aspx">screencasts</category></item><item><title>F# Discoveries This Week 05/02/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx</link><pubDate>Sun, 02 May 2010 21:43:06 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20609</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20609.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20609</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20609</wfw:comment><description>&lt;p&gt;Back this week with another huge batch of F# links.&amp;#160; While there’s way too much great stuff to mention, my favorite this week is by a mysterious blogger known only as James.&amp;#160; His heat transfer model is short, sweet and very well explained.&lt;/p&gt;  &lt;p&gt;If you’re around Boston tomorrow (Monday) be sure to check our F# panel for .NET Rocks!&amp;#160; With over 100 people already signed up, it’s sure to be a great time.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://vs2010roadtripboston.eventbrite.com/"&gt;The .NET Rocks! Visual Studio Road Trip – F# Edition in Boston (5/3/2010)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;Carl and Richard are loading up the DotNetMobile (a 30 foot RV) and driving to your town again to show off the latest and greatest in Visual Studio 2010 and .NET 4.0! This stop will include an intro to F# and a special topic panel discussion on F# featuring New England F# User leaders.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.drdobbs.com/go-parallel/article/showArticle.jhtml?articleID=224400710"&gt;Rob Knies’ F#: Putting the 'Fun' into 'Functional' (On Dr. Dobbs)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;quot;In the F# team,&amp;quot; says Syme, a principal researcher at Microsoft Research Cambridge, &amp;quot;We say, 'F is for Fun.' F# enables users to write simple code to solve complex problems. Programming with F# really does make many programming tasks simpler, and our users have consistently reported that they've found using the language enjoyable.&amp;quot;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://thecodedecanter.wordpress.com/2010/04/30/modelling-the-2d-heat-equation-in-f-using-100-lines-of-code/"&gt;James’s Modelling heat transfer in F# using 100 lines of code&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;In this post I’m going to show how we can model the heat equation succinctly in F#. I’m going to consider the two-dimensional case and approximate the solution at discrete spatial mesh points and at discrete time periods.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!1910.entry"&gt;Brian McNamara’s Game programming in F# (with Silverlight and WPF)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;I wanted to learn more about Silverlight, WPF, and Xaml (in the context of F#, of course), so I wrote a fun little game you can play in your browser (or on your desktop).&amp;#160; It’s a knock-off of a dozen other similar games, as you can probably tell from this screenshot&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blog.martindoms.com/2010/04/28/implementing-the-mandelbrot-set-in-f/"&gt;Martin Doms’s Implementing the Mandelbrot set in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;One of my favourite things to do when learning a new language (or graphics package for that matter) is to write an implementation of a Mandelbrot set viewer. So here’s my F# version, annotated to help out anyone who is trying to get to know this language.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/mulambda/archive/2010/05/01/value-restriction-in-f.aspx"&gt;Dmitry Lomov’s Finer Points of F# Value Restriction&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Type inference algorithms are a fascinating topic – there is an interesting and beautiful theory behind them. Today we will consider one interesting aspect of type inference in F# - it might give you a glimpse of what kind of challenges coming up with a good algorithm in this space presents, and hopefully explain away a stumbling block that F# developers occasionally encounter. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bitbucket.org/riles01/frank/wiki/Home"&gt;Frank is a functional reactive request/response engine for .NET applications (written in F#)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Frank is inspired by the Ruby dynamic duo of Rack and Sinatra and aims to provide the simplicity of those frameworks but utilizing the powerful functional reactive paradigm for asynchronous processing.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://stevegilham.blogspot.com/2010/04/launching-f-web-application-inside.html"&gt;Steve Gilham’s Launching an F# web application inside VS2010 as if it were C#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is a follow-up to my comments on VS launcher for F# web apps, where I can put an example of the changed markup to the F# class library project to make it act like a web project and launch a browser with your Default.aspx page when you hit F5.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/UML-Sequence-Diagram-F-Script.aspx"&gt;Phillip Trelford’s UML Sequence Diagram: F# Script&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;Yesterday I fancied moving some hand drawn diagrams to mouse drawn form; but instead found myself battling against a somewhat stubborn and forgetful modelling tool. It left me wondering if there might be an easier way to do this; perhaps by separating the concern of model description from layout.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/04/distributed-hash-table-dht-in-f.html"&gt;Daniel Mohl’s A Distributed Hash Table (DHT) in F#: Recursion and Pattern Matching&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The simplest implementation defined in the Chord Protocol requires that each node only know about its successor node.&amp;#160; The circle of nodes, joined by each successor node association, makes up the node cluster. In order for a node to become part of the node cluster, it must execute a join request to any arbitrary node in the cluster.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/04/interacting-with-rabbitmq-via-f-and.html"&gt;Daniel Mohl’s Interacting with RabbitMQ via F# and Symbiote&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;Last week, I showed how easy it is to talk to CouchDB with F# and Symbiote.&amp;#160; In this post, I'll show how you can start interacting with RabbitMQ by adding an additional dozen or so lines of code.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.navision-blog.de/2010/04/24/solving-kata-yahtzee-with-fsharp-and-naturalspec/"&gt;Steffen Forkmann’s Solving KataYahtzee with F# and NaturalSpec&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Today I’m starting a new blog post series about solving code katas in F# and with the help of my NaturalSpec project. A code kata is a programming exercise which helps to improve your skills through practice and repetition.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://strangelights.com/blog/archive/2010/04/18/1659.aspx"&gt;Robert Pickering’s Strings and F# Immutable Lists&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;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;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://vimeo.com/skaggles/videos/sort:date"&gt;Andre Burdette’s F# Screencast Series&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is the first of future screencasts that I am doing regarding F# programming. In this screencast I show how to use values and functions in the F# language. Enjoy! &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/04/spell-binding-tale-of-three-recursions.html"&gt;Neil Carrier’s A Spell-Binding Tale of Three Recursions&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;Tail recursive functions often involve accumulators, continuations, and other values which are not really of concern to the ultimate users of those functions. These can often be curried away or otherwise hidden from the ultimate user. This post looks at three obvious techniques for doing so (there are some more that are less obvious), the differences between the three techniques, etc.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/04/driving-range-pooled-allocator.html"&gt;Neil Carrier’s Driving Range Pooled Allocator&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Large numbers of small allocations can be brutal on a memory management system, especially in terms of CPU time (and in terms of fragmentation on non-GC systems). This post presents an F# implementation of a pooling algorithm I’ve used for many years, and in various languages from C onwards, to solve this problem.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Julien Ortin’s Technical analysis indicators in F# – &lt;a href="http://lepensemoi.free.fr/index.php/2010/04/28/technical-analysis-indicators-in-f-misc"&gt;Misc&lt;/a&gt; and &lt;a href="http://lepensemoi.free.fr/index.php/2010/04/28/technical-analysis-indicators-in-f-volatility"&gt;Volatility&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is part of a series on technical analysis indicators in F#, based on the multi-language TA-Lib.&amp;#160; Quick disclaimer: some of these indicators are not verified.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/04/nature-of-value-restriction.html"&gt;Vladimir Matveev’s Nature of value restriction&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;Value restriction is an error that firstly makes a direct hit in the brain of non-prepared developer. It has no straight analogues in the majority of mainstream languages and thus very confusing.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/04/mailboxprocessors-practical-application.html"&gt;Vladimir Matveev’s MailboxProcessors: Practical Application&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;&lt;em&gt;Last time we have examined the API of MailboxProcessors. Now it is time to see, how this concept can be applied to solve real-world problems.&lt;/em&gt;&lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://dougfinke.com/blog/index.php/2010/04/18/how-to-add-an-f-type-to-a-powershell-session/"&gt;Doug Finke’s How to add an F# type to a PowerShell session&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;The PowerShell Add-Type cmdlet lets you define a .NET Framework class in your Windows PowerShell session. It supports the following languages CSharp, CSharpVersion3, VisualBasic, JScript. It does not support FSharp directly.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Mark Pearl’s F# Objects &lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/04/29/f-objects-ndash-integrating-with-the-other-.net-languages-ndash.aspx"&gt;Part 1&lt;/a&gt;, &lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/04/29/f-objects-ndash-integration-with-the-other-.net-languages-ndash.aspx"&gt;Part 2&lt;/a&gt; and &lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/05/01/f-objects-ndash-part-3-ndash-itrsquos-time-to-overloadhellip.aspx"&gt;Part 3&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In the next few blog posts I am going to explore objects in F#. Up to now, my dabbling in F# has really been a few liners and while I haven’t reached the point where F# is my language of preference – I am already seeing the benefits of the language when solving certain types of programming problems. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Mark Pearl’s International Radio Operators Alphabet in F# and Silverlight &lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/04/22/international-radio-operators-alphabet-in-f-amp-silverlight-ndash-part.aspx"&gt;Part 1&lt;/a&gt; and &lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/04/22/international-radio-operators-alphabet-in-f-amp-silverlight-ndash-part-again.aspx"&gt;Part 2&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;My approach was really simple. I would need a function that would convert a single character to a string – i.e. ‘A’ –&amp;gt; “Alpha” and then I would need a function that would take a string of characters, convert them into a sequence of characters, and then apply my converter to return a sequence of words… make sense?&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://mikehadlow.blogspot.com/2010/04/currying-vs-partial-function.html"&gt;Mike Hadlow’s Currying vs Partial Function Application&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;There’s a lot of confusion over these two terms. By myself included. But I’m pretty happy now that I understand the difference and wanted to share my newfound knowledge with you, dear reader.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.bjoernrochel.de/2010/04/29/kata-fizzbuzz-in-f/"&gt;Bjorn Rochel’s Kata FizzBuzz in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Last F# book club meeting in Munich was awesome (as usual). 2 weeks ago we decided to do a Code Kata on each subsequent meeting. This week was our first, with Kata FizzBuzz.&amp;#160; This is what we came up with.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://ednortonengineeringsociety.blogspot.com/2010/04/your-language-aint-worth-pair-o-dimes.html"&gt;Jim Lehmer’s Your language ain’t worth a pair o’ dimes&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;That's not to say the Real World Functional Programming book is a bad book. It has been an interesting read so far, for sure. I am just going to stop reading the C# parts, thereby allowing the new concepts and new language I am learning to be &amp;quot;pure&amp;quot; in my mind, which should actually help speed up my learning process. And my suggestion to you is if you pick up the book, do the same thing, too. Dump your baggage, start fresh!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://richardminerich.com/2010/04/the-ted-neward-f-folding-challenge/"&gt;Rick Minerich’s The Ted Neward F# Folding Challenge&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Take a list of numbers and compress it in a particular simple way but without any mutable state.&amp;#160; What makes this problem interesting is that a tech interviewer mentioned that that he hadn’t seen a functional solution to this problem.&amp;#160; I also wanted to share this because I think it’s a great example of how to convert an imperative loop into a functional fold.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+05%2f02%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f02%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+05%2f02%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f02%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+05%2f02%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/05/02/f-discoveries-this-week-05-02-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20609" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/allocation/default.aspx">allocation</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/recursion/default.aspx">recursion</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Fold/default.aspx">Fold</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/DHT/default.aspx">DHT</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/value+restriction/default.aspx">value restriction</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/uml/default.aspx">uml</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/physics/default.aspx">physics</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/mandelbrot/default.aspx">mandelbrot</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Symbiote/default.aspx">Symbiote</category></item><item><title>F# Discoveries This Week 04/16/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx</link><pubDate>Fri, 16 Apr 2010 18:16:13 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20507</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20507.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20507</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20507</wfw:comment><description>&lt;p&gt;It’s finally here.&amp;#160; After years of work, F# 2.0 is out and ready to change the way you program in .NET.&amp;#160; Come in for launch information, updates to projects written in F# and some great posts on actually using the language.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/dsyme/archive/2010/04/12/f-2-0-released-as-part-of-visual-studio-2010.aspx"&gt;Don Syme’s F# 2.0 Released!&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F# is a productive functional and object-oriented programming language for .NET that enables users to write simple code to solve complex problems. Its succinct syntax and powerful type inference lets users stay closer to the domain they are working in, and the integration into .NET and Visual Studio gives rich access to the expansive .NET platform.&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Other Posts on the F# Launch&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://research.microsoft.com/en-us/news/features/fsharp-041310.aspx"&gt;Rob Knies’s F#: Putting the ‘Fun’ into ‘Functional’&lt;/a&gt;      &lt;br /&gt;&lt;a href="http://www.itjoblog.co.uk/2010/04/microsoft-f.html"&gt;Tim Anderson’s Why Microsoft F# is worth exploring&lt;/a&gt;      &lt;br /&gt;&lt;a href="http://blog.andresays.org/2010/04/f-microsofts-new-functional-language/"&gt;Andre Burdette’s F#: Microsoft’s new functional language&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/lisa/archive/2010/04/16/vs-2010-keyboard-shortcut-posters-now-available-for-vb-c-f-c.aspx"&gt;Lisa Feigenbaum’s VS 2010 Keyboard Shortcut Posters Now Available for VB, C#, F# &amp;amp; C++&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The Visual Studio keyboard shortcut posters are always very popular and are now available for Visual Studio 2010! Please choose the one that corresponds to your choice of Visual Studio Development Settings. Print out a poster to place on the wall, or a quick reference card to keep on your desk.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/chrsmith/archive/2010/04/13/good-news-and-sad-news-leaving-microsoft.aspx"&gt;Chris Smith’s Good News and Sad News - Leaving Microsoft&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;For me at least, the excitement and buzz of the Visual Studio 2010 launch will be short lived. Earlier this month I’ve accepted a position at another software company and will be leaving Microsoft. […]&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;However, I will still be part of the F# community and you will definitely see a second edition of Programming F# when the time comes.&amp;#160; &lt;strong&gt;In fact, next Tuesday 4/20 I’ll be giving a talk: &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.communityforfsharp.net/april-2010-live-meeting-detail"&gt;&lt;em&gt;&lt;strong&gt;Writing a Java to x86 Compiler in F#&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt; at 11:00AM PST.&lt;/strong&gt; &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.navision-blog.de/2010/04/13/fake-f-sharp-make-and-naturalspec-released/"&gt;Steffen Forkmann’s “FAKE – F# Make” and NaturalSpec 1.0 Released&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Yesterday Microsoft released the RTM versions of Visual Studio 2010, .NET Framework 4.0 and F# 2.0.0.0 and so it is time to announce the first official releases of “Fake – F# Make” and NaturalSpec. Both projects are now compatible with Visual Studio 2010 RC and RTM and the corresponding F# versions.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharprefactor.codeplex.com/"&gt;F# Refactor (No Release Yet, Check out the Repository)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Deisgned to bring Code Refactoring capabilities to the F# Language in Visual Studio 2010.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Brian McNamara’s &lt;a href="http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!1886.entry"&gt;Using VS2010 to edit F# source code (and a little LOGO EDSL)&lt;/a&gt; and &lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!1895.entry"&gt;Fun with turtle-graphics in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The code on the screen during the video is a little &lt;/em&gt;&lt;em&gt;EDSL&lt;/em&gt;&lt;em&gt; (Embedded Domain-Specific Language) for a subset of LOGO.&amp;#160; The full code is below; you can just copy it into an F# application project to run it.&lt;/em&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!1882.entry"&gt;Brian McNamara and Chris Smith’s Alt.NET Workshop slides and code&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Chris and I each had our own slide deck, so to go in order you’ll have to switch back and forth between the two decks, like we did during the talk (Chris’s intro, my part on functional programming, Chris’s section on OO programming, my part on Async, Chris’s case study).&amp;#160; At the end of my deck there’s also some bonus slides on units of measure that we didn’t have time for.&lt;/em&gt;&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.sdtimes.com/link/34251"&gt;David Worthington’s ‘Midori’ concepts materialize in .NET&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;quot;Midori is an attempt to create a new foundation for the operating system that runs ‘inside the box,’ on the desktop and in the rack. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/04/sliding-block-puzzle-in-f-and-wpf.html"&gt;Neil Carrier’s Sliding Block Puzzle in F# and WPF&lt;/a&gt; and     &lt;br /&gt;&lt;a href="http://techneilogy.blogspot.com/2010/04/simple-wpf-animation.html"&gt;Simple WPF Animation&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I realized that I wanted something more visual with which to test my search algorithms. I have also been wanting to learn how to write WPF applications using F#. To that end, I offer the following F#/WPF application of the famous Fifteen Puzzle, the ancestor of all sliding-block puzzles.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/04/generic-binary-heap.html"&gt;Neil Carrier’s Generic Binary Heap&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I'm pretty sure I'm going to need a priority queue for my A* search, so I decided to code a generic heap class in F#. The F# code below is largely a translation from Robert Sedgewick's Algorithms in C (Parts 1-4).&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/Whate28099s-happening-Loosely-coupled-events.aspx"&gt;Phillip Trelford’s What’s happening? Loosely coupled events&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;For example if you wanted to publish an event from any window that could be observed by any other window without them all having intimate knowledge of each other.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/Implementing-IObservable-and-extending-Observable.aspx"&gt;Phillip Trelford’s Implementing IObservable and extending Observable&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Following on from my post yesterday on implementing loosely coupled events; the following somewhat longer F# sample provides a simple System.IObservable&amp;lt;T&amp;gt; implementation for event consumers.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/04/distributed-hash-table-dht-in-f-using.html"&gt;Daniel Mohl’s A DHT in F#: Using Higher Order Functions for the Service Operation Calls&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In my last post, I provided a start to a distributed hash table in F# using WCF.&amp;#160; One of the major limitations of that example was that only two nodes could ever be on the node network at a given time.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/04/talking-to-couchdb-via-f-and-symbiote.html"&gt;Daniel Mohl’s Talking to CouchDB via F# and Symbiote&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;Alex Robson recently announced a set of libraries that, among other things, makes talking with CouchDB from a .NET language very easy. […] As you can see, interacting with CouchDB via F# and Symbiote is a snap.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/04/mailboxprocessors-erlang-style.html"&gt;Vladimir Matveev’s MailboxProcessors: Erlang-style concurrency&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;MailboxProcessor is combination of message queue and message handler build atop of Asyncs infrastructure.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/04/13/f-and-the-useful-infinite-sequence-i-think.aspx"&gt;Mark Pearl’s F# and the useful infinite Sequence (I think)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;So the question is begged - how would you create a sequence that you are sure will be large enough to hold the solution to the problem? Well… You can’t know!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.markhneedham.com/blog/2010/04/12/f-the-defaultarg-function/"&gt;Mark Needham’s F#: The ‘defaultArg’ function&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;While reading through an old blog post by Matthew Podwysocki about writing F# code in a functional rather than imperative way I came across the 'defaultArg' function which I haven't seen previously.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;   &lt;blockquote&gt;     &lt;p&gt;&lt;a href="http://blog.andresays.org/2010/04/f-microsofts-new-functional-language/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/h3&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+04%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+04%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+04%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+04%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+04%2f16%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/16/f-discoveries-this-week-04-16-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20507" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/NaturalSpec/default.aspx">NaturalSpec</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/wpf/default.aspx">wpf</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/data+structures/default.aspx">data structures</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Infinite+Sequences/default.aspx">Infinite Sequences</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fake/default.aspx">fake</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Mailboxes/default.aspx">Mailboxes</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_+2.0/default.aspx">F# 2.0</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/keyboard+shortcuts/default.aspx">keyboard shortcuts</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/LOGO/default.aspx">LOGO</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/refactor/default.aspx">refactor</category></item><item><title>F# Discoveries This Week 04/09/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx</link><pubDate>Fri, 09 Apr 2010 17:28:16 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20456</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20456.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20456</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20456</wfw:comment><description>&lt;p&gt;With the Visual Studio 2010 launch just days away, the F# community is exploding with fury and excitement.&amp;#160; Come inside and find links to topics ranging from general programming patterns to specific algorithm implementations. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/dsyme/archive/2010/03/31/professor-robin-milner.aspx"&gt;Don Syme on the Passing of Robin Milner&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;It is with sadness that I mention the death of Professor Robin Milner, the great British computer scientist, who passed away 11 days ago.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Talbott Crowell’s &lt;a href="http://fsug.org/PreviousSpeakers/tabid/66/Default.aspx"&gt;FSUG&lt;/a&gt; Talk – &lt;a href="http://vimeo.com/10745902"&gt;F# and Silverlight&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This talk describes building Silverlight 3 applications using F#. Both Visual Studio 2008 and 2010 RC are demonstrated.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.developerfusion.com/media/79589/f-with-michael-hale/"&gt;CodeCast Episode 73: F# with Michael Hale&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F# with Michael HaleIn this episode of CodeCast, Ken Levy interviews Michael Hale, a program manager on the F# team at Microsoft. Michael discusses what’s new in F# for both Visual Studio 2008 and Visual Studio 2010, various scenarios for functional programming with F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://ironjs.com/"&gt;IronJS is a Javascript implementation for the DLR written in F#&lt;/a&gt; (&lt;a href="http://github.com/fholm/ironjs"&gt;source&lt;/a&gt;)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I just wanted to give a quick notice that I got the new compiler for IronJS to run on both .NET 2.0 and Mono 2.6 today, the goal is for IronJS to be able to run on .NET 2.0, 3.x and 4.x plus Mono 2.6&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!1842.entry"&gt;Brian McNamara’s F# async on the client side&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Though the killer app for F# async is non-blocking I/O on the server side, F# asyncs are also useful and fun to use for client-side programming on the UI thread.&amp;#160; I’ll show two small examples of F# async lets you do non-blocking loops on the UI thread.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!1847.entry"&gt;Brian McNamara’s F# async on the server side&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Last time I talked about cool ways to use F# asyncs to help write client GUIs.&amp;#160; Today I’ll talk about the killer app for F# asyncs, namely, non-blocking I/O on the server side.&amp;#160; Once again, this is material I lifted from a recent talk that Matthew Podwysocki and I gave at TechReady.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!1859.entry"&gt;Brian McNamara’s Nine reasons to use F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The list is not necessarily distinct (some elements overlap) or complete (this is just a list I came up with today), and not every reason in the list will resonate with every reader.&amp;#160; But they are all ‘real’ reasons, in the sense that they’re representative of individuals or teams out in the world who are already using F# today.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://weblogs.asp.net/podwysocki/archive/2010/03/28/time-flies-like-an-arrow-in-f-and-the-reactive-extensions-for-net.aspx"&gt;Matthew Podwysocki’s Time Flies Like An Arrow in F# and the Reactive Extensions for .NET&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;/h4&gt;    &lt;p&gt;&lt;em&gt;Let’s take a look at what would be required for us to make the Time Flies Like an Arrow example work in F# using first class events and the Reactive Extensions for .NET on top of WPF.&amp;#160; I’ll write it in a pseudo-code to give you an idea of how it should be done.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://nomadic-developer.com/2010/04/08/f-based-discriminated-unionstructural-similarity/"&gt;Aaron Erickson’s F# Based Discriminated Union/Structural Similarity&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Imagine you have a need to take one type, which may or may not be a discriminated union, and see if it “fits” inside of another type.&amp;#160; A typical case might be whether one discriminated union case would be a possible case for a different discriminated union.&amp;#160; That is, could the structure of type A fit into the structure of type B.&amp;#160; For lack of a better word, I am calling this “structural similarity”.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://mikehadlow.blogspot.com/2010/03/functional-dependency-injection.html"&gt;Mike Hadlow’s Functional Dependency Injection == Currying&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In a functional language like F# we can do the same thing without the overhead of having to declare classes and interfaces. We can also do the same thing in C#, but it requires some jiggery-pokery, so I’m going to show you it in F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s &lt;a href="http://techneilogy.blogspot.com/2010/03/32-bit-computer-in-one-page-of-code.html"&gt;A 32-Bit Computer in One Page of Code&lt;/a&gt;,    &lt;br /&gt;&lt;a href="http://techneilogy.blogspot.com/2010/03/f-implementation-of-bit-based-computer.html"&gt;F# Implementation of Bit-Based Computer&lt;/a&gt;,    &lt;br /&gt;&lt;a href="http://techneilogy.blogspot.com/2010/03/bit-computer-addition.html"&gt;Bit Computer Addition&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/03/knuths-bit-operators-in-f.html"&gt;Bit Operations from TAoCP in F#&lt;/a&gt;, &lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I want to depart from the lofty world of semantic networks for a few posts, in order to investigate the world of bit-based computers. By bit-based computer, I mean one in which the entire state of the computer is based on an ordered set of bits. The computer I describe below was suggested by &lt;/em&gt;&lt;em&gt;Digi-Comp I&lt;/em&gt;&lt;em&gt;, a classic bit-based computer made almost entirely of plastic, but mine is based on a somewhat different design.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s &lt;a href="http://techneilogy.blogspot.com/2010/03/estimable-item-175.html"&gt;The Estimable Item 175&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/04/having-looked-at-hakmem-item-175-gosper.html"&gt;Item 175 At Large&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This example illustrates a famous “Gosper hack.” There is apparently some controversy over which Gosper hack merits the title THE Gosper hack. Often that title goes to MIT A.I. Laboratory HAKMEM Item 145. The code below is based on Gosper hack 175 from the same document, which is the one Knuth mentions.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s &lt;a href="http://techneilogy.blogspot.com/2010/04/easter.html"&gt;Easter (Practical Astronomy With Your Calculator)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://techneilogy.blogspot.com/2010/04/easter.html"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;In honor of the day, I present the following short program for calculating the date of Easter. The method is from Butcher's Ecclesiastical Calendar (1876). I present it in the form given in Peter Duffett-Smith's Practical Astronomy With Your Calculator (Cambridge 1981, the 1988 version is still available from Amazon, et al).&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s &lt;a href="http://techneilogy.blogspot.com/2010/04/search-routines-continued.html"&gt;Search Routines, Continued&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/04/improved-canonical-search.html"&gt;Improved Canonical Search&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In the meantime, here is a first try at general purpose depth/breadth-first search routine. It's not really generic yet, being based on a specific data structure. However, my goal is, over the next few days, to turn it into a nice generic search routine that I can use in a number of applications.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/04/03/technical-analysis-indicators-in-f-oscillators"&gt;Julien Ortin’s Technical analysis indicators in F# – Oscillators&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The articles of this series are being updated as the series expand. In particular : corrections were made to errors in the algorithms (an example use sample will be published to show what has been checked against either a spreadsheet application or TA-Lib) and modification of the meta information.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/03/27/technical-analysis-indicators-in-f-moving-averages"&gt;Julien Ortin’s Technical analysis indicators in F# – Moving Averages&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is part of a series on technical analysis indicators in F#, based on the multi-language TA-Lib.&amp;#160; Quick disclaimer : some of these indicators are not verified.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Daniel Mohl’s &lt;a href="http://bloggemdano.blogspot.com/2010/04/net-remoting-in-f-start-to-distributed.html"&gt;.NET Remoting in F#: A Start to Distributed a Hash Table (DHT)&lt;/a&gt; and &lt;a href="http://bloggemdano.blogspot.com/2010/04/distributed-hash-table-dht-in-f-moving.html"&gt;A Distributed Hash Table (DHT) in F#: Moving from .NET Remoting to WCF&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In my last post I provided a start to a distributed hash table (DHT) using F#, the Chord protocol, and .NET remoting.&amp;#160; In this post, I'll show how that code has changed due to a migration from .NET remoting to WCF.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://rogeralsing.com/2010/03/26/f-gold-parser-true/"&gt;Roger Alsing’s F# + Gold Parser = true&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;First of all, I have to confess that I’ve started to see the light of F# and AST manipulation.&amp;#160; Anyway, I’ve created a F# skeleton template for Gold Parser and the Calitha .NET engine.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.codingday.com/random-number-generation-with-rng"&gt;Can Erten’s Random number Generation with RNG&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I would like to mention a question that posed on stackoverflow a year back, with a slight change: Given a function which produces a random integer in the range 0 to 4, write a function which produces a random integer in the range 0 to 6. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/03/f-and-handling-aspnet-requests.html"&gt;Vladimir Matveev’s F# and handling ASP.NET requests&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Objective was the following: implement simple socket based application that will listen specified port, parse incoming HTTP requests (extract uri from request treating it as file) and return content of specified file. Roughly speaking it should be primitive http server.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Vladimir Matveev’s &lt;a href="http://v2matveev.blogspot.com/2010/03/evoked-by-of-parallel-programming-part.html"&gt;Evoked by &amp;quot;Patterns of Parallel Programming&amp;quot; (part 1)&lt;/a&gt; and &lt;a href="http://v2matveev.blogspot.com/2010/04/evoking-by-of-parallel-programming-11.html"&gt;Evoking by &amp;quot;Patterns of Parallel Programming&amp;quot; 1.1&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One section in excellent article &amp;quot;Patterns of Parallel Programming&amp;quot; is dedicated to idiom &amp;quot;Speculative processing&amp;quot;. In brief we can start multiple computation in parallel (utilizing advantages of multiple cores), take first result and ignore others. Unfortunatly F# library doesn't provide builtin primitive for this strategy.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://csut017.wordpress.com/2010/04/08/cruisecontrol-net-and-f/"&gt;From the CCNET Blog: CruiseControl.NET and F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I’ve been writing some documentation on building plug-ins and recently I expanded it to include some Visual Basic examples. That got me thinking, what other languages can we build plug-ins in? So I thought I’d give it a quick try in one of the new fangled languages that people are raving about – F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/ee336127.aspx"&gt;Chris Marinos’ An Introduction to Functional Programming for .NET Developers&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;But in order for you to take advantage of all of these fantastic features of F#, you need to understand the basics. In this article, I’ll explain these concepts using vocabulary that you are already familiar with as a .NET developer. I will also show you some functional programming techniques that you can apply to your existing code and some ways in which you are already programming functionally.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://dotnetslackers.com/articles/net/Imperative-Programming-in-F-Sharp.aspx"&gt;Imperative Programming in F# (From F# in Action)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This article is taken from the book F# in Action. The authors discuss basics of imperative programming in F# and develop a simple application to show how this type of programming works. They also feature some of the interoperability among languages on .NET platform.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://46apples.blogspot.com/2010/03/introducing-f.html"&gt;Wayne Delport’s Introducing F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The purpose of this article is to introduce you to the F# language - what it is, it's origins, and how it fits into Visual Studio 2010 RC.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.itwriting.com/blog/2443-anders-hejlsberg-on-functional-programming-programming-futures.html"&gt;Anders Hejlsberg on functional programming, programming futures&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;I will not try and summarise [sic] the whole talk here; but will bring out its unifying thought, which is that programming is moving towards a style that emphasises [sic] the “what” rather than the “how” of the tasks it encodes.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;blockquote&gt;     &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;   &lt;/blockquote&gt; &lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/mroberts/archive/2010/04/07/f-simple-twitter-update.aspx"&gt;Mike Roberts’ F# Simple Twitter Update&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;A short while ago I posted some code for a C# twitter update.&amp;#160; I decided to move the same functionality / logic to F#.&amp;#160; Here is what I came up with.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://world.episerver.com/Blogs/Enes-Bajramovic/Dates/2010/3/Yet-another-page-provider-but-in-F/"&gt;Enes Bajramovic’s Yet another page provider but in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Since the best way to learn programming language is to use it, I tought I could port the EPiServer XmlPageProvider to F#. FSharpPageProvider&amp;#160; is my first attempt to accomplish that.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpcode.blogspot.com/2010/03/generic-monadic-map-and-join-using.html"&gt;From The “F# Code” Blog: Generic Monadic Map and Join using statically resolved type variables&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A demonstration of how the inline keyword and statically resolved type variables allow for much more robust type inference.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+04%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+04%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+04%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+04%2f09%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+04%2f09%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/04/09/f-discoveries-this-week-04-09-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20456" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/parser/default.aspx">parser</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsug/default.aspx">fsug</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/type+inference/default.aspx">type inference</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/currying/default.aspx">currying</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/computer+science/default.aspx">computer science</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/asynchronous/default.aspx">asynchronous</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/discriminated+unions/default.aspx">discriminated unions</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/reactive+extensions/default.aspx">reactive extensions</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/parallel/default.aspx">parallel</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/IronJS/default.aspx">IronJS</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/technical+analysis/default.aspx">technical analysis</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/imperative/default.aspx">imperative</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/DHT/default.aspx">DHT</category></item><item><title>F# Discoveries This Week 03/26/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx</link><pubDate>Fri, 26 Mar 2010 16:47:24 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20385</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20385.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20385</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20385</wfw:comment><description>&lt;p&gt;A ton of new posts this week, far too many to enumerate.&amp;#160; My “Favorite New F# Blogger of the Week” (seems like this is becoming a trend) is the mysterious Neil of &lt;a href="http://techneilogy.blogspot.com/"&gt;Techneilogy&lt;/a&gt;.&amp;#160; I’ve been enjoying his honest exploration of F# and semantic networks very much.&lt;/p&gt;  &lt;p&gt;Also, I’ve been hanging around in the &lt;a&gt;##fsharp channel on irc.freenode.net&lt;/a&gt; a bit.&amp;#160; There’s a bunch of great people there, some of whom are already using F# at work and are eager to talk about it.&amp;#160; Check it out if you have the inclination. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/chrsmith/archive/2010/03/18/writing-a-starcraft-bot-in-f.aspx"&gt;Chris Smith’s Writing a StarCraft Bot in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;We now have all the pieces in place, but creating an AI-bot for a program not meant to be extended will be tricky. StarCraft Bot 9K has the following architecture, which follows the footsteps of the Java ProxyBot available on the AIIDE Website.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.justinlee.sg/2010/03/16/don-syme-introduction-to-f"&gt;Don Syme’s Video Introductions to F# C9 Series&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;Who better to lecture on the topic than Don? This three part series will serve as an introduction to F#, including insights into the rationale behind the history and creation of Microsoft’s newest language.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Luca Bolognese’s Tracing spread trades in F# parts &lt;a href="http://lucabolognese.wordpress.com/2010/03/13/tracking-spread-trades-in-f-and-hooking-up-xunit-and-fscheck-part-1/"&gt;one (XUnit and FsCheck)&lt;/a&gt; and &lt;a href="http://lucabolognese.wordpress.com/2010/03/19/tracking-spread-trades-in-f-and-wpf-mvvm-part-ii/"&gt;two (WPF and MVVM)&lt;/a&gt;.&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have a bunch of spread trades open. Spread trades are trades where you buy something and you sell something else generally in the same amount. You hope to profit from the widening of the spread between the price of the two instruments.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://strangelights.com/blog/archive/2010/03/24/1658.aspx"&gt;Robert Pickering’s #Develop, F# and Google Summer of Code&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;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;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://strangelights.com/blog/archive/2010/03/20/1657.aspx"&gt;Robert Pickering’s Beginning F# Workshop and Progressive.Net&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I’ll in London on the 10th/11th May giving a two day course entitle “Beginning F# Workshop” in conjunction with the lovely folks at Skills Matter.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blob.inf.ed.ac.uk/aplcourse/2010/03/lecture-19-hetmet-fsharp/"&gt;Edinburgh University’s Advances in Programming Languages Course, Lecture 19: Heterogeneous Metaprogramming in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;General overview of metaprogramming, with a range of examples in different languages ranging from C macros through Java reflection to MetaOCaml. Brief summary of the F# language, its history, features, and upcoming release in VS 2010.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.mattssoftwareblog.com/?p=233"&gt;Matt Moloney’s Dynamically extending applications using MEF and the new F# CodeDom.&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I wrote this little applet to see what the combination of MEF and the F# CodeDom would look like, and for the record it looks really really good.&amp;#160; This combination opens a whole lot of doors. By using the F# CodeDom the plugin source code can brought in from anywhere;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/03/20/technical-analysis-indicators-in-f-momentu"&gt;Julien Ortin’s Technical analysis indicators in F# – Momentum&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is part of a series on technical analysis indicators in F#, based on the multi-language TA-Lib.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/03/solving-python-challenge-with-f.html"&gt;Vladimir Matveev’s Solving Python Challenge with F# – The Chronicles&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;WARNING!!! If you are going to pass through the Python challenge then stop reading this post, cause it contains solution to 24 level.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/03/data-structures-finger-tree-part-15.html"&gt;Vladimir Matveev’s Data structures: Finger Tree (Part 1.5)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Last time we stopped on “immutable deque” stage. Today we will explore a few additions that can endow deque with super (hmm..human/deque?) powers.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/03/fun-with-recursion.html"&gt;Vladimir Matveev’s Fun with recursion&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Recursion is an extremly useful tool in the toolbox of every developer. Many problems have recursive nature and thus best solved with recursion. Tree-like stucture is a very nice candidate for demonstration.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/03/f-and-wpf-or-how-to-make-life-bit.html"&gt;Vladimir Matveev’s F# and WPF or how to make life a bit easier&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Not so long ago I was working of small F# script (excellent feature BTW) that performs some data processing and displays summary (using WPF)at the end. All the WPF samples I met in the web utilize object model to create UI, but let's make a confession: making relatively complex UI with object model sucks.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/F-Agents-and-Retlang-quick-comparison.aspx"&gt;Phillip Trelford’s F# Agents and Retlang: quick comparison&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;Erlang style message passing is a great way of simplifying concurrency. The open source Retlang library aims to bring some of the benefits to .Net languages like C# and VB.Net. Whereas F# has built-in message passing support with the MailboxProcessor also referred to as Agents.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil’s &lt;a href="http://techneilogy.blogspot.com/2010/03/recap.html"&gt;Recap of Tiny Expert System&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/03/next-step-in-tiny-expert-system.html"&gt;Next Step in the Tiny Expert System?&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Before I move on, let me post a re-do of the the original lazy-evaluated style tiny expert system, incorporating all I've learned about F# over the last couple of weeks. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil’s &lt;a href="http://techneilogy.blogspot.com/2010/03/reified-semantic-network.html"&gt;Refined Semantic Network&lt;/a&gt;, &lt;a href="http://techneilogy.blogspot.com/2010/03/data-driven-semantic-network.html"&gt;Data-Driven Semantic Network&lt;/a&gt;, &lt;a href="http://techneilogy.blogspot.com/2010/03/latest-semantic-net-experiment.html"&gt;Latest Semantic Net Experiment&lt;/a&gt;, &lt;a href="http://techneilogy.blogspot.com/2010/03/yet-another-semantic-network.html"&gt;Yet Another Semantic Network&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/03/semantic-net-search-01.html"&gt;Semantic Net Search 0.1&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Continuing on the path of using classic A.I. tutorial examples to teach myself F#, here is an example using semantic networks. So I created a system in which basic semantic nodes and links can be reified into object instances.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil’s &lt;a href="http://techneilogy.blogspot.com/2010/03/search-using-continuations.html"&gt;Search Using Continuations&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/03/improved-continutation-search.html"&gt;Improved Continuation Search&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This one returns a list in the right order, and the example shows how to detect circularities. It's a little tricky; the tail recursion involves both a direct tail recursion and a continuation that results in a tail call. I had to run tests to convince myself it really wasn't eating up the stack, lol.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.sturmnet.org/blog/2010/03/22/slides-and-samples-from-devweek-2010"&gt;Oliver Strum’s DevWeek 2010 Slides and Samples&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Last week I was down in London and spoke at DevWeek 2010. As usual, it was a great conference! Thanks to everybody who attended my talks!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.codingday.com/happy-pi-day-and-monte-carlo-method"&gt;Can Erten’s Happy Pi Day and Monte Carlo Method&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Calculating Pi is generally the hello world of Monte Carlo Method in Stochastic Calculus. So for today, I will try to give a sample calculation of pi as monte carlo in F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://mdavey.wordpress.com/2010/03/26/f-and-xsd-exe/"&gt;Ade Miller’s NBody.net F# Integrators Code Available&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A Forward Euler integrator and a wrapper for it which implements a Barnes-Hut tree code. I’ve blogged about this before. It’s an Octree implementation in F# which uses the asynchronous computations feature to scale across multiple cores.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://mdavey.wordpress.com/2010/03/26/f-and-xsd-exe/"&gt;Matt Davey’s F# and XSD.EXE&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Which, thanks to Luke over on the F# Visual Studio team, means I can do this: […] Which now means I can stop hand crafting FpML types in my F# cashflow code.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://continuousdevelopment.wordpress.com/2010/03/20/f-samples/"&gt;Ebru Cucen’s F# Samples&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you had the chance to start playing with F#, here are some nice challenges&amp;#160; for you. If not you may want to look at from where to start.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Daniel Mohl’s Code Kata and Project Euler - Problems &lt;a href="http://bloggemdano.blogspot.com/2010/03/code-kata-and-project-euler.html"&gt;One&lt;/a&gt; and &lt;a href="http://bloggemdano.blogspot.com/2010/03/project-euler-problem-2.html"&gt;Two&lt;/a&gt;, &lt;/h3&gt;  &lt;blockquote&gt;   &lt;h3&gt;See also: &lt;a href="http://geekswithblogs.net/mroberts/archive/2010/03/25/playing-with-f.aspx"&gt;Mike Robert’s solution to problem one&lt;/a&gt; and &lt;a href="http://github.com/forki/NaturalSpec/blob/c6e4616b0e8c17f871265c320aaf11e8677833c9/src/test/Spec.Euler/Problem2.fs"&gt;Steffen Forkmann’s solution to problem two&lt;/a&gt;.&lt;/h3&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Recently, I've been thinking about the concept of Code Kata and the personal improvement that this type of practice can bring.&amp;#160; I started thinking of types of exercises that I could do to utilize this concept.&amp;#160; After looking around on the web, I landed on projecteuler.net and found that the problems listed seemed to fit my agenda perfectly.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+03%2f26%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+03%2f26%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+03%2f26%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+03%2f26%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+03%2f26%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/26/f-discoveries-this-week-03-26-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20385" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/FsCheck/default.aspx">FsCheck</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/xunit/default.aspx">xunit</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/agents/default.aspx">agents</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/wpf/default.aspx">wpf</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/data+structures/default.aspx">data structures</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/video/default.aspx">video</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/mvvm/default.aspx">mvvm</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/MEF/default.aspx">MEF</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/summer+of+code/default.aspx">summer of code</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/semantic+networks/default.aspx">semantic networks</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/expert+systems/default.aspx">expert systems</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/nbody.net/default.aspx">nbody.net</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/CodeDom/default.aspx">CodeDom</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/StarCraft/default.aspx">StarCraft</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/metaprogramming/default.aspx">metaprogramming</category></item><item><title>F# Discoveries This Week 03/12/2010</title><link>http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx</link><pubDate>Fri, 12 Mar 2010 21:03:07 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20330</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.de/cs/blogs/rickm/comments/20330.aspx</comments><wfw:commentRss>http://www.atalasoft.de/cs/blogs/rickm/commentrss.aspx?PostID=20330</wfw:commentRss><wfw:comment>http://www.atalasoft.de/cs/blogs/rickm/rsscomments.aspx?PostID=20330</wfw:comment><description>&lt;p&gt;Tons this week.&amp;#160; Vladimir Matveev’s is my favorite new F# blogger with very well written data structure posts, Ashley Feniello continues his fantastic FScheme series, and Jomo Fisher posts some great Freebase and DGML examples.&amp;#160; That’s just the tip of the F# iceberg, do come inside.&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Ashley Feniello’s FScheme Parts &lt;a href="http://blogs.msdn.com/ashleyf/archive/2010/03/05/functional-i-o-or-at-least-o.aspx"&gt;Twelve&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/ashleyf/archive/2010/03/09/functional-i-o-including-i-this-time.aspx"&gt;Thirteen&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/ashleyf/archive/2010/03/10/functional-i-o-historical-debugging.aspx"&gt;Fourteen&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The basic idea is to run a simulation by iterating a pure function from world state to world state. We’ll add a new ‘run’ primitive which will expect several user-defined functions to have been set up. The world state is initially produced by an ‘init’ function. Then every 30th of a second a ‘tick’ function is called to produce a new world state from the current state. Finally a ‘draw’ function will be called to render the world.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Luca Bolognese’s &lt;a href="http://lucabolognese.wordpress.com/2010/02/26/downloading-stock-prices-divs-and-splits-in-f-updated-to-visual-studio-2010/"&gt;Updated Stock Prices, Divs and Splits Example&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I’m working on a program to keep track of paired trades with trailing stops. I need to download stock prices, so I thought I might reuse some old code of mine. Here is the updated framework.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;David Carlisle’s &lt;a href="http://www.nag.co.uk/numeric/DT/fsharp/"&gt;NAG F# Examples&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;NAG (Numerical Algorithms Group) is currently running a beta test of a NAG Library for .NET. One noticeable feature of the comments received so far is the relatively large number of users interfacing to the library from F# rather than C# or VB.NET.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Phillip Trelford’s &lt;a href="http://www.trelford.com/blog/post/The-Associative-Model-of-Data.aspx"&gt;The Associative Model of Data&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;But what if you wanted to extend the web store to have features like the online retailer Amazon, e.g. multiple sellers, recommendations, etc.? Answer: serious table and relationship proliferation. Enter an alternative model: the Associative model of data, a dynamic model where data is defined simply as items and links.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jon Harrop’s &lt;a href="http://fsharpnews.blogspot.com/2010/03/f-vs-unmanaged-c-for-parallel-numerics.html"&gt;F# vs Unmanaged C++ for Parallel Numerics&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;We obtained a surprising performance result when comparing optimized parallel ray tracers written in F# and C++ recently. The following two programs render the same highly complex scenes containing over a million objects. Surprisingly, the 136-line managed F# program runs slightly faster at 17s than the 168-line unmanaged C++ which takes 18s.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Vladimir Matveev’s &lt;a href="http://v2matveev.blogspot.com/2010/03/f-and-iron-python.html"&gt;F# and Iron Pyton&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Today’s post will be devoted to various ways of integration between Iron Python and F#. I’ll try to skip the details of DLR configuration, because this is vast topic that worth separate post (maybe even a few posts). Instead I’ll focus on questions of integration.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Vladimir Matveev’s &lt;a href="http://v2matveev.blogspot.com/2010/03/data-structures-finger-tree-part-1.html"&gt;Data Structures: Finger Tree (Part 1)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;What we’ll try to do in this post is to create the structure (based on 2-3 trees) with following characteristics.&amp;#160; Immutable (modification returns new instance of structure with changes applied),&amp;#160; Enqueue/Dequeue both in start and end in amortized constant time, and Concatenation support.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Vladimir Matveev’s &lt;a href="http://v2matveev.blogspot.com/2010/03/data-structures-2-3-tree.html"&gt;Data Structures: 2-3 Tree&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;There are many special types of trees that perform insert/remove operation in intelligent way ensuring that result tree is small but branchy :). This trees are called self-balanced, most well-known of them are AVL trees, Red-black trees, 2-3 trees. This post is dedicated to the latter ones.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Vladimir Matveev’s &lt;a href="http://v2matveev.blogspot.com/2010/02/overview-of-f-async-module.html"&gt;Overview of F# Async Module&lt;/a&gt; and &lt;a href="http://v2matveev.blogspot.com/2010/02/event-based-async-pattern-in-f.html"&gt;Event-based Async Pattern in F#.&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This post I’d like to dedicate to reviewing functionality of Async module – creating and manipulating async computations.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Luis Diego Fallas’s &lt;a href="http://langexplr.blogspot.com/2010/03/some-basic-image-processing-operations.html"&gt;Basic Image Processing Operations with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The previous post presented a way to access the image data from the Webcam using DirectShow.Net and F#. We can manipulate this data to do some basic image processing operations with it.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/09/neat-samples-extend-your-f-program-with-mef.aspx"&gt;Extend your F# program with MEF&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/10/neat-samples-f-in-mef-scripts.aspx"&gt;MEF in F# Scripts&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The Managed Extensibility Framework is an interesting new technology in .NET 4.0.&amp;#160; This is a simple example in F#. This code sets up MEF hosting and asks for all extensions in the c:\extensions folder.&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/06/neat-samples-f-freebase-and-dgml.aspx"&gt;Neat Samples: F#, Freebase, DGML&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I recently posted about the freebase web service here. This sample reads biological classifications and renders them in DGML. The result is a huge graph, here’s a little piece of it…&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/06/neat-sample-f-and-bing-api.aspx"&gt;Neat Samples: F# and Bing API&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Here’s another F# web service sample. This one uses the Bing Phone API to do a query. This time the code uses Xml instead of JSON and XmlDocument instead of a DataContract deserializer. This is pretty much a straight transliteration of one of the Bing SDK samples.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2010/03/06/neat-sample-f-and-freebase.aspx"&gt;F# and Freebase&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The web service at Freebase.com lets you access all sorts of structured data from a web service. Here’s a sample that shows you how to access this data from F#. It uses DataContract and the JSON serializer. The code below reads and prints the elements of the periodic table.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Julien Ortin’s BitTorrent in F# series: &lt;a href="http://lepensemoi.free.fr/index.php/2010/03/05/bittorrent-in-f-io-operations"&gt;I/O Operations&lt;/a&gt; and &lt;a href="http://lepensemoi.free.fr/index.php/2010/03/06/bittorrent-in-f-bitfield"&gt;Bitfield&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One important thing is that a BitTorrent transfer is considered as a stream of pieces. So, if you have a 100-byte file, and a 400-byte one, and if the piece size is 200-byte long, the data from the piece need to be appropriately split (both when reading and when writing).&amp;#160; In this library, we use a reference to the AsyncWorker described on Don Syme’s blog.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;h3&gt;Matt Moloney’s &lt;a href="http://www.mattssoftwareblog.com/?p=227"&gt;Drag and Drop using Rx and WPF in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have recently been experimenting with combining Reactive X, WPF, and F# and have found the combination to be very palatable. I chose drag and drop as the test case because it is both non trivial and generally deeply stateful. The resulting Rx turns out to be one fifth the code of my original C#, much easier to read and has fewer errors.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Kean Walmsley’s &lt;a href="http://through-the-interface.typepad.com/through_the_interface/2010/03/using-a-jig-from-f-to-create-spirographs-patterns-in-autocad.html"&gt;Using jig from F# to create Spirograph patterns in AutoCAD&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;After my initial fooling around with turning AutoCAD into a Spirograph using F#, I decided to come back to this and bolt a jig on the front to make the act of making these objects more visual and discoverable.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Joh’s &lt;a href="http://sharp-gamedev.blogspot.com/2010/03/thoughts-about-f-and-xbox-games.html"&gt;Thoughts about F# and Xbox games&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have been working for quite some time now on Asteroid Hunter. This has not left me much time for exploration with F#, but there is quite a bit a learned during the process anyway.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Richard Minerich’s &lt;a href="http://richardminerich.com/2010/03/abstract-thoughts-about-f-abstractions/"&gt;Abstract Thoughts about F# Abstractions&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;My recent work on Professional F# 2.0 has left me thinking a lot about the nature of abstractions.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Oliver Strum’s &lt;a href="http://www.sturmnet.org/blog/2010/03/10/creating-a-lazy-sequence-of-directory-de"&gt;Creating a Lazy Sequence of Directory Descendants&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I thought these code examples all look rather verbose – in the case of Clojure because in that way rather typical for Java, the APIs are pretty verbose to use, and in the case of C# because of all the syntactic, well, ahem, necessities, as well as the fact that there’s no language feature for integrating nested sequences seamlessly. Keeping it nice and simple, in F# that example can look like this…&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Tormod Fjeldskar’s &lt;a href="http://lookingsharp.wordpress.com/2010/03/08/tail-recursion-in-csharp-and-fsharp/"&gt;Tail Recursion in C# and F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Tail recursion is essential in functional languages like F#, where iterative solutions are often implemented using recursion.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+03%2f12%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+03%2f12%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+03%2f12%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+03%2f12%2f2010" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+03%2f12%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.de/cs/blogs/rickm/archive/2010/03/12/f-discoveries-this-week-03-12-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.de/cs/aggbug.aspx?PostID=20330" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/IronPython/default.aspx">IronPython</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/AutoCad/default.aspx">AutoCad</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/image+processing/default.aspx">image processing</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/data+structures/default.aspx">data structures</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/asynchronous/default.aspx">asynchronous</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/comparison/default.aspx">comparison</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/data/default.aspx">data</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/FScheme/default.aspx">FScheme</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/scheme/default.aspx">scheme</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/DGML/default.aspx">DGML</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Stocks/default.aspx">Stocks</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Freebase/default.aspx">Freebase</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/unmanaged/default.aspx">unmanaged</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/NAG/default.aspx">NAG</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/MEF/default.aspx">MEF</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/xbox/default.aspx">xbox</category><category domain="http://www.atalasoft.de/cs/blogs/rickm/archive/tags/Bing/default.aspx">Bing</category></item></channel></rss>