Older blog entries for jamesh (starting at number 125)

Gnome Developer Websites

Did a little more work on the Gnome LXR. It is now no longer using the old '95 era apache file icons in the directory listings, but instead using some icons based on the main Gnome icon theme. I had to modify some of them a bit because they didn't scale all that well down to the smaller sizes. It definitely looks a lot nicer now.

Mailman

Was having some trouble with the qrunner process on the local mailman installation. Apparently if it gets a temporary delivery failure, it queues the message for delivery again immediately. For mail being delivered through the local MTA, this is a pretty big problem -- if you get a temporary failure, you are likely to get another temporary failure a fraction of a second later. Having the qrunner process using all available CPU doesn't help get out of this situation ...

I grabbed the CVS head versions of the Mailman/Queue sources and integrated it into my 2.1.2 installation, and the problems pretty much went away. It handles this situation a lot better.

I also put together a bookmarklet to save time while moderating lists:

javascript:(function(){var elements=document.forms[0].elements;for(var i=0;i<elements.length;i++){var el=elements[i];if(el.type=='radio'&&el.value=='3'){el.checked=true;}}})()

On the mailman moderation screen (both 2.0 and 2.1 versions), I can activate this bookmark and it will check all the "discard" radio buttons. Since most messages are usually spam, this means I just have to mark to check the radio buttons for messages that are not spam, which is a lot quicker.

Gnome Developer Websites

I converted the Gnome LXR and Bonsai installations over to the new site design Jeff did.  Overall it looks very good.  Having a consistent design across the sites makes them all look a lot more professional.  This just leaves the big one to do (www.gnome.org).

Advogato

raph committed my patch to add <link> elements to the items in the diary RSS feeds.  This should make the RSS feeds a bit more useful, since you can then go from the RSS to the individual diary entries.

I also had a play with the Mozilla midas rich text editing functionality as a way to provide WYSIWIG diary entry.  It is a little rough, but it is good enough to write this diary entry with :)  With a small amount of hacking, I was able to get the code to work with IE as well.

David Hicks

It seems that our Prime Minister and Attorney-General seem to have decided that it is okay to have an Australian citizen tried without due process in a secret court where he could face execution.  If there is evidence against him, there shouldn't be any problem trying him in an Australian court.  It is particularly sickenning to see them acting like this when compared to the British government's actions with respect to their citizens in a similar situation.  There was an interesting article by Malcolm Fraser about this yesterday.
9 Jul 2003 (updated 9 Jul 2003 at 15:25 UTC) »

developer.gnome.org

Got a bit tired of the ancient site design of the Gnome developer website, so spent a little while updating it to match jdub's new site design. Now all that is left to do is to fix the content :)

Update: updated the bugzilla.gnome.org templates to match.

GUADEC 2003

I said I was going to write a bit about GUADEC, but didn't get round to it til now.

Saturday 14th

Arrived in Dublin in the morning after about a day spent in airports and on planes. Took the AirLink bus from the airport into the city centre, and walked from there to Trinity College, Dublin. I ran into a number of hackers at the gate who pointed out where the accommodation office was. Dropped my pack off and took a walk around the area close to the college.

I went out to take a look round and get some lunch. Was surprised how expensive everything seemed. Even though the exchange rate was about AU$1.80 to each Euro, the prices looked like the exchange rate should have been closer to 1:1 :(.

Afterwards, I explored TCD a bit more, and found out where the conference was going to be held. Made my way down to the network room and met jdahlin (at first, I didn't realise who he was).

Went to dinner with a bunch of hackers at a Japanese restaurant. Had a very large bowl of chili/chicken noodle soup. We then moved on to Messrs Maquires for some drinks.

Sunday 15th

On the Sunday, I went to the Gnome Foundation Board meeting. This was the first time that we had had a face to face meeting of just the board (last year we had a meeting with the advisory board, but that was it). Was a very productive meeting.

Monday 16th

The start of the actual conference. Saw a number of great talks including Havoc's freedesktop talk and Johan's PyGTK talk. I gave my first talk in the afternoon: EggToolbar and EggMenu. It had a fair turnout and was pretty successful. After the talk was finished, I had a conversation with Hans Mueller who was looking at some similar issues with menu handling and merging in Java.

Had dinner with the AbiWord hackers.

Tuesday 17th

The second day had a lot of great talks. I got to Alan Kay's keynote a little late, but what I saw was very interesting. He made a lot of good points (although I don't agree with of all of them). I then went to Anders' D-Bus talk.

After the break, I gave my PyORBit talk. Less people attended this one than the previous one, but there was still a fair number. I gave a few demonstrations of remotely controlling Nautilus through its CORBA interfaces, and getting notifications on metadata changes. Bill Haneman was at the talk, and asked how it worked with the accessibility framework (as expected). I hadn't actually tested it but I am fairly confident that PyORBit would be usable to script the AT-SPI interfaces. It would be great to see Gnome become more scriptable in the future. Whether CORBA is used for this purpose or not remains to be seen.

Went to the Ximian party in the evening. Got to catch up with some more friends I hadn't seen since last year. The pub was fairly crowded in the area between the door and the bar, but there was a bit more space near the edges.

I decided to leave a bit after midnight, since I was getting a bit tired. When I got to my room, I found that the key card didn't work. After trying three other key cards in the lock (including the master key card), they decided that the lock itself was broken and got the locksmith in. Ended up getting to sleep around 2am. In the morning they came round to replace the lock completely.

Wednesday 18th

The third day of the conference was the Linux@Work day. This day had a wider/different attendance and wasn't as focused on Gnome as the previous days were. There were some interesting talks, including Alan Cox's keynote. The day finished with a wrap-up for the conference.

Quite possibly the best GUADEC ever.

Thursday 19th

The day after the conference, we had the Gnome Foundation Advisory Board meeting. Again, this was very useful although I can't give many details about it. It was a great opportunity for the companies on the advisory board to get some insight into Gnome's direction, and to give us feedback on what they were doing.

Afterwards, we met up and went to a Mongolian restaurant (one of the ones where you fill a bowl with meat and vegetables, and then they cook it for you on the spot).

Friday 20th

As well as organising a great conference, Glynn had also organised a hike afterwards which I went on. The group consisted of me, Glynn, George, Christian, Kjartan, Richard, Mickael, Carina, Richard, Alex and his girlfriend. Mickael has since put some of his photos up on his website.

Everyone met up at Glynn's flat, and then went to catch the bus to Glendalough (which is south of Dublin). There are a few Glendaloughs around Australia, so it was interesting to find out what the name meant (Glendalough == Gleann da Loch == valley of the lake).

The bus stopped at the tourist centre, and we walked from there to the one of the valleys. We then left the packs and walked up to the top of the valley and walked along the ridge back to the town where we got some food for dinner. We then made our way back to the packs to set up for the night.

Saturday 21st

The next night we decided to camp closer to the town because of the midgies. Even with lots of insect repellent on, they were still annoying (they would get in your nose, throat, etc).

During the day, we hiked up a number of the mountains. The scenery was great. At around 2:30pm, half the group decided to go up the last mountain, and half went back to the pub. I decided to keep going, which may or may not have been a good idea :) The ground leading up to the base of the mountain was fairly swampy, so I was a bit tired by the time we started climbing it (I am definitely not as fit as I used to be). I was happy that I did climb it, as the view from the top was great. We then went down to the pub to meet the others. Had a very nice burger and lots of Guinness.

Unfortunately, there were just as many midgies at the new place we were camping.

Sunday 22nd

We left Glendalough in the morning and arrived back in Dublin round mid day. Later on that day, I had to get on the plane for another long long flight ...

Tuesday 24th (1:00 am)

When passing through Singapore this time, they told me I would need to contact baggage services in Perth, but couldn't tell me why. When I got through immigration in Perth, I went to the baggage desk, and they said that my pack didn't get transferred in London. They said it was on the next plane, and would be delivered that evening. This did make it easier to get through customs though, so it wasn't all bad :).

It actually took another two days for my pack to make it home, getting lost again in Singapore, or possibly Sydney (they weren't quite sure when I called). grrr.

Mailman/SpamAssassin

The article I wrote up on integrating SpamAssassin with Mailman 2.1 got reprinted in LinMagAU, which was pretty cool. This edition also contains an interview with Jeff. They are starting to pick up a bit of momentum, and may have a print edition soon.

Mail Viruses

Like a lot of people, many many copies of the Sobig.E worm have been sent to my account. I quickly configured the mail server to start blocking the messages. However, I continue to receive many delivery failure emails from other mail servers when they reject messages which have my email address forged in the From: header.

Since the anti-virus software companies know that some viruses forge sender addresses, it seems really stupid that they still send rejection messages to the sender for those viruses. It would save a lot of peoples' time if they knew to discard rather than reject certain viruses ...

GUADEC 4

Haven't posted anything here for a while. I've been at GUADEC since Saturday, and it has been really good so far. I've put the slides for my talk up on my website. I'll post some more info later.

Red Hat 9

Installed it on a few boxes, and I like what I see so far. The Bluecurve mouse cursors look really nice. It is also good to see some more of my packages included in the distro (fontilus and pyorbit).

Spam

Some spammer has been sending mail with random @daa.com.au addresses in the From: field. So far, I have received lots of double bounces, a few messages asking if we know about the spam, and many automated responses (some saying the message came from a blocked domain!). The Received headers indicate that the mail comes from somewhere else, so there isn't much I can do. I hate spammers.

I put up a bit of documentation on the SpamAssassin/Mailman setup I developed on my website. It would be good to get mail.gnome.org switched over to the new setup (they are using an older version of my filter), as it has greatly reduced the amount of moderation required.

jhbuild

Did a bit more hacking on jhbuild. It now builds fontconfig and Xft from CVS, which should give Keith a few more testers. I had to update jhbuild to use libtool-1.5 as it was required to build them. This has uncovered a few bugs in various autogen.sh scripts that still need to be fixed. I also added the ability to override the cvsroots used to check things out (so if you have an account capable of writing to gstreamer from cvs, you can use it), and change the branches for individual modules which should be useful for module maintainers.

libglade

I am about half way through modifying libglade to construct arbitrary GObjects, rather than just widgets. When this is finished, it will allow eg. setting up tree view columns in the .glade file, size groups and a few other things. The change will break compatibility for backend modules, but should keep binary compatibility for apps. This seems okay given that there are only about 3-4 backend modules in existance (which add support for libgnomeui widgets, gnome-canvas and libbonoboui widgets).

linux.conf.au

Had a nice dinner with the other LCA2003 organisers. The proceedings CD took a bit longer to finalise than expected, but it is pretty much done now.

XFree86

Some very weird stuff is happening in the XFree86 project at the moment. The characterisation of Keith Packard by some of the XFree board just doesn't mesh with my experience dealing with him. His approach of working with the people who will be using the code has worked really well (it is no accident that Xft and fontconfig have become so popular and widely deployed so quickly). His post to the forum list seems very sound from my point of view.

EggToolbar

Started doing a bit of work on toolbar customisation for EggToolbar. I have basic DnD drop highlighting working in the toolbar. I think it might be necessary to add an optional input only window to EggToolItem to make dragging them easier in toolbar customisation mode. It looks like it should all work fairly well.

Of course, these bits are relatively easy, so we will see how things go ...

GTA: Vice City

Ran into a weird bug while playing it a few days ago. At the end of one of the missions, there was a short cut scene where one of the characters (Phil) was meant to limp from the car to the doctors. During the mission, the cops had started chasing me. Since the cut scenes are run through the game engine itself (and in the game world), the cops were still racing down the street. The next thing I knew Phil got mowed down while walking to the doctor and the cut scene effectively hung. Gives an interesting insight into how bits of the game were implemented.

SpamAssassin/Mailman

I recently upgraded the Mailman installation on the machine handling the pygtk mailing lists. I am now using Mailman 2.1.1, and so far it looks a lot nicer.

I took the opportunity to update my SpamAssassin patches for the new Mailman (the old filter didn't work anymore). I now have the code for talking to spamd split into a separate module, which might be useful for other projects, and means that it can be updated for newer SpamAssassin versions as needed without changing the MM related code.

I now have the filter using the list name as the user passed to spamd. Together with the virtual user dir mode in spamd, I now have SA maintaining separate auto-whitelists and bayes databases for each list, which should help improve the filtering.

What would be nice to do next would be to get the Mailman moderation page hooked up to SA, so that it can feed the decisions made during moderation back to the bayes database. Will need to think a bit about how best to implement this though.

Peace March

The next peace march in Perth is being held on Saturday (March 22nd) at noon. Will be interesting to see if more or less people will come to this one compared to the previous march.

Build Infrastructure

Got approval and checked in my glib changes. I also have intltool modified po/Makefile.in.in's passing make distcheck with newer automakes, which should make upgrading other modules a lot easier.

Talked to malcolm who has apparently been working on some docs for updating packages to newer versions of the build tools, so I won't be writing my own document.

PyGTK, Reference Counting and Cyclic GC

When I started working on the 1.99.x branch of PyGTK, I added a feature to make sure that there was at most one Python wrapper object for each GObject, and that the wrapper would stay alive for as long as the GObject did and vice vesa.

This is implemented using a bit of a hack, which I needed to update as Python 2.2 developped. It essentially goes like this:

  • The Python wrapper holds a reference to the GObject
  • The GObject holds a pointer to the wrapper, but doesn't own a reference.
  • If the refcount on the wrapper goes down to zero and it gets freed, and the GObject's ref count was greater than 1 (ie. something other than the wrapper holds a ref to the GObject), the tp_dealloc() routine would resurrect the wrapper. The GObject would now own a reference to the Python object.
  • If some other code tried to get the wrapper for the GObject, the saved reference would be transferred to it (ie. the GObject would no longer own the last reference).
  • If the GObject later gets disposed, the wrapper will be freed.

This worked okay for a while, until I started work on adding cycle GC support for wrappers. Since the GObject didn't hold a real reference to the wrapper, if the only references on the wrapper were parts of cycles, the GC might think it okay to free the wrapper. Due to a small bug in pygtk, the wrapper itself wasn't being cleared, but its instance dictionary was. This led to the unfortunate situation where all the instance attributes would sometimes disapear.

The obvious solution (in retrospect) is to work with the cycle GC when implementing the single-wrapper-per-GObject code, rather than ignoring it. Instead of the current hacks, I make the GObject hold a reference to the wrapper and the wrapper hold a refernce to the GObject, forming a cycle.

Since the Python cycle GC only applies to PyObjects, I still needed some way to communicate information about references on the GObject to the GC code. If there are references to the GObject other than the one its wrapper holds, then we obviously don't want to free either.

I came up with a smart solution that seems to handle this very nicely: If the GObject reference count is equal to 1, then the wrapper will visit itself as part of the GC traverse, otherwise it won't visit itself. Essentially this means:

  • If anything other than the wrapper holds a reference to the GObject, make the reference the GObject holds on the wrapper look like an external reference.
  • If the only reference on the GObject is held by its wrapper, make the reference the GObject holds on the wrapper look like a cycle.

This seems to solve the problem very nicely.

Sieve

I just found out about the imapflags sieve extension implemented in the Cyrus IMAP server. This allows me to set IMAP flags on messages as part of the server side mail filtering.

Since the mozilla message labels are implemented as IMAP flags $Label1 to $Label5, I am able to set message labels as part of the delivery. This is quite useful for highlighting certain messages in a folder without sorting them into a separate folder. For example, I can highlight bugmail about new bugs in my bugzilla folder. Looks like it will be very useful.

Build Infrastructure

For the past few weeks, I have been working on improving the Gnome build infrastructure. It is something that we have needed to do for a long time. Most of Gnome is still using automake-1.4 because they rely on bugs that have since been fixed, and don't handle the readonly sourcdir builds that "make distcheck" does with newer automakes.

So far I have been working on updating the various build tools that Gnome uses to reduce the amount of work needed to update a package's build infrastructure. So far, I have updated the gnome-common package, removing most of the macros it contained and doing significant updates to the shared autogen.sh script, and gtk-doc (adding code to separate out the common section of the docs makefiles everyone is using).

To test things out, I recently ported glib over to using Automake 1.7. The patch is currently in its second revision, and waiting for another review. Afterwards, I might look at doing a bit of documentation on how to update a package -- I don't intend to do the conversion for every package in CVS ...

116 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!