Mono bugs fixed; Spring.Net support coming soon!

I’ve managed to get all my Mono patches committed in time for 2.0 which be released very soon. Bugs I’ve fixed are:

#325128 ConfigurationSection.GetRuntimeObject
#395209 Fix incompatibility in the HierarchicaDataBoundControl
#397612 Mutually exclusive behaviour between Mono and MS.NET for xs:import

As well as a couple of other fixes I didn’t create bugzilla bugs for:
The TypeDescriptor bug which I blogged about a while ago, and another XmlSchema bug where Uri.OriginalString wasn’t being returned in the correct case.

Hopefully with these Mono bugs fixed in the latest release the major barriers to getting Spring.Net support finished and committed in will be removed. I’m in the process of working through my patch with Mark Pollack, so all going well we may see some Mono support in the next Spring.Net release.

Patching Mono

I submitted a fix for bug #325128 last night which was the last of the four patches needed get Spring.Net working on the Mono runtime. So far I’ve submitted patches for:

  • TypeDescriptor
  • XmlSchema
  • HierarchicalDataBoundControl
  • ConigurationSection

So far only the TypeDescriptor patch has been accepted and committed to the repository, but hopefully the other three won’t be far behind. It’s quite important to us that these patches make it into the 2.0 release so we can just use the official builds rather than having to build from source ourselves.

Hello world!

Well it’s been an age since my last post and I thought it was about time I got back to blogging.

The Saturday before last was the scariest day of my life as Anthea was hit by a car while out running. She is fine now, and was incredibly lucky to escape with only a serious concussion and bruising. Three days in hospital did nothing for my nerves however and needless to say I will be running with her from now on!

In more geek related news I have put the vision project on hold for a bit. I just found it had got to a point where I wasn’t really enjoying it anymore. I think a bit of time out and I will be in a much better frame of mind to tackle it again. Instead I have started hacking on f-spot. For those not in the know it is a wicked photo management application for the Gnome desktop written in C#/Gtk# and running on the mono framework. I have already submitted three small patches which have all been committed to CVS and am currently hacking on my first major piece of work implementing a “compare view” where the user can compare two or more photos. This is useful if you take a bunch of photos in burst mode, or perhaps a series of bracketed shots. I am hoping to be come a regular contributor to this project as I think it is one of the projects that will add real value to the Gnome desktop and Linux in general.

A screen shot for your viewing pleasure

Tonight I managed to get a clunky little UI working. It took a bit of work as it calls out to a C library I wrote via interop. The UI was designed using Glade and uses the Gtk widget set. It’s so easy to build decent GUI applications using the Glade/Gtk/mono combination in no time at all. If I had a choice I would love to develop in Gtk instead of winforms in professional life too!

So, here’s the screen shot:

The text you can see next to the buttons is the Fundamental matrix calculated for the chess board points found in the stereo image pair. The UI needs a bunch more work, but it’s really only a test harness and a debugging tool for me while I get the application working properly. Once the system is put on a real mobile platform it won’t have any GUI interface.

The next step is to test if the epipolar constraints I was talking about in my last post actually improved the accuracy of the matching process.

Anthea and I are off to Germany tomorrow to visit some friends and see some Christmas markets. Should be a great time and hopefully I might find some good photo opportunities too.

Mono and Monodevelop – state of the nation

I installed the new builds of mono and monodevelop last week and having used them a little over the last couple of days I can say they are pretty neat so far.

I haven’t used any of the new features in mono (since 1.1.4) but it does seem to be a little faster, and also fixed a nagging problem I had where everytime I rebooted my machine I had to delete my ~/.wapi directory before I could build/run any mono application.

Monodevelop is looking a little more polished since the 5.1 release. It also runs on 64bit native mono at last which I am totally stoked about! I also installed a (experimental) plugin for svn integration that had been posted to the monodevelop mailing list and this looks promising, although the history functionality crashes monodevelop on my machine (I suspect this may be to do with the version of svnlib I have installed). My only complaints at the moment are that it is a little unstable and seems to crash unexpectly (I’m planning to figure this out and submit a bug report at some stage), and the lack of C# 2.0 syntax support. I am using generics pretty heavily in my current project and including this syntax totally breaks code completion.

Monodevelop is a pretty promising IDE and a great project which I would love to contribute to, if only I had a little more time!

In slightly unrelated geekage, I finally got round to setting up some samba shares on my home network last weekend. So now my house mates can all stream mp3s, video etc from my machine via the wifi network. It’s pretty cool having Linux, Mac and Windows machines all interoperating nicely togeather!

P/Invoke fun

So on the weekend I was trying to work on the next step in my vision project (really must get around to putting up a web page about it) and struck a wee problem with P/Invoke and marshalling using Mono on linux.

Actually it was two wee problems.

I was getting a run time exception saying that Mono couldn’t find the library I was trying to use via DllImport. I thought this was strange because the library was definitely in my ld.so.cache and I was pretty sure I had my C# code correct.

I decided to try a different approach and use an example I knew should work to test if it was in fact my code/c library combination that was causing it to fail, or if it was a problem with my Mono environment. So I tried the ncurses example from Mono: A Developer’s Notebook (excellent book by the way) and what do you know? It didn’t work 😦

Well, after a bunch of emails traded with some very helpful guys on the Mono-List I was getting close to working out the problem. After turning on logging and info using the MONO_INFO and MONO_LOG enviroment settings (see “man mono” for more details) I was able to see that Mono was infact finding the assembly but not loading it for some reason. Another guy suggested it might be something to do with gmodule. Well, I’d had some problems with a few other apps after I had changed to gcc 3.4.3 from gcc 3.3.4 recently so I switched back to gcc 3.3.4 recompiled gmodule and hey! it works…. kinda

So, now the ncurses example was working but I still couldn’t use P/Invoke with my target C library (the opencv library). Another helpful soul had suggested that if I use ldd to examine libopencv.so I would see that there was no reference to libstdc++ which was causing my problem. This was indeed the case, and after hacking a few linker steps in the opencv makefiles I was happily creating CvImage objects and loading highgui windows from my C# app!

Ahhhh… I just love it when I learn something new, and this time round I learnt a whole lot!

Life on the bleeding edge…

It’s never easy thats for sure. I made the fateful decision the other day to upgrade my Mono installation. Why you say? Well I was seduced by the new language features, partial types, etc so I took the plunge and checked out the latest version from SVN.

Well, that went ok (surprisingly) and I now have Mono-1.1.2.99 installed on my machine. Unfortunately when I started Monodevelop things started to go distinctly astray :-/

I checked the latest version of Monodevelop out from SVN and after quite a few headaches (upgrading to gtk-sharp-2.0, trying to persuade gecko-sharp to compile against gtk-sharp-2.0… the list goes on!) I managed to get it to build, install and run!

Of course as soon as I opened a c# file it crashed… sigh.

Mono is cool!

I recently built myself a new computer, and this thing is a beast. AMD Athlon64 3400+, 1Gb RAM, a bit over half a terabyte of SATA disk, Nvidia FX5900 with 128Mb VRAM, and other assorted goodies 😉

I am runnng 64 bit Gentoo on this machine, and it is blisteringly quick!

So over the last week or so I finally got some time to get Mono running. It was a bit of a challenge as the 64bit port of mono is fairly fresh (read need to get from CVS). I have however managed to get it build and installed and was able to test it by building a simple little hello world type console app.

The cool thing about using the 1.1.1 version from CVS is that it includes gcms, which is the new mono compiler for generics. So, I have had a quick play with generics with mono and I like!

So if you have a .NET runtime, what is the next thing your going to want? Yep, an IDE. I checked out a plugin for eclipse (which I use for my C/C++ coding) however all it really gave you was syntax formating. Coming from VS.NET I am a little spoiled and I really wanted tab completion. So I looked into monodevelop. Getting monodevelop to compile took a few goes getting the dependancies etc satisfied, however a day or so ago I managed to get it running and bliss! I now have code completion for 64 bit .NET (with generics support) all on my linux machine.

I am a happy camper.