Archive for February, 2009

Gnome-Mud 0.11.2 in the Wild

Friday, February 27th, 2009

Well a scant 11 days have passed since the release of Gnome-Mud 0.11.1 so this is some kind of record for the project.   This release focuses on stability and code quality.  You’ll find  this release of GnomeMud to be very stable and we plugged many memory leaks so it runs leaner than ever as well.  The big fix for this release will be our handling of locale’s and character sets which will now work properly in any combination of user and server locale.

Also, if you found MCCP support to be a bit slow in 0.11.1 we made a key optimization in our decompression routine which speeds it up quite a bit.

Basically this is a solid point release.  It fixes alot of bugs and gets the project set to start looking at 0.12.  If something big comes up we’ll look into rolling out a 0.11.3 release but the plan now is 0.12 ahoy!

To see the full list of changes visit our wiki page and download the new release and check it out!

Why Vala is the Answer to Life, the Universe, and Everything

Monday, February 23rd, 2009

I have Vala’s number and I can safely report it is 42.  I’m hardly the first person to notice that Vala rocks but in one area in particular it is so fantastic, so groundbreaking, so amazing I am compelled to write about it.

It is no secret that GObject brings many benefits to the table.  It adds a full C ABI compatible object system to C, no mean task.  It has powerful support for signals built into it’s very core and supports much of the OO functionality one is likely to need.  Because of it’s OO nature and compatability there are many powerful library bindings available which is one of the major strengths of the GNOME platform.

No one ever said GObject was fun to use though.

In fact GObject has a pretty rough reputation especially if you aren’t using those aforementioned powerful library bindings which hide all the ugliness.  This, of course, really isn’t GObject’s fault.  It is not an extension to a C compiler, it is not a preprocessor, it is simply a library and so it can’t add any syntax to facilitate all this.

Ever wonder why some GObject based libraries use lots of access methods and not GObject properties?  Properties are a pain!  You need to create all the properties using GParamSpec, then you have to install them during class initilization.  Don’t forget you have to override the base Gobject get/set methods and provide your own methods to actually set and get these things.  Whenever you want to add a new property you have to touch the code in at least 4 places.  And don’t get me started on creating your own signals.  Signals are much the same but if you want your signal to return a value or take more than a single parameter its time to start generating your marshallers (if you ever wondered what glib-genmarshal does, start creating signals and you’ll find out soon!).

None of this is very hard.  It’s just tedious boilerplate.  Vala makes this all go away.

Vala is amazing because it allows people to easily and quickly utilize the full power of GObject and since your Vala code compiles down to GObject/C anyway you keep all of the compatibility that GObject provides.    Ever wonder what lots and lots of properties definitions would look like in GObject?  Well here is a bit of a Vala class I have:

    public bool HasSheet { public get; private set; }
    public bool Visible { public get; public set; }
    public bool Animated { public get; private set; }
    public float Alpha { public get; public set; }
    public float Rotate { public get; public set; }
    public float Scale { public get; public set; }

    <snip>

And here is a snippet of the generated GObject/C (just the installation!)

g_object_class_install_property (G_OBJECT_CLASS (klass), SPRITE_HAS_SHEET,
g_param_spec_boolean ("HasSheet", "HasSheet", "HasSheet", FALSE,
G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | 
G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property (G_OBJECT_CLASS (klass), SPRITE_VISIBLE,
g_param_spec_boolean ("Visible", "Visible", "Visible", FALSE,
G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB
| G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property (G_OBJECT_CLASS (klass), SPRITE_ANIMATED,
g_param_spec_boolean ("Animated", "Animated", "Animated", FALSE,
G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB
| G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property (G_OBJECT_CLASS (klass), SPRITE_ALPHA,
g_param_spec_float ("Alpha", "Alpha", "Alpha", -G_MAXFLOAT, G_MAXFLOAT, 0.0F,
G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB
| G_PARAM_READABLE | G_PARAM_WRITABLE));

<snip>

Vala provides alot more than simply acting as a shorthand for GObject but for someone like me who has traditionally eschewed the language bindings and developed in GObject/C it is mana from heaven.

Gnome-Mud 0.11.1 Released

Sunday, February 15th, 2009

We just pushed out the first point release in the 0.11 branch of GnomeMud.  I really recommend all gnome-mud users to update to this point release as soon as possible.  We fixed a bug that completely broke our telnet parsing.  So the good news, it’s fixed and our telnet implementation is rock solid now.

Here’s some of the things you can expect in this release:

  • MCCPv2 support.  MCCP stands for Mud Client Compression Protocol and is used by many muds to lower the bandwidth needed to run a mud.  This will be transparent for endusers but you’ll be able to feel good knowing you’re saving your favorite mud a bit of money.
  • The new iconview-based connection manager.  This replaces the horrid old system with something much more elegant and easy to use.
  • Cleaned up UI.  Our dialogs no longer look so ugly!
  • Lots of bug fixes. You should find gnome-mud works better than ever (with much fewer crashes!)

If you’d like to know more visit our wiki page or download the newest release and check out the NEWS yourself!