nav-left cat-right
cat-right

First impessions of mono

I've never really been much of an open source guy, but damn if I'm not ecstatic about mono. I've been following the project for a while and loved the concept, so when it came time to re-write this web project I'm working on (originally written in PHP) I though it's the perfect opportunity. Right now we've got mono 1.2.6 running on an ancient machine with CentOS 4.4, and mono itself seems great.

However, the growing pains have been a bit tougher than I expected. Not that I thought it would be as simple as compile-upload-browse right off the bat, but it did take a few hours to iron everything out, even with some relatively basic pages. For one, the generation of strongly typed datasets using XSD.exe under mono apparently just doesn't work. It took a while to realize that no amount of coercing the utility was going to give the same output as XSD.exe under Windows, so this forces an extra step if you're developing cross-platform. You have to manually generate your datasets and transfer them over as a .dll instead of relying on auto-compilation of your App_Code XSD file.

On top of that, I actually discovered my first mono bug. Say you've got a couple of ObjectDataSources on the page. Under Windows.Net, it's cool to have a DataList that uses one of them, and inside that DataList you nest a second DataList that references the second ObjectDataSource. Doesn't work in mono. I was able to work around it by using nested FormViews instead, but it puzzled me for a few minutes. Looking around at the mono svn changelogs, it looks like the FormView and DataList components handle the detection of the naming container differently. If I get a chance I'll put together a simple test project and submit it to the mono project. I actually have no idea which is the correct behaviour -- maybe it's a bug in Windows?

Regardless, I have a lot of confidence in mono. Partly because of projects like Plastic SCM, partly because I've heard other good stories about it, and partly because I just really want it to work for the sake of object oriented web programming. We'll see how the rest of the test site goes!

And coming up this week: our first PHP vs ASP.Net head to head! We test web server response times and some performance statistics…..

  • Digg
  • del.icio.us
  • DotNetKicks
  • Slashdot
  • StumbleUpon

3 Responses to “First impessions of mono”

  1. blake says:

    Say, I really think the visibility of my parallel development needs improving, and sometimes I just feel that my team collaboration is sub-optimal due to unfriendly stone-age interface visualization. Do you know of any products I could use?

  2. blake says:

    Also, when you say 'a few hours', you're clearly not including the original set-up time in December when you tried to get your initial few pages running on an earlier version of mono. I clearly recall several evenings spent jabbing forks in my eyes while you tried to figure out which part of the Web.config file had to be removed next in order for mono to not choke. A lot of those problems were caused by the use of the Ajax toolkit in your Windows project, which was unsupported until the latest release of mono. That toolkit sure added a lot of fun junk to the project.

    Of course, it wasn't all from there. How about that great little issue where mono would use 10% of the cpu even though the web server was idle? Here's a hot tip for anyone installing mono: buried deep in the Mono FAQ is a note that you might need FAM or gamin installed. If you don't notice the part that says "You might need the -devel packets[sic] installed", you're in for a lot of time-wasting. If you run into this 10% cpu usage issue, do yourself a favour and install the gamin AND gamin-devel packages.

  3. morgan says:

    I think Plastic has the features you're looking for there. Apparently it's 2001 in their marketing department.

    Yeah I purposely left out the fun times with 1.2.5. That was mostly a desire to see how easy it was to "downgrade" an "ajaxified" web.config, and to see how mono would handle it (not well). Having just come off a 6-month project utilizing all kinds of ajax, it was my brilliant idea to see how much of it would translate over to mono. Turns out I just had to wait for 1.2.6.

    As for the timer thing…. it probably deserves it's own post.

Leave a Reply