by Miguel de Icaza

Just got back to Boston from GUADEC. It was extremely fun and energizing, just like last years. It is a shame I had to leave early the conference.

And the Band Played On

This year, there was a cover band made up of GNOME hackers and they did a fantastic job keeping us entertained at the Maemo/Nokia party, congratulations to the Macaques!


As part of my upgrade to SLED 10, SUSE's new enterprise Linux desktop am finally a full-time Beagle user.

Finding your documents and discovering information you did not even remember you had, playing $HOME archaeology, has been a very pleasant experience.

Although Beagle is fantastic, it needs a little bit of tuning for my day to day use.

Am a heavy email user, I have seven gigabytes of email in my laptop, and Beagle has a bad habit of optimizing the Evolution index files every 10 minutes if something has changed. And the optimization process hammers my machine very, very hard, to the point of not letting me get work done for a few minutes.

I spoke to Joe, and he said "it happens about every 15 minutes or so", armed with this information I found the problem, the Beagle.Daemon.ScheduleOptimize routine has a 10 minute delay to run the query again.

I tried rebuilding my modified Beagle from CVS, but CVS has new dependencies that I lack, so I decompiled the BeagleDaemonLib.dll, like this:

$ export MONO_PATH=/usr/lib/beagle:/usr/lib/mono/gmime-sharp/
$ monodis /usr/lib/beagle/BeagleDaemonLib.dll >
$ vi
   # Replace the ldc.r8 10. in ScheduleOptimize
   # with ldc.r8 100. for a 100 minutes.
$ ilasm /dll
$ mv a.dll /usr/lib/beagle/BeagleDaemonLib.dll

This has brought up my machine back to usable for me.

There are a few other glitches here and there, but the Beagle team is aware of these. Beagle and Beagle-based applications have a lot of promise, I just hope that the core gets a few passes of love, improvements and small touch-ups before they jump on to new, innovative ideas.

Avalon, WPF and Michael Zucchi

Michael has started a blog about his experiences using Avalon/WPF on Windows. Michael was one of the main developers in Evolution while at Ximian and is now working in Australia hacking on WPF.

His comments on WPF are interesting. His regular blog has had some negative comments about it in the past and his new blog has some more.

I do not have as much experience as Michael has with Avalon/WPF, but I wrote about the complexity of the framework a few years ago (here and here).

Although Michael is not involved in Mono, I have added his blog to the Monologue blog aggregator as his comments are very interesting.


Lluis Sánchez demoed the new developments of MonoDevelop at the conference.

What was interesting about Lluis' presentation is that I did not know about half the features that MonoDevelop has. I was blown away. Specially, since am Lluis' manager and I read every status report, and try to read most of the MonoDevelop patches, but I did not know that MonoDevelop had all this magic behind it.

I knew we had Stetic integration in MonoDevelop, but the integration goes beyond generating the UI for applications. The Stetic/MonoDevelop integration uses the refactoring engine to add method handlers for signals (double-click on signal) and if you change the names of your widgets in the designer, the source code that references it is updated. It also has a number of nice touch-ups that went into SVN recently, like a context-sensitive toolbar which has the most common operations in a per-widget basis.

JPR raised some concerns, because this "smelled" similar to Glade's "Generate code" feature, but it is very different. The model that MonoDevelop uses for Stetic/C# integration is more similar to Glade and XML, it just happens to not use XML at runtime.

The MonoDevelop model is more or less like this, for each "UI" element (custom widget, dialogs or windows):

  • A MyGUI.cs contains all the event hooks, top-level class handler for the given UI component. This code contains a call to Stetic.Gui.Build (this, typeof(MyGUI)).
    This is the equivalent of loading your Glade file in the Glade world.
  • A gtk-gui/MyGUI.stetic contains the representation used by Stetic to manipulate the UI. This is not used at runtime, its only used by Stetic to load and save the UI.
  • During compilation the gtk-gui/MyGUI.stetic produces a gtk-gui/generated.cs file that contains the code to create all the GUI widgets and hook up all the events.

So you are free to add and remove as much code as you want to your MyGUI.cs file, that file is never touched by MonoDevelop.

He also demonstrated creating custom widgets, and how these could be kept on a separate library that MonoDevelop can load into the GUI designer, the steps are:

  • Add a "New Project" to your solution, select "Library".
  • In the library, select "Add New Widget", develop your new widget, debug it, test it. When you are ready.
  • On the main project (or every project that consumes your library), right click on "References". Select "Projects" and click on the Library you want to incorporate.
  • The new widget appears on the widget palette, you can now drag it and use it in your main application.

Finally, he demonstrated the "Deployment" feature, which produces an automake/autoconf setup and produces a tarball that is ready for redistribution. There is talk about doing a "deploy to RPM" and "deploy to DEB" functionality right into the IDE.

Posted on 30 Jun 2006