<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/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 : haskell</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx</link><description>Tags: haskell</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>F# Discoveries This Week 01/13/2010</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx</link><pubDate>Wed, 13 Jan 2010 16:59:05 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20033</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/20033.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=20033</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=20033</wfw:comment><description>&lt;p&gt;Back again this week with a fresh batch of F# Posts, Videos and Events.&amp;#160; I’ve been enjoying Matthew Podwysocki’s “Much Ado About Monads” series quite a lot.&amp;#160; They are well worth checking out for beginner and advanced alike. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Events&lt;/h1&gt;  &lt;p align="left"&gt;If you would like to see your event here, send me an email via the link at the top of the page.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Rick Minerich&lt;/strong&gt; - &lt;a href="http://www.technologyusersgroup.org/2010/01/13/next-meeting-january-27-2009/"&gt;Charleston SC Technology Users Group&lt;/a&gt; on the 27th of January (check out the &lt;a href="http://www.technologyusersgroup.org/wp-content/uploads/2009/10/flyer.jpg"&gt;awesome flier&lt;/a&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Steffen Forkmann&lt;/strong&gt; - &lt;a href="http://www.navision-blog.de/2010/01/11/terminverschiebung-des-f-vortrages-in-bad-homburg/"&gt;Frankfurt .NET Usergroup&lt;/a&gt; on the 21st of January&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Posts&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/dsyme/archive/2010/01/09/async-and-parallel-design-patterns-in-f-parallelizing-cpu-and-i-o-computations.aspx"&gt;Don Syme’s Async and Parallel Design Patterns in F#: Parallelizing CPU and I/O Computations&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One simple way to write parallel and reactive programs is with F# async expressions. In this and future posts, I will cover some of the basic ways in which you can use F# async programming - roughly speaking, these are design patterns enabled by F# async 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://blogs.msdn.com/dsyme/archive/2010/01/08/f-interactive-tips-and-tricks-visualizing-data-in-a-grid.aspx"&gt;Don Syme’s F# Interactive Tips and Tricks: Visualizing Data in a Grid&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The demos in my F# talks use a number of coding snippets to acquire, generate and display data interactively. Some of these little snippets are not so well known, but they are useful :-)&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/dsyme/archive/2010/01/08/some-tips-and-tricks-for-formatting-data-in-f-interactive-and-a-in-sprintf-printf-fprintf.aspx"&gt;Don Syme’s F# Interactive Tips and Tricks: Formatting Data using AddPrinter, AddPrintTransformer and %A in sprintf/printf/fprintf&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Here are some tips and tricks for formatting data in F# Interactive. This is not meant to be a comprehensive guide, just enough to get you started. Please let me know if you need more examples.&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/01/07/much-ado-about-monads-reader-edition.aspx"&gt;Matthew Podwysocki’s Much Ado About Monads – Reader Edition&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;So, our ultimate goal would be instead to have our environment set once and then read from it implicitly.&amp;#160; We still want to keep what we have here in terms of our script, but change the underlying mechanism for how it happens.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/f-and-units-of-measure-for-technical-computing"&gt;Anton Schwaighofer’s SkillsMatter.com talk: F# and Units-of-measure for Technical Computing&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I will start by giving an introduction to units-of-measure and their implementation in F#. I'll work through smaller and larger code examples that make use of units-of-measure.&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=1649"&gt;Nancy Strickland’s MSDev.com Training Session on F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Visual Studio 2010 includes a new programming language, F#. This session explains and provides a walk-through demonstration of basic programming in F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Julien Ortin continues his series on Purely Functional Data Structures with a &lt;a href="http://lepensemoi.free.fr/index.php/2010/01/07/lazy-pairing-heap"&gt;Lazy Pairing Heap&lt;/a&gt;, a &lt;a href="http://lepensemoi.free.fr/index.php/2010/01/07/real-time-queue"&gt;Real-time Queue&lt;/a&gt; and &lt;a href="http://lepensemoi.free.fr/index.php/2010/01/07/bottom-up-merge-sort"&gt;Bottom-up Merge Sort&lt;/a&gt;&lt;/h5&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This post describes the F# implementation of the &amp;lt;insert data structure here&amp;gt; from Chris Okasaki’s “Purely functional data structures”.&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/01/translating-haskell-to-f-and-other.html"&gt;Mauricio Scheffer’s Translating Haskell to F# and other considerations&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;BUT, syntactic similarity does not imply that they're semantically the same. There's a fundamental difference from the original code: Haskell is a lazy language, while F#, coming from the ML-family, does eager evaluation.&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/01/12/f-refactoring-to-pattern-matching/"&gt;Mark Needham’s F#: Refactoring to pattern matching&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I was looking through some of the F# code I've written recently and I realised that I was very much writing C# in F# with respect to the number of if statements I've been using.&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/01/10/roy-osheroves-tdd-kata-an-f-attempt/"&gt;Mark Needham’s F# attempt at Roy Osherove’s TDD Kata&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As I've mentioned in a few of my recent posts I've been having &lt;/em&gt;&lt;em&gt;another go&lt;/em&gt;&lt;em&gt; at Roy Osherove's TDD Kata but this time 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://fsharpcode.blogspot.com/2010/01/weak-subscribe-to-iobservable-source.html"&gt;Holoed’s Weak Subscribe to an IObservable Source&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;A code snippet describing how to subscribe to an event via a weak reference.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://codecube.net/2010/01/resource-pool-in-f/"&gt;Erik Schulz’s Resource Pool in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I’ve been toying around with F# recently, it’s good to see an example that you can easily compare and contrast with the C# version.&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.ademiller.com/blogs/tech/2010/01/gotchas-common-traps-for-the-f-n00b"&gt;Ade Miller’s Gotchas: Common Traps for the F# n00b&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I spent a bunch of time over the holidays getting to know F# a bit better. I think I now consider myself to be truly dangerous with it.&amp;#160; A couple of things which repeatedly bit me as I stumbled through learning F# as a n00b.&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.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+01%2f13%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+01%2f13%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+01%2f13%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+01%2f13%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-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.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+01%2f13%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/01/13/f-discoveries-this-week-01-13-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=20033" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/units+of+measure/default.aspx">units of measure</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/parallelism/default.aspx">parallelism</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/data+structures/default.aspx">data structures</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/monads/default.aspx">monads</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Design+Patterns/default.aspx">Design Patterns</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/WeakReference/default.aspx">WeakReference</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/formatting/default.aspx">formatting</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/DataGrid/default.aspx">DataGrid</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/reader/default.aspx">reader</category></item><item><title>F# Discoveries This Week 12/06/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx</link><pubDate>Sun, 06 Dec 2009 23:14:50 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19840</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19840.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19840</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19840</wfw:comment><description>&lt;p&gt;We have a great selection of links this week with topics including discriminated unions, equality and comparison constraints, purely functional data structures, a language performance comparison, and a couple of 1.9.7.8 compatibility tweaks for XNA and Silverlight.&lt;/p&gt;  &lt;p&gt;Also, the first Monday of the month approaches and with it another meeting of the &lt;a href="http://www.fsug.org/"&gt;New England F# User Group&lt;/a&gt;.&amp;#160; Talbott Crowell will be speaking on F#’s asynchronous programming features with a beginner audience in mind.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;-- Events --&lt;/h1&gt;  &lt;h3&gt;Talbott Crowell is Speaking at the &lt;a href="http://fsug.org/"&gt;New England F# User Group&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Topic: Asynchronous Programming for Newbs &lt;/li&gt;    &lt;li&gt;When: Monday December 7, 6:30pm &lt;/li&gt;    &lt;li&gt;Where: &lt;a href="http://www.microsoftcambridge.com/About/Directions/tabid/89/Default.aspx"&gt;The Microsoft NERD Center&lt;/a&gt; (Cambridge, MA) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;-- Links --&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://channel9.msdn.com/posts/kmcgrath/Discriminated-Unions-in-FSharp/"&gt;Gordon Hogenson Explains Discriminated Unions&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;em&gt;In this video, programming writer, Gordon Hogenson explains and gives examples of discriminated unions in F#.&amp;#160; &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!1621.entry"&gt;Brian McNamara’s Motivating F# equality and comparison constraints&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;By reading this blog entry, the reader should learn: what structural equality and comparison are, what is the problem that F# equality/comparison constraints solve, why this problem cannot be solved without a specific language feature, [and] when does a programmer need to care about this.&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;Julien Ortin’s Purely Functional Data Structures in F#: &lt;a href="http://lepensemoi.free.fr/index.php/2009/12/03/leftist-heap"&gt;Leftist Heap&lt;/a&gt;, &lt;a href="http://lepensemoi.free.fr/index.php/2009/12/03/finite-map"&gt;Finite Map&lt;/a&gt; and &lt;a href="http://lepensemoi.free.fr/index.php/2009/12/03/binary-search-tree"&gt;Binary Search Tree&lt;/a&gt;.&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This post describes the F# implementation of the [leftist heap, finite map, binary search tree] from Chris Okasaki’s “Purely functional data structures”.&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/C2b2b-vs-C-vs-F-vs-Haskell.aspx"&gt;Phillip Trelford’s C++ vs C# vs F# vs Haskell&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Since I first posted an F# solution to Left-Truncatable Primes, C# and Haskell have entered the frame, and although this is not a good problem for a serious comparison of languages, I think it is still interesting.&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/2009/12/f-october-ctp-and-silverlight-30.html"&gt;Steve Gilham’s F# October CTP and Silverlight 3.0&lt;/a&gt; &lt;/h3&gt;  &lt;h3&gt;and also his &lt;a href="http://stevegilham.blogspot.com/2009/12/f-and-silverlight-3-addendum.html"&gt;F# and Silverlight 3 addendum&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;There's an official &lt;/em&gt;&lt;em&gt;Silverlight 3.0 project template&lt;/em&gt;&lt;em&gt; for Visual Studio 2008; while targetted at the May CTP, these can be used with the October CTP by opening up the .fsproj file and amending the file path for the FSharp.Core 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://sharp-gamedev.blogspot.com/2009/12/using-f-libraries-in-xna-games-for-xbox.html"&gt;Joh’s F# on the XBox 360&lt;/a&gt; &lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This article describes how to build an XNA Game Studio application using an F# library in such a way that it can be run on the Xbox 360. It applies to the current version of F#, 1.9.7.8.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://talbottc.spaces.live.com/blog/cns!A6E0DA836D488CA6!396.entry"&gt;Talbott Crowell’s Adding Parallel Extensions to F# for VS2010 Beta 2&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Matthew Podwysocki comes to the rescue with his blog post Adding Parallel Extensions to F#.&amp;#160; Unfortunately his code example doesn't work in VS 2010 Beta 2 (his post was from February.)&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.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+12%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+12%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx&amp;amp;title=F%23+Discoveries+This+Week+12%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+12%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.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.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+12%2f06%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/06/f-discoveries-this-week-12-06-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19840" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsug/default.aspx">fsug</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/data+structures/default.aspx">data structures</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/discriminated+unions/default.aspx">discriminated unions</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Silverlight+3.0/default.aspx">Silverlight 3.0</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/equality/default.aspx">equality</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/XBox+360/default.aspx">XBox 360</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/parallel+extensions/default.aspx">parallel extensions</category></item><item><title>F# and You! - New Hampshire User’s Group and Beyond</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx</link><pubDate>Mon, 26 Oct 2009 16:24:49 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19518</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19518.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19518</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19518</wfw:comment><description>&lt;p&gt;I’ve been working for a while on a new presentation which I was finally able to give last week at the &lt;a href="http://www.nhdn.com/DNN/"&gt;New Hampshire .NET User Group&lt;/a&gt;.&amp;#160; &lt;em&gt;F# and You!&lt;/em&gt; focuses on painting the big picture about F# instead of the off-putting details like having to learn new syntax.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/rickm/functional_5555AB42.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="functional" border="0" alt="functional" src="http://www.atalasoft.com/cs/blogs/rickm/functional_thumb_6BAB5087.png" width="504" height="379" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For this new presentation I start by discussing the adoption of functional programming on other platforms by using Scala, Erlang and Haskell as examples.&amp;#160; I then continue on to how the algorithmic programmers are moving to functional languages while UI developers are moving towards declarative. &lt;/p&gt;  &lt;p&gt;This then naturally raises the question of why programmers would choose a specific style of programming for a specific task.&amp;#160; The answer, of course, is that when you work close to a domain you can build things more quickly and with a lower error rate.&lt;/p&gt;  &lt;p&gt;This then transitions easily into the specific beneficial properties of functional programming (and F#).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;General Overview:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The Separation of UI and Back End&lt;/li&gt;    &lt;li&gt;What is Functional Programming? (Functional Concepts)&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Pure functions&lt;/li&gt;      &lt;li&gt;Immutability&lt;/li&gt;      &lt;li&gt;Lambda Expressions&lt;/li&gt;      &lt;li&gt;Higher Order Functions&lt;/li&gt;      &lt;li&gt;Recursion&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The Benefits of Functional Programming&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Code Compression&lt;/li&gt;      &lt;li&gt;Parallelism&lt;/li&gt;      &lt;li&gt;Robustness&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Proof is in the Pudding&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;TrueSkill&lt;/li&gt;      &lt;li&gt;Grange Insurance Rating Engine&lt;/li&gt;      &lt;li&gt;MSN adCenter&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Wrap-up&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I’ve also found that it is useful to show the latest circulating version of the &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/04/25/10-hours-in-fsharp-exploring-concurrency-through-an-ant-colony-simulation.aspx"&gt;Ant Colony simulation I wrote over a year ago&lt;/a&gt;.&amp;#160; I found a version in &lt;a href="http://blogs.msdn.com/dsyme/archive/2009/10/10/f-tutorial-code-and-slides-jaoo-2009-edition.aspx"&gt;Don Syme’s JAOO Talk code samples&lt;/a&gt; but am not sure who has been keeping it up to date.&amp;#160; A big thanks to whoever that person is.&amp;#160; It provides some sweet eye candy to dull the bitterness of the technical Functional Concepts section.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Planned (and Past) “F# and You!” Locations:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;11/10/2009 – &lt;a href="http://ctdotnet.org/default.aspx"&gt;CT .NET Developers Group&lt;/a&gt; (Farmington, CT)      &lt;br /&gt;10/28/2009 – &lt;a href="http://www.technologyusersgroup.org/"&gt;Technology Users Group&lt;/a&gt; (Charleston, SC)      &lt;br /&gt;10/21/2009 – &lt;a href="http://www.nhdn.com/DNN/"&gt;New Hampshire .NET User Group&lt;/a&gt; (Nashua, NH)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;See the new &lt;a href="http://fsug.org/OtherEvents/tabid/67/Default.aspx"&gt;Other Events&lt;/a&gt; section of our &lt;a href="http://fsug.org/Home/tabid/37/Default.aspx"&gt;F# User Group site&lt;/a&gt; for information on other upcoming F# talks.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Downloads:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/files/folders/19516/download.aspx"&gt;Latest Slides&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.atalasoft.com/cs/files/folders/19517/download.aspx"&gt;VS2008 Code Samples&lt;/a&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.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;subject=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.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.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx&amp;amp;;title=F%23+and+You!+-+New+Hampshire+User%e2%80%99s+Group+and+Beyond&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/26/f-and-you-new-hampshire-user-s-group-and-beyond.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19518" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Code+Camp/default.aspx">Code Camp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/talks/default.aspx">talks</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional+programming/default.aspx">functional programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/parallelism/default.aspx">parallelism</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/erlang/default.aspx">erlang</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/robustness/default.aspx">robustness</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/code+compression/default.aspx">code compression</category></item><item><title>Code Camp 12: Boston – Why F#?</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx</link><pubDate>Fri, 16 Oct 2009 15:18:54 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19433</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19433.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19433</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19433</wfw:comment><description>&lt;p&gt;A couple of months ago I was talking to &lt;a href="http://www.atalasoft.com/cs/blogs/loufranco/default.aspx"&gt;Lou Franco&lt;/a&gt;, the head of our Software Engineering department and fellow functional programming enthusiast, about the possibility of using F# for projects in the future.&amp;#160; Being business minded, he replied that he would need a compelling reason to bring F# on board.&amp;#160; This presentation is dedicated to him and others who have functional programming on their radar but haven’t yet found a compelling reason to bring it in to their company.&lt;/p&gt;  &lt;p&gt;I acknowledge that, as for now, it’s difficult to suggest anyone do more than play with F#.&amp;#160; I have been anxiously awaiting the stabilization of the F# API which will come along with the release of VS2010.&amp;#160; With the recent changes breaking backwards compatibility, maintaining my old F# samples has become quite a nightmare.&amp;#160; Indeed, not a single code sample I have from a year ago works out of the box with the current release.&lt;/p&gt;  &lt;p&gt;However, VS2010 is only a few months away.&amp;#160; Now is the time to start learning about F# and the paradigms which make it so powerful.&amp;#160; Functional programming has amazing benefits in terms of parallelization, code compression and overall code robustness.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;At Code Camp 12 Boston, I will talk about the soon-to-be-realized world where programmers are divided into groups which each use different types of languages to build different kinds of things.&amp;#160; This is easy to predict as it is already occurring.&amp;#160; UI, data processing and data storage programmers are already diversifying both in working knowledge and tools.&lt;/p&gt;  &lt;p&gt;As is evidenced by WPF, HTML and CSS it seems UI design is moving more and more to a declarative style.&amp;#160; Similarly, the rise of F#, Scala, Erlang and Haskell indicates that algorithmic programmers are migrating to the functional programming languages.&amp;#160; SQL has long been the language of those involved in data storage.&amp;#160; It’s no wonder that this has happened.&amp;#160; When your tool is better designed for your job, the work gets done faster and you end up with a better result.&lt;/p&gt;  &lt;p&gt;Where does this leave imperative and object oriented languages?&amp;#160; Languages like Java, VB and C# will be relegated to being used as “glue” for existing systems while abstract languages slowly eat away their market share.&amp;#160; This will happen more and more as the number of cores per processor continues to increase and those with imperative implementations find that they are unable to scale.&lt;/p&gt;  &lt;p&gt;When: Oct 16th, 2009 (11:50am)    &lt;br /&gt;Where: 201 Jones Rd, 6th Floor, Waltham MA USA (Room TBC)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/files/folders/19474/download.aspx"&gt;Slides are available here.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also, be sure to also check out my fellow F# User Group leader Talbott Crowell’s talk.&amp;#160; It’s right before mine (10:30) in the same room (Thanks Chris!).&amp;#160; You can find out more by heading over to Chris Bowen’s blog and reading his &lt;a href="http://blogs.msdn.com/cbowen/archive/2009/10/12/code-camp-12-the-schedule.aspx"&gt;post on Code Camp 12&lt;/a&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.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx&amp;amp;;subject=Code+Camp+12%3a+Boston+%e2%80%93+Why+F%23%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx&amp;amp;;title=Code+Camp+12%3a+Boston+%e2%80%93+Why+F%23%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx&amp;amp;title=Code+Camp+12%3a+Boston+%e2%80%93+Why+F%23%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx&amp;amp;;title=Code+Camp+12%3a+Boston+%e2%80%93+Why+F%23%3f" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.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.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx&amp;amp;;title=Code+Camp+12%3a+Boston+%e2%80%93+Why+F%23%3f&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/16/code-camp-12-boston-why-f.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19433" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/object+oriented/default.aspx">object oriented</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Code+Camp/default.aspx">Code Camp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/talks/default.aspx">talks</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/technology/default.aspx">technology</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/scala/default.aspx">scala</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/csharp/default.aspx">csharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/programming+languages/default.aspx">programming languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/erlang/default.aspx">erlang</category></item><item><title>Discoveries This Week 05/17/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx</link><pubDate>Sun, 17 May 2009 21:43:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:18495</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/18495.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=18495</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=18495</wfw:comment><description>&lt;p&gt;A bit of a slow week.&amp;#160; Perhaps some are out playing in the recently fantastic weather instead of blogging about functional programming.&amp;#160; My favorites this week were Paul Hudak’s talk on Haskell, Jason Olson’s Channel9 discussion, Niklas Gustafssons’s Actors in F# and Kurt Schelfthout’s Testing DSLs with FsCheck.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Paul Hudak on InfoQ - &lt;a href="http://www.infoq.com/interviews/paul-hudak-haskell-Qcon-SF-08&amp;amp;language=en"&gt;Haskell&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;An interview that begins with a discussion of when to introduce difficult Haskell concepts like monads, moves to a discussion of the philosophy of higher order programming.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Paul Hudak, as a principal designer of Haskell, explains FP topics with a passion few others could.&amp;#160; Also, I’m curious about this idea of &lt;a href="http://www.haskell.org/haskellwiki/Arrow"&gt;arrows&lt;/a&gt; (Freyd-categories) as opposed to &lt;a href="http://www.haskell.org/haskellwiki/Monad"&gt;monads&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jason Olson’s on Channel9 - &lt;a href="http://channel9.msdn.com/posts/Charles/Jason-Olson-Composing-Programming-Languages-F-and-OO/"&gt;Composing Programming Languages&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;We talk about his [Lang.NET F# and OO] presentations and his perspectives on object orientation, F# and his own language.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As it seems impossible to pin down exactly what OO is, perhaps we should try to categorize it’s subcomponents across different languages.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Niklas Gustafsson on &lt;a href="http://blogs.msdn.com/concurrently_speaking/archive/2009/05/12/actors-in-f.aspx"&gt;Actors in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of the advantages of this model over the Axum model is that any number of clients can communicate with an actor, all that is needed is access to the mailbox reference. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I must beg to differ with Niklas on one of his stated disadvantages of the Actor model.&amp;#160; It would be easy enough to include a “closing down state” in your Actor FSA.&amp;#160; The inability to statically check your agreements is correct though.&amp;#160; I’d be interested in seeing a simple &lt;a href="http://msdn.microsoft.com/en-us/devlabs/dd795202.aspx"&gt;Axum&lt;/a&gt; sample which could handle N clients and still be statically checked.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Kurt Schelfthout on &lt;a href="http://fortysix-and-two.blogspot.com/2009/05/how-to-test-dsls-and-fschecking-fscheck.html"&gt;How to test DSLs (and: FsChecking FsCheck)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;It occurred to me that (domain specific) languages seem difficult to test using traditional unit tests: after all, the usage possibilities are far greater for a language than for, say, a typical user interface.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;An extremely clever way to test DSLs. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I understand it is exceedingly painful to sign up for an account to leave a simple comment.&amp;#160; That given, I am still trying to figure out a solution to my spam problem.&amp;#160; For now, if you would like to comment and don’t wish to set up an account, please &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/contact.aspx"&gt;email me&lt;/a&gt; your comment and I will manually post it here.&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.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx&amp;amp;;subject=Discoveries+This+Week+05%2f17%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx&amp;amp;;title=Discoveries+This+Week+05%2f17%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx&amp;amp;title=Discoveries+This+Week+05%2f17%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx&amp;amp;;title=Discoveries+This+Week+05%2f17%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.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.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx&amp;amp;;title=Discoveries+This+Week+05%2f17%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/05/17/discoveries-this-week-05-17-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18495" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/FsCheck/default.aspx">FsCheck</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/dsl/default.aspx">dsl</category></item><item><title>Image Processing as Sets of Transformations</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx</link><pubDate>Tue, 28 Apr 2009 00:21:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:18366</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/18366.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=18366</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=18366</wfw:comment><description>&lt;p&gt;In the image processing world, like most computational problems, we often think our work is composed of only two basic ideas: representation and transformation.&amp;nbsp; Of course, one may have many layers of both representations of transformations and transformations of representations which can make things appear quite complex at times. &lt;/p&gt;  &lt;p&gt;However,&amp;nbsp; the problem is much more simple than it appears.&amp;nbsp; This is because a representation can be considered as a transformation from a zero or identity state.&amp;nbsp; Thus, in writing a symbolic language for image processing, we are left with only a single idea to consider:&amp;nbsp; transformations.&amp;nbsp; By composting layers of transformations we can apply image processing techniques in way which is not only bidirectional and platform agnostic but also comes along with a host of other benefits.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Let us consider a simplified example of processing an image:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;1) We read in a file (representation) and use a codec (transformation) to convert it into a format understood by our API (representation).&lt;/p&gt;  &lt;p&gt;2) We then perform some type of algorithm on that data (transformation) which results in some type of output (representation).&lt;/p&gt;  &lt;p&gt;3) Finally, via another codec (transformation), another file is saved to disk (representation). &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;In most cases there are a great number of intermediate representations.&amp;nbsp; Each is a full copy of the previous iteration with whatever changes have been so far applied.&amp;nbsp; Essentially, the same information is copied over and over again in memory.&amp;nbsp; We do allow for some kinds of in-place processing, however, this is bad as when the operation has been completed, the previous representation has been destroyed.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Instead, what if we batched up sets of transformations?&amp;nbsp; This could have many benefits:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;1) The most obvious benefit is that of parallelization.&amp;nbsp; Even at the simplest level of functional composition, these transformations could be handed off to a cluster for asynchronous processing or saved for a later batch processing job.&lt;/p&gt;  &lt;p&gt;2) With an intermediate symbolic transformation language, processing algorithms could potentially be combined and reduced to produce a single transformation out of many.&amp;nbsp; This would significantly reduce the processing overhead as well as the number of intermediate memory representations.&lt;/p&gt;  &lt;p&gt;3) An intermediate symbolic language which encompassed both codec and processing may make it possible to push the processing transformation through the codec transformation and in so doing no longer need to have any intermediate memory representation.&amp;nbsp; This could provide significant memory and processing speed time benefit.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;4) The intermediate symbolic language could be saved into the files themselves thus removing the need for the codec to be present on the end machine.&amp;nbsp; Admittedly, the user would also need the image language interpreter. &lt;/p&gt;  &lt;p&gt;5) Instead of applying simple image processing algorithms to an image, the symbolic representation could be appended to the end of the file.&amp;nbsp; This would be quite similar to layers in practice.&amp;nbsp; In this way it would be possible to view the image at all stages of transformation. &lt;/p&gt;  &lt;p&gt;6) For large or proprietary transformations, the representation could be kept on the internet and either be downloaded or, in the case where the owner did not want to expose their algorithm, a flattened representation could be sent out and a processing delta could be sent back.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Conclusion &lt;/b&gt;&lt;br&gt;&lt;/p&gt;  &lt;p&gt;Of course, when I speak of data I don’t only mean the image itself.&amp;nbsp; This technique could also be applied to many classes of data or algorithm.&amp;nbsp; Most notably for us, image metadata.&lt;/p&gt;  &lt;p&gt;My initial goal is to build a basic codec representation along with some simple transformations.&amp;nbsp; Currently, I am researching bidirectional, reversible and declarative languages as examples.&amp;nbsp; With F# as a base language I believe it will be possible to build something portable to other ML variants. &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.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;subject=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;title=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;title=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;title=Image+Processing+as+Sets+of+Transformations" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.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.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx&amp;amp;;title=Image+Processing+as+Sets+of+Transformations&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/27/image-processing-as-sets-of-transformations.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18366" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/programming/default.aspx">programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/simplicity/default.aspx">simplicity</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/ideas/default.aspx">ideas</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/research/default.aspx">research</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/abstract/default.aspx">abstract</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fp/default.aspx">fp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/image+processing/default.aspx">image processing</category></item><item><title>F# and Haskell, Estranged Cousins</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx</link><pubDate>Thu, 29 Jan 2009 20:24:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17352</guid><dc:creator>RickM</dc:creator><slash:comments>11</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17352.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17352</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17352</wfw:comment><description>&lt;p&gt;In this post I compare and contrast Haskell and F#.&amp;nbsp; It may come as no surprise that with so much shared history they share so much in common.&amp;nbsp; However, it’s interesting to consider how the perspectives of the languages’ developers play a large role in determining the differences between the languages.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;A Shared History&lt;/h3&gt;  &lt;p&gt;As far as the family tree of functional programming is concerned, F# and Haskell are not too distant cousins. &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/haskellandfsharphistory_3E27F754.png"&gt;&lt;img src="http://www.atalasoft.com/cs/blogs/rickm/haskellandfsharphistory_thumb_67329650.png" title="haskellandfsharphistory" style="border:0px none;display:block;float:none;margin-left:auto;margin-right:auto;" alt="haskellandfsharphistory" border="0" width="468" height="118"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;They both share a very similar syntax as well as a large number of features.&amp;nbsp; A great example of this is &lt;a href="http://www.codecommit.com/blog/scala/what-is-hindley-milner-and-why-is-it-cool"&gt;Hindley–Milner&lt;/a&gt; type inference.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;ML was the first widely used language to leverage Hindley–Milner for static inferred typing, a feature to which it owes much of it’s success.&amp;nbsp; However, almost all functional programming languages now also have this feature.&amp;nbsp; The FP community has always been fast to adopt obviously useful features.&amp;nbsp; Some other things that fit into this category are garbage collection (Lisp) and lazy evaluation (Lazy ML). &lt;/p&gt;  &lt;p&gt;The most obvious difference between Haskell and F# is somewhat easy to infer from this graph: object oriented constructs.&amp;nbsp; That is to say, OCaml pioneered the use of object oriented data structures in functional programming and F# is it’s direct descendant.&amp;nbsp; This has made OCaml (and in turn F#) somewhat of a black sheep in the theoretical functional programming world.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;The reason many functional programming theorists dislike objects is because they want a language based on math.&amp;nbsp; Unlike the majority of the ideas in functional programming, objects don’t have roots in either &lt;a href="http://en.wikipedia.org/wiki/Lambda_calculus"&gt;lambda calculus&lt;/a&gt; or &lt;a href="http://www.haskell.org/haskellwiki/Category_theory"&gt;category theory&lt;/a&gt;.&amp;nbsp; However, this has not stopped OCaml from being successful.&amp;nbsp; In fact, quite the opposite.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;The use of objects mitigates one of the largest roadblocks in the path to functional programming adoption by engineers:&amp;nbsp; the difficulty inherent in organizing large functional programs.&amp;nbsp; The OCaml language engineers also showed that leveraging the object oriented paradigm did not hamper their ability to use static analysis techniques.&amp;nbsp; &lt;a href="http://www.podval.org/%7Esds/ocaml-sucks.html"&gt;Because of this OCaml approaches the speed of C&lt;/a&gt;.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;While it is not pure, OCaml is almost an ideal compromise between theory and engineering.&amp;nbsp;&amp;nbsp; Indeed, nothing approaches it in terms of a functional language which fits into the paradigms of the Microsoft .NET framework.&amp;nbsp; It’s easy to see why Microsoft chose to extend OCaml when building a functional language to bring to it’s software engineering masses. &lt;/p&gt;  &lt;p&gt;On the other hand, Haskell is almost the ideal language for academic exploration of functional programming.&amp;nbsp; The fact that it’s strictly limiting in terms of side effecting and adherence to abstract mathematical concepts means no side effecting surprises.&amp;nbsp; Also, the fact that it’s a committee language means that if a researcher can get enough support for an idea, they can almost be sure it will be included in the next iteration of the language.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Haskell as a Committee Language&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Repeat the mantra after me:&amp;nbsp; Haskell is Lazy; Haskell is Pure; Haskell has Type Classes; Haskell is a Committee Language. &lt;/p&gt;  &lt;p&gt;Of all of these, the most defining characteristic of Haskell is that it is a committee language.&amp;nbsp; It’s an amalgamation of many different goals with no clear vision.&amp;nbsp; This is at the same time Haskell’s greatest strength and greatest weakness.&amp;nbsp; While it is the most widely used pure functional programming language, the quirks of committee design are obvious.&lt;/p&gt;  &lt;p&gt;Some I ran into within two hours of starting with Haskell:&lt;/p&gt;  &lt;p&gt;The first was integer rollover.&amp;nbsp; Haskell has two integer datatypes: &lt;b&gt;&lt;a href="http://www.zvon.org/other/haskell/Outputprelude/Integer_d.html"&gt;integer&lt;/a&gt;&lt;/b&gt; and &lt;b&gt;&lt;a href="http://www.zvon.org/other/haskell/Outputprelude/Int_d.html"&gt;int&lt;/a&gt;&lt;/b&gt;.&amp;nbsp; Integer is infinitely sized but can be quite slow to use and due to that, it’s rather infrequently used.&amp;nbsp; On the other hand int is fast but, just like in C, &lt;a href="http://praisecurseandrecurse.blogspot.com/2006/12/division-bell-tolls-for-me-part-three.html"&gt;can roll over&lt;/a&gt;. There is no way to check the &lt;a href="http://www.faqs.org/docs/jargon/O/overflow-bit.html"&gt;overflow bit&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;So, ints can roll over, I can accept that.&amp;nbsp; What it implies to me is that speed is more important to Haskell than robustness.&amp;nbsp; However, this brings me to my second point:&amp;nbsp; Many basic list operations will &lt;a href="http://www.haskell.org/haskellwiki/Non-empty_list"&gt;throw errors on an empty list&lt;/a&gt;.&amp;nbsp; This seems entirely inconsistent to me.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;I understand that if they didn’t, a logic error would be much more likely to cause an infinite loop in a &lt;a href="http://learnyouahaskell.com/recursion"&gt;tail recursive function&lt;/a&gt;.&amp;nbsp; However, this seems completely at odds with the “speed first” definition of an int.&amp;nbsp; It also means that almost everyone ends up wrapping the default list operations with the &lt;a href="http://www.haskell.org/all_about_monads/html/maybemonad.html"&gt;Maybe monad&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The third issue was that operations with the &lt;a href="http://www.zvon.org/other/haskell/Outputprelude/Float_d.html"&gt;float&lt;/a&gt; data type are slow.&amp;nbsp; &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.realworldhaskell.org%2F&amp;amp;ei=eOeBSeGQBJa5twfj_9k6&amp;amp;usg=AFQjCNG4E9hbaNy1O3FUOSuWiNjhl-vz8w&amp;amp;sig2=y3z5R23zGJXvuRxNMNV-Nw"&gt;Real World Haskell&lt;/a&gt; suggests always using a &lt;a href="http://www.zvon.org/other/haskell/Outputprelude/Double_d.html"&gt;double&lt;/a&gt; due to the fact that a great deal of focus has gone into optimizing double arithmetic but very little into floats.&amp;nbsp; This demonstrates another thing that comes about with committee languages: often things as important as optimization of basic data types can fall through the cracks because everyone involved wants to work on more exciting things.&lt;/p&gt;  &lt;p&gt;Please don’t misunderstand me here, I really like Haskell.&amp;nbsp; I’m hard on it because I can see that it has a great deal of unrealized potential.&amp;nbsp; If Haskell is to be a language used for real software engineering, the committee needs to sit down and think hard about an overarching vision for the project.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;What is the goal here?&lt;/h3&gt;  &lt;p&gt;The biggest difference between the world of theorists and the world of engineers is that each group has an entirely different set of concerns.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Theorists want to implement ideas fast so that they can crank out papers fast.&lt;/b&gt;&amp;nbsp; A large part of this is having a language that is very close to math so that implementing ideas directly from the chalkboard is trivial.&amp;nbsp; As the theory world changes so fast, they don’t often care much about organization or maintainability.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;As the committee responsible for Haskell is mainly made up of theorists, it’s easy to see why the language has taken the direction it has.&amp;nbsp; It’s a language that is very close to math.&amp;nbsp; As the lifecycle of most academic code is very short, small implementation details which might cause a reduction in robustness are less important. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Engineers want to minimize time spent maintaining code.&lt;/b&gt;&amp;nbsp; Part of this is having a language that emphasizes safety in that it facilitates catching as many bugs as possible, as early in the process as possible.&amp;nbsp; Another important part of this is code organization as every moment that is spent trying to find a bug is a moment spent not fixing it.&amp;nbsp; As the cost of &lt;a href="http://users.jyu.fi/%7Ekoskinen/smcosts.htm"&gt;maintaining software generally dwarfs the initial development cost&lt;/a&gt;, development speed must take a back seat to testing and organization. &lt;/p&gt;  &lt;p&gt;The syntax heavy C# is a great example of this.&amp;nbsp; It’s slow to write in but provides many constructs for the organization and testing of code.&amp;nbsp; On top of this a great number of &lt;a href="http://www.dofactory.com/Patterns/Patterns.aspx"&gt;design patterns&lt;/a&gt; exist to further categorize substructures in a computer program.&amp;nbsp; C# is slow to write, but it’s relatively safe and mountains of patterns and best practices have been made to guide it’s developers.&lt;/p&gt;  &lt;p&gt;However, we in the software engineering world are in the midst of a crisis.&amp;nbsp; It turns out that traditional imperative &lt;a href="http://www.paulgraham.com/hundred.html"&gt;object oriented programs do not lend themselves to heavy parallelization&lt;/a&gt;.&amp;nbsp; Yet, parallelize we must.&amp;nbsp; We are looking at exponential growth in the number of cores contained in each processor. Because of this we engineers find ourselves at a bit of an impasse.&amp;nbsp; Those that are looking ahead know…&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Engineers will soon want very badly to minimize time spent maintaining parallelized code.&amp;nbsp; &lt;/b&gt;We need our programs to be easy to organize, manage and test.&amp;nbsp; Yet, as we will soon need to deal with massively parallelized systems, we find many of our ideas about what makes code robust and maintainable are broken.&amp;nbsp; At the same time, to move to a purely functional language means leaving behind years of thought on how computer programs ought to be constructed, tested and maintained.&amp;nbsp; Having any pattern, even if it’s wasteful or has many corner cases, is much better than having none.&amp;nbsp; This is why a hybrid language is so important.&lt;/p&gt;  &lt;p&gt;OCaml and F# provide engineers with the set and forget concurrency that comes along with the functional tradition.&amp;nbsp; At the same time these languages have all of the organizational constructs of object oriented programming as well.&amp;nbsp; This means that we can continue to use the same types of large scale organizational structures in our programs and also gain the safe parallelism that implicit immutability provides.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;And so we see that it’s important to consider a language in terms of how it’s creators envisioned it’s use.&amp;nbsp; Haskell has been developed mainly with research in mind and so is a fantastic research language.&amp;nbsp; F# has been developed mainly with engineering in mind and so is much better suited for engineering.&lt;/p&gt;  &lt;p&gt;In understanding this it’s also easy to see that comparing Haskell to F# is &lt;a href="http://www.i-edainc.com/old/Groups/PhysicsVsEngineering.htm"&gt;like comparing the tools of a physicist to those of an engineer&lt;/a&gt;.&amp;nbsp; They may have much in common superficially, but they are designed with much different ends in mind. &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Links&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Fsimonpj%2Fpapers%2Fhistory-of-haskell%2Fhistory.pdf&amp;amp;ei=vQ6CSfb9C9e4twfE8-kc&amp;amp;usg=AFQjCNHoTqbyAouWy1O1UWUheO8cOaSn2w&amp;amp;sig2=BgVs-3nnFSOI3sEveJTN0g"&gt;A History of Haskell: Being Lazy with Class&lt;/a&gt;    &lt;br&gt;&lt;a href="http://www.soton.ac.uk/%7Efangohr/software/ocamltutorial/"&gt;Tutorial: OCaml for Scientific Computation&lt;/a&gt; (Contains some history)&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.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx&amp;amp;;subject=F%23+and+Haskell%2c+Estranged+Cousins" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx&amp;amp;;title=F%23+and+Haskell%2c+Estranged+Cousins" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx&amp;amp;title=F%23+and+Haskell%2c+Estranged+Cousins" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx&amp;amp;;title=F%23+and+Haskell%2c+Estranged+Cousins" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.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.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx&amp;amp;;title=F%23+and+Haskell%2c+Estranged+Cousins&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17352" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/programming/default.aspx">programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/concurrency/default.aspx">concurrency</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/object+oriented/default.aspx">object oriented</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/optimization/default.aspx">optimization</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/garbage+collection/default.aspx">garbage collection</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/rants/default.aspx">rants</category></item><item><title>Discoveries This Week 01/23/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx</link><pubDate>Fri, 23 Jan 2009 18:17:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17309</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17309.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17309</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17309</wfw:comment><description>&lt;p&gt;Another very exciting week.&amp;#160; I’ve barely had time to catch my breath.&lt;/p&gt;  &lt;p&gt;Meanwhile I’ve decided to take my weekly roundup post consistently in the direction of functional programming in the Microsoft universe for the foreseeable future.&amp;#160; This will be with a heavy slant towards software engineering and, of course, F#.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Post: &lt;a href="http://blogs.tedneward.com/2009/01/18/Building+WCF+Services+With+F+Part+1.aspx"&gt;Ted Neward’s Building WCF Services with F# Part 1&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;It’s always interesting to see F# applied to existing Microsoft .NET infrastructure.&amp;#160; In this case I was particularly impressed with how well the ideologies of the two technologies fit together. &lt;/p&gt;  &lt;p&gt;However, the most important thing about Ted’s post is that it notes a bug in WCF that could cause quite a bit of headache if it caught you unaware.&amp;#160; When using a F# declared interface, if no name is explicitly specified for a function parameter, WCF will throw an ArgumentNullException.&amp;#160; &lt;/p&gt;  &lt;p&gt;This will be manifest in the following situations:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;When svcutil.exe is run on the assembly. &lt;/li&gt;    &lt;li&gt;When you attempt to construct a ServiceHost with the interface. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The issue stems from that fact that traditional .NET languages cannot have nameless parameters.&amp;#160; Thanks for figuring out this problem for us Ted.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&amp;#160;&amp;#160; &lt;h3&gt;Code: &lt;a href="http://code.google.com/p/wcf-examples/source/browse/#svn/trunk/FSharpExamples"&gt;Ray Vernagus’s WCF F# Examples&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;As he &lt;a href="http://vernagus.blogspot.com/2009/01/f-and-wcf-examples.html"&gt;posted in response to Ted’s above&lt;/a&gt;, Ray has been working towards getting his &lt;a href="http://www.microsoft.com/learning/en/us/exams/70-503.mspx"&gt;MCTS 70-503&lt;/a&gt; certification and has decided to do all of his examples in F#.&amp;#160; Making this kind of information available is a fantastic contribution to the F# community.&amp;#160; I hope that in the future ray will both write more in more depth about his experiences and continue to provide samples.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Code: &lt;a href="http://github.com/namin/spots/tree/master/probabilisticModeling"&gt;Nada Amin’s Probabilistic Modeling in Three Languages&lt;/a&gt; &lt;/h3&gt;  &lt;p&gt;In Chapter 9 of &lt;a href="http://www.expert-fsharp.com/default.aspx"&gt;Expert F#&lt;/a&gt; the idea of using a Monad to represent a probability distribution is presented with code examples.&amp;#160; &lt;a href="http://spotless-spots.blogspot.com/2008/12/probabilistic-modeling-in-haskell.html"&gt;Nada&lt;/a&gt; has rewritten this example in both &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt; and &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;.&amp;#160; While they may not all be optimal implementations for each language, this provides an interesting opportunity to compare each language syntactically.&amp;#160; I’m somewhat tempted to submit a &lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt; implementation to round it off. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Code: &lt;a href="http://code.msdn.microsoft.com/fsharpsamples"&gt;Microsoft’s Official F# Samples Version 0.1&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Yesterday, at the Boston MSDN Conference, &lt;a href="http://talbottc.spaces.live.com/"&gt;Talbott Crowell&lt;/a&gt; showed off some really amazing examples from this package.&amp;#160; This is a must have for any potential F# developer as the samples not only show how off the features of the API, they also demonstrate proper coding practices.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Software: &lt;a href="http://www.codeplex.com/ora"&gt;Ora (Visual Studio Add-in)&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Ora is a add-in which provides a simple yet dynamic overview of the file you are currently editing in Visual Studio.&amp;#160; Although I haven’t had a chance to test it in F# as of yet, Ora is my new favorite tool for every-day use in Visual Studio.&amp;#160; &lt;/p&gt;  &lt;p&gt;I no longer scroll up and down the code or try to sort through Visual Studio’s terrible method dropdown.&amp;#160; Instead, I have access to a custom visualization of the class I am working on all of the time.&amp;#160; The best part is that it fits perfectly over my properties window which I rarely use and have always considered to be a waste of space. &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.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;subject=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;title=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.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.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f23%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17309" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/clojure/default.aspx">clojure</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/wcf/default.aspx">wcf</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/scala/default.aspx">scala</category></item><item><title>Discoveries This Week 01/16/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx</link><pubDate>Fri, 16 Jan 2009 16:17:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17229</guid><dc:creator>RickM</dc:creator><slash:comments>3</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17229.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17229</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17229</wfw:comment><description>&lt;p&gt;This week’s theme is functional programming.&amp;#160; Included are discussions on Software Transactional Memory, Functional Architecture and the impact of the CLR on functional Programming in .NET.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog: &lt;a href="http://www.brandonwerner.com/2009/01/01/software-transactional-memory-debunked/"&gt;Brandon Werner’s Software Transactional Memory: Debunked!&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In starting with a title that is decidedly sensationalistic, Brandon effectively trashes STM over its expensive overhead based on a &lt;a href="http://portal.acm.org/citation.cfm?doid=1400214.1400228"&gt;paper published by ACM&lt;/a&gt;.&amp;#160; His position, and that of the researchers, is that most programmers see assignment as inexpensive and so would not understand that they need to optimize for atomic transactions when using STM.&amp;#160; &lt;/p&gt;  &lt;p&gt;Brian Hurt responded at length in his blog post &lt;a href="http://enfranchisedmind.com/blog/2009/01/02/the-problem-with-stm-your-languages-still-suck/"&gt;The Problem with STM: your languages still suck&lt;/a&gt;.&amp;#160; Brian’s view is that the fundamental issue here is that most programming languages encourage heavy use of mutable variables and so many expensive assignments and reads are happening when STM is used.&amp;#160; If instead one is using a functional programming language which discourages variable mutations, the high cost of STM is much less of an issue.&amp;#160; Brian then further flushes out his ideas in a &lt;a href="http://enfranchisedmind.com/blog/2009/01/10/responses-to-the-problem-with-stm/"&gt;follow up blog&lt;/a&gt; in which he responds to responses to his first.&lt;/p&gt;  &lt;p&gt;While I don’t agree that ACM’s analysis “puts a deep nail in the coffin of STM”, I also don’t think it’s reasonable to expect most programmers will be jumping on the functional programming bandwagon in the near future.&amp;#160; The main issue is that it’s just too different from what they are used to.&amp;#160; &lt;/p&gt;  &lt;p&gt;For now FP will remain the domain of the motivated and pragmatic programmer.&amp;#160; It will be necessary to slowly ease the majority into this new, different world via things like functional C# extensions.&amp;#160; I do think that some kind of STM with training wheels for mainstream programmers would be a good way to promote this over the long term.&amp;#160; However, it would be extremely important that the inherent overhead is explicitly stated.&lt;/p&gt;  &lt;p&gt;Finally, I wanted to note that &lt;a href="http://blogs.msdn.com/stmteam/archive/2009/01/02/transactional-memory-in-a-real-world.aspx"&gt;Sasha Dadiomov of the Microsoft STM team has an interesting piece on the difficulties involved in debugging STM&lt;/a&gt;.&amp;#160; It’s an informative glimpse of how Microsoft’s implementation of STM is shaping up.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog: &lt;a href="http://blogs.msdn.com/chrsmith/archive/2008/12/30/speech-recognition-is-gun-and-easy.aspx"&gt;Chris Smith’s Speech Recognition is gun [sic] and easy!&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;It’s possible he meant fun and easy but I can’t be sure.&amp;#160; &lt;/p&gt;  &lt;p&gt;A quick but fun piece on leveraging System.Speech.Dll inside of F#.&amp;#160; The result is a 10 line program that takes your speech as input and prints it to the console.&amp;#160; Very simple yet quite cool.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog: &lt;a href="http://weblogs.asp.net/podwysocki/archive/2009/01/13/how-would-the-clr-be-different.aspx"&gt;Matthew Podwysocki’s How would the CLR Be Different?&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;In this post Matthew discusses how the CLR might be better implemented to serve the needs of functional programming languages.&amp;#160; I especially like the idea of including some new functionality for type manipulation and construction.&lt;/p&gt;  &lt;p&gt;However, I would like to see specific examples of exactly what Matthew would like changed under the hood.&amp;#160; He mentions a lot of general goals with reasoning to back them up but not how they might be implemented.&amp;#160; I also feel that it would be inappropriate to implement some of these ideas at the CLR level instead of the language or API level.&lt;/p&gt;  &lt;p&gt;For example, non-null references.&amp;#160; I’m all for Spec# style pre and post conditions but why is it necessary that this be implemented at the CLR level?&amp;#160; This belongs in the language instead.&amp;#160; Also, the issue with immutability in .NET mostly has to do with Microsoft’s .NET API design.&amp;#160; The stack based nature of IL is completely compatible with the idea.&lt;/p&gt;  &lt;p&gt;The CLR should be designed with the most general case in mind and not with the slant towards any particular language.&amp;#160; If the CLR is to be viable long term, flexibility must be emphasized over specific optimizations.&amp;#160; &lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Paper: &lt;a href="http://funct.org/wiki/#Building%20a%20Wiki%20in%20Haskell.html"&gt;Sebastiaan Visser’s Building a Wiki in Haskell&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;A study on implementing a Wiki in Haskell which is a purely functional programming language.&amp;#160; This paper is a must read for both those interested in functional project architecture and those who question the viability of using FP for large applications.&amp;#160; The complete source of the project is available for your viewing pleasure.&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.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;subject=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;title=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.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.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f16%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17229" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/concurrency/default.aspx">concurrency</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/memory/default.aspx">memory</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/design/default.aspx">design</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/software+transactional+memory/default.aspx">software transactional memory</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/stm/default.aspx">stm</category></item><item><title>Discoveries This Week 01/09/2008</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/09/discoveries-this-week-01-09-2008.aspx</link><pubDate>Fri, 09 Jan 2009 16:37:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17126</guid><dc:creator>RickM</dc:creator><slash:comments>3</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17126.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17126</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17126</wfw:comment><description>It’s been a very exciting week. I actually had more things to post than time would allow me to write about. I’ll have to save them for next time. Blog: Daniel Spiewak’s What is Hindley-Milner? (and why is it cool?) Hindley-Milner is the algorithm all...(&lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/09/discoveries-this-week-01-09-2008.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17126" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/clojure/default.aspx">clojure</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/programming/default.aspx">programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/object+oriented/default.aspx">object oriented</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/code/default.aspx">code</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/reflection/default.aspx">reflection</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/decorators/default.aspx">decorators</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/continuous+integration/default.aspx">continuous integration</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/attributes/default.aspx">attributes</category></item><item><title>Discoveries This Week 12/19/08</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx</link><pubDate>Fri, 19 Dec 2008 16:21:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:16924</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/16924.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=16924</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=16924</wfw:comment><description>&lt;p&gt;I’ve decided to post a roundup for the week of what I feel were some of the most important blog posts and application releases I happened upon.&amp;#160; Who knows, if it goes well maybe I’ll even make it a habit.&amp;#160; In this edition: Windows Live Writer Release Candidate, Executor, IronPython 2.0, Saving DotNetKicks and The Real World Haskell Book Club.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Software: &lt;a href="http://windowslivewriter.spaces.live.com/"&gt;Windows Live Writer Update (Release Candidate)&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;I previously &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/11/14/windows-live-writer-makes-blogging-less-of-a-hassle.aspx"&gt;wrote about Windows Live Writer&lt;/a&gt; back in mid November.&amp;#160; Since then, you may have noticed that I’ve been using way more images and code samples in my blog.&amp;#160; This is because, after switching, these kinds of things just became so much easier to do.&amp;#160; Now, instead of having to resize the image, upload it and finally and link it, I just paste it right into my post and set a couple of properties.&amp;#160; It’s made my blog much more attractive, much less time consuming.&amp;#160; In fact, a number of my blogging coworkers have taken notice and have made the switch too.&amp;#160; They also have found that it makes their lives much easier.&lt;/p&gt;  &lt;p&gt;This new release fixes a number of problems.&amp;#160; Most notably, the memory footprint has gotten much smaller and the periodic freezing issue has gotten much better!&amp;#160; A huge improvement all around.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Software: &lt;a href="http://executor.dk/"&gt;Executor&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;I discovered this little app over at &lt;a href="http://lifehacker.com/400566/executor-is-impressive-full+featured-app-launcher"&gt;lifehacker&lt;/a&gt; and it’s greatly increased the speed at which I can perform many of my every day simple tasks.&amp;#160; Executor binds to Win-Z and brings up a “Run..” type interface.&amp;#160; It indexes your installed applications and makes them easy to access.&amp;#160; What makes it really fantastic is that you can define custom actions with parameters.&amp;#160; &lt;/p&gt;  &lt;p&gt;Previously to access our Bug Tracker I would have to launch a web browser, click my Fogbugz favorite, click on the search box, type in the case number and finally hitting enter to submit that query.&amp;#160; Now with Executor I simply hit Win-Z and type “fb 8732” and get immediately taken to that case.&amp;#160; We also use Salesforce for which I have a similar binding set.&amp;#160; Over the last week of use, it’s been an amazing time saver.&amp;#160; Best of all, it has a tiny 10mb footprint and uses almost no CPU time; so having it running in the background is completely unnoticeable. &lt;/p&gt;  &lt;p&gt;It’s not often that I find a piece of software that changes how I use my desktop.&amp;#160; However, Executor has really changed the way I think about launching programs.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Software: &lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython 2.0&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;IronPython 2.0 comes with the ability to run completely on top of the DLR.&amp;#160; This makes available a whole set of &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163344.aspx"&gt;compilation services&lt;/a&gt; specifically designed to make dynamic languages fast and flexible.&amp;#160; Not to mention the performance improvements, bug fixes and some Silverlight tools.&amp;#160; With all the buzz it seems like IronPython is quickly becoming the DLR language of choice for many.&amp;#160; Although, some seem to still be having quite a bit of trouble with &lt;a href="http://www.jphamilton.net/post/IronPython-and-WPF.aspx"&gt;WPF integration&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog Post: &lt;a href="http://nayyeri.net/blog/saving-dotnetkicks/"&gt;Saving DotNetKicks&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;I used to be an avid user of &lt;a href="http://www.dotnetkicks.com/"&gt;DotNetKicks&lt;/a&gt;.&amp;#160; However, lately it seems to have really gone downhill.&amp;#160; I’m not sure if it’s due to the launch of &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt; or if it simply has becoming inundated with spam posts.&amp;#160; I hope the community can come together and save this site.&amp;#160; It’s always been nice that .NET users have had a community site to call their own.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog Post: &lt;a href="http://weblogs.asp.net/podwysocki/archive/2008/12/03/ann-the-real-world-haskell-book-club.aspx"&gt;The Real World Haskell Book Club&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Matthew Podwysocki (a very active F# blogger) has started a &lt;a href="http://groups.google.com/group/real-world-haskell-book-club"&gt;Google Groups book club&lt;/a&gt; for the release of “&lt;a href="http://www.realworldhaskell.org/blog/"&gt;Real World Haskell&lt;/a&gt;”.&amp;#160; Two of the book’s authors, Bryan O’Sullivan and Don Stewart, will be sitting in on the group and so it’s a fantastic opportunity to get experience building real applications using a functional style. The action isn't scheduled to start until January 5th but the groups is already seeing a lot of activity.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)"&gt;Haskell&lt;/a&gt; was designed from the ground up to enforce functional programming technique.&amp;#160; For this reason, it’s a great language to use if you want to jump head first into functional programming as none of the traditional object oriented or procedural structures are available to fall back on.&amp;#160; It’s the functional way or the highway. &lt;/p&gt;  &lt;p&gt;I’ve already gotten my copy of the book and can’t wait to start working through it with the rest of the group.&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.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx&amp;amp;;subject=Discoveries+This+Week+12%2f19%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx&amp;amp;;title=Discoveries+This+Week+12%2f19%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx&amp;amp;title=Discoveries+This+Week+12%2f19%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx&amp;amp;;title=Discoveries+This+Week+12%2f19%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.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.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx&amp;amp;;title=Discoveries+This+Week+12%2f19%2f08&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/19/discoveries-this-week-12-19-08.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=16924" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fixed/default.aspx">fixed</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/IronPython/default.aspx">IronPython</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/blogging/default.aspx">blogging</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category></item></channel></rss>