That’s the title of a very useful article by Scott Collins which describes how to combine Boost and Qt in the same application. Unfortunately, Scott’s website went dark many months ago and I’d say it’s not coming back. Luckily, I was able to get a copy from Google’s cache before it was squashed forever. I’d say right now this is the only place in the web you can get this wonderful article: A deeper look at signals and slots

Update: The Wayback Machine has a copy of the article. I’m keeping the PDF in my site just in case, anyway.

Si utilizas una distribución de Linux/BSD/etc con servidor X11 X.org (el 99%) y estás te ha afectado el bug 9763, que hace que para teclear ‘~’ (dead tilde haya que pulsar AltGr + 4 dos veces (en lugar de una), aquí tienes el parche que corrige el caso de la tilde muerta.

Para Ubuntu Hardy, hay paquetes en mi PPA

Y ahora, que alguien me explique qué clase de mantenedor es el de los mapas de teclado en X.org que cambia el mapa de teclado de español de España porque un usuario brasileño se queja de que cuando tiene puesto el mapa de teclado de portugués y está escribiendo castellano se le hace raro tener que pulsar AltGr+4 para que le salga la ‘~’ (que por otra parte, no hace falta para escribir el idioma, ¡es un carácter especial!). Grrrrr.

Yesterday I started preparing my computer and myself to upgrade from Kubuntu Gutsy to Kubuntu Hardy.

As trivial as it might seem, any upgrade is quite complex to me because I use a lot of post-stable, and even post-unstable, packages coming from my PPA. I backport packages from Ubuntu unstable, Debian unstable and experimiental, and quite often I package myself versions which are not available yet in any of the former.

Given that the PPA “copy packages” feature does not work for me (when I copy a Gutsy package to a Hardy package, it is built but never made available for Hardy from my PPA), yesterday I spent most of the day producing Hardy versions of my packages and fixing issues (what’s with the libfcgi maintainers!? why are they slightly changing the package name almost with every release!?)

In the end, the upgrade went mostly fine: everything worked save for my USB external disk, the mouse in X, and the volume control. The only missing application was KSynaptics, which I use to disable the touchpad 99% of the time (I like it better my laser mouse).

The external USB disk issue was rather easy to fix: just add usb-storage to /etc/modules.

The mouse problem has drove me crazy for a couple of hours but I finally figured it: the new xorg.conf had set the mouse to InputDevice "Mouse0" "AlwaysCore" (whatever AlwaysCore means) and the fix was as easy as commenting out the "AlwaysCore" part.

KSynaptics missing proved to be a bit more complex. The application does not work with modern versions of X.org, apparently due to X.org people forgetting about proper versioning of APIs, therefore KSynaptics’ developer decided to stop working on it and starting a new application (TouchFreeze) with a different approach. While TouchFreeze works fine, it was missing the enable/disable touchpad actions, which are the only reason I wanted to use it. But my friends, that’s the joy of open-source: I took the sourced code and a few minutes later I had implemented those actions and added a “disabled” icon like the one KSynaptics had. Here is the patch against TouchFreeze 0.2, in case you want to use it (I’ve sent it to the author to inclusion in a future release of TouchFreeze)

Yesterday was a very kitchen-intensive day: about 10 hours baking pastries: muffins (magdalenes in Catalan), tarts (coca de la calda), eggrolls (rotllos d’ou; not Chinese/Korean eggrolls!) and almojàvenes (although here we do not add cheese to the recipe). It was a hard work but I’ve got breakfast and tea snacks for one month 🙂

At Guademy I live translated three conferences from English to Spanish. I have never done that but, given that the translators we had hired told the organization the day before the event they would not come (very unprofessional, btw), there was no other option than using me and my broken English.

All in all, it was an interesting experience. I was told my translation was about 85% accurate, which is IMHO quite good: I had not trained for that, therefore my “buffer” was quite small. The most difficult part of live translating was a) lisp (I’m used to American English, not to British English) and b) memory (I seldomly need to memorize something, therefore my short-term memory is quite bad). Fortunately all the conferences were about open source software I know quite well, therefore specific vocabulary was not difficult.

Apache Log4CXX is a logging framework for C++ patterned after Apache log4j. It also happens to be quite difficult to build on Windows if you are using Microsoft Windows SDK 1.0 (AKA Microsoft Platform SDK 6.0). If you are building software for Windows Vista or Windows Server 2008, or using Visual C++ 2008, you are using Windows SDK 1.0.

The reason Log4CXX 0.10.0 is hard to compile with Windows SDK 1.0 is a bug in APR 1.2.12 (the latest version available as of this writing) and a bug in Windows SDK 1.0 itself (a preprocessor redefinition due to including twice a header file). Here comes the recipe in case you want to build the stuff yourself:

  1. Download APR 1.2.12 and extract it. Rename to apr.
  2. Download APR Util 1.2.12 and extract it. Rename to apr-util.
  3. Download Log4CXX 0.10.0 and extract it
  4. Download GNU Sed and install it
  5. Open cmd.exe and run %PROGRAMFILES%Microsoft Visual Studio 9.0VCvcvarsall.bat
  6. Apply the apr-1.2.12-win32.patch patch to fix bug 40398 in APR 1.2.12 (this step is not needed if you are using APR 1.2.13)
  7. Apply the log4cxx-0.10.0-vc90-support.patch patch
  8. Enter directory apache-log4cxx-0.10.0
  9. Execute configure.bat
  10. Execute configure-aprutil.bat
  11. Open the log4cxx.dsw solution When asked to convert the solution to VC++9, click Yes to All.
  12. Right click on Solution log4cxx and select Build solution

IMHO FreeDesktop.org is a weak organization and it’s specification are not taken seriously enough. Gnome and KDE are suggesting developers follow those specs, as opposed to strongly demanding they do. The end result of that is worse interoperativity between Gtk+/Gnome and KDE applications, therefore users get frustrated.

IMHO KDE and Gtk+/Gnome should define an “acceptflow” to follow in order for an application/library to be included. Briefly: if you are not using fd.o’s specs, you need to really convince us there is a good reason for that.

Expanding it, this is my proposed workflow:

  1. Developer John Doe writes an application/library
  2. Developer John Doe submits an application or library to KDE or Gnome/Gtk+
  3. Is the application good?
    • No => Not accepted, needs improvement
    • Yes. Next step
  4. Does the application or library follow FreeDesktop.org specs?
  5. Yes => Accepted
  6. No. Why not?
    • There is no FreeDesktop.org spec => Propose one, when there’s agreement in the fd.o community about the spec, go back to step 1 if you want your app/library in the official repository or keep it in your own repository (it will not be part of the official Gtk+/Gnome or KDE)
    • The FreeDesktop.org spec is good but John Doe is smarter than anyone in the world and does not want to use a “bad” spec => Sorry but go back to 1 if you want it to be included in the official repository, or keep your own repository. Fix your ego, too.
    • The FreeDesktop.org spec is not good enough, it’s to up to reality
      • Go to FreeDesktop.org and propose improvement of the spec. When the spec is good enough => Go back to 1 if you want it to be included in the official repository or keep your own repository.
      • Go to Freedesktop.org. Other people working on applications/libraries using that spec do not want to update the spec to be up to reality, for any or no reason => Go to next step
  7. So, there is a FreeDeskop.org spec but it’s not good enough and there’s no way the other people using that fd.o spec will update it. Is John Doe’s application/library really good? I mean, is it true that what he wants to change in fd.o spec should changed?
    • No. Sorry John Doe, you are not the smartest guy in the world => Go back to step 1 if you want your app/library in the official repository or keep it in your own repository. It will not be part of the official Gtk+/Gnome or KDE.
    • Yes => Accept John Doe’s app/library in the official repository and keep trying to update fd.o’s spec.

I’m at València, Spain for Guademy 2008.

Guademy is a combined Gnome + KDE conference, hence the name (Guadec + aKademy), where developers of both desktops (actually every free desktop developer is invited) try to improve collaboration. IMHO it should be renamed to “Freedesktop.org Conferences” because that’s what it actually is.

I’ve seen some frienly faces I knew from other FLOSS events (Aleix Pol, Rodrigo Moya, Carlos Garnacho, Will Stephenson) and I’ve met people I had only read so far (Jos Poortvliet, Holger Freyther). There are some people that were not under my radar, too (Richard Hughes, Vincent Untz).

Yesterday we had talk about QtWebkit by Holger. He tried to show us how good Qt integration with Webkitwas. But he failed. Miserably. It’s not good. It’s AMAZING. Thanks to QtWebkit, he was able to wrote a browser with tabs, cookie management, bookmarks and plugin support in 7800 (seventy eight hundred) lines of code. In five days. The only thing missing was SSL certificate management. Awesome. I provided live translation to Spanish, for non-English speaks.

In the afternoon we had a couple of talks about FreeDesktop.org by Rodrigo, Will and Vicent. In the end, I think the problem with FreeDesktop.org is Gnome and KDE are just suggesting, instead of strongly demanding, their developers to work together.

After that, Aleix talked about KDevelop 4 and demoed it. I have to say I’m gratefully surprised by its progess. Last time I tested it (like 5 months ago), it was totally useless. Currently it works and it works reasonable well. I may start using it soon.

After so much talk, we were quite tired and hungry and went to Los Bestias (“The Rudes”) for dinner. It’s not the typical Spanish restaurant, it’s a “funny restaurant”: the bartender threw (literally) salted peanuts all over the our table, they brought us urinaries with beer and sangria, etc. It was quite funny, IMO.

There are two more days of Guademy, I’ll post more tomorrow.

I’m moving a large software package from Visual C++ 2003 to Visual C++ 2008. It depends on 3 years old versions of a lot of third party packages: ICE 3.0.1, ACE 5.4.3, Boost 1.33.1, Qt 4.1, etc.

Those libraries have underwent so many changes that updating the whole software to Visual C++ 2008 and the newest versions of the 3rd party libraries would be a too difficult task to be accomplished in a reasonable amount of time, therefore I’ve decided I’m going to stick to old libraries as much as possible, while moving to Visual C++ 9.0. The next step would be to move to newer versions of the 3rd party libraries or even to remove most of those dependencies and make the software depend only on Qt.

For starters, stock Boost 1.33.1 did not build with VC++ 9.0 but after some digging and tweaking, it works. Here is how:

  1. Download Boost 1.33.1 and uncompress it. It does not support VC++ 9.0.
  2. Apply patch to support VC++ 9.0
  3. Open cmd.exe and run %PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
  4. boost_1_33_1\tools\build\jam_src and run build.bat
  5. Go to directory boost_1_33_1 and run tools\build\jam_src\bin.nt\x86\bjam.exe -sTOOLS=vc-9_0
  6. Run tools\build\jam_src\bin.nt\x86\bjam.exe -sTOOLS=vc-9_0 install to install to c:\boost