<?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 : algorithms</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/tags/algorithms/default.aspx</link><description>Tags: algorithms</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>F# Discoveries This Week 07/16/2010</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx</link><pubDate>Fri, 16 Jul 2010 15:49:19 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20903</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/20903.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=20903</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=20903</wfw:comment><description>&lt;p&gt;As promised, a fresh batch of links to sooth your aching desire for more F#.&amp;#160; I’m particularly excited to announce I’ll give giving a F# tutorial this year at the &lt;a href="http://cufp.org/"&gt;Commercial Users of Functional Programming&lt;/a&gt; conference.&amp;#160; CUFP is going to have a lot of great content this year and will be well worth attending for anyone interested in functional programming. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;News &lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://www.navision-blog.de/2010/07/14/fake-f-make-1-40-5-0-released-bugfixes-for-cruisecontrol-net/"&gt;FAKE – F# Make 1.40.5.0 Released&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/07/15/f-jobs-at-credit-suisse-london.aspx"&gt;F# Jobs at Credit Suisse, London&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://cufp.org/f-20-day-beach-rick-minerich"&gt;I’ll be giving a F# tutorial at CUFP&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Video&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://vimeo.com/13215304"&gt;Steffen Forkmann speaks on F# Open Source Tools at the New England F# User Group&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Presented at the &lt;a href="http://fsug.org"&gt;New England F# User Group&lt;/a&gt; on June 7, 2010, Steffen discusses FAKE and NaturalSpec. Steffen is the author of the two open source F# projects &amp;quot;FAKE - F# Make&amp;quot; and &amp;quot;NaturalSpec&amp;quot;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;Articles&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://www.russiantequila.com/wordpress/?p=149"&gt;Alex Pedenko’s Introducing Furious – A proof-of-concept RRM for F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Meet furious. Furious is a RRM - a Record Relation Mapping system. It is a database-independent object query dsl for records, that currently has a (barebones) mysql implementation. Here's how it works. Suppose you have a record graph like so…&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.codeproject.com/KB/net-languages/ExploringAmazonwithFsharp.aspx"&gt;Vagif Abilov’s Exploring Amazon S3 with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The purpose of this article is to show how fast you can dig into low level details of an unknown technology using F#, and how little code you need to write. Therefore I keep the text of the article short, focusing just on the required steps.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fdatamining.blogspot.com/2010/07/f-async-workflow-application-flickr.html"&gt;Yin Zhu’s F# Async workflow application: a Flickr crawler&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;My strategy is to use the search query to search images with some specific tags and from the result page(as shown below), the url of each image is extracted, from which the image and its tags are then crawled. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.whattofix.com/blog/archives/2010/07/f-versus-micros.php"&gt;Daniel Markham’s F# Versus Microsoft's Regex. A Lesson in Types&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I was doing some text processing. As part of that, I set up a few RegExes. As I continued coding, I realized that I was following a pattern: apply the regex, check the match count, and if there were a bunch of matches, either get the first or last item.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/07/f-vs-mathematica-even-faster-pricer-for.html"&gt;Jon Harrop’s F# vs Mathematica: an even faster pricer for American options&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This new optimized and parallelized F# solution is now a whopping 960× faster than the original Mathematica code from Sal Mangano's Mathematica Cookbook.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/pure-oop-personal-retrospective.html"&gt;Neil Carrier’s Pure OOP – A Personal Retrospective&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Almost instantly, my thoughts about the problem undergo a phase change, and I re-write my earlier code to be more succinct, maintainable, and composable, and usually more computationally efficient.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/07/integer-square-roots.html"&gt;Neil Carrier’s Integer Square Roots&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is an old algorithm, once popular in assembly language programs on small processors. The fact that it uses only integers, addition, subtraction, and less-than branching, mean that its hardware and software requirements are at rock bottom.&lt;/em&gt;&lt;/p&gt;   &lt;em&gt;&lt;/em&gt;    &lt;p&gt;&lt;/p&gt;   &lt;em&gt;&lt;/em&gt;&lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/13/f-event-module-extension"&gt;Julien Ortin’s F# Event module extension&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Functions to extend the F# Event module.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/09/socket-helpers-in-f"&gt;Julien Ortin’s Socket helpers in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This post describes a module to perform common socket operations using asynchronous operations and reactive programming.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2010/07/07/european-central-bank-extracting-reference-rates-with-f"&gt;Julien Ortin’s European Central Bank – extracting reference rates with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Every day, the European Central Bank publishes “official” reference FX (foreign exchange) rates where currencies are quoted against the Euro (expressed as EUR/XXX), or 1 EUR = xxx XXX.&amp;#160; The exchange rates of the last thirty sessions are available in xml format which we shall try to parse.&amp;#160; In order to do so, we use F# and active patterns, based on Don Syme’s draft paper.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Petr Lepilov’s F# interactive, AppFabric cache and PowerShell &lt;a href="http://sharpamqp.net/blog/post/F-interactive-AppFabric-cache-and-PowerShell-%28Part-1%29.aspx"&gt;Part 1&lt;/a&gt; and &lt;a href="http://sharpamqp.net/blog/post/F-interactive-AppFabric-cache-and-PowerShell-%28Part-2%29.aspx"&gt;Part 2&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Applications can store any serializable CLR object without worrying about where the object gets stored. Scalability can be achieved by simply adding more computers on demand. The cache also allows for copies of data to be stored across the cluster, thus protecting data against failures. It runs as a service accessed over the network.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://stevegilham.blogspot.com/2010/07/dotcover-10-beta-first-impressions.html"&gt;Steve Gilham’s dotcover 1.0 beta – first impressions&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Not having R# at home -- because I rarely use C# even if I'm writing for .net -- it's this which interested me more. So, I gave it a try on my current F# project&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fortysix-and-two.blogspot.com/2010/07/f-and-code-contracts-not-quite-there.html"&gt;Kurt Schelfthout’s F# and Code Contracts: not quite there yet&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In this post I’ll show how you can get Code Contracts sort of working for F#. From my very initial explorations, I would conclude that they seem basically usable for F# programming – but you’ll need some glue and tape, and not everything works as you’d expect.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Edmon Begoli’s Scala vs. F#, Application Programming Features &lt;a href="http://www.developer.com/lang/other/article.php/3883051/Scala-vs-F-Comparing-Functional-Programming-Features"&gt;Round 1&lt;/a&gt; and &lt;a href="http://www.developer.com/net/article.php/10916_3890906_1/Scala-vs-F-Round-2-Application-Programming-Features.htm"&gt;Round 2&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F# and Scala, two relatively recent programming languages, provide most .NET and Java software developers with new functional programming features that are worth understanding and evaluating.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Ivan Towlson’s F# pattern matching for beginners, &lt;a href="http://hestia.typepad.com/flatlander/2010/07/f-pattern-matching-for-beginners-part-1-getting-started.html"&gt;Part 1&lt;/a&gt;, &lt;a href="http://hestia.typepad.com/flatlander/2010/07/f-pattern-matching-for-beginners-part-2-decomposition.html"&gt;Part 2&lt;/a&gt; and &lt;a href="http://hestia.typepad.com/flatlander/2010/07/f-pattern-matching-for-beginners-part-3-guards.html"&gt;Part 3&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Pattern matching provides a concise but clear and highly expressive way of writing conditional logic, because it combines the conditional flow with the ability to extract values of interest&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;title=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f16%2f2010" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx&amp;amp;;title=F%23+Discoveries+This+Week+07%2f16%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/07/16/f-discoveries-this-week-07-16-2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=20903" 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/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/events/default.aspx">events</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/cufp/default.aspx">cufp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fake/default.aspx">fake</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Mathematica/default.aspx">Mathematica</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/sockets/default.aspx">sockets</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/furious/default.aspx">furious</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Flickr/default.aspx">Flickr</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/contracts/default.aspx">contracts</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/S3/default.aspx">S3</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/options/default.aspx">options</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Regex/default.aspx">Regex</category></item><item><title>F# Discoveries This Week 06/14/2010 - TechEd Edition</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx</link><pubDate>Mon, 14 Jun 2010 21:25:47 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:20792</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/20792.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=20792</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=20792</wfw:comment><description>&lt;p&gt;Despite the small number of talks on F#, it seemed the language was on everyone’s lips this TechEd.&amp;#160; Whether working at the Visual Studio Languages booth or hanging out at the parties afterward, almost everyone I talked to was actively investigating or making plans to explore the language.&amp;#160; &lt;/p&gt;  &lt;p&gt;Of course, this is great news.&amp;#160; A quiet tide of interest is quickly rising.&amp;#160; Now we just need to give those who are interested the resources they need to be successful and comfortable using F#.&amp;#160; &lt;/p&gt;  &lt;p&gt;For this reason, each and every F# speaker and blogger is critically important right now.&amp;#160; If you haven’t, don’t be afraid to give blogging a try.&amp;#160; The F# community is helpful and very forgiving of mistakes.&amp;#160; If you are already blogging, consider giving a talk at your local user group or code camp.&amp;#160; Now is the best time to help and educate.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;News&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/f-presentation-for-new-england-f-user.html"&gt;Daniel Mohl will be speaking at FSUG on 7/5&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.itu.dk/courses/BPRD/E2009/"&gt;IT University of Copenhagen uses F# as presentation language in a course: “Programming Language Concepts for Software Developers”&lt;/a&gt; (Thanks Pheophan)&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/06/07/project-emporia-a-personal-view-on-twitter-implemented-in-f.aspx"&gt;Project Emporia Released, on Azure with a F# Core&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://fscheck.codeplex.com/"&gt;FsCheck 0.7 Released&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;Video / Audio&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;Luke Hoban’s &lt;a href="http://www.msteched.com/2010/NorthAmerica/DEV307"&gt;F# in Microsoft Visual Studio 2010 (video)&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/lukeh/archive/2010/06/13/f-scaling-from-explorative-to-net-component-f-talk-teched-2010.aspx"&gt;F# Scaling from Explorative to .NET Component (blog)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The TechEd talk covered a number of interesting aspects of using F# in Visual Studio - tools, core syntax, some examples of current commercial users, and the physical structure of F# projects used in client applications.&amp;#160; But the theme of scaling from explorative programming to .NET component is one that I find particularly powerful, and which is a really unique strength of the F# language.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.infoq.com/interviews/john-hughes-fp"&gt;John Hughes on Why Functional Programming Matters&lt;/a&gt; (video)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;John Hughes is the author of “Why functional programming matters” paper and in this interview he outlines the merits of functional programming and the reason for his involvement with it. He also goes over several core principles of functional programming like monads, handling of side-effects, etc.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.talkingshopdownunder.com/2010/06/episode-16-f-with-joel-pobar.html"&gt;Talking Shop Down Under with Joel Pobar&lt;/a&gt; (audio)&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This week see's Richard talking with Joel Pobar about F# and languages in general. Functional programming is coming more and more to the fore and this is a great episode to find out more about F#, try and get your head around monads and think more about the way you approach programming in general and wether the general purpose languages that you use currently are always the best choice for the job at hand.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;Articles&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/ff714588.aspx"&gt;Luke Hoban’s F# Fundamentals on MSDN Magazine&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This article takes a look at some of the core concepts of the F# language and its implementation on top of the CLR.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/ashleyf/archive/2010/06/08/wolfram-a-new-kind-of-turing-machine.aspx"&gt;Ashley Feniello’s Wolfram – A New Kind of Turing Machine&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Stephen Wolfram’s book, “A New Kind of Science” is flippin’ brilliant! (or perhaps I'm just not brilliant enough to realize he's a mad man) 1,280 pages packed with beautiful insights and Tufte-worthy visualizations. I remember discovering it while randomly browsing the MS library one day. I became so enthralled, an hour passed just standing there reading it!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.codeproject.com/KB/net-languages/SymbolicCalcInFS.aspx"&gt;Vagif Abilov’s Symbolic Calculation in F# on CodeProject&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of the best areas to use a functional language is to apply it to symbolic calculations. Like transforming algebraic expressions or evaluating function derivatives. I remember how I was impressed many years ago when I looked at a program in Prolog that occupied not more than one computer screen but could tell me that derivative of sin(x) was cos(x). So I wanted to do the same in F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/dsyme/archive/2010/06/04/html5-programming-with-f.aspx"&gt;Don Syme’s HTML5 Programming with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Now that WebSharper has been released and matured, it will be great to see it used more widely by F# users.&amp;#160; Given the importance of both HTML5 and Silverlight, F# users interested in shipping visualization apps should really make sure they know how to use F# to program these, using the Silverlight SDK (for Silverlight) or tools such as WebSharper (for HTML5).&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://achrissmith.blogspot.com/2010/06/f-active-pattern-seven-tag-limit.html"&gt;Chris Smith’s F# active pattern seven-tag limit&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Once he went into the theory behind active patterns I agreed that the limit was reasonable and didn't push for us to change the design. This doesn't mean you can't use active patterns with greater than seven tags, it just means that you need to use a different language construct -- the partial active pattern -- instead.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Phillip Trelford’s &lt;a href="http://www.trelford.com/blog/post/Runtime-Units-of-Measure-for-F.aspx"&gt;Runtime Units of Measure for F#&lt;/a&gt; and &lt;a href="http://www.trelford.com/blog/post/Units-of-measure-auto-conversion.aspx"&gt;Units of measure auto-conversion&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The F# compiler includes a Units of Measure feature which infers a measure type at compile time, which means you get measure type safety with uncompromised runtime performance. […] Sometimes you might also want to actually infer units of measure at runtime, say to display the inferred unit type at the UI. The following F# code prototype provides such inference. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.trelford.com/blog/post/Silverlight-4-Calculator-Sample-in-F.aspx"&gt;Phillip Trelford’s Silverlight 4 Calculator Sample in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The sample demonstrates creating a View in WPF or Silverlight without XAML. The idea is to make things a little easier from F# by implementing a (+) operator overload to attach dependency properties.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/b/jomo_fisher/archive/2010/05/28/creating-an-odata-web-service-with-f.aspx"&gt;Creating an OData Web Service with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you’d like to take a look at the service I wrote, I published it on Visual Studio Gallery. You just need to go to File\New Project in Visual Studio 2010: &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2010/06/dragon-curve-in-17-lines-of-f.html"&gt;Jon Harrop’s A dragon curve in 17 lines of F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Dragon curves are a family of self-similar fractal curves. The following 17-line F# program uses Windows Presentation Foundation to visualize the results of a simple recursively-constructed dragon curve.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s &lt;a href="http://techneilogy.blogspot.com/2010/05/list-collect-implementations-with.html"&gt;List&amp;lt;&amp;gt;.collect Implementations with Benchmarks&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/06/one-more-list-collect-implementation.html"&gt;One more List&amp;lt;&amp;gt;.collect Implementation&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I had a situation come up in my proof-of-concept where I needed to do a collect on a .NET List&amp;lt;&amp;gt;. So I did some experiments with how it might best be accomplished. A key factor was that this is something that may be done literally millions of times a day if the application makes it to deployment; so I was concerned with performance.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/06/easy-no-compile-dfas.html"&gt;Neil Carrier’s Easy, No-Compile DFAs&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The methods for compiling a set of finite automata DFAs or NFAs into a composite DFA are found in most introductory compiler texts. But how easy is it to construct a simple engine in F# which recognizes a series of patterns? As it turns out, pretty simple.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://techneilogy.blogspot.com/2010/06/surfing-tuple-pipeline.html"&gt;Neil Carrier’s Surfing the Tuple Pipeline&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;It turns out that I like the RWFP approach better than mine, but the special tuple pipelines I came up with are not without interest, so I decided to post them here.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Neil Carrier’s This is why I love F# &lt;a href="http://techneilogy.blogspot.com/2010/06/this-is-why-i-love-f.html"&gt;Part One&lt;/a&gt; and &lt;a href="http://techneilogy.blogspot.com/2010/06/why-i-love-f-part-2.html"&gt;Part Two&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I can’t imagine having any trouble explaining the operation of this program to someone with a basic knowledge of statistics but no computer programming experience. It simply looks like what it does in a way that is succinct and comprehensible.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/standard-wcf-service-application.html"&gt;Daniel Mohl’s The Standard WCF Service Application Template for F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In the interest of building up a larger set of installed templates for F#, I've ported the standard C# WCF Service Application to F# and packaged it into a .vsi file.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a name="1997119761320975706"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://bloggemdano.blogspot.com/2010/06/fsharpcouch-simple-couchdb-net-api-in-f.html"&gt;Daniel Mohl’s FSharpCouch: A Simple CouchDB .NET API in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;To interact with CouchDB, I primarily use Relax (a full featured &amp;quot;.NET API abstraction of CouchDB's (excellent) RESTful API&amp;quot;); however, I thought it might be fun and educational to create a simple CouchDB .NET API abstraction in F#.&amp;#160; Note: The code provided&amp;#160; here is loosely based on SharpCouch.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://v2matveev.blogspot.com/2010/05/f-parsing-simple-language.html"&gt;Vladimir Matveev’s F# Parsing simple language&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;During my professional career I often met the task of code generation based on some source data. Last time it was analogue of BCL compiler for ExpressionTrees and then C# compiler have done mostly all the required job with parsing expressions.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Vladimir Matveev’s &lt;a href="http://v2matveev.blogspot.com/2010/06/f-performance-of-events.html"&gt;F# Performance of events&lt;/a&gt; and &lt;a href="http://v2matveev.blogspot.com/2010/06/f-performance-of-events-update.html"&gt;F# Performance of events (update)&lt;/a&gt; and &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/04/a-speedy-alternative-to-f-delegateevents.aspx"&gt;Rick Minerich’s A Speedy Alternative to F# DelegateEvents&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As you see compiler have inlined code of Trigger method inside Run&amp;#160; and accessed field multicast directly. That’s why we replaced let binding with val.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://laurent.le-brun.eu/site/index.php/2010/06/07/54-fsharp-and-fparsec-a-glsl-parser-example"&gt;Laurent Le Brun’s F# and FParsec: a GLSL parser example&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of my side-projects is GLSL Minifier.&amp;#160; GLSL is the shading language of OpenGL, that is a language designed to run on the GPU, in order to control the graphics pipeline and create nice realtime graphical effects. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://laurent.le-brun.eu/site/index.php/2010/06/08/55-fsharp-getopt-to-parse-the-command-line"&gt;Laurent Le Brun’s F# getopt to parse the command line&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Many programs (especially console applications) need to parse the command line, and find which options the user want to set. As far as I know, .NET doesn't provide any function for this, but there several third-party libraries to do it.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fdatamining.blogspot.com/2010/06/note-on-efficiency-in-f-part-i-small.html"&gt;Yin Zhu’s A note on efficiency in F#, part I: small things first&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As a functional programming language, F# programs are kind of high-level, thus harder to reason its performance than imperative programs. Not the big-O thing, it is the constant. This series contains little tips about performance.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/06/10/f-wpf-form-ndash-the-basics.aspx"&gt;Mark Pearl’s F# WPF Form – the basics&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have been keeping my eye out for some examples of creating a WPF form in a F# project and came across &lt;/em&gt;&lt;em&gt;Tim’s F# Twitter Stream Sample [..]&lt;/em&gt;&lt;em&gt; So today I am going to make just the very basic WPF form with all the goodness of a XAML window.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://geekswithblogs.net/MarkPearl/archive/2010/06/09/simple-mouse-move-event-in-f-with-winforms.aspx"&gt;Mark Pearl’s Simple Mouse Move Event in F# with WinForms&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In Thomas’s post he has a form with an ellipse on it that when he clicks on the ellipse it pops up a message box with the button clicked… awesome. Something that got me on the post though was the code similar to the one below…&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://shinkirou.org/blog/2010/06/f-multidimensional-arrays-and-jagged-arrays/"&gt;Ming Tang’s F# Multidimensional Arrays and Jagged Arrays&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The problem is that, an array is initialized per every rows, which wastes computational resource. Because the widths of each row are constant, why not make a 1d array and access pixels like y * width + x.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://community.livejournal.com/visual_fsharp/3090.html"&gt;Pheophan’s Fun with Fibonacci&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Horrible performance. fibnaive 40 took 16.6 sec on my laptop&amp;quot; […] “It’s also pretty fast. Here are results of calculating 1000 Fibonacci numbers: Real: 00:00:00.001, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0”&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx&amp;amp;;title=F%23+Discoveries+This+Week+06%2f14%2f2010+-+TechEd+Edition&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2010/06/14/f-discoveries-this-week-06-14-2010-teched-edition.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=20792" 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/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/parser/default.aspx">parser</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/FsCheck/default.aspx">FsCheck</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/events/default.aspx">events</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/tuning/default.aspx">tuning</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Active+Patterns/default.aspx">Active Patterns</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/HTML5/default.aspx">HTML5</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/symbolic+calculation/default.aspx">symbolic calculation</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/DFA/default.aspx">DFA</category></item><item><title>F# Discoveries This Week 12/29/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/29/discoveries-this-week-12-29-2009.aspx</link><pubDate>Tue, 29 Dec 2009 16:45:42 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19954</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19954.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19954</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19954</wfw:comment><description>&lt;p&gt;It’s been a bit of a light week with the holidays.&amp;#160; Although, for the truly dedicated, that’s just a chance to get some quality time in with with a favorite programming language (or to write a poem about it).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://tomasp.net/blog/accelerator-life-game.aspx"&gt;Tomas Petricek uses Accelerator in a GPU Game of Life simulation&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This article is the second one from a series about using Accelerator from F#. Today, we'll use Accelerator types directly from F# - this is the simplest possible approach and is very similar to the way you'd work with Accelerator in C#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://robertsundstrom.wordpress.com/2009/12/24/maths-in-f/"&gt;Robert Sundström explores GCD and LCM in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I have spent this evening composing some mathematical functions in F#. So far I have just made two for gcd and lcm and one that can identify prime numbers. I want like to share the code with you.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://strangelights.com/blog/archive/2009/12/26/1651.aspx"&gt;Robert Pickering describes his work on FunctionalNHibernate&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;In the future I’ll be looking at how to broadening what you can do with FunctionalNHibernate ClassMap descriptions and improve data access by integrating Linq like features.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2009/12/f-examples-on-rosetta-code.htmlhttp://fsharpnews.blogspot.com/2009/12/f-examples-on-rosetta-code.html"&gt;Flying Frog solves Rosetta Code’s Data Munging 2 Example &lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Perhaps the most surprising result is that the F# solutions are extremely concise even when compared with bleeding-edge research languages such as Haskell.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fsharpnews.blogspot.com/2009/12/evolution-weasel-program.html"&gt;Flying Frog plays with Generic Algorithms&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The program begins with a random string of letters and spawns a generation of 200 random mutations of the parent string, selects the fittest mutation (by similarity to an &amp;quot;ideal&amp;quot; string) and uses that individual to spawn the next generation. The ideal string used is &amp;quot;METHINKS IT IS LIKE A WEASEL&amp;quot;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2009/12/21/cleaning-temporary-internet-files"&gt;Julien Ortin uses F# to clean up his temporary internet files&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A quick and dirty F# script to clean temporary internet files (including Flash cookies which don’t get deleted by the browsers).&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.navision-blog.de/2009/12/21/observing-asynchronous-downloads-with-f-and-the-reactive-extensions-for-net/"&gt;Steffen Forkmann observes asynchronous downloads with Rx and F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This time I will demonstrate how we can use this API and asynchronous workflows to download a couple of websites asynchronous and in parallel.&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/pfxteam/archive/2009/12/09/9934811.aspx"&gt;The PFX Team tours the .NET 4 Parallel Programming Samples&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;On Code Gallery, we have a plethora of samples that highlight aspects of the .NET Framework 4 that help with writing scalable and efficient parallel applications.&amp;#160; This post examines each of those samples, providing an overview of what each provides.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://msdnrss.thecoderblogs.com/2009/12/25/distracted-by-abstraction-a-poem-about-f/"&gt;Satnam Singh writes a poem about F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Distracted by Abstraction - A poem about F#&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/29/discoveries-this-week-12-29-2009.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+12%2f29%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/29/discoveries-this-week-12-29-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/29/discoveries-this-week-12-29-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+12%2f29%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/29/discoveries-this-week-12-29-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/29/discoveries-this-week-12-29-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/29/discoveries-this-week-12-29-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/29/discoveries-this-week-12-29-2009.aspx&amp;amp;title=F%23+Discoveries+This+Week+12%2f29%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/29/discoveries-this-week-12-29-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/29/discoveries-this-week-12-29-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+12%2f29%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/29/discoveries-this-week-12-29-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/29/discoveries-this-week-12-29-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+12%2f29%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/29/discoveries-this-week-12-29-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19954" 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/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/math/default.aspx">math</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/reactive/default.aspx">reactive</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/reactive+extensions/default.aspx">reactive extensions</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/FunctionalNHibernate/default.aspx">FunctionalNHibernate</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/genetic/default.aspx">genetic</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Rosetta+Code/default.aspx">Rosetta Code</category></item><item><title>Steepest Ascent Hill Climbing in C# and F#</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx</link><pubDate>Mon, 28 Dec 2009 19:21:09 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19946</guid><dc:creator>RickM</dc:creator><slash:comments>7</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19946.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19946</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19946</wfw:comment><description>&lt;p&gt;Recently I’ve been working with some local search techniques and wanted to share my Steepest Ascent Hill Climbing solution.&lt;/p&gt;  &lt;p&gt;The general idea of Steepest Ascent Hill Climbing is that in each iteration of the hill climbing process you apply a set of transforms to your input data and select the best result via a fitness function.&amp;#160; This result, or the transform which created it, is then the input for your next iteration.&amp;#160; The process stops when no transform in an iteration scored higher than the previous generation’s winner.&lt;/p&gt;  &lt;p&gt;In this way each iterative step brings you closer to a local maxima of your fitness function’s graph.&amp;#160; This is where the term “Hill Climbing” comes from.&amp;#160; It is considered a relatively simple AI technique but is also is broadly applicable, quite easy to reason about and can be tweaked for many different corner cases.&lt;/p&gt;  &lt;p&gt;For this particular example we will be assuming composable transforms.&amp;#160; For each iteration of our hill climbing we will apply our standard transform set to the winning transform of the last round and so produce a new set of transforms.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:61b69c2f-5c74-48d7-b088-840692159eb9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;delegate&lt;/span&gt; T &lt;span style="color:#2b91af;"&gt;TransformComposer&lt;/span&gt;&amp;lt;T&amp;gt;(T lastT, T thisT);&lt;br&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;delegate&lt;/span&gt; S &lt;span style="color:#2b91af;"&gt;TransformApplier&lt;/span&gt;&amp;lt;S, T&amp;gt;(S set, T transform);&lt;br&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FitnessFunction&lt;/span&gt;&amp;lt;S&amp;gt;(S set);&lt;br&gt; &lt;br&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;HillClimberResult&lt;/span&gt;&amp;lt;S, T&amp;gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; HillClimberResult(&lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; score, T transform, S set)&lt;br&gt;     {&lt;br&gt;         Score = score;&lt;br&gt;         Transform = transform;&lt;br&gt;         Set = set;&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; Score { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; T Transform { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; S Set { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;br&gt; }&lt;br&gt; &lt;br&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;HillClimber&lt;/span&gt;&amp;lt;S, T&amp;gt;&lt;br&gt; {&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; HillClimber(&lt;br&gt;       &lt;span style="color:#2b91af;"&gt;TransformComposer&lt;/span&gt;&amp;lt;T&amp;gt; composer,&lt;br&gt;       &lt;span style="color:#2b91af;"&gt;TransformApplier&lt;/span&gt;&amp;lt;S, T&amp;gt; applier,&lt;br&gt;       &lt;span style="color:#2b91af;"&gt;FitnessFunction&lt;/span&gt;&amp;lt;S&amp;gt; fitness)&lt;br&gt;     {&lt;br&gt;         TransformComposer = composer;&lt;br&gt;         TransformApplier = applier;&lt;br&gt;         FitnessFunction = fitness;&lt;br&gt;         Transforms = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt;();&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt; Transforms { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TransformComposer&lt;/span&gt;&amp;lt;T&amp;gt; TransformComposer { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TransformApplier&lt;/span&gt;&amp;lt;S, T&amp;gt; TransformApplier { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FitnessFunction&lt;/span&gt;&amp;lt;S&amp;gt; FitnessFunction { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;HillClimberResult&lt;/span&gt;&amp;lt;S, T&amp;gt; FindMaxima(S inputSet, T initialTransform)&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (inputSet == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;inputSet&amp;quot;&lt;/span&gt;);&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (initialTransform == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;initialTransform&amp;quot;&lt;/span&gt;);&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (Transforms.Count == 0)&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;No transforms were set.&amp;quot;&lt;/span&gt;);&lt;br&gt; &lt;br&gt;         &lt;span style="color:#2b91af;"&gt;HillClimberResult&lt;/span&gt;&amp;lt;S, T&amp;gt; best;&lt;br&gt;         &lt;span style="color:#2b91af;"&gt;HillClimberResult&lt;/span&gt;&amp;lt;S, T&amp;gt; iterBest = ApplyTransformAndScore(inputSet, initialTransform);&lt;br&gt; &lt;br&gt;         &lt;span style="color:#0000ff;"&gt;do&lt;/span&gt;&lt;br&gt;         {&lt;br&gt;             best = iterBest;&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (T transform &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; Transforms)&lt;br&gt;             {&lt;br&gt;                 &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; nextTransform = TransformComposer(best.Transform, transform);&lt;br&gt;                 &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; result = ApplyTransformAndScore(inputSet, nextTransform);&lt;br&gt;                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (iterBest.Score &amp;lt; result.Score)&lt;br&gt;                     iterBest = result;&lt;br&gt;             }&lt;br&gt;         } &lt;span style="color:#0000ff;"&gt;while&lt;/span&gt; (iterBest.Score &amp;gt; best.Score);&lt;br&gt; &lt;br&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; best;&lt;br&gt;     }&lt;br&gt; &lt;br&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;HillClimberResult&lt;/span&gt;&amp;lt;S, T&amp;gt; ApplyTransformAndScore(S inputSet, T transform)&lt;br&gt;     {&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; transformedSet = TransformApplier(inputSet, transform);&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; score = FitnessFunction(transformedSet);&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;HillClimberResult&lt;/span&gt;&amp;lt;S, T&amp;gt;(score, transform, transformedSet);&lt;br&gt;     }&lt;br&gt; }&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I like the way this worked out in C# quite a lot.&amp;#160; However, take a moment to compare it to a F# version I quickly whipped up:&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3992d10c-89ce-4bd8-b893-fbd120334f26" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;&lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; HillClimber(composer, applier, fitness, transforms) =&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; x.FindMaxima initialSet initialTransform =&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; maxOfScores one two = &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; fst one &amp;gt; fst two &lt;span style="color:#0000ff;"&gt;then&lt;/span&gt; one &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; two&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; findBestTransform set lastTransform =&lt;br&gt;           transforms&lt;br&gt;             |&amp;gt; List.map (&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt;(transform) &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; composer lastTransform transform)&lt;br&gt;             |&amp;gt; List.map (&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt;(transform) &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; applier set transform, transform)&lt;br&gt;             |&amp;gt; List.map (&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt;(transformedSet, transform) &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; (fitness transformedSet), transform)&lt;br&gt;             |&amp;gt; List.reduce maxOfScores&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;rec&lt;/span&gt; climb set lastScore lastTransform =&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; (thisScore, thisTransform) = findBestTransform set lastTransform&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; thisScore &amp;lt;= lastScore &lt;span style="color:#0000ff;"&gt;then&lt;/span&gt; (lastScore, lastTransform)&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; climb set thisScore thisTransform&lt;br&gt;         climb initialSet (fitness initialSet) initialTransform&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It’s quite shocking how much less code is necessary.&amp;#160;&amp;#160; However, there is a small problem with this example.&amp;#160; As we are not using HillClimber from inside of its own library, all of its function inputs resolve to System.Object. The solution is to simply do a bit of annotating to ensure that compile time types are as generic as possible.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b4198e46-bee0-4fc4-8907-1b4ecf7ee54a" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;&lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; TransformComposer&amp;lt;&amp;#39;t&amp;gt; = &amp;#39;t &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; &amp;#39;t &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; &amp;#39;t&lt;br&gt; &lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; TransformApplier&amp;lt;&amp;#39;s,&amp;#39;t&amp;gt; = &amp;#39;s &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; &amp;#39;t &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; &amp;#39;s&lt;br&gt; &lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; FitnessFunction&amp;lt;&amp;#39;s&amp;gt; = &amp;#39;s &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; float&lt;br&gt;   &lt;br&gt; &lt;span style="color:#0000ff;"&gt;type&lt;/span&gt; HillClimber&amp;lt;&amp;#39;s,&amp;#39;t&amp;gt;(composer: TransformComposer&amp;lt;&amp;#39;t&amp;gt;, applier: TransformApplier&amp;lt;&amp;#39;s,&amp;#39;t&amp;gt;, fitness: FitnessFunction&amp;lt;&amp;#39;s&amp;gt;, transforms: list&amp;lt;&amp;#39;t&amp;gt;) =&lt;br&gt;     &lt;span style="color:#0000ff;"&gt;member&lt;/span&gt; x.FindMaxima initialSet initialTransform =&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; maxOfScores one two = &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; fst one &amp;gt; fst two &lt;span style="color:#0000ff;"&gt;then&lt;/span&gt; one &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; two&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; findBestTransform set lastTransform =&lt;br&gt;           transforms&lt;br&gt;             |&amp;gt; List.map (&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt;(transform) &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; composer lastTransform transform)&lt;br&gt;             |&amp;gt; List.map (&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt;(transform) &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; applier set transform, transform)&lt;br&gt;             |&amp;gt; List.map (&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt;(transformedSet, transform) &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; (fitness transformedSet), transform)&lt;br&gt;             |&amp;gt; List.reduce maxOfScores&lt;br&gt;         &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;rec&lt;/span&gt; climb set lastScore lastTransform =&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; (thisScore, thisTransform) = findBestTransform set lastTransform&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; thisScore &amp;lt;= lastScore &lt;span style="color:#0000ff;"&gt;then&lt;/span&gt; (lastScore, lastTransform)&lt;br&gt;             &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; climb set thisScore thisTransform&lt;br&gt;         climb initialSet (fitness initialSet) initialTransform&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Of course,&amp;#160; it would be great if the F# type system would reduce to generics instead of System.Object in this case.&amp;#160; I would think the ideal would be to always reduce to the most generic type possible.&amp;#160; I’ll have to give it a try tonight with the latest VS2010 beta and see if there is any improvement.&lt;/p&gt;  &lt;p&gt;Continuing on, let’s give this a go with something simple.&amp;#160; We know that the maximum value of |A| – A^2 is 0.5, –0.5.&amp;#160; Can we climb our way to one of these values? &lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:909176b7-092c-4f6e-a15e-76b4846f1793" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;&lt;span style="color:#0000ff;"&gt;#load&lt;/span&gt; &lt;span style="color:#800000;"&gt;&amp;quot;HillClimber.fs&amp;quot;&lt;/span&gt;&lt;br&gt; &lt;span style="color:#0000ff;"&gt;open&lt;/span&gt; HillClimber&lt;br&gt; &lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; composer last next = &lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; (last x) + (next x)&lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; applier set transform = transform set;&lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; fitness x = abs( x ) - (x ** 2.0)&lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; transforms = [&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; x + 1.0; &lt;br&gt;                   &lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; x - 1.0;&lt;br&gt;                   &lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; x + 0.1;&lt;br&gt;                   &lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; x - 0.1;&lt;br&gt;                   &lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; x + 0.01;&lt;br&gt;                   &lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; x - 0.01]&lt;br&gt; &lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; climber = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; HillClimber&amp;lt;float,float&lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt;float&amp;gt;(composer, applier, fitness, transforms)&lt;br&gt; &lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; initialValue = 0.0&lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; (score, transform) = climber.FindMaxima initialValue (&lt;span style="color:#0000ff;"&gt;fun&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;-&amp;gt;&lt;/span&gt; x)&lt;br&gt; &lt;span style="color:#0000ff;"&gt;let&lt;/span&gt; result = transform initialValue&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;…Highlight, Alt-Enter…&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9958300b-3635-4e41-a08d-5815b603e9a8" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"&gt;val composer : (&amp;#39;a -&amp;gt; float) -&amp;gt; (&amp;#39;a -&amp;gt; float) -&amp;gt; &amp;#39;a -&amp;gt; float&lt;br&gt; val applier : &amp;#39;a -&amp;gt; (&amp;#39;a -&amp;gt; &amp;#39;b) -&amp;gt; &amp;#39;b&lt;br&gt; val fitness : float -&amp;gt; float&lt;br&gt; val transforms : (float -&amp;gt; float) list =&lt;br&gt;   [&amp;lt;fun:transforms@10&amp;gt;; &amp;lt;fun:transforms@11-1&amp;gt;; &amp;lt;fun:transforms@12-2&amp;gt;;&lt;br&gt;    &amp;lt;fun:transforms@13-3&amp;gt;; &amp;lt;fun:transforms@14-4&amp;gt;; &amp;lt;fun:transforms@15-5&amp;gt;]&lt;br&gt; val climber : HillClimber.HillClimber&amp;lt;float,(float -&amp;gt; float)&amp;gt;&lt;br&gt; val initialValue : float = 0.0&lt;br&gt; val transform : (float -&amp;gt; float)&lt;br&gt; val score : float = 0.25&lt;br&gt; val result : float = -0.5&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Looks good!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Well, it looks like that took a bit longer than I had anticipated.&amp;#160; I’ll be back with my weekly update tomorrow.&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/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx&amp;amp;;subject=Steepest+Ascent+Hill+Climbing+in+C%23+and+F%23" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/28/steepest-ascent-hill-climbing-in-c-and-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/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx&amp;amp;;title=Steepest+Ascent+Hill+Climbing+in+C%23+and+F%23" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/28/steepest-ascent-hill-climbing-in-c-and-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/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/28/steepest-ascent-hill-climbing-in-c-and-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/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx&amp;amp;title=Steepest+Ascent+Hill+Climbing+in+C%23+and+F%23" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/28/steepest-ascent-hill-climbing-in-c-and-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/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx&amp;amp;;title=Steepest+Ascent+Hill+Climbing+in+C%23+and+F%23" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/28/steepest-ascent-hill-climbing-in-c-and-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/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx&amp;amp;;title=Steepest+Ascent+Hill+Climbing+in+C%23+and+F%23&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/12/28/steepest-ascent-hill-climbing-in-c-and-f.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19946" 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/fsharp/default.aspx">fsharp</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/functional+programming/default.aspx">functional programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/function+composition/default.aspx">function composition</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional+architecture/default.aspx">functional architecture</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Hill+Climbing/default.aspx">Hill Climbing</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/higher-order+functions/default.aspx">higher-order functions</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/AI/default.aspx">AI</category></item><item><title>Discoveries This Week 02/06/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/06/discoveries-this-week-02-06-2009.aspx</link><pubDate>Fri, 06 Feb 2009 16:24:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17428</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17428.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17428</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17428</wfw:comment><description>&lt;p&gt;Some interesting gems this week.&amp;nbsp; Revit, Closures and MathTools won the day.&amp;nbsp; However, I do hope you'll take a look at the IL post as well. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Blog – &lt;a href="http://thebuildingcoder.typepad.com/blog/2009/01/use-f-directly-in-revit.html"&gt;Jeremy Tammik’s Use F# Directly in Revit&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In Jeremy’s post he discusses what is initially necessary to get F# and Revit working together.&amp;nbsp; He also provides a sample of a Revit addin written in F#.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=8479974"&gt;Revit&lt;/a&gt; is Autodesk’s architecture and design studio.&amp;nbsp; It allows physical engineers to coordinate and play with, design and visualize data while integrating directly with AutoCad.&amp;nbsp; It also provides &lt;a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=2484975"&gt;a .NET 2.0 API&lt;/a&gt;.&amp;nbsp; Given F#’s support for units as well as it’s concise and mathy style, it makes sense that it would be an ideal language for engineers.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Site - &lt;a href="http://en.wikibooks.org/wiki/F_Sharp_Programming"&gt;WikiBooks FSharp Programming&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Before I stumbled upon this site, I had never head of of WikiBooks.&amp;nbsp; That’s why I was incredibly surprised to find that it has the best online general F# reference around.&amp;nbsp; It has extensive sections on functional, immutable and imperative programming with rich examples and references to the math behind the ideas presented.&amp;nbsp; It’s a great site to have at hand for both those learning about the language and those experienced but still needing to occasionally look something small up.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;StackOverflow -&amp;nbsp; &lt;a href="http://stackoverflow.com/questions/12924/f-closure"&gt;A practical example of a closure in F#&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Learning how to program functionally is much more than just learning some&amp;nbsp; new ideas and a new syntax.&amp;nbsp; It comes along with a ton of new jargon, some of which can be quite foreign sounding.&amp;nbsp; I find that it often turns out that the jargon actually represents a very simple idea and that becomes immediately obvious when discussed with a simple example. &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Software – &lt;a href="http://www.codeplex.com/fsmathtools"&gt;FSharp.MathTools&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;As you might have suspected by its name, MathTools is an extensive set of mathematics libraries for F#.&amp;nbsp; It provides, among other things, statistical functions, fast fourier transforms, optimization algorithms, &lt;a href="http://www.mathworks.com/"&gt;Matlab&lt;/a&gt; compatibility and extended mathematical notation.&amp;nbsp; With a little development this combined with &lt;a href="http://www.codeplex.com/vslab"&gt;VSLab&lt;/a&gt; could provide a viable alternative to tools like Matlab while still allowing for collaboration with colleagues.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Article – &lt;a href="http://www.codeproject.com/KB/msil/ilassembly.aspx"&gt;Introduction to IL Assembly Language&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;It’s the responsibility of any serious programmer to know how how his or her tools work all the way down the chain.&amp;nbsp; In this relatively short article (given the topic) everything you would need to write a .NET compiler is distilled.&amp;nbsp; It’s the best reference of it’s kind I’ve seen. &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/02/06/discoveries-this-week-02-06-2009.aspx&amp;amp;;subject=Discoveries+This+Week+02%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/06/discoveries-this-week-02-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/02/06/discoveries-this-week-02-06-2009.aspx&amp;amp;;title=Discoveries+This+Week+02%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/06/discoveries-this-week-02-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/02/06/discoveries-this-week-02-06-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/06/discoveries-this-week-02-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/02/06/discoveries-this-week-02-06-2009.aspx&amp;amp;title=Discoveries+This+Week+02%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/06/discoveries-this-week-02-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/02/06/discoveries-this-week-02-06-2009.aspx&amp;amp;;title=Discoveries+This+Week+02%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/06/discoveries-this-week-02-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/02/06/discoveries-this-week-02-06-2009.aspx&amp;amp;;title=Discoveries+This+Week+02%2f06%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/06/discoveries-this-week-02-06-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17428" 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/IL/default.aspx">IL</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/.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/VSLab/default.aspx">VSLab</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/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/AutoCad/default.aspx">AutoCad</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/jargon/default.aspx">jargon</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Revit/default.aspx">Revit</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/closure/default.aspx">closure</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/math/default.aspx">math</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/26/08</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/26/discoveries-this-week-12-26-08.aspx</link><pubDate>Fri, 26 Dec 2008 20:22:55 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:16993</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/16993.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=16993</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=16993</wfw:comment><description>&lt;p&gt;Being the holiday season, it’s been a bit of a slow week.&amp;#160; Still, I stumbled across some very good articles and sites I would like to share.&amp;#160; I also wanted to note that I will be tagging all of my “Discoveries This Week” posts with the &lt;strong&gt;roundup&lt;/strong&gt; tag for easy filtering. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog: &lt;a href="http://stevesouders.com/"&gt;Steve Sounders’s&lt;/a&gt; &lt;a href="http://www.stevesouders.com/blog/2008/12/17/state-of-performance-2008/"&gt;State of Performance 2008&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In this blog Steve provides an excellent overview of developments in web browser performance over the last year and then ventures to predict what may be coming in 2009.&amp;#160; I’m not sure I agree with all of his predictions.&amp;#160; For example, Think “Web 2.0” would be heavily dependant on framework development.&amp;#160; However, I would agree that the next generation of web&amp;#160; pages will require fast Javascript engines and so there will be quite a lot of pressure for browser developers to keep up.&amp;#160; Surely this is what Google is betting on as Chrome is the leader in fast Javascript.&amp;#160; Still, until Chrome gets a real plugin interface and some skinning, it will never be able to eat into Firefox’s market share.&lt;/p&gt;  &lt;p&gt;The most interesting piece of information I gleaned from this article is that Google is going to be taking page loading time into account when determining the quality score used in Adwords.&amp;#160; I can only wonder how they plan on doing this in both an impartial and game resistant way.&amp;#160; Will a bigger data pipe or distributed servers mean cheaper Adwords?&amp;#160; Only time will tell.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Series: &lt;a href="http://www.linkedin.com/pub/6/215/25a"&gt;Steve Apiki’s&lt;/a&gt; Managing Multi-Core Projects Parts &lt;a href="http://www.ddj.com/212500765"&gt;1&lt;/a&gt;, &lt;a href="http://www.ddj.com/212500771"&gt;2&lt;/a&gt;, &lt;a href="http://www.ddj.com/212500790"&gt;3&lt;/a&gt;, &lt;a href="http://www.ddj.com/212500793"&gt;4&lt;/a&gt;, &lt;a href="http://www.ddj.com/212501030"&gt;5&lt;/a&gt;, and &lt;a href="http://www.ddj.com/212501035"&gt;6&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;This series covers the process of mutli-core enterprise development at many different levels.&amp;#160; Building a capable team, defining the development processes and architecture decisions are all discussed to some degree.&amp;#160; As these were posted in quick succession, I haven’t yet had the time to thoroughly read through any but the first in the series.&amp;#160; However, the first article was excellent and so I would expect that they all share the same high degree of quality.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Site: &lt;a href="http://calgo.acm.org/"&gt;Collected Algorithms&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;This site contains a huge number of different math algorithms taken from ACM-published computer science papers.&amp;#160; The archive ranges from papers submitted in 1960 to today and claims to only provide algorithms has the properties of “originality, accuracy, robustness, completeness, portability, and lasting value”.&amp;#160; References are also provided and so if you wish to understand see the algorithm in context, the option to go look up the corresponding paper is available to you.&amp;#160; While the &lt;a href="http://www.acm.org/publications/policies/softwarecrnotice"&gt;license is noncommercial use only&lt;/a&gt;, ACM is open to relicensing and so it may be still worth taking a look if you have a particularly difficult problem that needs solving. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Software: &lt;a href="http://www.debuginspector.com/index.htm"&gt;Debug Inspector&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Debug Inspector is a free addin for both Visual Studio 2005 and 2008 which provides a set of tools to help with mutli-threaded debugging.&amp;#160; This includes (but is not limited to) browsing the callstack of multiple threads at the same time,&amp;#160; automatic deadlock detection and .NET integration.&amp;#160; If I had this back when I was working on parallelizing our image commands it would have saved me a great deal of time.&amp;#160; I haven’t had a good chance to put it through it’s paces yet but the &lt;a href="http://www.visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=f52d4c99-a49f-4d5e-9251-97669a15038d&amp;amp;tab=review"&gt;reviews have all been fantastic&lt;/a&gt;.&amp;#160; I suggest checking it out if it suits your needs.&amp;#160; A small walkthrough is &lt;a href="http://www.dev102.com/2008/12/22/free-tool-for-managed-and-unmanaged-deadlock-detection/"&gt;available here&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/2008/12/26/discoveries-this-week-12-26-08.aspx&amp;amp;;subject=Discoveries+This+Week+12%2f26%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/26/discoveries-this-week-12-26-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/26/discoveries-this-week-12-26-08.aspx&amp;amp;;title=Discoveries+This+Week+12%2f26%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/26/discoveries-this-week-12-26-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/26/discoveries-this-week-12-26-08.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/26/discoveries-this-week-12-26-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/26/discoveries-this-week-12-26-08.aspx&amp;amp;title=Discoveries+This+Week+12%2f26%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/26/discoveries-this-week-12-26-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/26/discoveries-this-week-12-26-08.aspx&amp;amp;;title=Discoveries+This+Week+12%2f26%2f08" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/26/discoveries-this-week-12-26-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/26/discoveries-this-week-12-26-08.aspx&amp;amp;;title=Discoveries+This+Week+12%2f26%2f08&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2008/12/26/discoveries-this-week-12-26-08.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=16993" 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/Debugger/default.aspx">Debugger</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/javascript/default.aspx">javascript</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/multicore/default.aspx">multicore</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/web/default.aspx">web</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/debugging/default.aspx">debugging</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/algorithms/default.aspx">algorithms</category></item></channel></rss>