Today I signed a contract about renting a room in Karlsruhe. It is in Baumeisterstraße 8a, room number 35 and 19m² in size. The whole building is a kind of flat share, so I am going to share the kitchen, toilets and stuff with other students. The building itself is pretty old (with high rooms) that was restored last year and it is located near the center somewhere between the university and the station which fits quite well since these are the institutions I (currently) visit most in Karlsruhe. I am already going to move in in the first week of February. I hope that I gain some more time during the week as soon as I do not have to commute anymore from Offenburg to Karlsruhe every day. I will post some photos when I am there.
Today I got a GNOME developer account which I requested December 1st. I guess this took longer than usual, probably also due to the GNOME SVN migration which happend on December 29th. Also thanks to Murray Cumming who bugged them multiple times. This means I can directly check in stuff into GNOME SVN (which will mostly be related to Openismus). The first commit I did was adding libgnomedbmm to the gnomemm SVN module.
libgnomedbmm is a C++ wrapper for libgnomedb which I have been working on in the last weeks for Openismus. Wrapping the C API in a GObject-based project (like libgnomedb) is normally pretty easy because most code is auto-generated by gmmproc included in glibmm. However, this was the first time that libgnomedb (and the underlaying library that provides access to the database, libgda) have been seriously wrapped for a higher level language, so some things had (and have still) to be corrected in the C libraries to make them easily wrappable: Signals and Properties should be declared with the correct type, not just G_TYPE_POINTER if it is GObject-derived or a boxed type. Also, the _new-functions of each type should just be wrappers around g_object_new with some construction properties set. This also allows subclassing them (note that the subclass does not call your _new function) and subclassing is actually what the C++ wrapper does to allow overriding vfuncs and default signal handlers.
In other News, I also got a MSDNAA account today (which I requested two to three months ago). This allows me to get some Microsoft software for free (as in beer) via the university. What do I actually want with Microsoft software, I hear you ask. Currently, I use EverNote as a virtual notepad. Playing around with ink notes and my graphics tablet (a Wacom PenPartner2) makes fun and is nearly as productive as with a regular pen. There is a similar Application from Microsoft called OneNote which I would like to compare to EverNote. Actually, I would be happy to have a free Evernote-like application for linux, but that's another story. Using MSDNAA I am also able to make gobby binaries using Microsoft Visual Studio and compare the result (code size, performance) to what gcc produces. Finally, I can get a free look into Windows Vista as soon as it comes out (If I want to blame it, I should have had a look at it at least). And if it fixes some annoyances of XP, I could also keep it.
I used the weeks around the new year when there were no lectures to finish the new class generator for Anjuta. It is able to create boilerplate code for C++ and GObject classes. The challenge was to create a User Interface that makes the user not feel that it would be faster to write everything by hand and to get the GObject stuff right without querying too much redundant information.
These screenshots show the user interface. When typing into the class name entry, most other stuff is filled out automatically, so you can press directly "alt-A" to create the first class element. After having comitted an entry in the class element editor the next one is automatically selected for filling it out. To specify property or signal flags I wrote a new cell renderer (shown on the second screenshot) that works mostly like GtkCellRendererCombo but allows the user to specify multiple flags by pressing the space key on a highlighted item and pressing enter to close the popup. What the generator actually produces is the source file and the header file.
To get it, grab the latest Anjuta sources from GNOME SVN.