New blog

Hi folks, if your links are bringing you to this page, please update to use http://www.xoltar.org, where you can find the new format. Thanks!

Considering F#

Several years ago Don Syme did some work to create a .Net backend for the Glasgow Haskell Compiler, but it wasn't finished. I emailed him to ask when or if it would be finished, and he replied that he'd moved on to other things, but if I had an interest in functional languages for .Net, I should check out his new project, F#. I did check it out, and found it to be essentially OCaml ported to .Net, minus the most interesting bits (functors) and plus some reasonable integration with .Net objects. It still had the baroque syntax of OCaml, and seemed less powerful overall than OCaml. Oh well, I thought, I'll stick to C# until a real functional language arrives for .Net. That was then.

C# 3.0 came out, and it had enough functional programming features that I didn't feel hopelessly constrained anymore, so I stopped wishing for a functional language for .Net. However, a few days ago I happened to stumble onto a passing reference to "monads in F#," which piqued my interest enough to revisit the website, and what I saw there prompted me to buy a copy of Expert F#.

New functional language - C#

If you're not firmly embedded in the Microsoft world, it would be easy to miss some important developments in the past few years. In particular, many of the best minds in programming language design now work for Microsoft Research, and it's starting to show. Let's take a quick look at C# 3.0 (included in the .Net 3.5 SDK and Visual Studio 2008). This is a language that has rapidly evolved from being near-equivalent to Java, to being near-equivalent to an object-functional language I used to work with called Nice. It's got lexical scoping, a convenient syntax for anonymous functions, type inference, and so on. Read on for examples!

RESTful Web Services

I just finished RESTful Web Services, and I have to recommend it. It's a very clear explanation of what REST is, and how to think of your application in RESTful terms. Since REST was in my list of "gee, that might be important, but don't have time right now to track down all the implications from lots of different blogs with subtly different interpretations," I definitely appreciate the clarity of this book. It's given me ideas as well, always a good sign. One small problem was that there were a number of grammatical errors, the most distracting being the resolute avoidance of the subjunctive.

Spam

People are actually creating user accounts now just to post spam, so I've changed the settings. All posts now have to be approved by me before they show up on the front page. Sorry for the inconvenience. At some point when I have more time I'll try to get some kind of "prove you're not a bot" logic set up. I'll try to check daily for new posts in the meantime...

Type-level programming in Haskell

If you've ever wondered at some of the seemingly arcane things you can do with the Haskell type system, take a look at the latest copy of The Monad Reader. There's an article in there called Type Level Instant Insanity that's the clearest introduction I've seen yet to leveraging the Haskell type checker for compile-time programs. Excellent work.

Architects: If you can't code, don't apply for senior dev jobs

There seem to be several different understandings of the job title "Architect". The company I work for sees this as a position that involves coding, research, management of developers, and setting of technical direction. Others apparently treat this as a pure management or management/analyst title. Okay, fine, to each their own.

However, if you are a non-coding architect, please don't tell your recruiter you're interested in senior developer positions. We require all our developers to pass a written coding test, and several times now I've seen people give answers like "I've been working as a system architect for several years now and am not really a hands-on developer anymore". "Senior Developer" is clearly a coding position, so what good is a non-coding analyst/manager for this job?

Hiatus

Sorry for the long pause, things have been awfully busy lately. Unfortunately, I returned to find my comment approval queue bursting with spam, far too much to deal with manually. As a result, I've summarily deleted all pending comments and turned off anonymous commenting altogether. My apologies to any legitimate reader who is inconvenienced by this. Comments are still turned on for registered users.

Three cheers for Sandcastle Help File Builder

Sandcastle Help File Builder provides a GUI front end to the Microsoft Sandcastle documentation generator tool. As Scott Hanselman has reported, NDoc, the former de facto standard source code documentation generator for .Net has been defunct for some time. I finally downloaded Sandcastle, Microsoft's attempt to fill the void left by NDoc, today, and was not at all happy with the amount of time I spent tweaking the scripts, which involve running 10+ separate command line tools, all of whose command line parameters or other details have changed since the instructions were written.

Scripting FreeMind

FreeMind supports scripting in Groovy. It's cool, though definitely a new-new feature without much in the way of help. You'll need to download the FreeMind source to figure out what you can do, the example scripts on the wiki give a flavor but don't answer enough questions, and the javadocs on the site are for the old version, not for the current beta version.

Below is a script to total all the values in child nodes. For example if your nodes all have an attribute called "price", you simply install this script in an attribute called "script" on the root node (or any node for that matter), hit Alt-F8 to run the script, and if you've defined a "price-total" attribute on the node with the script, "price-total" will be filled in with the actual total of all the price attributes. This is my first real code in Groovy, so please pardon any gaffes. I defined a few helper functions, since the attributes API is a bit cranky to work with: