Thursday, July 18, 2002


First Monday: After the Dot-Bomb. Described below are some "pet peeves," some problem areas identified in the design of Web information retrieval to date. These problems are accompanied by suggested solutions, or, at least, directions to go in to develop solutions for the next round of Web information retrieval development. [Tomalak's Realm]
6:51:08 PM    trackback []     Articulate [] 

Productivity and Functional Programming.

I just started using NUnit (prompted by a recommendation from Tristan at least a year ago).  NUnit is a framework for writing and running test cases during development.  At Microsoft, like most other places writing software, developers create and run their own "unit tests" (or sometimes called DRT, or "developer-run tests" internally) at the same time as developing the code.  When each dev checks in her code, she runs her own DRTs.  Then when the daily builds happen, there is another set of tests which are run to make sure that people didn't break each other (called BVTs, or "build verification tests").  And of course a whole series of tests beyond that which are done by the testing team.  I'm not aware of anyone internally using NUnit for DRTs, but that's probably because we have a huge infrastructure of tools already in place for testing.  I really like NUnit for the sort of things I do, though.  NUnit started as a port of the Java-based framework called JUnit, but takes advantage of Reflection and other nice .NET features to make it really simple to integrate testing with the IDE projects.  It's basically just a test driver, though.  The code-covergage extensions that were available for JUnit don't seem to have been ported.  Also nice is FXCop.

I have also been playing recently with functional programming.  There are a number of functional programming devotees inside of Microsoft, but the buzz is spreading to the pragmatists I think.  In "Why Functional Programming Matters", John Hughes positioned functional programming as an ideal "glue" for tying software components together.  Mondrian was the first programming language I saw which was designed to be a functional "glue" with .NET components in mind.  Since .NET componenets can be written in many different languages, and since CLR expressly tries to eliminate the hard work of cross-language calling it would seem that the ecosystem of reusable software components will flourish, and programmers can now focus on functional glue rather than tedious implementation details like marshalling and IDL.  Of course, no sane development shop would use multiple languages gratuitously in a project, but the point of CLR is to free the shops from having to use the same language that their component library vendors use, etc.

Mondrian is a very simple language, and the one (of the "functional" languages on .NET) I have used most frequently.  It is based on Haskell (I think).  Mondrian mixes some imperative concepts with functional, similar to F#.  F# is basically a port of Caml to .NET.  On the other hand, SML.NET was just recently released, and is pure, unpolluted, functional (it implements Standard ML).  I feel that SML.NET is more complex the Mondrian, but I am planning to use it for awhile and decide then.

All of these implementations of functional programming languages ran into similar issues with the CLR.  One of the most important is that functional languages depend on polymorphic functions.  Based in large part on feedback from the functional implementations, the CLR team has started implementing "generics" as part of the runtime.  Another challenge comes from integrating functional programming with object oriented software components without sacrificing the purity of the functional language.  Mondrian and F# decided to go ahead and pollute the language a bit to permit eaier reuse of other people's components.  Personally, I think that such hybrid languages will be the only way to be successful in providing functional "glue", but maybe I'll change my opinion after playing more with SML.NET.  Also, it seems like polymorphic functions are a primary reason that John Hughes was recommending functional programming be used as glue.  Therefore, when the CLR supports generics (and a few other cool enhancements that are planned), the normal .NET languages will be able to behave in a more "functional" manner, and I think the appeal of distinct functional languages as glue (the main reason for the buzz right now, IMO) will be less.

[Better Living Through Software]
6:50:32 PM    trackback []     Articulate [] 

Misrepresenting JUnit.

Carnage4Life pointed out to me that I was misrepresenting JUnit yesterday.  I didn't realize that you could enumerate method names in Java reflection, but apparently you can, and JUnit uses this functionality at least as well as NUnit.  So if you were reading yesterday's post and thinking "is he smoking crack?", the answer is "none of your business", but yes I was wrong about JUnit.

Now I will happily offer my personal opinions about the FSF kooks who crashed a recent Commerce Department panel meeting.  First, those kooks don't represent me, nor do they represent a majority of software developers, so I hope that the panel doesn't mistake them for being a "populist" voice.  Second, it is ironic how these people are attracted to the stink of politics and power like moths to the light.  As a contrast, Mono today is completely self-hosting on Linux.  What ever happened to DotGNU?  How about the megalomanic "Free Encyclopedia" or whatever they called it?  Why is nobody using hurd?  I can tell you the answer -- if they would sit down and start writing some code instead of running around trying to get close to press and politicians, they might actually get something done.  Or maybe they are just afraid to try writing code because they would have to admit they are really not capable.  No matter what the answer, it sure is ironic that these guys are so averse to competing through innovation, and instead gravitate toward political activism.

In any case, the sheer hypocrisy is par for the course for any despotic "revolutionaries".  Pol Pot told the Cambodians that he was on the side of the little guy, but instead of doing anything for the little guy, he spent all of his time attacking intellectuals and anyone else he regarded as a threat, and attempting to take over the control mechanisms of government.  This rant against the GPL sums it up nicely, quoting Brett Glass; "Meet the new boss -- same as the old boss."

[Better Living Through Software]
6:50:06 PM    trackback []     Articulate [] 

Manila vs Conversant: Website Mgmt or Groupware. Is Conversant the Same as Userland's Manila? By: Sean McMains on 3/14/2002; 12:17 PM Since both Manila and Conversant are built on Userland Frontier, and since they have some ov [Blunt Force Trauma]
12:32:07 PM    trackback []     Articulate [] 

Mark Hurst. Mark Hurst. "1. Identify users' goals on each page. 2. De-emphasize or remove any page elements (or areas of a site) that don't help to accomplish the goal. 3. Emphasize (or insert) those links, forms, or other elements that either take users closer to their goal, or finally accomplish it. " [Archipelago]
12:24:47 PM    trackback []     Articulate []