Older blog entries for donscarletti (starting at number 8)

Last night, instead of my traditional custom of sleep, I instead participated in a late-night librsvg code jammin' session with cinamod and uraeus. Basically it would go like this, Uraeus would complain about a bug, and dom and myself would scramble to fix it quickly. Until this point I had never engaged in any coding activity so fast and frantic (I have a habit of completing my coding assessments early). It was great, with all of us working we not only routed many bugs that had haunted the codebase since its inception we also left the bug's women raped and their children cut and mutilated in the gutter. There shall be no mercy to segfaults and misrenderings.

Between supporting the standard and supporting cairo we have our work cut out for us, the goal is to have it working with cairo and rendering most things by the time gnome-2.8 comes out. It is seeming more and more evident that Cairo is not an overly appropriate api for a svg backend, we need access to those pixels before they hit the screen to do some of the mandated effects. But it seems like the powers that be want cairo, and cairo is what they shall get, amongst other backends.

The best thing about cairo however is doing away with libart. Libart is poorly documented and to figure out what a function does, one has to read the actual source code, and to me it looks like it was written by a monkey with a PHD in low level programming. Also libart seems to be something that one must work around, for example to make paths do their first section again so that the corners would render right. I was told that whenever one commits a hack to CVS, god kills a kitten, I hope was just a sickly little runt that was going to die anyway.

Although my contributions to gnome-2.6 were mainly low-key bugfixes, I am still eagerly awaiting its release as the first major release of anything that I contributed to. It will be great to see.

Although I have not written a wikipedia article for months I have been reading it a lot recently, a favorite of mine was this page (which although is only discussing disturbing pages, may be disturbing in itself to some readers). Wikipedia seems to have a growing number of pages relating to the culture of the Internet itself, never since the witty Australian T.V. show Frontline has a medium published so much introspection. Through Wikipedia, as well as gaining knowledge on a whole range of important subjects one can also learn about the culture of sites such as Slashdot and Something Awful in great detail here and here respectively. I am truly glad to know that the people of the Internet are documenting their heritage and celebrating their culture in a way that will ensure its survival.

I have been doing yet more librsvg hacking, I officially hate the current high-level architecture of the entire project (except for maybe paint servers). I recently added an ability to reference symbols and other parts of the document and use them again and again and again to save document space, but the whole system seems still a little buggy. My aim is at the moment to support all of the non-scripted svgs that come with batik. I believe that clear goals are good and they don't get much clearer than that.

I havn't been blogging for a while. With all the free time I have gained by not blogging I have completed librsvg filter support.

With every filter supported one can do some really cool stuff. For example by using diffuse lighting and about 5 other filters in sequence one can turn a boring flat SVG flag that won't be used by gnome for political reasons into a wavy beautifully 3d shaded SVG flag that won't be used by gnome for political reasons. The drawbacks is not all political however, there is also the obvious fact that running a sequence of five per-pixel nested loop based functions in series on a 2000x1000 bitmap isn't exactly instantaneous. Mind you, having a flag adorned desktop is always rather pretty and very cosmopolitan.

Of cause, filters were by no means the last frontier as far as librsvg development is concerned, primarily we need to fix text support and get group based symbols. However with cinamod now working on text support and myself working on making symbol support better, becoming competitive with batik as far as spec support is not all that far away.

I am now back in Sydney and once again attending the fine University of New South Wales. Being in Sydney allowed me to attend Sydney Linux Users Group an organisation that I ironically found out off Uraeus, a Norwegian. There I met jdub who I congratulated on his irreverent release names, I payed my subscription fees there and I hope to attend it regularly. Unfortunately most of the events I see there seem to have something to do with debian, which I by no means oppose but I unfortunately it is not to my taste.

I have taken to cooking Thai food over the last twelve months. In Sydney, finding ingredients is fine because I live in a predominantly Asian suburb in the east so one can find an Asian grocer because, generally grocers in the eastern suburbs are Asian. Lemongrass, galangal, jackfruit, everything is just lying around fresh ready to be picked up as casually as one would pick up a carrot.

Up north in my small regional city of Coffs Harbour however it is not so simple, out of those three ingredients mentioned before I could only find lemongrass and even that was a dollar per stalk and as hard as bamboo. I was tempted to whittle the vile stuff into a short taper and jab the eyes out of the person who sold it to me. Adding the availability of fresh exotic ingredients to the general boredom I am feeling after two months away from university and the unbearable heat of this latitude I sort of want to return to my quiet, antisocial life in my Sydney apartment, forgoing the mildly rich social life I have here in the town I grew up in.

I'm still tinkering with librsvg. I don't know if spending all my time hacking on the one project is healthy, SVGs are cool but I am not sure if I am going to send myself insane. My goal is to keep the project active enough for dom to be interested in them enough to start hacking at it himself. I guess dom really has better things to do though, Abiword is really cool. I am getting very good satisfaction from the project anyhow. Although nobody seems to be wanting to humor me by using my filters (I can hardly blame them, they have only been working for a few days) I am taking great delight from looking at the new screenshots of gnome-mahjongg and going through the tiles working out which ones wouldn't have worked if I hadn't hacked at the renderer, I would like to a bunch of working SVGs through an earlier version to feel like the guy from "Its a wonderful life" as I would gaze upon the field of half rendered garbage. This is truly the first time I have felt such satisfaction or really achieved anything from my work at all and I wonder why I didn't start earlier.

Well, my filters are working now. I only have three primitives done but already they can do some pretty cool stuff. I never realized how controversial they would be. Both Uraeus and cinamod have commented on them in their blogs. I figure that I should post my own slant on the issue:

SVG is a format that is published by W3C in order to define structure, form and capabilities so they can be common on all platforms that implement that format. It is clearly preferable to fully implement all features in the standard, otherwise there is no point having the standard. This is not my decision to make, it is not Uraeus' either, it was made by w3c.

I acknowledge that many filters can take quite a while on large images, matrix operations particularly, however such operations will not be invoked unless they are explicitly used in the SVG file. The sqrt() operation takes a fair bit of time to perform and should be used sparingly, however the sqrt() function's prototype is lying about in math.h just tempting coders to use it. Is this bad? No indeed, coders learned long ago to only use time consuming functions when they need to and it is not an issue. Why shouldn't artists as well realize what they are actually telling the poor computer to do when they specify some huge filter chain. Humans should be stopped from committing suicide by hanging. Does that mean we should ban rope?

Oh, well, I stated my opinion on the subject. I will keep working on the filter system and after that I will work on another set of new features and just hope that nobody abuses them


When I first started using advogato my plan was to include as little personal content or introspection as humanly possible. Well I messed that policy up with the last entry and I am starting to feel a little uncomfortable having it on a publicly accessible page.

My Beloved Filters

So on to technical matters: My filters are going on quite nicely, I have the framework for them running and the only thing that doesn't work is actually the loading of them from a file. Filters should be supported in a shot time.

The Odd Gentoo Experience

A friend of mine installed gentoo yesterday, the thing is that he had never used linux before. I don't know why I ever told him about it, but really it was the only livecd I had lying around. I warned him against it passionately, suggesting redhat or debian instead but he refused to download another distro's ISO (he was on dialup).

The odd thing is that without any more experience with unix than using OSX he booted the gentoo livecd. Then he proceeded to bootstrap gentoo from stage 1 without my help or the help of any other linux geek. I was shocked, I thought that bootstrapping gentoo would be enough to turn anyone off linux if that was the first time they had used it, but no, he's was loving every second! When I finally got around to his place to help him set up he was half way through emerging the base system. I apologized, because I was a little embarrassed since I knew he thought that all distro's were as counter intuitive as gentoo because this was his first experience of it. He needed no apology however, he seemed to be frolicking around in front of his keyboard like a happy little squirrel having more fun than I have ever seen anyone have. I then unpacked my computer, set up apache to share my distfiles directory, plugged it into his computer with a cat5 network cable and set his gentoo mirror to my ip address. This impressed him no end for some strange reason as the files retrieved almost instantly. We then set it to emerge his base system and went to chat up the hot chicks on the beach. We were not that lucky on the beach, a pretty group was just leaving when we got there but there is always another day.

We got back, the base system was done, so we configured the kernel (2.6.1), it worked perfectly the first go, even though my newbie friend configured most of it and soon enough we had booted a gentoo installation off the hard disk. We got X and gnome installed and eventually we installed dvd ripping tools and other such stuff.

Now my first-timer mate is thrilled with his installation, he loves its speed (he can encode divxs twice as fast now), he loves how one can customize and optimize it, and he loves all the fun things one can do with it. He wasn't at all annoyed about how long stuff takes to compile.

I have never really recommended gentoo to anyone, I use it myself, but I am constantly frustrated by it. It has driven many a seasoned hacker to annoyance, I was certainly hesitant about helping this guy with it, however it is strange that someone who has used nothing but macs for 15 years with a little bit of XP for the last six month was able to set up his gentoo system almost independently, and I am sure he would have been able to do it even without me.

"A gentoo user is a debian user with too much time on their hands" --Caleb Moore (me)

Life has been pretty much as normal over the last few days. I am still coding librsvg filters, they seem to be going quite nicely although they don't actually work (or even compile) yet. I am enjoying my holidays, I have been playing some golf and getting into a few flamewars online. I happened to notice in mpesenti's last entry his lamentations of such flames, I kind of realize that I may in fact be the reason for this. I guess my flames wern't about epiphany so I doubt I was, but still, they were ample in number and offensive in nature (and excellently written in my own extremely humble opinion) and I am sure they vexed someone even if they didn't blog about it.

I have started to realize that if I am trying to fit into a community then maybe the best idea is not to blow my top and "shoot my mouth off" whenever an OSNews article is posted on its forums. Uraeus mentioned that he would like to see me on planet.gnome.org and my resolution is that before that happens I will try to stop pissing people off. It would seem inappropriate to have my diary entry, next to a badly taken picture of my ugly face with the faces and entries of the people that I am currently tirading against above and below mine.

I would have to say that I mainly suffer from the "slashdot complex". It takes some transitioning between slashdot and gnome. For example in slashdot Havoc Pennington is some kind of one dimensional grinch character, the type that might be played by Tim Curry or Christopher Lee. Someone who seeks only to destroy options, usability and fun the same way an antagonist on captain planet would seek to destroy the ecosystem simply for the hell of it. However in the gnome community he is more of a comrade (even though I don't know him personally), one is of cause free to dislike him if one wants to, but one would not be modded to +5 for doing so.

That said, morons need to be shown their place and if I don't flame them who will? Some jerk on slashdot implied earnestly today that mars was owned by America. In my reply I used more colourful language than a sailor on crack could say in a month and I make no apologies for this.

I am now implementing filters in librsvg. I enjoy doing such things because writing per-pixel algorithms seems to be one of the things that I like to think I am good at. I always enjoyed that sort of thing and have been doing filters and other graphical manipulation code since I was about 12 (no, I am not joking, I just had a very nerdy, depressing childhood).

Back then of cause I only could use QBasic. If you have never seen a DX386 chugging along doing an erosion algoritm in an interpreted language your life is effectivly a week longer than it would have been if you had. And of cause I didn't have your fancy off-screen pixmaps back then either (I guess most people did, I didn't because I was using a stupid language where you can't declare an array big enough to fit in a 640x480 screen). Now I am coding these filters in C I really appreciate the fact that I don't have to cut my screen in half and copy backwards and forwards betweeen the halves just for a simple blur (not to mention how difficult and pointless a blur is in a 16 colour palette)

The most challenging part of this rsvg thing is actually integrating it into the library itself. If I was coding it myself from scratch I would have used DOM, or failing that I would have used SAX but stored the objects in structures like a tree so I could go back to other information in case I needed to use it again (like multiple instances of an object etc.) Librsvg on the other hand renders everything as it reads it while only preserving data that has been explicitly placed as definitions and even then without their original heirachical context, which makes re-instancing (Is that even a word?) groups impossible. This will need to be fixed in the future, however the annoying thing at the moment is that since it does not preserve the data at lower levels, it relies on stacks for things like transperancys, which means I'll have to code a filter stack, or hack another stack to cover filters as well.

I am starting to like this advogarto thing, I am running into people that I have met before like Penix who I attended a lan with where he refused to run even a pirate copy of windows, so I couldn't kick his arse at anything but UT or Q3 :), and Stevey who contributed to late (my crappy game)

This is my first entry so I should probably introduce myself.

My name is Caleb Moore. I live in Kingsford which is a suburb in Sydney, Australia. My time is spent as a student in the University of New South Wales, as a Free Software coder and also squandered away in many futile activities. I am, at the time of writing this: twenty years of age, one hundred kilogrammes in weight and a bit over one hundred and eighty centimetres in height. But such things seem of little import on the Internet.

Throughout my life I have held by my assumption that since I am not interested in my own life in the slightest that nobody else would be either. I now realise if one is browsing the web at four A.M. when one has little purpose, anything is worth reading. Due to this realisation I have joined up to advogato and have became certified a couple of times in order to spread my inane babblings to the world.

Being socially awkward but a skilled coder has lead me in the past to sometimes wish that society could be expressed algorithmically. Ironically, Advogato seems to be such a society but I can currently understand less of it than the real society I humiliated myself in during highschool. What I have gleaned is that I have a distance from a seed of 2 (Alan->Uraeus->Donscarletti) which gives me a capacity of 200. Although I currently do not understand what that means, I suspect that it means that I am not being ignored as thoroughly as I possibly should be.

Currently I am involved with the Gnome project, specifically librsvg. It is not my first project, nor even my first Free Software project (the honour for that goes to late, a little computer game which's sole redeeming feature is that it only took me a few hours to write). My participation in the Gnome project has been mainly centred around scalable vector graphics. My first experience with them was with the sodipodi-flags project, a project where the flags of the world are drawn in a scalable format and distributed so they can be used as a resource for any other project.

The ability to be used as a resource was what got me into librsvg. The sodipodi-flags project was part of gnome, but gnome however couldn't render them properly. This had to be fixed and since I was the one who wanted it fixed, I was the one who did so. I have since kept contributing to this project, however my contributions have become regrettably less frequent over the last few weeks.

I think I should give a bit of background information about librsvg. Librsvg is, unsurprisingly the library in gnome for rendering scalable vector graphics. It job is very simple in essence, to load up a file, render it as an SVG and dump it out as a GDK pixmap. Librsvg is also pretty much a condemned library, as its cairo based competitors grows its usefulness wanes. However it will still be used for many versions of gnome to come despite this both because of the incompleteness of the alternatives and the difficulty of converting the applications that have it as a dependency.

Librsvg is not by any means a complete implementation of the svg format, and that's where I come in. I try and make it more true to the original specifications. Interestingly the project was started by Raph Levien so if I wanted to make some comments about what I think about the structure of the librsvg codebase this would be an inappropriate medium to do so in.... Lets just say that attack resistant trust metrics was not the only thing that he has coded that I have found hard to initially understand ;-)

Apart from that I usually write games, quite a few games actually. However I seem to often loose interest fairly soon and they are rarely finished. The work put into them is often lost. However I have resolved that the next time I start a promising game that I will dump it into sourceforge and recruit a few interested people so it will not fall into the same dismal end that the earlier ones did.

Anyway. I think that this serves as an introduction and I will leave it as this.

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!