WAF 1.5.x

WAF 1.5 has been out for a long time already. However, it changes so much of the API that did not have time yet to port any of projects to it. Additionally, it had more bugs and less portability testing when it came out, compared to WAF 1.4.x.

With the holiday season I finally found a bit of time to pick up on WAF development. First with testing the portability of WAF on non-linux platforms. I have tested, and fixed bugs, on Win32 (both cygwin and mingw, but not msvc unfortunately), and Mac OS X.

Next I started porting some projects. I have created experimental branches using the new WAF for PyBindgen, GnomePython, and GnomePythonDesktop. NS-3 will be harder, but hopefully I should get to it too, eventually. More WAF bug fixing ensued.

There's a catch. I have found some limitations in standard WAF trunk, namely the lack of a good system-command/makefile-rule system. Since I do not wish to continually clash with Thomas Nagy over my "vision" for WAF, I simply created a new waf bazaar branch, thanks to launchpad vcs imports. The projects I have been porting all use this modified WAF version. Thankfully, merging with bazaar is a breeze, so keeping my branch in sync with WAF trunk is very painless.


Antimatter Concert

I went to an Antimatter concert, in Braga. I only have a phone with crappy camera, so here's the only photo I have:

In the photo, Duncan Patterson (in black) and Mick Moss (in white), getting ready for the Antimatter performance. It was all acoustic, and it was fantastic. Also it was much more crowded than I was expecting.


Dark Tower

Today I finished reading the last of the 7 books in Stephen King's Dark Tower series. It has been a wonderful journey and I loved the ending (I read it even though the writer tried to shy me away from reading the ending).

Overall I found the books very well written, with very enjoyable story telling. I loved most of the Mid World parts; they are full of the right mixture of fantasy (The Lord Of The Rings style) and science fiction (references to Asimov robot stories). Yes, I know it's weird mix of fantasy and scifi, but he manages to pull it off. I did not like so much the overly long and predictable Wolves of the Calla, nor did I enjoy so much the frequent switches to current New York city and the latter books, as it kind of breaks the rhythm and mood.

Next on my list is book two of Bridei Chronicles. More fantasy, but this time with no scifi and with more realism (it is inspired by historic events from ancient Celtic Scotland). After that, who knows, I'll need to do more online shopping to find out...


Transcoding media files for the PS3 from Linux

While there are some good tools in Windows world for transcoding video files so that they can be played on a PS3 (optionally adding subtitles), in Linux I could not find any good instructions, after much googling. It turns out that 'mencoder' can do the trick wonderfully well (easier than the Windows GUI-based tools mkv2vob and VirtualDub), but you have to know the options to use, through some experimentation.

In case anyone else has the same problem, here's the script I am using. Besides converting to a PS3 playable format, it optionally prints subtitles into the video if a .srt file is found with the same base name as the input video file.


PyBindGen 0.9 released

Get it while it's hot:


It's far from perfect released, but API should become more or less stable starting with this release, and NS-3 is using this code with success. Also most features that I need are there.

Oh, and here's the NEWS related to this release:

=== pybindgen 0.9 ===
- Fix GCC 4.2 compilation warnings;
- Works with some GCCXML 0.9/cvs snapshots (tested with 2008-04-20),
in addition to stable 0.7;
- Support for overloaded virtual methods;
- Add 'ignore' annotation support, allowing to ignore functions
and methods;
- Generally work hard to make sure the generated code at least
always compiles, even if we have to disable generation of
certain wrappers;
- Add support for protected methods and constructors;
- Preliminary support for templated classes/methods/functions;
- Add more type conversions, such as uint64_t and uint16_t;
- Support implicit conversions also for pass-by-reference parameters;
- Add supported for nested (i.e. defined inside a class) enums and classes;
- Add support for adding manually written custom method or function wrappers;
- Split the gccxmlparser.ModuleParser.parse() method into several
smaller methods, to allow greater customization and flexibility;
- Add support for customising C++ class instance creation code;
- Much improved support for wrapping pure C code;
- Support std::ostream << myobject mapped as str(myobject) (Mathieu Lacage)
- Support default values in parameters;
- More intuitive API (thanks Mathieu Lacage for feedback)
- Support generation of a Python pybindgen script from scanned API;
- Support splitting of generated python script and/or C/C++ module into several files;
- Lots of small bug fixes, and other features I probably forgot;
- New tutorial (thanks Mathieu Lacage), and API docs.


PyBindGen has new home page

PyBindGen finally has a home page: http://code.google.com/p/pybindgen/

Why it needs a home page:
  • Launchpad does not directly provide downloads, it only mirrors existing downloads;
  • Launchpad has no Wiki;
  • Launchpad does not allow me to host documentation.
So I decided to use Google Projects for hosting PyBindGen. So now we have:
  • Documentation is hosted in the google project. I upload it via subversion (slightly painful but doable), and users can browse the svn http url directly to view the documentation online;
  • Wiki pages are always useful and google project has a good wiki system;
  • Downloads in google project.. currently no downloads, but I'll put them up some other day;
  • Bug tracking and code hosting are still handled by launchpad, as usual. Thankfully google project allows me to override the Source and Issues tabs, to redirect users to launchpad instead.
In other news, pybindgen based python bindings for NS-3 have finally been merged!


NS-3 released first stable version

Finally, the "1.0" version of NS-3 has been released! This work represents a huge amount of effort by some very talented people.


GnomeOSD on Euro 2008 pub

I received an email asking for some help with multihead in GnomeOSD. It started like this:

First, I would like to thank you for your work on gnome-osd, I am currently using it for displaying Twitter messages (with users being able to post the messages for commenting the game) on top of football games of the euro08 in an Austrian pub, and it works fabulously.

Ha! Amazing and that my pet project of the past has been put to such a fun use :-) Strangely this makes me feel some kind of regret for not hacking GnomeOSD in a very long time. But I guess it's life... so much to do, so little time... :-/


PyBindGen documentation

I have been prodded by the NS-3 guys, namely Mathieu Lacage, to provide more documentation for PyBindgen. Additionally he provided some nice and short examples of C/C++ code to wrap. I then wrote the PyBindGen code that wraps the C/C++ examples, and added everything to the repository.

I looked into it and decided to use epydoc to generate API docs. Additionally I wrote a small introductory section, just to get started (else it's easy to get lost with all the classes). So here it is, the first draft of PyBindGen API documentation. Enjoy.


RedHat conspiracy theories

It seems my last post was not taken well by the community. The thing is, I had not realized my blog would reach so far. Luis Villa and Jeff Waugh in particular think I should I apologize. I respect their opinion, one hand, and I the blog post had unintended consequence, potentially damaging Red Hat's image, on the other hand, which is not what I intended. Red Hat absolutely rocks as a company.

So, I apologize to Red Hat for the last blog post.

Conspiracy theories are always fun, but it seems blogging about them can have unintended consequences.


RedHat's open source community trick

OK, I am going to be a bit cynical here, so be prepared ;-)

I think one of the new genial tricks of late being employed by RedHat to great effect is the following:
  1. Select a good open source developer, respected in the community but not affiliated with any Linux distributor company;
  2. Secretly talk to the guy and offer him a job at RedHat in some months, but he has to agree to start an open source project doing this and that...
  3. The developer agrees, starts the open source project, and starts developing it;
  4. In time the open source project gets good community support, not only because of its good quality but also because it is perceived as coming from the open source "community" rather than a company;
  5. After some months, the developer joins RedHat, and continues to maintain the project (which now has good community adoption);
  6. ....
  7. Profit!
I am trying to guess here, and could be wrong, but I am guessing this might have happened with projects such as Cairo (Carl Worth), Pulse Audio (Lennart Poettering), and more recently PackageKit (Richard Hughes), probably others in the past (I suspect Nautilus as well).

Well, if true, I think this is only slightly evil, anyway. I love RedHat, and I think they have always done a great service to open source in the past, and continue to be the leading technology innovators.

OK, if one was not being so cynical one might consider a scenario where the developer in question starts something cool on his own free will and the company simply sees the potential and decides to hire him. But I think I am too cynical to believe this :)


Nvidia closed binary driver

I remember back in the days, when I bought my first nvidia card (GeForce 2) , the linux 'nv' open source driver was actually pretty great for 2D stuff. Everything painted very fast. The only problem was the lack of 3D acceleration. There was the closed source, binary 'nividia' driver out there. It was very good for 3D stuff, but was actually slightly worse than the open source driver for 2D; when switching workspaces I could notice that the new workspace took longer to appear than with the open source driver.

Now fast forward to 2008. The nvidia closed binary has gotten better at everything, even 2D is pretty fast. However, because the nvidia driver is split into a userspace part (xorg driver) and a kernel module, and the versions have to match between xorg driver and kernel module, I find myself not able to run it if I want to boot with an older kernel. I switch to the open source 'nv' driver, but I am finding it surprisingly slow, much slower than it was back in the day when I had a GeForce 2 (now I have a GeForce 6700). Everything seems sluggish now. It's a pain to have to use this driver now.

So what happened to the nv driver? Maybe this is what the linux kernel guys were afraid of, that when using binary closed drivers with linux becomes easy then the open source alternative might begin to bitrot. Well, but it's not like linux users ever had any real choice. In the mean time I sure hope the nouveau effort comes through!


No PyBindGen for NS-3 yet

Acording to the plan, I was supposed to have merged Python bindings for NS-3 about now. Unfortunately deep API changes in the NS-3 object system have broken the Python bindings and I decided to postpone Python bindings for the next release.

This means that PyBindGen 0.9 release is also postponed. But it sure is packed full of new features and many bug fixes, so potential developers may want to check out my bzr branch at https://code.launchpad.net/~gjc/pybindgen/trunk