January 08, 2009

F# programming contest

Firstly, I'd like to wish you all a very Happy New Year! I've just taken three consecutive weeks of vacation for the first time in years, and it's done me the world of good. In fact I'm also on holiday this week but am easing back into the rhythm of things, and have decided to get back into the blogging saddle, while I'm at it. Thanks for your patience during the interruption in service. :-)

So to start 2009 with a bang (or a pop, at least) I'm going to run a programming contest. The basic idea is to generate some cool examples of using functional programming (more specifically F#) with design applications (more specifically those developed by Autodesk :-). See below for some ideas on what areas people might be interested in looking into.

Up for grabs are three copies of Don Syme's book, Expert F#, which have been kindly donated by Apress, its publisher. I've mentioned this excellent book in the past, when I introduced my interview with Don (the interview itself is here). With any luck I'll find a way to get Don to sign the books before sending them to the lucky winners.

So, now for some ground-rules...

To enter the contest you need to email me a source project which uses F# for a particular task within one or more of Autodesk's products.

The project should be accompanied with a description of what it does and how to use it. Please provide sample models, if they're needed to make the code work.

I do need to see the full source, as I can't assess the quality of the code otherwise.

There's no limit on the size, as long as I can get the code to work easily.

F# code has the potential to be extremely succinct, so please don't assume that bigger means better. Code will be assessed for its elegance as well as what it does.

The code submitted must be considered non-confidential and license-free.

Which means it can be published (with appropriate credit) via this blog and potentially used by people in commercial applications.

I will act as the sole judge, although I may include other people if assessing the use of APIs with which I'm unfamiliar. The judge's decision is final.

I can feel the power coursing through my fingertips as I write this... :-)

Each of the best three entries will win a copy of "Expert F#".

Absolutely anyone can enter, including Autodesk employees, their family members and pets.

I'll be publishing the winners' names and probably some information provided by them, so please don't expect to remain completely anonymous if you enter the competition.

The closing date for the contest is February 28th, 2009.

Here are some thoughts on areas that might prove interesting...

Data-centric problems

Functional programming is very good at managing (parsing, analysing, even creating) large sets of data. One previous, simple example was to gather and sort all the words found in an AutoCAD drawing. Here's the original post showing this, but an update was provided in my F# AUhandouts.

Control flow-centric problems

If you have tasks that can easily be parallelized - in that they can safely be run asynchronously and/or concurrently - then functional programming provides a clean way to capture and execute the logic behind them. An example being a simple application that went away and queried RSS feeds asynchronously, using the results to generate AutoCAD entities. Here are the originalposts showing this, but an update was provided in my F# AUhandouts.

Domain Specific Languages (DSLs)

Implementing new, custom-purpose programming languages can be an efficient way to control the subset of language features used by a non-programmers to implement code. An example of this was the 3D LOGO implementation inside AutoCAD.

Units of measure

One F# language feature that I also see as being very relevant to our domain is the unitsofmeasure implementation. I haven't yet worked with this, myself, but I have certainly been meaning to.

I think that's everything... if I've missed something or you need clarification, please email me or post a comment and I'll respond. Hopefully some of you find this a fun challenge for the (often quite gloomy) start of the year.