Signed Debian Archive
My Debian archives are now GPG signed, so if you are using APT 0.6 and have my archives in your sources.list, you best add this key using apt-key.
To confirm, the key ID is 510E0293, and the fingerprint is F35D 9AA1 758B 7598 9672 789E F234 8DBE 510E 0293.
Secret GObject Fu
Whilst trying to find a nasty reference counting problem in my code, Alex told me about the g_trap_object_ref variable in debug builds of GObject. Basically, when a debug version of GObject refs or unrefs an object, it is compared to the pointer in g_trap_object_ref, and if it matches it causes a breakpoint.
Very useful, I can do this:
$ libtool gdb ./EDataBookFactory... [line 191 is known to be after my object has been created] (gdb) break e-data-book-factory.c:191 (gdb) run Breakpoint 1, impl_BookFactory_getBook (...) at e-data-book-factory.c:191 [book is the pointer to the new object] (gdb) set g_trap_object_ref=book (gdb) cont Continuing. Program received signal SIGTRAP, Trace/breakpoint trap. 0xb7e74869 in IA__g_object_ref (_object=0x806fd88) at gobject.c:1672 1672 G_BREAKPOINT (); (gdb) bt #0 0xb7e74869 in IA__g_object_ref (...) at gobject.c:1672 #1 0xb7e751a1 in IA__g_value_set_object (...) at gobject.c:1907 #2 0xb7e52f74 in invoke_object_method (...) at dbus-gobject.c:848 ...
Here ew can see that invoke_object_method in dbus-gobject.c is incrementing the reference count on my object via a GValue. A quick peek at the code reveals that this reference is not being released in some situations, which I fixed and now my objects are being disposed as expected.
I hope this is a documented feature, and if not I'll add a comment about it when CVS is back. To make my life complete, if anyone knows a way to make gdb print the stack and continue when it breaks, please tell me!
Update: the most excellent Daniel Stone pointed out the commands command, which lets you run arbitary commands when a breakpoint is reached. Now all I need to know is how to tie commands to a SIGTRAP...
NP: Sounds From The Verve Hi-Fi, Thievery Corporation
W-E-E-K-E-N-D
W-E-E-K-E-N-D, it's weeeekend.
On Saturday we went down to London to go and see the most excellent Earth From The Air (also know as Earth From Above) on the South Bank, next to the half-gerkin GLA building. The photography is amazing, and I recommend that everyone go.
As you can see, the weather was pretty rough. I'd have liked to taken more photographs, but we were starting to get frostbite...
Then on to Oxford Street, to check out the HMV sale. Bad move. I found some bargains, and got Trouser Jazz (Mr Scruff), Between Darkness And Wonder (Lamb), Pre-Millennium Tension (Tricky) and Laika Come Home (Space Monkeyz & Gorillaz) for £20, so rewarded myself with Bubba Ho-Tep. Then we stopped off at a local pub for a pint or two (for future reference it's The Green Man on Berwick Street), before heading out to find The Red Onion. The food there is excellent (thanks to Russel for mentioning it in the past), and reasonably priced: two starters and mains with a bottle of wine was £50. My only complaint is that the service was a little slow, but we did arrive the same time as a party of 20.
Sunday is laze day: a bit of cleaning and listening to the new music. As a second reward to myself for being relatively good in HMV I bought another three albums in the morning: Out From Out Where (Amon Tobin), Sounds From The Verve Hi-fi (Thievery Corporation), and Birth Of The Cool (Miles Davis). I best stay away from Amazon for a while now...
NP: One Offs... Remixes and B-Sides, Bonobo
EoG ICC Patches
Quick announcement: The Eye Of Gnome patches to use the ICC Profiles In X specification are now available via Arch, at http://www.burtonini.com/arch/eog--xicc--0. Now that EoG has a maintainer (hi Tim!), I hope to get these suitable for upstream soon.
NP: Groove Salad, Soma.fm
ICC Profiles In X Specification 0.1
After an interesting discussion on openicc-list, I am releasing version 0.1 of the ICC Profiles In X specification. I'm currently re-arranging my Bazaar archives so it's not available in source form yet, but the specification in available as HTML.
So far acceptance has been remarkable. I've patched Eye Of Gnome, Sven committed support to GIMP, Krita (a KDE drawing app) might support it soon, and there is an open bug with Scribus. Finger's crossed for world domination!
NP: Out From Out Where, Amon Tobin
Ronald Is My Hero
I was going to do it, then I wasn't. Havoc talked me out of it last year, and Ronald talked me back into it at GUADEC. We found Havoc at GUADEC, who was rather drunk, and convinced him it was a good idea. That was far easier than we could ever imagine. Ronald said he'd send me a patch in two weeks that night, and last night (after three weeks, but I'm not counting) I received it.
Ronald Is My Hero.
NP: well, you can see for yourself...
Bugs Fixed
If you want to tell me that SJ says "Cannot extract CD: file exists", then I've fixed the bug in CVS. Either build from CVS, or apply this patch first.
Though this is a major bug which stopped it ripping more than a single track, so you have no excuse. I've only had two mails so far, there should be more!
NP: Buena Vista Social Club
Sound Juicer "Cosmo Retro Intro Outro" 2.11.2
Sound Juicer "Cosmo Retro Intro Outro" 2.11.2 is out. Tarballs are available on burtonini.com, or from the GNOME FTP servers.
This release is the first to use gnome-vfs to write the songs, so it will need some serious testing to make sure I didn't break anything. Can I ask everyone running GNOME from CVS, or tracking the 2.11 series, to rip at least one album? Please? Can everyone who tests this version please send me an email, and I'll pester and moan until I get 20 mails. I may even post pictures of poo cookies...
- Uses gnome-vfs to write songs
- Write MusicBrainz identifiers as IDs not URLs
- Don't crash when freeing albums without date fields
- Don't warn when looking for the Glade (Bastien Nocera)
And of course, thanks to the translators: Elian Myftiu (sq), Frank Arnold (de), Ignacio Casal Quinteiro (gl), Kjartan Maraas (nb,no), Martin Willemoes Hansen (da), Michiel Sikkes (nl), Miloslav Trmac (cs), Takeshi AIHANA (ja), Jayaradha (ta).
Finally
The problem with large projects is that for a long time there is often no real progress, then all of a sudden stuff just starts to work.
For the curious, on the right is the infamous Evolution showing the address book, and on the left is a terminal running the address book backend. The two normally communicate via Bonobo, but these are communicating via DBus...
Opened Hand Interview
Last week Opened Hand was interviewed about our involvement with the Nokia 770, the resulting Newsforge article just went online.
NP: Take London, The Herbaliser
Colour-Calibrated Eye Of Gnome
A few days of early-morning hacking later, and I've got a proof-of-concept ICC system working. It's very simple but works well for me.
The first step is to associate an ICC profile to each screen. This can be done using xicc, from xicc-0.1.tar.gz. Simply run this specifiying the path to the relevant ICC profile and it will set the atom on the root window of the default screen (multi-screen support will be implemented next). For example:
$ xicc ~/tmp/ICM/ibmtplcd.icm
ibmtplcd.icm is the profile for the IBM ThinkPad LCDs.
Then patch Eye Of Gnome with this patch. Now when EoG opens a JPEG image which describes the colour space using the standard EXIF properties White Point and Primary Chromaticities it will create a profile on the fly, and when the image is displayed the profile for the screen is obtained and the image corrected.
There is a lot to do yet:
- Read embedded ICC profiles from JPEG and PNG files
- Read the whitepoint/chromatic information from PNG files
- Cache the profile from the screen
- Make xicc multi-screen aware
But it does work! I'll write a small specification for the atom I'm using shortly.
NP: Mrs. Cruff, Mr. Scruff
Photography
Last Thursday we had a few hours of summer (it's raining again now) so I dived out at lunch and took some photos in the garden and the local cemetery before the inevitable clouds rolled in.
NP: Central Reservation, Beth Orton
Is It Crack Or Not?
This is the first installment of a semi-regular (read: as regularly as I can be bothered) feature, Is It Crack Or Not? The idea is that there are often ideas in the GNOME community which may or may not be crack, so here the people can share their views. So without further ado, let's get on.
The proposal is that the screen shot button in GNOME should be extended to record video as well as take static screen shots. Jeroen among others has done a mockup of the interface for this feature. There are lots of open questions, such as will it record audio, how does one stop the recording without there being a Stop button in the interface, what codec to use, and does a normal user know the difference between Ogg Theora and MPEG 4? The important question however is is it crack or not? Leave your opinion in the comments!
Blog Comments
Blog comments are now enabled again, so feel free to spam comment on any posts.
NP: Charango, Morcheeba
Morgan's Law
After a brief discussion with Allen over whether eating crunchy bread would cause you to lose weight on the grounds that your jaws are doing exercise, we formulated Morgan's Law Of Calorific Denial:
More Food = More Exercise = The Thinner You Get
Like all great laws (such as E=mc2) it is straight to the point. I feel a best-selling book about diet plans involving Morgan's Law coming up...
NP: O, Damien Rice
Waiting For Godot^WRoss
I just joined #gnome-debian to find the following topic:
TODO: gnome-cups-manager sj zenity | The Independent: "Rabid Debian users on a search and destroy mission against Ross Burton. 'Yes,' one of them said, 'he doesn't give us our Zen.'"
Hmm, yesterday the To Do list was several lines long. Now it's just three packages, and they are all mine. Damn. Looks like it's time to update my Sid machine...
NP: X & Y, Coldplay
Breaking The Tinderbox
As annoying as breaking the tinderbox builds of GNOME is, knowing that Colin's DBus mega-patch (at the last check the patch was over 280Kb) that I've been working on is finally committed is far more satisfying. Now to merge current CVS into my local branch and send Colin another large patch to review...
Colour Calibrated EoG Patch
I've now fixed the few small problems with my Little CMS patch for Eye Of Gnome, and it is now a lot faster and actually correct (previously it was adjusting most of the pixels hundreds of times...) If you want to give it a go, the patch is available here. It currently uses sRGB as the display profile and only creates profiles on the fly from embedded whitepoint and primary chomatic information, but will not read embeded ICC profiles. This is due to me scratching an itch, Canon EOS cameras don't embed a profile when they are using Adobe RGB.
If anyone out there has some feedback on this issue, feel free to edit the Colour Management page on the GNOME wiki.
Colour-Calibrated Eye of Gnome
Last night I got fed up of manually converting photos from my camera from Adobe RGB to sRGB for display (I had a long blog entry about this but it got lost...), that I decided to try and hack colour space support into EOG.
Working on the scratching an itch principle, my EOG will now check a JPEG image to see if it contains any embedded white point and primary colour coefficients. If it does, a ICC profile is generated from the data (using a gamma of 2.2) and the image transformed to sRGB. It's a little slow at the moment as I'm doing it row at a time, and it has a habit of crashing on the last row but one (no idea why), but if I tell it to transform only half of the image the results are impressive:
The next stage once the bugs are fixed is to make the code optional, and to handle embedded ICC profiles.
NP: F♯A♯ ∞, Godspeed! You Black Emporer
Sound Juicer "Grace the Corners of Our Rooms" 2.11.1
Sound Juicer "Grace the Corners of Our Rooms" 2.11.1 is finally out, the rather late first release in the series up to GNOME 2.12. Tarballs are available on burtonini.com, or from the GNOME FTP servers.
- Initialise audio profiles before creating the extractor
- Fix some pointer tests which may crash
- Focus the list view on startup
- Depend on nautilus-burn 2.11.1, and pass around NautilusBurnDrive objects instead of device names.
- Don't free GErrors in the pipeline error handler, this makes SJ crash
- Add a dummy C++ file to fix builds where gcc version != g++ version
- Uncheck each track as it is extracted
- Put lots more metadata into the songs (MusicBrainz IDs and release date)
- Check for and switch to an existing instance of SJ when starting (Bastien Nocera)
And of course, thanks to the translators: Adam Weinberger (en_CA), Ahmad Riza H Nst (id), Canonical Ltd (xh), Dafydd Harries (cy), Hendrik Richter (de), Ivar Smolin (et), Jyotsna Shrestha (ne), Mugurel Tudor (ro), Nikos Charonitakis (el), Raphael Higino (pt_BR), Steve Murphy (rw).
Modern X Architecture
It appears that some people are getting a bit confused about how all these pieces of the modern, GL-based, X architecture works. I'm no expert on this but I think I understand how it all joins together. I'll define some terms and hopefully things will be clearer.
- X Server
-
The program which draws the contents of the windows onto your screen. This is the program which controls your display and receives your input.
- X Client
-
A program which people generally think of as applications, such as a word processor or a calculator. This does the real work and tells the server what to draw. Due to the client/server nature of X, clients may be running on any machine, local or remote, whereas the server generally runs on the computer in front of you.
- Window Manager
-
Whilst X provides functions to position windows, X itself doesn't specify how the windows are manipulated or positioned, i.e. it provides the mechanism but not the policy. Implementing the policy is the role of the window manager, and whilst most window managers are pretty much the same (see twm, Metacity, or Enlightenment), it does mean some weird and wonderful window managers can be created (see Matchbox or Ratpoison).
Hopefully these three terms are familar to everyone who is still reading!
- X Extensions
-
The X protocol was designed with future extension in mind, and recently there has been a flurry of activity here. Recent major extensions include Render (a decent drawing API), Damage (clients can receive notification of redraw events on other windows, good for VNC servers or programs like Xresponse), Fixes (as the name implies it fixes a number of omissions, such as a better clipboard protocol), and Composite (clients can control how the windows are displayed).
- Composite Manager
-
This is where it gets fun. Combining the Holy Trinity of modern X extensions, Composite, Damage, and Render, leads to the concept of a composite manager. When compositing is enabled windows created by clients are not drawn to the display directly, but to off-screen images. The composite manager is then responsible for drawing the windows to the screen in any way it wants. A basic composite manager would do nothing but copy the pixels (and thus appear idential to running no composite manager), xcompmgr adds real-time transparent drop shadows to top-level windows, and Luminocity wobbles the windows when they are moved.
Note that a composite manager doesn't have to be a window manager, but they often are. xcompmgr is just a composite manager, whereas Luminocity is both a window manager and a composite manager.
So, where do all of these new program fit?
Xgl is a new X server which uses GL to draw. Not only are the core X drawing primites accelerated (like they are on most servers these days), but Render is also accelerated. As the OpenGL specification alone doesn't provide enough API for an X server (for example it doesn't cover manipulating the display size, or input), there are a number of Xgl versions. Xglx uses the GLX extension and is effectively a GL-accelerated Xnest/Xephyr clone. Xegl uses the Embedded OpenGL specification, which adds the required features so that an application can control the entire display and not just a window. With this, Xegl can run directly on the hardware. Note that instead of calling GL directly Xgl uses Glitz, a GL-backed 2D graphics library originally created for Cairo, which matches the semantics of the Render extension.
Luminocity is pure crack. Pure, 100%, pristine crack, rolled into lines by naked Brazilian hand maidens. Who said Owen was a code purist? That said, it is a very good design for a composite manager test bed. To use Luminocity you need two X servers: a target display and a source display. Luminocity reads window contents from the source display and draws them to the target display in a (optionally full-screen) window, by being the composite manager on the source and a normal client on the target. The source display needs to support the Holy Trinity and XTest, so generally is Xfake from the kdrive X server (which doesn't have a visible framebuffer), and the target display is whatever X server you'd normally run as long as it supports hardware-accelerated GL. Whilst this is a seriously over-engineered solution and requires more than a few hacks (XTest is used to forward events between the servers), the result is that time taken to restart it after a build is drastically reduced, as when Luminocity is killed both of the X servers and all clients are not killed too.
The really interesting program we all want to see is glxcompmgr, demonstrated at GUADEC to manic cheers and applause. From what I understand, this is a classic compositing manager in design in that it works with a single display. It achieves fabulous visual effects by extensively using GL, and thus with hardware acceleration is very fast. My guess is that it just draws to a full-screen GL window and so doesn't require Xgl, but will work on any server.
NP: Babylon Rewound, Thievery Corporation
Oh My God
What an evening! Not only did Apple actually switch to Intel processors for their laptop and desktop ranges, but Debian Sarge has actually been released!
Well, the announcement for Sarge isn't out yet, but the FTP server says it all:
lrwxrwxrwx 1 1176 1176 5 Jun 06 18:33 stable -> sarge lrwxrwxrwx 1 1176 1176 4 Jun 06 18:33 testing -> etch
Woohoo!
GUADEC Photos
I didn't take many photos at GUADEC this year, but I did take my little Ixus along to The Party.
Look-alikes
I lost count of the number of times people said to me, "You're Ross Burton? You look nothing like your hackergotchi!" Robert Love even went as far as quantifying just how much unlike: third place. First place of course goes to Bastien Nocera, who everyone thought was black when the most appropriate description is "pasty with dark fur". Just who is number two is an unanswered question.
I'll knock up a new hackergotchi for myself in a minute, but here is a new one for Bastien I made from a photo I took at the GUADEC Parrrrty:
NP: Tourist, St. Germain