At CE Linux in Grenoble

I am currently in the town of Grenoble in France, attending the CE Linux conference. Or rather the official conference starts tomorrow, so today I am attending a workshop hosted by ST Ericsson talking about their open source effort around the Nomadik platform, more specfically the NHK-15 platform. Looks like a very interesting piece of kit and I also got a nice development board to take home. Met a few known faces already here, for instance Dave Neary is also attending the workshop today, but I am sure there will be more people when the official conference kicks of tomorrow.

Anyway, if anyone else are attending CE Linux and want to talk about Collabora, GStreamer, Telepathy, PulseAudio and so on, be sure to look me up.

I also noticed that I tend to try to speak Spanish to everyone here. Not sure why, but I guess my mind on some level assume that they might have a better chance to guess what I mean if I speak Spanish and they only speak French. Or maybe its because my new housemate, Abigail, is Spanish, so due to speaking with her my mind is now tuned to jump to trying to use Spanish words :)

Transmageddon 0.14 released

Pushed out a new release of Transmageddon today. It is mostly
about fixing bugs and trying to make things more robust. But I also added the PSP and Google G1 profiles to this release.
Remuxing should be more robust now and if it lacks the plugins it needs it will let you know and let you choose something else instead.

My next step is going to be to combine the device profiles with remuxing, so that if the device you are targeting supports
for instance the audio and/or video format used in the incoming media Transmageddon will just remux it instead of decode and re-encode it. Should eventually in combination with a AC3 parser plugin enable you to just remux Matroska files with H264 and AC3 audio to MPEG TS when you choose the PS3 profile to get a playable file. Only problem there of course is the bitrate requirements of AC3 when used in MPEG TS on the PS3.

Writing code that does nothing

My Transmageddon hacking has slowed down a little over the last few Months. But I am still working on it, fixing bugs and adding little features. However a lot of the stuff I have been doing recently is adding code to work around or detect errors. Error handling is nice in the sense its code that help my application work on computers other than my own, but it is also something which I guess people find rather uninteresting. Its like you compare the last 3 versions and from a feature standpoint they are almost identical, even though I added quite a bit of code to handle all the kind of problems people reported to me.

For instance I spent quite a few hours yesterday adding code to make sure I could handle the situation of missing audio and video parsers. Currently if you choose passthrough mode and missed the needed parser plugin the application would just hang, with a lot of ugly spew on the command line. Well thanks to changing 70 lines of code and spending hours coming up with those lines the application now handles it gracefully. Of course for someone not running into this problem the application does nothing it didn’t before.

So part of my feel that these sort of fixes are quite boring and uninteresting, but on the other hand I guess they are exactly the stuff that is the difference between an application that obviously was never meant to work on any system apart from that of the application writer and an application that most people can actually use. And when people tell me they successfully used Transmageddon it do make me more happy than when I am told they tried it and it failed horribly. I mean the point of releasing Transmageddon to the public was not to make them familiar with python error messages :)

I have a small question to the more python savvy people out there though. I have been trying to set a environment variable for Transmageddon in python, but so far it doesn’t seem to work. If I in the shell do:
export GST_DEBUG_DUMP_DOT_DIR= "/tmp"
that works fine. But if I in my python code do
os.environ["GST_DEBUG_DUMP_DOT_DIR"] = "/tmp"
os.putenv('GST_DEBUG_DUMP_DIR_DIR', '/tmp')

neither of them seem to have any effect. Anyone got a clue to what I am doing wrong?
Edit: Turns out I was setting the environment variables to late in my file, I needed to do it before import gst was called :) Thanks Edward.

Dollhouse is brilliant

Last weekend I visited Jan and Jaime in Dublin. We had a great time while I was there and they managed to get me hooked on Joss Whedons latest creation, Dollhouse, staring Eliza Dushku and Tahmoh Penikett.

I guess like a lot of people involved in computing I been thinking about the possibility of interfacing with the brain as a computer for some time, mostly in the terms of transferring oneself from the body into a computer and thus achieving virtual immortality. For some reason my thoughts have mostly been about the practical issues of interfacing with a computer (the brain) that was never meant to be interfaced with.

Joss Whedon though with Dollhouse has taken a step back and are instead looking at the social and psychological impact such an option would have. Of course wrapped in an entertainment wrapping, but profoundly interesting non the less. I recommend that if you haven’t seen it you should, the first season is already out on Blu-Ray. Joss should start making series for HBO instead though, think the freedom that would give him would enable him to take his series to the next level.

It also has to be mentioned that Jonatha Brooke has written a brilliant theme song with What You Don’t Know, I even ended up buying it from iTunes.

Computer missery

So after my old laptop starting having hickups a couple of weeks ago I decided it was time for me to get with the
times and get myself a new machine. Due to heavy peer pressure at the office I ended up choosing a Lenovo Thinkpad x200s. The machine arrived and I was kind of excited to have such a nice, small and nimble system. And having gotten a Norwegian keyboard for it I could finally write œ,ø and å with ease again. Unfortunately as it turned out the suspend and resume functionality of the machine wasn’t quite at the level I expected, or rather it tended to suspend much better than it was able to resume, which kinda sucked. And considering it was not a especially cheap machine I felt it was rather unacceptable. So after switching back and forth between misc linux distributions and Vista, and doing a couple of bios upgrades, I decided it was time to send the machine back to Lenovo as I assumed it had to be some kind of hardware issue.

In the meantime it was back to my old Asus. Which would have been fine apart from two things. First of all the 3rd party Maplin power supply I got when the official Asus one broke has a built in fan, often making a sound so loud that a helicopter could use it as sound cover. But an even bigger irritation is that it seems the plug is a bit faulty so I know end up having to press the plug continually with my finger to have it give me laptop power, which as one might guess is somewhat of a hindrance when using the machine.

So now I am left in a situation where I spend my day cursing Asus, Maplin and Lenovo in turn for the misery I am in, at least until my new machine hopefully will be returned in working order sometime next week.

My laptop misbehaving would not be such an issue normally during the weekend, but this weekend I need to do some correspondence on it, as I am trying to sort out getting a new housemate after Ian sadly, but understandably, decided after 3 Months of commuting to London that it was an soul consuming situation for him and that combining living in Cambridge with working in London wasn’t something that he could continue doing.

Urgent bugfix release of Transmageddon

Seems I did a very classic mistake with the new Transmageddon release I did this weekend. I was about to release, but at the last minute I decided to add MPEG PS support as it was ‘only a few lines of code’. As it turns out those few lines where enough to break the profile support and thus things like the iPod profile ended up broken.

So a new 0.13 release is now available fixing the profiles again. And to show the world I haven’t learned the lesson I also added drag and drop support in this version. So you can drag and drop a file from Nautilus onto Transmageddon and it will be put into the filechooser for you. This feature came about due to extensive nagging from Stuart Langridge and cut and paste code from the pygtk FAQ :)

So if you tried 0.12 and the profiles didn’t work for you, try 0.13

New Transmageddon release

Finally managed to sit down today and clear up all the lose ends I had left in the code since GUADEC. For instance in my mind remuxing was ‘done, but when I started testing and looking at the code this was not the case at all :). To celebrate these cleanups I pushed Transmageddon 0.12 today and I hope it will work reasonably well for people. The major new feature available is the remuxing support, which will let you keep the original audio or video track in the file. Stability should also be a little bit better as I added more error checking, but there is still some way to go there. Things should work fine as long as you got all the GStreamer plugins needed, but if you don’t your success will vary on what type of plugin is missing :)

Also added ASF and MPEG PS support in this release, but in order to create those you need either latest release of gst-plugins-bad for ASF or git master for MPEG PS.

Transmageddon now also sports its own icon thanks to Emily and Liam of fightingcrane.com, a big thanks for that.

Screenshot of the latest release also available of course.

Sorry for taking so long to get this, but I was trying to get DVD ripping support in, but that effort stalled unfortunately. Focus for next release will be to switch from Glade to GtkBuilder and add some more device profiles.

New Collabora website launched

Today we launched the new Collabora website. I am really happy with it as it much better represents who we are and what we are doing now. Collabora is a fairly sizeable company these days with over 40 developers and 3 offices, not only that we had a few cases with the old website where people have told us that they looked at it and assumed we didn’t offer the kind of services they where looking for, hopefully that is a thing of the past with this new website.

Another goal with the new website is to make it easier to update, so hopefully we will be able to both add more content more easily now and of course improve the text that is already there as we go forward. A big thanks to our project manager Sumana who has been slaving away to get the new site launched, writing a lot of the copy herself.

Anyway, I go back to adoring our new Collabora website now :)

Summary of this years GStreamer Summer of Code

Seems we had a very good Google summer of code this year with 5 of 5 projects all crossing the finish line and all resulting in mergeable code. I think our approach this year of doing less ‘blue sky’ and more clearly defined tasks worked out very well indeed.

To summarize the projects.

asfmux and asf rtp payloader – Thiago Sousa Santos finished this task very quickly and I have been using it with Transmageddon for a while now. The plugins are already merged into plugins-bad and as soon as it gotten more testing and exposure I think we would be ready to move it onwards from there. Thiago hasn’t been resting on his laurels after completing the muxer though, instead he has started hacking on porting our muxers to a new collectpads implementation which would enable us to support muxing things like subtitles into the files, which is needed for things like supporting subtitles in mp4 files for the PS3 for instance. Outstanding work.

MHEG support – MHEG is the DVB standard that allows functionality such as being able to press ‘the red button’ on broadcasts in britain to get further information or alternative TV streams, BBC for instance got this on Freeview.
Miquel Àngel Farré has been hard at work on this task and the patches for it is either in GStreamer already or will be merged once the current freeze is over. Some further integration work will be needed to enable this in for instance Totem, but that work is also underway. A big step forward for the DVB support in GStreamer, which already has seen GStreamer getting picked up to do TV set-top boxes and similar.

Support for Avisynth filters in GStreamer – Ruslan Ijbulatov has been working steadfastly on this and solving issues as they have arisen. The current code allows you to recompile any Avisynth element towards GStreamer, for use in GStreamer pipelines, with just some slight tweaking of the original code. While the original goal was to allow the use of these plugins unmodified this turned out to be untenable during the course of the project. Our new API though should make it easier to make avisynth filters cross platform. The code to enable the Avisynth filters are currently GPL as it contains code under that license from Avisynth, but we hope to get permission for a relicensing the parts of Avisynth code in there to the LGPL, so that if the avisynth plugin writers are willing we can get access to those plugins under a license better fitting GStreamer.

Ladspa2 plugins in GStreamer: David Robillard has been working on enabling the use of LV2 plugins in GStreamer. As the project name implies it was a project to enable the use of the new generation of LADSPA plugins from GStreamer applications, so that for instance Jokosher can get access to the new and improved LADSPA2 plugins. The project proceeded very well with most of the core code committed before the halfway evaluation of the SoC and the second half being used on polish and extension support. The code should be ready right now for projects to start hooking into these new elements.

MPEG PS muxer for GStreamer – Lin YANG has been pushing hard over the last weeks to get this over the finish line, and while the code is not yet merged into GStreamer git the muxer is ready and will be merged after the freeze. It is really great to have this muxer in place now as it basically means we got full muxer and demuxer support for all MPEG formats. Lin has also been working on some patches for our h264parser and the mpeg ts muxer, polishing up some rough corners here and there.

All in all I am very happy with how things turned out and combined with the much improved AMR support which Iago Toral Quiroga worked this summer unrelated to the SoC, I think we took some good steps forward this summer. I am also very confident that most and maybe even all of this years students will be hanging around and continuing their contributions to GStreamer during the winter.

I am personally especially happy about the MPEG PS and the ASF muxer both getting done, as that means that GStreamer now got support for all major container formats for both demuxing and muxing, which will be a huge blessing for content creation applications using GStreamer(only other format I can think of that with some kindness might be called major would be the Real media format, for which we only got a demuxer currently, maybe something for next years SoC :). So I will work on adding MPEG PS support to Transmageddon too now.

So a big thanks to all the students and mentors involved this year! And also a big thanks to Google of course for providing the funding for this effort.

Losing weight

Ever since I got back from Christmas in January I been actively working out and trying to lose weight. No crazy diets or anything though, just been trying to put some consideration into what I eat and drink, by trying to avoid things like fries and cola. Other small changes has been trying to eat a bowl of cereal (like Special K and similar) in the morning to avoid buying a baguette or something to carry me over to lunch. How successful I am in staying away from the worst offenders do wary a little from week to week, but I think that is fine as I don’t want to be religious about what I eat either. One thing that makes things a little hard is that the more work I work out, the bigger my appetite becomes, so part of the struggle is to keep eating at a normal level instead of nullifying the working out by eating shitloads more.

Been quite aggressive about the gym to, going there around 5 days a week. The plan has been to go to the gym every day, knowing that there will be stuff coming up hindering that, thus ending up on my ‘real goal’ of going 4-5 days a week. I also started walking back and forth to the office instead of biking.

Anyway, so in these now soon 9 Months I lost about 7-8 kilos total. Gone from weighing 106 kilo to 98 kilo, which I think isn’t to bad a weight for someone my height. Still plan to try to lose another 3-4 kilos, but since I have started with some strength building stuff in addition to the cardio, some of that slimming might get evened out weightwise by muscle growth.

Anyway, mostly writing this blog to held motivate myself for the next push downwards in weight :)