Older blog entries for CharlesGoodwin (starting at number 10)

There is hope! [1] [2]

We've made some real headway with Ibex over the last few days. Adam finally awoke from his slumber with a mass of patching ensuing. (He'll disappear for weeks but then code in a few days more than most developers could do in a month.)

Anyway, his patches introduced a few regressions which we (myself and Tupshin) quickly backed out [3]. I know there's a few undocumented bugs still with the core that I've encountered - documenting them was difficult until some of the existing bugs were fixed - but now most of the important bugs are fixed, I should be able to isolate them over the next few days.

[1] There's quite a lot of Ibex code (code running on Ibex) involved in those simple widgets, a lot of what we need to go onto create the more complex widgets. Stuff like org.ibex.theme.base.border-img or ibex.lib.selectable which will both be widely used.

(They're just plain text files so I don't know why Epiphany is being so anal about opening them up, especially when it displays .wmv files inline as garbled text. I hope stuff like that is fixed for GNOME 2.6 which I'm eager to switch to.)

[2] Check out the antialiased text. That's freetype compiled into mips and run using mips2java at runtime. That way we can make anything that can be compiled into mips code run over Ibex. Crazy stuff but very preferrable to having to rewrite Freetype in Java.

[3] Darcs rules. It's one of those relatively unknown gems out in the Free Software world. It certainly makes our development life a lot easier than CVS or any centralised server.

As HP writes: In other news, increasing dependencies on the proprietary JDK in OO.org, which forces the codebase shipped by Red Hat, Debian, and other companies who won't rely on a JDK license from Sun to diverge more and more from the mainline. Not to mention the StarOffice vs. OpenOffice.org delta.

If ever there was a case for needing GNOME Office, that is it. Otherwise most Distributions will be finding themselves dependent upon licenses from Sun. I think Ximian backed the wrong horse with OOo. I just hope I can help the GO team prove it.

Hacking on the Ibex widgets continues. Hopefully tonight the first few widgets will be complete. A few bugs in the core, however, will prevent us from releasing a demo. There's not much I can do about that, though, than wait on and nag the core developers.

I'm so tired right now. Still, I wasn't overly fond of HP's take on GNOME Office.

GNOME Office was not viable 2 years ago as anything other than a meta project. A lot of hard work by the AbiWord, Gnumeric, and GNOME-DB teams has changed that. Now a GNOME Office suite is a viable target, and the excellent work by the 3 member projects (member, not associated) at moving towards a shared architecture looks set to deliver that.

Jody is abstracting the plugin framework, among other things, out of Gnumeric into libgoffice which will provide an excellent starting point for decent integration between the suites.

And whilst there may be differences - such as the cross-platform implementation - between the projects, this is nothing that would be solved by a merger. No, what is needed is cooperation and collaboration. And Jody, Dom, Rodrigo, and the other involved talented developers have been working towards that for several months now.

Hell, we have developers from Inkscape, Conglomerate, Planner, and even GnuCash in on the discussions. There is even a rudimentry presentation app bundled with Inkscape called Inkview that may well develop further.

Now the opportunity is available to make GNOME Office a competetive suite. We now have viable, world class applications that can and are aligning their direction and goals.

I just dropped my car keys 3 times between getting out of the car and the 5 yards to my front door. Sleeping improperly really does affect motor control and I'm just glad the mistakes were that trivial and not occuring from behind the wheel. Must not drive tired.

Also I think I'm obsessive. I was pissed off that I didn't have any worthwhile email after my 4 and a bit hours of sleep.

Now it is a choice between going for a run and going back to bed. I should go for a run... but sleep is so nice.

Just saw MisterP's comments on BURT and emailed him about GnuCash which sounds like a closer match.

Speaking of GnuCash, the GNOME Office list has been alive this week with discussions on how GnuCash could use parts of GO and vice versa. It started off really well but the deteriorated a little as linas went off on a bit of a tangent, writing off the Gnome-DB project for use by GnuCash (or more specifically, QOF, a project spawned by GnuCash) by:

  1. Confusing the role of libgda ("my project is better than your project" - no, it's different)
  2. Judging libgda using 2-years-ago experiences of (what was then an immature) gnome-db instead of the current state of the project

All along Rodrigo (rodrigo) kept politely pointing out QOF might be able to use libgda rather than manually do all the datasource abstraction work itself. He did well to stay civil.

Anyway, it seems that the GnuCash/QOF guys are intent on doing everything the hard way. Which is amazing considering the barely-dated statements regarding the state of the GnuCash project. There's no indication that they will compromise or be pragmatic about anything. The GnuCash team have admirable goals for the project, but they're just so unrealistic for the short/medium term.

My opinion: AbiWord and Gnumeric (and even Gnome) have become great applications by setting realistic goals and achieving them relatively quickly. GnuCash has floundered by setting ludicrous targets, taking years to get there, and then wondering why the project is so far behind the rest of the field. But they'll tell you it's because of a lack of developers and manpower.

We're not going to see GnuCash2 this year which is a crying shame, especially when the developers claim that, "Our users are everything." The users want a Gnome2 port! Now! Not a robust, multi-user, server-client, swiss-army-knife, uber-majig.

I just dropped my car keys 3 times between getting out of the car and the 5 yards to my front door. Sleeping improperly really does affect motor control and I'm just glad the mistakes were that trivial and not occuring from behind the wheel. Must not drive tired.

Also I think I'm obsessive. I was pissed off that I didn't have any worthwhile email after my 4 and a bit hours of sleep.

Now it is a choice between going for a run and going back to bed. I should go for a run... but sleep is so nice.

Another eventful day.

Progress today was great on the Ibex widgets, as I narrowed down a number of issues and put together some templates that effectively implement margin/pad from CSS (good for HTML devs learning Ibex quickly) and worked out how to play correctly with resources.

An Ibex resource:

.org.ibex.theme.win2k.image.bevel2up.nn
(which happens to point to the north image of the bevel2up border)

Obviously the border template has to be much more generic, so the idea was to pass it a resource. In the end, this turned out to be fairly simple [1]:

.org.ibex.theme.win2k.image["bevel" + thickness + form]
(which is passed to the border template as the base for a border)

Border then takes over:

border ++= function(v) {
    // 'cos border also has to accept strings
    if (typeof(v) == "object") {
        $nw.fill = v["nw"];
        $nw.fill = v["nn"];
        $nw.fill = v["ne"];
        $nw.fill = v["ww"];
        $nw.fill = v["ee"];
        $nw.fill = v["sw"];
        $nw.fill = v["ss"];
        $nw.fill = v["se"];
    }

Anyway, once that was established, progress was quite rapid and I probably managed to get 3-400 loc done in a few hours despite the girlfriend [2].

Note: the ++= syntax is for registering traps, which are a powerful form of event notification used in Ibex (something I haven't come across elsewhere). The above code is a write trap which is fired when the border property is put to. A read trap (fired on a read) is done the same way except without the argument for the function, ie function() instead of function(v). And you can register and unregister as many traps as you like on any property, so you can create a powerful cascade of traps for handling complex behaviour through just a single property.

Anyway, gotta end the blog before it becomes a lecture on Ibex... I'm just enjoying it, lots. Why else would I be up at 4am when I'm gonna be dragged out of bed in 5 hours time? XAML ain't seen us coming (despite a Microsoft employee being subscribed to our dev list)! ;-)

[1] The string-based method for manipulated resources is resource["subresource"], which allows for some really clever tricks (a topic for another time!) although it can get verbose for manipulating several levels. That requires nesting the square brackets (.res["sub"]["sub2"]["sub3"]) instead of using a string version of the dot-syntax (".res.sub.sub2.sub3") as I had been trying to do.

[2] She wonders why I frequently stay up til 2am or 3am (or 4am as it is tonight) just to struggle to wake up at 9... it's when I get the most peace and quiet as she's sleeping but I can't tell her that as I don't like to be on the receiving end of pain. Best to fool her into believeing I'm a geek! ;-)

A productive day!

Not only did I get some decent exercise done (I'm almost able to do a decent run these days!) after letting myself go for the last 9 months (after a couple of good years of Thai boxing ever other day), but I also did some decent coding too!

Managed to establish that some bugs in the Ibex core were really just badly reported errors [1]. I'm spending a lot of time fighting my way around these kind of bugs in Ibex at the moment. It's making widget development both difficult and labourious. If only Adam would prioritise a bit better and get these things fixed. ;) Still, we have a nice set of bugs in bugzilla now waiting for maintainence!

People are going to be really surprised by Ibex when it's done. We'll be making releases over the next few months and I'm preparing some really comprehensive tutorials. It's exciting stuff.

My next problem is I have to pay the bills. Hmm... long term job or contract work. How on earth do you get contract work - by cold calling it seems. Not fun.

[1] A <ui:box redirect="target"> should be <ui:box redirect="$target"> - a one line 'target not found' error would suffice but a stack of exceptions just offered no clue. I fell for this because with Lithium (the previous version of XWT/Ibex) the syntax was $-less for redirects: <redirect target="target" />

3 Mar 2004 (updated 3 Mar 2004 at 23:49 UTC) »

Oh my God. I cannot believe this went out on TV to children... I used to watch that when I was a nipper...

In all seriousness, it's obviously edited. Even allowing for a time lapse between video and audio, some of the dialogue doesn't match the mouth motions in several scenes. Phew!

Edit: Just saw Alan's post on the GIMP, noting his comment that, "Much to my annoyance the GIMP makes little effort to clone the Adobe Photoshop user interface or any [other] well known interface".

To adapt a well known phrase, one man's annoyance is another man's joy. I dig the GIMP's interface which can be a joy to use with a decent WM. (Sadly Metacity lacks a few telling tools which may explain your frustration.) I absolutely abhorred the Photoshop interface after having not used it (in favour of el GIMP!) for a few years. I found editting multiple images at the same time in Photoshop 6 (not tried 7) to be very difficult and slow.

And v2 of the GIMP really is an incredibly nice tool to use in my very humble opinion.

I think ultimately it comes down to liking what you're familiar with. Something unfamiliar almost always feels unwieldy, especially when you're trying to accomplish a similar task for which you are already set in your ways with doing.

Just finished improving on that Abiword toc dialogue mockup (one, two, three) although there's still room for further improvement.

Although at the moment I'm suffering from an incredibly frustrating problem with Gecko-based browsers. If the focus is with the browser and I press a key, it crashes [1]. Strangely this problem is also affecting several Gnome games (not that I'm wasting time with them... I can't at the moment as they crash) and Gnome-panel. I've really no idea what's causing it and have been trying for days to fix it.

These are the times when setting uber-optimising compile-time flags [2] comes back to haunt you, as fomit-frame-pointer makes debugging practically impossible. Looks like an emerge -e world with fomit-frame-pointer unset is required - bye bye cpu for 2-3 days.

[1] Meaning I'm posting to advogato and any other web pages by copying/pasting from gedit using the mouse. It's either that or use Lynx.
[2] A side-effect of using Gentoo ;)

28 Feb 2004 (updated 28 Feb 2004 at 11:51 UTC) »

After seeing some dreadful suggestions [1] for the AbiWord Table of Contents dialogue [2], I used Glade to create a mockup that better represented the expectations of the average user.

Surprisingly (or unsurprisingly?) it wasn't well received.

"Not representing functionality..."

Some people have no imagination; what did he think the 'Custom Style' button was intended for? Since the advanced stuff had already been represented [1] I didn't think I needed to redo what had already been done.

Anyway, Dom pointed out that cascading dialogues are a no-go (and from a usability perspective I do agree, I wasn't really thinking clearly at 1am last night) so I'll redo the mockup with an 'advanced' tab instead and this time I'll make the damned advanced dialogue too.

I have to say, Glade was quite fun to use. It has a few annoyances [3] but I really don't see what the complaints are about. Then again, I come from a box-based layout background with my work on XWT so I quickly understood how the layout worked. It's only major shortcoming is the lack of undo/redo functionality - quite annoying when you accidentally delete a container when you meant to delete a widget.

[1] Like this and this - the thread contains more details

[2] Martin Sevior has done some wonderful stuff on adding TOC functionality to AbiWord; it updates live (no having 'update field' like in MS Word) among other nifty features

[3] The two thinks that irked me were 1) not initially showing the widget-view yet it is needed to display any existing windows when you open a project and 2) how do I get rid of the damned label on a checkbox - 'empty contents' just left a gaping grey hole

1 older entry...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!