[lang]

Present Perfect

Personal
Projects
Packages
Patches
Presents
Linux

Picture Gallery
Present Perfect

Karma

Filed under: General — Thomas @ 10:11

2006-05-28
10:11

After rippling a negative karma wave through the GStreamer Universe with my build cleanup that triggered a registry problem when using packages of GStreamer with the name and origin set, I felt I had to restore the balance. So I commited a patch that forks during registry building to make sure that the main GStreamer process doesn't keep all the plugins opened after scanning them to rebuild the registry.

It seems to work fine here, wondering if forking is too much of an overhead in all cases. But compared to the overhead of gnome-settings-daemon or mixer_applet having the bad luck of being the first one to run after an update to plugins and eating a lot of memory because of it, this seems better.

Cortado 0.2.0 “Broken Record” released

Filed under: Fluendo,Hacking,Releases — Thomas @ 15:17

2006-05-19
15:17

I've got soul
but I'm not a soldier

A movie paints a thousand stills, so first of all ...

If you didn't see a hairy movie, there are two possibilities. Either your aggregator strips embed tags, in which case go here to see it. Otherwise, you are probably missing a Java plug-in for your browser.

this video was made from photos during Kristien's stay in China.
Thanks to Jan Schmidt for the idea and the hard work.

Cortado is an implementation of the GStreamer 0.10 design, but completely in Java. It has plug-ins for Ogg, Vorbis, Theora, Mulaw, JPEG, Multipart, HTTP and Audio and Video sinks. It can be used to play live streams and on-demand streams. On-demand streams can be seeked in (as you should be able to test in the applet above).

Cortado is completely free and an open project. We welcome other people trying it out and hacking on it. Several sites are already using it in production today. In short, if you want to producer or serve video, all the tools are available to do so in free formats.

For more information about this release, check out the release notes or go to the Cortado home page.

dented

Filed under: General — Thomas @ 21:48

2006-05-15
21:48

Warning for collagues: possible whine ahead

I have a - possibly irrational - fear of dental procedures and dentists.  I'm pretty sure I'm not alone in this.  While Andy now probably has eternal complaining rights about teeth problems (no, I'm not telling - ask him if you want to know), I've had my fair share of fillings, drilling, nerve removal and tooth extraction.

That was all on the good side of tolerable as long as I had a very nice and friendly dentist who always stopped when things hurt and never lied to me, back in Belgium.  But it goes over the other side once you move into a country where you don't speak the language natively - a useful skill to have when a drill is hurting you like crazy (even if only psychologically) and you are fearing for your life and would like to express that feeling eloquently.

It gets worse if you have to find a new dentist that you don't trust at all yet, and it doesn't help that Spain does not even partially cover medical costs for dental work.  So the last two times I had a problem, I made an appointment back in Belgium, and since Belgium has some nice strange policy of allowing you to continue your medical insurance until up to two years after you stop working in Belgium, that was all fine.

Up until a month ago, when I was flossing and out popped part of a filling in one of my molars.  Yikes.  I was too slow to catch it, and it rebounded off the marble and into the drain.  Apparently this is not really a big problem as long as it doesn't hurt, so after the initial shock and calling some people to check how big of a deal this really is, I decided to first try and make an appointment with my Belgian dentist.  I wouldn't have minded paying full price, since it would have been the same in Spain anyway, right ?

Unfortunately she was on holiday during my next visit to Belgium, and it's not something I want to wait more than a month for :) So I started looking for a dentist by asking around, and apart from my boss who goes to a clinic in his village it seems no one around me has  actually gone to a dentist here.  And all of them had horror stories about double repeat visits to fix a toothache or something like that, where they ended up going back to their country of origin where they started laughing at the discovery of the wrong tooth being filled.  All in all, very confidence-building.

So, time for a Google.  I found a Belgian dentist that speaks Dutch and went over.  He gave me a temporary filling, signed me up for a first evaluation visit, gave me an address to go to to get pictures taken, and sent me off.  A week later, I went for the pictures, they evaluated, and presented me with two pieces of paper, one to be done "soon" and the other with "suggestions".  They both had three columns with pricing info - one column for "official price", one for "our price" and one for "our price if you subscribe to our dental plan for 45 euro a year".  That last column was the cheapest, a mere 712 euro for two fillings, a crown, and a night brace (because apparently I grind my teeth a lot during my sleep - they claim a lot of people have that problem these days, and both dentists assured me they used one too.  Yeah, sure).

And the 712 euros is a discount partly because I agreed to pay in full in cash on my next visit; otherwise it's 3% more.

Now, the money is not the biggest issue. I'd probably gladly pay double if I were assured there would be zero pain involved.  But now I'm scheduled for a good five sessions over the next month, the first of which is tomorrow morning, and consists of removing the filling, filing the tooth, deciding whether the nerve needs taking out (boy, do I hate getting my nerves taken out - don't know if it's the smell of burning flesh invading my nostrils  for over an hour or the constant flapping of the rubber "napkin" stuck down my mouth), and then putting a crown on it.  The dentist will probably have to figure out as he goes that for some reason my metabolism is very resistive to anaesthesics (a previous dentist joked that I shouldn't be too worried dying from snake bites if I ever get bitten), and I'll be locked to a chair for over an hour trying to think happy thoughts.

Oh well - it's all for the better isn't it ? If you don't hear from me again, at least you know what I died of.

A change is gonna come

Filed under: General — Thomas @ 22:55

2006-05-14
22:55

So, Kristien was offered a job at (what used to be) Belgium's biggest radio station before she left to China, and after some to-ing and fro-ing it was decided that the offer was too good to pass up. As a radio presenter jobs are scarce, and helping a big station back on its feet is every presenter's dream. It's all gone pretty quickly since then. She started last week.
The day before we left for Belgium to get her set up, we decided we had some things to celebrate and went out to Comerc 24.

00017.jpg
It's a restaurant owned by one of the helper chefs of El Bulli. El Bulli is a world-famous restaurant where you have to book more than a year in advance and the kitchen is more chemistry than cooking. Comerc 24 is still expensive (we paid over 160 euro for the two of us), but slightly less experimental as well. We got a nice range of around 15 tapas, of whic the truffle-serrano-cheese bikini was probably one of the best, and the codfish foam probably the weirdest.

00010.jpg

Part of the move involved moving Kristien's studio to Belgium. Kristien's studio consists of a PC running Linux, a Hammerfall 9652 card (which has 16 digital channels - well, actually 18), a VoiceMaster Pro for the sound processing, and a great voice microphone. The machine here has software RAID, so I took out one of the two IDE drives, and made sure that the other drive was online on the home server so I could log in later and take a peek at the config of the machine in case I messed something up somewhere. We put all the equipment in our luggage before going out for dinner, so we could just go to bed after dinner and get up at 6 in the morning to get our plane.

Sadly, when we got back from dinner, the home server had locked up. On further investigation, the machine had crashed and its hard drive had died. Have I mentioned before I have terrible luck with hard drives ? Well, since I was already planning to upgrade from FC3 to FC5 on that machine, I might as well just do it now. I had a bunch of spare sub-60GB drives lying around, and after the usual fiddling of getting a CDROM drive installed in that machine (this BIOS actually refuses to boot if a CD-ROM is a lonely slave on the IDE connector !), it was installing again.

I had stored most of the config of that machine in subversion using a great hack of a tool I wrote (more on that later), so it wasn't completely painful to restore the server back to a working condition - but it was still 4 at night when I turned in. Needless to say, I was wasted when I woke up two hours later to get a cab to the airport. We got to Kristien's new apartment (she's moving in for a couple of months with a friend of her until she knows what's happening next) and started looking at the room to put the studio in. We went out in search for a table and a chair, passing by 50 (I kid you not) furniture stores in one street, but all of them were antique or Thailand import or whatever, so no useful and affordable tables.

The next day was spent installing the machine and fiddling with the sound card and connections. The problem with digital audio is that everything has to work all at once before you actually get anything out of the system. With analog, you can connect stuff, try stuff, and listen to what the problem is, and figure out from hearing the problem how to fix it (noise, levels, ...) Digital is too expensive for a normal person to actually have lots of equipment lying around for (like other sources or input plugs), let alone testing equipment. And if everything's connected but there's no clock driving, you still don't get anything.

My particular problem was much more insidious. I had spent a good four hours fighting with ALSA and the mixer and JACK and so on to reproduce the same settings as I had at home, but not being able to get a single sound into the machine. In the end, I rebooted to start from scratch, and suddenly recording worked. I went through each of the mixer settings step by step again, noting their effect one by one - the Robert Pirsig approach - until I noticed that one toggle (innocently labeled "Channel Passthrough" or somesuch) actually made the card unable to record anything ! Yes, toggling it on and off made the card useless until I rmmod'd the kernel module. So that was the cause for my four hours of fruitless twiddling.

Seriously. It's a toggle. flipping it twice should act as if it was never flipped at all. But I guess in the quantum-mechanic world of alsa, anything's possible.

We found a decent chair and table the next day in a store in Gent, and we went back to Brussels with the chair and table under our arm on the train. In those four days of stressing to get the studio finished, we luckily also crammed in some time to go to a friend's surprise birthday party and a live karaoke evening in Gent, but that was it. Everything else was hard work.

But hey, Kristien's voice studio now works again, and sounds good, and runs on all Free Software. And Conrad, I even got her to use sweep this time !

Meanwhile, Kristien will be on-air tomorrow for the first time in a while, replacing someone else who went on a holiday to ... Barcelona ! I'll have to cut tomorrow's meeting short to be able to listen in. You go girl !

And the good thing is, since Kristien took a 60% job, and has to mainly do replacements for people going on holidays, that means she will have regular weeks off, which she can spend back home here.  Funny how things all work out on their own.

GStreamer 0.10

Filed under: General — Thomas @ 21:11

2006-05-10
21:11

It's been out for almost half a year now. In that time we've done quite a few releases of all the modules, and things are improving at an incredible rate. It seems we're collecting more and more momentum along the way, and we're getting good feedback. We get a lot of bug reports, a fair fraction of which come with patches, which is excellent. And the GStreamer team is fixing those bugs at a good rate too, so our bug total is not growing out of control.

I've been told Bastien removed the 0.8 backend from totem today, which is excellent news. When you compare the 0.8 and 0.10 versions, the difference in stability and seeking is so big that you'd never want to use the 0.8 version again. The only big thing it's still lacking is DVD support. And all that really needs is a motivated hacker. Given how Seamless, a command-line DVD player with full support for menus and subtitles, works amazingly well with 0.10, there's no real technical obstacle to finish porting the last DVD elements to 0.10 and use them from Totem.
Development of Pitivi is more focused now, and it seems to be paying off, as it's now getting more usable on my system. Jono Bacon is working on Jokosher, the multi-track audio recorder. It's good to see new outside people coming in and reporting bugs.
Jono mentions in his post that he thinks he's finding bugs because this is the first time people are writing applications for non-playback cases. This is only partly true - adder has been around since 0.4, and for the use cases people used it, it has worked fine up until 0.10. With some of the core redesign, it broke for its primary use case - adding audio tracks on the fly to be mixed. Bad, surely - but probably a side effect of 0.10's focus on achieving perfect playback. Personally, I was so busy with other stuff (Flumotion among other things) that I never got back to porting the jukebox python example to 0.10, and never noticed adder had gone south this badly. In any case, people had been using adder without problems before 0.10, although Stefan was running into problems during 0.8 for his particular use case.
By now, Wim fixed adder, and it seems to be working well, so I should finish that port of the jukebox.

This week is the first time I'm writing some actual C elements for GStreamer 0.10 myself - it's been a while since I've last written one. I'm writing a payloader/depayloader for our Data Protocol, which is used in the TCP elements to be able to connect pipelines over the network. It can still be confusing to write elements, but it's great to be able to go through all the documentation and compare with the elements you know you can trust for correct implementations in core and base.

It's also a lot more fun to develop these driven by tests I write - writing the out-of-the-box behaviour I want first, and then implementing things in the element to make the tests pass. I've written most of the elements over the last few days while on holiday in Belgium, with lots of interruptions, and mostly when being on the train or a plane, so I forced myself to write the code bookend-style (meaning, writing the code from the outside in - writing start and end of a function, making sure I mirror allocations and deallocations correctly and things like that), putting in appropriate FIXME's every time I needed to hibernate so I could dump state for later.

While writing these elements I of course ran into some corner bugs again in GStreamer, or just some things that nobody is using because they obviously do not work :) But it's getting easier and easier to slice through the multi-level GStreamer cake.

At the moment I'm working on a bug I'm triggering in multifdsink for which I need to change the way it handles streamheaders. But I'm being a good boy, and first creating a unit test for multifdsink to codify the things it already does correct for streamheaders today, before changing it to take my case into account.

The fun thing about writing tests is that you always start with the easiest possible test case, and always think "writing this test is stupid, because there's no way this can go wrong, but let's flex our mental muscles first", and invariably something does actually go wrong somewhere. In this particular case, the simplest thing I did was creating the element, setting it to PLAYING, pushing a single buffer, then going back to NULL. The element was leaking the buffer passed in.

The good thing is that most problems we find are problems like these - small leaks that happen outside of the steady state and are easy to fix once identified. In that I think our unit tests and their valgrinding are helping immensely. Instead of acting on the belief that you're working on a decent project, you can have some practical verification that your project is improving steadily.

So all in all, I'm very happy with the direction GStreamer has taken for 0.10, and the way it has started oozing quality. We still have some ways to go, but there is a very solid foundation on which we're building now. Thanks to all the GStreamer hackers over the last six-seven years !

« Previous PageNext Page »
picture