Older blog entries for CharlesGoodwin (starting at number 19)

Another late night, another load of work done.

Speeding up the Ibex core

Tupshin and I got into looking hard at ways to optimise the Ibex core. Currently Ibex does two things very inefficiently and it's amazing that it runs as quickly as it does.

Firstly, it calls repack(), resize(), and resize_children() (the 3 Box.java functions that handle layout) far too often even for trivial things like mouseover. Making these only occur when necessary will speed things up significantly.

The second big inefficiency is that repack() is dumb. (This probably applies to resize() and resize_children() but I've yet to get that far.) A call to repack() repacks a box and it's child boxes regardless of if it is necessary. A box should only be repacked if 1) a child has been added, 2) a child has changed colspan/rowspan, 3) a child has resized, 4) a parent has resized, 5) the cols or rows property has changed, or 6) the box has resized. Even then that can be improved upon significantly.

Once the above two inefficiencies are fixed, Ibex will fly at layout and probably out-perform native applications. That will really piss off the Java-is-slow crowd. (Don't tell them that eventually native binaries through GCJ may well be OpenGL accelerated. Sheesh, they'll have heart attacks.)

The Widgets

The widgets are starting to come together for Ibex. I've done most of scrollbar, and will be testing that wil scrollpane tomorrow. I've encountered a bug or two but nothing that cannot be worked around.

What is good is that this is really road-testing all the widget libs and I'm ironing out any problems and creating more as needed. I love dog-fooding sometimes, it gives you a good sense of progress and satisfaction.

I'm hoping to have a good set of widgets finished up by the end of next week. To do by then: finish scrollbar, slider, spin, and implement combo, option, and text. I'm looking forward to it. Ibex will then be officially usable if still somewhat beta.

Core grid layout

Amazingly Adam also relented on my patches to the core for grid layout behaviour. He claimed they were bad and that his original implementation was right, and that I should reread the Ibex reference. So I did, and ironically my modified core was far closer to the reference than the original implementation. Cool, I just outsmarted a genius. Probably won't happen again!

I posted a proposal to the core mailing list to describe my implementation and how, conceptually, it differs from the reference description of Placing. Drop the word 'cell' from the reference description and the only difference was really on how to deal with boxes with span.

I really want to hack on Box.java some more. It's very satisfying seeing myself make improvements on something written by somebody as clever as Adam and is certainly boosting my ego.

But no point improving on something unused. I have to get the widgets up to scratch and write some documentation and tutorials before working on it some more. And I'll probably have to redo the website. Am I the Ibex lackey or what? :-)

GNOME Office

I've really neglected the GO website that I've been doing. It's getting done but 'oh so' slowly. When I do finish it I'll owe a big apology to Dom, Jody, Rodrigo, and all the other diligent GO hackers.

In more humourous news, Dom gets 1st place for the best April fools joke. I really enjoyed that, which is unusal for an April fool. They mostly so poor and pointless.

The worst April fool award goes to the Exult team. That was awful and just plain not funny. It was probably a private joke.

30 Mar 2004 (updated 30 Mar 2004 at 03:36 UTC) »

Another busy day today. Fortunately I had a really good sleep last night, meaning I was fully recovered from a weekend of stupid drinking with old friends. I say stupid... I'd do it again and will do it some more in the future. Still, if we didn't do stupid things then we'd probably never have fun.

Being paid to work on Ibex is cool. It's a dream come true for this period of my life. I've started using an ancient app for time keeping called Time Tracker which was last updated in 1997! I did first try GnoTime but it crashed on me twice in less than 60s of usage. Thanks but no thanks. Makes me believe we should all have to dog food with our projects. Still, it looked potentially really good and I look forward to trying it more in the future.

I saw The Passion of Christ last Thursday. Gruesome. It was strangely lacking in anti-semitism given the extent of the complaints, so I felt compelled to start a forum thread about it to see if anybody would justify any anti-semitic claims. [EDIT - found an excellent overview of some of the Biblical discrepencies in the movie.]

Lots of coding to be done. I've almost fixed Box rendering and then I have widget coding to be doing. I spent a few hours last night and today setting up bugzilla over SSH for my employer which was interesting. RH9 dependency hell is not fun, especially when things like perl modules often come in differently-named packages. I'm happy with my Gentoo. Emerge!

25 Mar 2004 (updated 25 Mar 2004 at 02:04 UTC) »

If you have yet to, you must read Edd Dumbill's take on the platform integration with Gnome. (Y'know, the subtle Mono vs. Java vs. Parrot flamefest.) It's inspired. Absolutely inspired. And it is 100% the approach the Gnome project must take to ensure future success.

In my own hacking news, I did some sterling work on understanding the Ibex core in order to fix a bug or two. The Ibex core is quite a complex beast and I'm quite proud of myself for coming out the other side with only a few cuts and bruises with all my limbs intact.

Sadly I've not done nearly as much on the GNOME Office website as I should have done. Given that I'm afk Friday evening through to Sunday night, that'll probably not happen until next week. "Next week" again? Tomorrow seemingly never comes. (But it will!)

Oh, and apparently us Europeans are, "assaulting a successful American industry and policies that support [US] economic growth." by fining Microsoft for illegally abusing it's monopoly in order to gain and maintain their stranglehold on the market. Microsoft has made $100s of billions... if anything I would have thought the $700 million fine was a little low. Then again, I'm not a Democrat candidate for the state of Washington; home to the giant company.

20 Mar 2004 (updated 25 Mar 2004 at 01:53 UTC) »

I'm not sure quite how to state how awesome Gnome 2.6 is.

It just has a lovely feel to it. Things feel snappier, more polished. The interface is so clean (although so was Gnome 2.4) and things work really well.

Nautilus is so fast... is it really Nautilus? I think they kidnapped Nautilus and put his physically superior twin brother in there.

GStreamer just worked. (No configuration craziness!)

In other awesome news, what is sure to be an open source darling for years to come got an update today: The Battle for Wesnoth

Warning: don't follow that link if you value your productivity for the next week or two. And don't install the addictive Solarwolf either, another excellent open source game. In fact, there are so many great open source games; we should appreciate them more... Freeciv, Vegastrike, Boson, Stratagus (formerly Freecraft), Freecnc, Simutrans (not open source, but fun nonetheless), Pingus, Trackballs, Neverball, and many more.

Unsurprisingly, updating Gnome whilst using Gnome does funny things to your desktop experience.

Learnt enough XSL today to actually do something with it. I can't understate how awesome libxml is, the tools it provides are high quality and invaluable for any XML work.

I also made some progress with Ibex today. A few patches to the core have helped but instead I concentrated more on the structure of the widget code and made some decisions that should improve working with themes.

And a surprising but welcome development on the "how does one make money from working on Free Software" front when I received an informal approach to be paid by the hour for working on Ibex, from somebody who has been monitoring the project's progress. I really hope something comes of it.

On another note it's 2:24am. I see that staying up all night Monday really fixed my sleeping pattern. Perhaps I should just try pholyphasic sleep cycles instead. (Yeah, right.)

Just saw Mark McLoughlin's post about adding wireless support to gnome-netstatus which is cool. Calum did the UI but I wonder why the '100%' is to the right of the indicating bar graphic. Shouldn't it be to the left for English (and other left-right reading languages) since that's where our eyes naturally look first?

I wonder if that's part of the Gnome HIG. It probably is and, if in the unlikely event it isn't, probably should be.

Last night was the best sleep I've had in ages. Perhaps I should stay up all night more often as I did the night before. It certainly forces me to get to bed early the next day.

Then again I slept in 'til 9:30am when luckily a phonecall woke me up.

Must get job... or get contract work... or anything. A good few hours of cold calling. Fun fun fun!

16 Mar 2004 (updated 17 Mar 2004 at 10:23 UTC) »

[Didn't realise Advogato doesn't support blog titles] Am I the only person... ...that's getting annoyed by Michael Meek's constantly edited blog? I get the Gnome Planet RSS and it seems that every time Straw syncs the RSS, he's done a minor edit of his most recent blog. 20 or so times daily. Which means that whenever I'm using my computer (more than is healthy) I keep getting interrupted by a non-update. Argh!

Or am I getting the wrong end of the stick and is this a Straw or GP bug?

Either way it's damned annoying. And if it is the former, and if Michael ever reads this: you aren't limited to only one blog per day! And it needn't be perfect!

Gave myself a crash course in XSL/XML today. Found out that to merge together XML documents you need to use XInclude. It's crazy how hard it is to find out about XInclude given how useful it is.

My father once told me that I'd know I was grown up once I started to get irrationally paranoid, and that I'd know I was an adult when I recognised my responsibilites.

Whenever I use cheap shampoo I swear I get uncontrollable dandruff. I'm beginning to think it's a ploy to make you purchase the more expensive shampoos... "Pay up or accept ailments!".

I've been out of work for too long, it's time to get a job to make sure I can pay my mortgage.

Development pace has been disappointing. I made progress with Ibex, with quite a few widgets now working including a rudimentry tabpane implementation! But my GNOME Office work has been slow and I've failed (despite making promises) to deliver the website this weekend. It is now a priority.

It helps if you don't have to spend the best part of 2 hours washing dishes. At one point it felt like an insurmountable task. Battered and bruised, I only just survived.

Never let the girlfriend cook a fry-up for Sunday dinner - I spent a couple of hours recovering from severe indigestion. I never have indigestion. At least, never before now.

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.

10 older entries...

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!