is gonna suck. Went to a bed with a smallish headache, woke up with a splitting one. I think I'm going to go for the low brain activity tasks today. The drawback of having a job with computers is that you don't really have anything to do unrelated to computers when you could really take a break from them for your health.

Movies

Forgot to mention I finally, after seven years, got to see Swingers. This movie made me realize that I'm so money and I don't even know it.

The funny thing is, the last four years I wanted to see this movie and each time I asked for it at the video store they looked it up and told me "Uh, are you sure you want to watch it ? It's a porn movie..." and I tried to tell them "No no, really, it's a regular honest movie !"

Of course today I could just give them an imdb link to prove I'm a regular customer. I really wonder how people managed to avoid renting porn movies in the days before the internet ...

Finally got back to packaging our stuff for Fedora Core 1. Have more or less decided and agreed with FreshRPMS how we plan on packaging it. The GStreamer repository on our website will be compatible with the repositories of fedora.us and rpm.livna.org. Matthias and I will pretty much have the same set of packages, I think.

The 0.7.x will be packaged with gstreamer07 as a base name. When 0.8 comes out, that will become the gstreamer base, with 0.6.x moving to gstreamer06 for parallel installability.

I'm still finding small bugs here and there that should really be cleaned up before 0.8.x, but I'm happy that they're all easy cosmetic bugs that are nevertheless important to get right. I'm happy that I'm running into them one by one.

Fluendo

Time to announce this baby... I have to write something up about this soon.

mach

Wanted to spend some time this weekend on looking at the kernel module packaging issue. Sadly I got into a very unproductive argument with someone over mach using --nodeps to actually build the package. I should have spent my time actually working on mach itself, but I guess I got very irritated because of the person coming over as agressive and not really interested in why this was done in the first place, or that he was using the tool to something it was not intended to do yet.

That doesn't mean it's not a bug (which I acknowledged from the start) and that it couldn't be fixed. I guess some people expect their software to automatically do whatever they think it should do, and be perfect and contain no bugs.

So if you find a bug, and report it, think about this. Project maintainers get bug reports all the time. If they can choose between working on a bug that got filed by someone who was polite and respectful, and someone who came across agressive, irritated, and impolite, and all else being equal, which of the two bugs is the maintainer more likely to work on ?

Anyway, the next day I decided to really work on stuff I wanted to and not get in endless discussions again. I reworked the way quoting is used in mach so that it now can correctly execute stuff like

mach build --target i686 --define 'kernel 2.4.22' kernel-module.spec

Then I worked some more on the linux kernel macros in autostar sandbox until it was an easy patch to build qc-usb kernel modules correctly. And then I built a bunch of kernel modules :) If you're on fedora core 1, and have a simple Logitech QuickCam webcam, please try packages from this dir and let me know if it works for you.

Now I need to finish these properly for linux 2.6 too (I've heard you really need a writable kernel source tree, and all the spec files I checked for 2.6 kernel modules indeed seem to copy the whole kernel tree as part of the build process, ugh), and then I need to pimp these autoconf macros to upstream kernel module projects to get rid of their crappy custom stuff that always breaks when you're not building for your actually running kernel.

Orkut

So far, Orkut has only helped me to find people I already know and have regular contact with. That's not really what I need, is it ? I guess I'll take a break for a bit :)

cd..

It's been a while since I typed that. Must be muscle memory from the good old MS-DOS days ...

Life

Finally started skating to work. This morning I still took about half an hour to get here, so I guess I need to find a somewhat shorter route. I am getting good at not falling down, and I hope the regular exercise will make me feel a bit more healthy in general.

Felt daring and listened to Explosions In The Sky on the plane flight to
Belgium. They were playing Barcelona that night and I was missing it so
this was as close as it was going to get.

Arrived home with the living room door open and my mother sitting outside
on the terrace sunbathing at five degrees Celsius. The drawbacks of living
in a cold country.

Drove to police office to report loss of identity card and driver's license.
Made sure the police officer didn't see me arriving or leaving in the car.
Raced to the administration office to actually get my new driver's license
so I could end my brief life of crime.

dolphy wanted an authentic Belgian
restaurant to eat mussels and fries, so I took him, wtay,
jdahlin, Matthias and Noelle to some place on the Vismarkt.
Everyone was happy, though my mussels were a bit on the dry/overcooked side.

Saturday

Went to see Robert Love's talk. The place was packed. Novell cunningly
sent
a rock-star-like stand-in for Robert while
the real Robert
was probably
still locked in a basement somewhere in wintery Boston hammering out code.
Nevertheless the talk was very good, hope some people got motivated to pick
up some of the stuff the decoy talked about.

Went to see Jonathan Corbet's kernel talk, which was really good as well.
Gave me some insight in 2.6. Not sure if I'll be able to make use of it
though.

It was great to see old friends again, and I even made it onto the credit list
of Tineke's movie - it showed "the winner took them all", and then a quick list
of past conquests :) The list was quite a bit shorter than I remember it to
be however.

All of her friends from school were complaining about how Tineke got married
before them ... If you're a single guy, weddings should be your favourite place
to go.

I'm having a harder time each time to restrain myself from killing DJ's that
manage to do any of the following

download crap mp3's well below 128 kbps and use them at parties (I'll
take a listening test to prove them you really can tell the
difference any day)

download the completely wrong/crappy version of songs

manage to break off songs right before their best part

TALK between songs

play completely undanceable/crap/slimy slow songs

bring a small set of speakers, then ruin the quality completely by
completely distorting the output

Seriously, it can't be that hard to make the musical part of the evening
at least enjoyable.

Ended the evening with a nice dance though with the bride. The DJ managed
to play Disarm right before I was leaving.

Sunday

Due to getting to bed at 4.30 I slept late and missed the DirectFB and X talks
I really wanted to see. The afternoon really didn't have talks that
interested me, so I had wished it was the other way around. Tried to uncover
the Robert Love stand-in by pretending to fanboy him and getting my kernel
book autographed, but he passed the test admirably. Gave up.

Tried to stay awake and not make too much of an ass of myself for the rest
of the day. Got drawn into witnessing the formation of a new Dark Alliance
between Dag and Matthias, scary.

Got the best news of the year up to now at the end of the day. We went out
to celebrate by buying real Belgian fries from a real Belgian fries stand and
ate them in the car.

Went back to friends, watched 24. While watching I noticed a big cardboard
box that read "Aibo" on the side (Hans works for Sony, btw). I asked him
if it really did contain what it said. He said yes. I asked him why it was
still packed. He said he brought it home two weeks ago but never bothered
to try it. The nerve of some people.

I unpacked it, but it wasn't charged. So I hooked it up, then Delphine and I
played the two-player Settlers card game. Called Kristien to buy it for us
too.

After that, played with the AIBO for a while. It really is pretty well done;
it asked for the ball, it followed the ball, it tried to get your attention,
wiggle its tail, express "emotions", and so on. But I can't imagine myself
shelling out that much for it until it at least makes less noise while moving
around and looks slightly less metallic.

Monday

Spent the morning waking up. Really wanted to see the Belgian movie
Steve + Sky since everyone is saying
how good it is and it's probably not going to be shown in Barcelona.

I went into the movie really wanting to like it but got disappointed. I'm
pretty sure if this movie was in English everyone would think the dialogue
and story is crap. For me the only entertaining thing was that the movie
was funny because it was in my local dialect, and it contained some scenes
filmed close to where I live, and I also spotted my best friend's sister in
the movie.

But if the movie had been in another Belgian dialect, I'm sure I'd have hated
it.

On the plane, back to Barcelona, and happy to arrive home. Then even more
happy to realize I really feel it's home. Then even more happy and unable
to stop smiling for two days at the good news I got on sunday.

Forgot to mention that last weekend Kristien and I went shopping for a suit for me. I guess I forgot it because I mentally blocked out all memory of it. I just DON'T like to go shopping when everyone is doing the same thing and every store is filled to the brim with people. I especially don't like to go shopping when it's to buy stuff I don't feel I need. Because I like the suit I have already, but Kristien doesn't.

Anyway, so we found a suit but had a bad time finding it, and I didn't feel like explaining a lot to her what was wrong, so I hid behind Standard Guy Excuse #593059: "We just don't like shopping for clothes. We do not have breasts."

Well, that's a bit of a lie. I love to go shopping when everyone else is working, when I have the place to myself, can try out stupid stuff, and act like a kid in the booth while annoying my companion on purpose by embarassing them to hell. All of this cannot be done when there are lots of people around.

It didn't help when I wanted to go look at watches to replace my broken watch, and she tried to get me away from them. After two minutes she broke down saying she got me a watch for our one-year-togetherness. She always complains I'm too good at guessing what present I'm getting, and this time she forbade me to even try to guess. And now I managed to guess it without even trying, and it made her cry.

So baby, I should take you out for a rematch soon and do some real shopping.

City

Sometimes Barcelona weirds me out, in a good way. Yesterday there was some sort of taxi strike - a huge colonne of taxis was blocking the major streets close to work, tooting their horns. Nobody knew why.

I looked on the net for tango places - apparently I could go out and tango EVERY NIGHT. I have to get started soon.

GStreamer

Started throwing random files at GStreamer and the player to test for robustness. File number two was a tar.gz. It triggered an endless loop. After some debugging, it seems the typefinding functions serve up the file to gdk_pixbuf, who passes it on to the librsvg pixbuf loader, which tries to see if there's an svg inside it. Then when it tries to close it, for some reason it triggers an infinite loop. Not knowing anything about librsvg, I dug in and managed to find and fix the loop quickly. It taught me again I should always check for error codes on functions.

Anyway, made me think about the general problem - if GStreamer uses 50 libs, should we really trust all these libs not to have a simple mistake in them that makes all of GStreamer lock up so easily ? So I decided I wanted to set timeouts on lib function calls when we know they cause a problem.

After a day of experimenting, it seems this is possible, but a bit convoluted. Basically, the best/most portable way to do this is

start an alarm thread that listens to ALRM, or any other timer signal

block delivery of ALRM to the main thread

alarm thread should send USR1 to the current process when catching an ALRM

before calling a function, set a USR1 handler (which will run in this thread), store the setjmp point in a global per-thread hash, and set alarm

if the next function call doesn't return in the given time, ALRM is raised and delivered to the process. Since the alarm thread is the only one listening to ALRM, it will be the only one receiving it. It will then raise USR1, and since the actual thread that is calling the function is the only one listening to it, it will receive the notification correctly as well. So the USR1 callback can then longjmp back to before the blocking function, and it can thus be skipped

Fairly convoluted. Drawbacks ? Right this doesn't allow more than one thread at the same time to use this timeout mechanism (which could probably be fixed by keeping track of alarm times and setting them, so that each thread catching an alarm can check if it's meant for that thread, and reraise if needed). Also, people might complain they cannot use ALRM for their own program anymore (though we can make the whole timeout optional too, which I'll probably do). And, some people may feel this is a hack.

Well, it's not actually a hack, it's the right way to do this. Only it is so low-level that people automatically consider it a hack. I, on the other hand, feel we really should do this if we want to make sure GStreamer answers to user expectations in general. Which means, it just shouldn't lock up when trying to play a random file.

FOSDEM

Leaving tomorrow morning, yay ! Hope to arrange some paper matters too while I'm in Belgium, and visit some friends.
Now playing

Six by Seven - eat junk become junk. How this amazing disc got so widely ignored is really beyond me.

Spent most of my weekend struggling with RefDB, a database to manage bibliographical references. My dad's doctorate thesis is due Friday, and he didn't use the program I installed 20 months ago. Now, in his final days, I get to put the pieces back together.

But I never really thought xml/docbook was an intuitive toolchain to get running, and RefDB doesn't help much either because it's so completely untransparant. Tools fail silently on bad input, or fail generically without saying where something was wrong, so I spent most of my time trying to figure out what exactly it was not parsing.

In the end it turned out that the RIS file my dad gave me contained garbage control characters, and it also looked like RefDB didn't really like names with accents in (like, all the Irish guys and some Dutch guys). I also started my use of RefDB with a simple FILE* non-cleanup patch. I'm not entirely sure though I want to go through the pain of sending all stuff I find upstream for a package I myself have no use for.

Then I started thinking, man, this is probably exactly how some people feel about GStreamer. Some stuff I consider natural is completely nonintuitive to them, and things break in mysterious ways when they are run slightly differently from our local setups. I mean, I'm pretty sure the RefDB author has everything running very smoothly on his home machines...

Anyway, after 30 hours of fighting with docbook, xml, RIS files, unreadable C code, mysterious options, and unforgiving configuration files, I sort of cooked up a RefDB-based xml file containing my dad's bibliography. I hope he gets back to me soon on whether or not it's ok - you can just know he's going to want to have everything fixed on Thursday when I don't have any time for it...

Inbetween, we watched Grosse Point Blank and Antitrust. I recognized Miguel right off the bat in that very short flash. The movie wasn't too bad, it just made my toes curl a little at points. Let's just say it wasn't very believable. Grosse Point Blank was very good on the other hand.

GStreamer

Picked apart the Fedora 2 test rpms to check for patches. I just don't get why people don't submit their packaging patches upstream. The spec looks really ugly without it having to be. It also has the docs disabled, while they build fine here in a clean root. Why aren't we getting bug reports for this ?

Anyways, I guess I just have to mail and prod and make people aware that we care.

The build bot setup is starting to look nice now. We added the powerpc machine on my desk in two minutes. I'm sure the other GStreamer developers are starting to get irritated at all the random commits we're doing.

I'm sure Ronald is going to kick my ass some time soon too, but it just had to be done.

libuecp

I got a mail from someone asking about it, so I went back to check and noticed I had some stuff to change in my savannah checkout. After resubmitting keys and changing config files, I could check out my project again. It still works, I guess that's not a bad start. I have no way to develop on it anymore however as I don't have any RDS encoders lying around :)

Update

Man, our company logo is so unbelievably sexy as a favicon... I just keep staring at the tasklist at the bottom and the cute little cartwheel.

Fluendo exists now. wtay paid us a visit. Spent long days and nights at too many restaurants, too many bars, and too little time in bad. Had productive discussion with Wim. He's just amazingly good at designing. When we got sidetracked he showed me a beautiful sound server design he had prototyped, but he stopped working on it after seeing that his test code worked. Sigh, I hate that guy :) Maybe an idea to pick up later ?

Norwegians complain a lot then buy presents to make up for it :)

Discussed clocking with him too - not sure what was wrong in 0.6 with it, it seems like it was just some stuff left to implement. Will need to pick that up really soon and decide what to do.

Johan set up buildbot. Output looks nice, will be useful ! Hope we can fix the last issues with it.

Sister dropped by too. Nice to see her again, I don't really have time to miss people, they drop by anyway :) Next time have to get her over in the weekend, not much time during the week.

Spent a whole day listening to Jeff Buckley, then the cocktail bar at night was playing Grace. Nice. Sad.

Pushed out releases of nautilus-media for GNOME 2.4 (0.3.4) and GNOME 2.5 (0.5.3) Next week Johan and I will be working on fixing all bugs that are in it, but jdub needs a release now.

This week I fixed around 12 open bugs in GStreamer. Still too much in maintainer mode, fixing dist issues, breaking up modules, and so on. Did manage to finally write the unversioned frontend binaries for the tools, was happy about that. Simple idea, simple design, works as expected.

Did a release of 0.7.4 for GStreamer and GStreamer Plugins. Then did a release of 0.6.5 for GStreamer so they both use the same frontends. Tested theory of parallel installability by making packages and discussing with Matthias. Seems to work out fine. Now I need to figure out how to handle the GConf schemas. I guess I should make them versioned too. Sigh :)

Got my wallet lost or stolen. Suckage. I paid for one of the dinners with my bank card and got the money from the others, so I lost 150 euro. Should have treated them, wouldn't have cost me anything afterwards :) Will be painful to get cards and papers back.

Mailed booqbags to ask where the hell my bag is. They're sending it again. I hope this time arrives.

After two years, the quest is finally over. Three Ruperts made their way to Barcelona ! One is sitting on the Powerpc at work, one on the stack of DVD's containing three complete series of Family Guy (that sadly don't play on my PS2, so need to finish getting DirectFB output on Dave/Dina so I can watch them), and the third is keeping Kristien safe in the bedroom. I owe someone a bunch of thanks !

Got Soulcalibur 2 from Wim and Christian because they complained I didn't have any real games (Not sure how they missed great stuff like Britney's Dance Moves and Buffy The Vampire Slayer though). It's sucking up all my time, I'm going to stop hacking on GStreamer I think so I can become an expert at Soulcalibur 2.

So, so far for the short update. I'll go back to trying to be more regular now.

Getting ready to do a release. Did a prerelease yesterday, got a little bit of feedback on it. Some last minute memleaks got fixed but they introduced crashers in some plugins so I reverted them for now. We can fix them properly after the release.

I'm hoping to get into a more regular release cycle from now on.

Meanwhile jdahlin is making progress on the media test suite, it's starting to look really nice. I hope he likes his new job so we can keep him around.

Yesterday was great. I reserved the day for doing only code. I wrote a C frontend to our versioned tools so that they would be able to call the versioned binaries. This was a requisite I had for doing decent packages that were parallel-installable. It was so nice to just program one thing well with a clear set of requirements and a clear end goal. I had started feeling like I didn't know how to program decently any more, but it turned out it was quite alright.

Work

There was an idle PowerPC sitting in the design department. It's now sitting on my desk. Yellow Dog 3.0 looks really nice. I remember trying 2.x on my old powerbook, but that still had that ugly-as-hell fluxbox installer and it didn't get my keyboard right.

With 3.0 I feel right at home. I moved over some of my desktop settings, started setting up gstreamer from CVS, and installed mach to build some packages I needed to get the CVS build to work. It's nice when you can just install a tool you've written on a platform that you never tried and have it Just Work.

The machine is dog-slow at compiling though, but it'll be good for test builds and test runs.

fedora.us

Still not sure what to do there. I've reworked the GStreamer website and one of the last things on the TODO list is to rebuild the Red Hat/Fedora package area.

I have always wanted this to be completely compatible with fedora.us repositories, for the sole reason that I prefer to work with a community effort project so fedora.us's goals are more aligned with that than freshrpms.

But, I think I've been with fedora.us for more than a year now, and some fundamental problems just aren't getting solved. I agree with most of the guidelines, and have made my peace with those I don't agree with, but the sad fact of the matter is that it's just not working. The QAPriority Queue (what an ironic name) contains over a hundred packages.

Yes, they have to be reviewed properly. Yes, we don't want crap. But some of those packages have been stuck there for over half a year.

By contrast, I just asked Matthias if he could put together a gtk-doc package of 1.1 for the YDL 3.0 machine I installed today, and it's no problem at all.

So, even though fedora.us wants to be a community effort and Matthias likes to go at it alone, I have to admit that at the end of the day, as a packager of GStreamer wanting to get GStreamer packages out there, fedora.us is not working as a solution to that problem.

I've been procrastinating updating packages because I don't like working towards a solution that I don't know yet. So today I make the decision to change the solution. The solution will be to promote both fedora.us and freshrpms as viable packaging solutions for GStreamer, and let the users decide.

With that settled, I can stop procrastinating on getting packages built, and get on with it.

I am pretty sure it doesn't like me. Tool's Aenima album is filled with amazing tracks. There's one stinker on it, "Die Eier von Satan", which is some German guy rattling off the recipe for satan's eggs, and there's some filler on it in the form of a wheel organ ditty.

What does Rhythmbox give me on the way to work ? Two times the ditty and three times the stinky song. My day is screwed before it has even begun.

I'm pretty sure there's a lot wrong with both randomize functions, and pseudo-random playlist generators in general. I've noticed the same problem in Dave/Dina when trying to select random playlists based on parameters. I have some ideas on why that is but I'll need to investigate and code to test the ideas.

Matrix

Went to see the final chapter. When it was not overly hollow it was too emotional. All in all, that's two hours of my life I'm not getting back. But I owed it to myself to see it.

Time for some chores around the house. Of course, nerd chores. First task at hand was to have an automatic updater for my dyndns account set up.

Felt like an old-school hacker when I cooked up an expect script to retrieve the assigned IP address from my NAT Nokia router through telnet; five minutes of work after understanding enough of expect to see what I want.

Then tried this with ez-ipupdate, but that only allowed me to set the address on the command line, which when run as a daemon from init is no good of course. Started putting in an address-command argument to ez-ipupdate, but after going through the source a bit which was full of static vars and irc-daemon-like maze code, and also after seeing that the included debian patch in the .src.rpm was so huge that the original was even more messy than I thought, I gave up.

ddclient seemed to have an option for running an external command to get the ip though, so that worked out fine as an alternative.

So, that was two hours wasted.

Second task was making sure the bits from fedora.us and rpm.livna.org get mirrored. I would love for someone to write a very simple program that sets up mirroring scripts for you based on collections of files you want. I don't want the whole fedora.us mirror, just stuff for RH9 and F1, and only stable, testing and unstable.

Having to write these scripts manually all the time (in this case, with lftp) is a pain.

Another hour and a half wasted.

Dave/Dina

Finally started doing some work again, prompted by another user trying it out and poking at bugs. Started with figuring out a better layout for the package tree, making sure the online and local one are in sync, and starting to fix bugs by rebuilding packages. Will take me some more time this week

Weekend

jdahlin dropped by last night. We were wondering how it was going with him. He stayed for dinner and a movie, "Love and Sex". Quite alright, and Famke Janssen is never bad to look at.

To rent movies I needed a copy of my appartment rental contract and my NIE papers. The video store also had a Lego Mindstorms set for sale, which prompted a discussion between Johan and me. I have an expensive Mindstorms set lying around doing nothing. So Johan suggested I do something really useful with it, like, pushing the eject button on a floppy drive.

But then it hit me - I have a very simple Mindstorms project that could benefit Dave/Dina.

See, I have this one remote that, by typing in some codes, can emulate any of 200 remotes. Yesterday I was thinking that it would be nice to have all these config files out of the box to choose from, but it would be very painful to push all those buttons.

But, if I made a lego machine to push the buttons, and a LegOS app to control it, and have it communicate directly with lirc so it can ask for another keypress when it didn't work well, I could easily let the thing run for a day to make it learn all the codes !

Hm, that really makes me want to try LegOS and see if this is possible, I need to poke some friend who knows about LegOS to check :)

GStreamer

Still spent more time fixing up docs, adding API to the doc build, still busy with the website, still busy with cleaning up some of the error stuff. I fixed up the player library and the player to actually display these error messages.

So, when an error comes up, you get this dialog. And when you click on Information (which really should be a "Debug Information" button), it gets replaced with this dialog.

I like it, because if users send us the debug information we can check where the error is coming from.

Still, UI wise I would prefer the original dialog would expand to show the debug info on clicking Information...

Tomorrow is Johan's first day at work. Wish him luck, he'll need it...

After long periods of fretting over it I decided to just go with a basic autoconf/automake/xsltproc setup for the whole site, and use rsync to manage the huge data/ dir.

Using autoconf and automake might seem overkill, but I really really wanted to use nonsrcdir builds so I could keep the actual online content free of build crap (except for Makefiles of course)

Right now I just need to add big bunches of content and scrub the old cruft.

I'm almost done. The reason it's taking so long is that I keep having second thoughts about this being the right way to do it. I still don't know, but I've given up fretting and decided to just plough on and make the content up-to-date, then force the rest to help ...

If someone is really good at XML/XSLT and xsltproc stuff, I'd appreciate it if you looked over

update: On the day that everyone receives .zip files from everyone else through some virus, someone at intel.com sent me a zip file containing a 207-page word document of a GStreamer manual and plugin guide he wrote. Scary stuff. Sadly it contains a lot of cut and paste from our documentation. I wouldn't know what I'd have done though if it was 207 pages of goodness, which would take 207 days of pain to cut and paste to our documentation :)

Still, I wonder - why didn't he propose to work on our docs in the first place ?

Life

So jdahlin found a place. I hope I can visit him soon. He starts monday.

This morning I woke up too early so I played some more Buffy . (The PS2 game - I gave up playing real life Buffy when my lifesize vampire dolls got staked one time too many). Of course since you can only save at the end of levels and the level took 40 minutes I ended up being too late at work again.

Then I overcompensate again by staying way too late and upsetting my girlfriend.

I love my life and the way the only real problems I have is stupid stuff like this.