I have started a new open source project: The Digest Software Project. It’s a small project where I develop two tiny libraries, libdigest and libpam-digestfile.

libdigest is a C library which generates RFC2617-compliant digests, used by Apache and others.

libpam-digestfile is a Pluggable Authentication Module which lets you use an arbitrarily-named text file similar in structure to /etc/passwd to authenticate users but using digested passwords (see RFC 2617 for more information about the digest algorithm).

Both libraries are stable and in production.

Richard Moore blogged about setters/getters vs direct access to member variables and why encapsulation is good today. Ruby excels in this aspect, IMHO:

With Ruby your code is the same regardless you are accessing a variable or a method. This means something that now is a variable, you can transform it in the future in a method with calculates a value and the code accessing it does not change at all.
Imagine you have a method to print the volume of a bottle and you had stored the volumes in pints (Imperial units). Your code is:

volume = get_bottle_volume_from_database() # these are pints, you would be getting the "10" value from a database

puts "The volume is " + volume.to_s
=> The volume is 10

Now you want to move to international units (litres). You can do this:


def volume
return get_bottle_volume_from_database() * 0.473176475 # Transform from pints to litres
end

puts "The volume is " + volume.to_s # See? "volume" is a method here (it was a variable in the former example) but our code has not changed!

Of course this is a contrived example but keep in mind this syntax allows for all kinds of magic. For example, it makes Ruby on Rails feasible

Did you know the code the compiler generates to handle C++ exceptions is not written in stone? I did not.

Did you know there are two preponderant styles to do that, DWARF(2) and SJLJ? I did not

When most of the unit tests in ZeroC ICE failed after building it with MinGW, I suspected something was wrong. It turned out the stable MinGW version provides gcc/g++ 3.4.5, which implements exceptions using the SJLJ style but has not implemented propagatation of user exceptions across libraries. That was the reason why unit tests were failing.

I have already built third party dependencies (OpenSSL, Bzip2, Expat and BerkeleyDB) with a gcc/g++ 4.2.1 which produces SJLJ code and is able to propagate user exceptions. ICE is now building on the side (some warnings and info messages are shown, let’s see what happens as some of them are not my fault).

I am gathering a team to make a proposal to hold aKademy 2008 in Valencia (Spain) in July 2008. If you want to help, contact me via e-mail (my e-mail is at the bottom of the website). Several people have already expresed interest and I have a draft but I need to make sure we will be enough people to deal with everything before I submit the proposal.
Update I have created a mailing list for people who want to help us, as of now subscription is open.

For almost 4 years I worked for a small company, Venue Network, as a Systems Administrator. At the beginning my job meant dealing with Windows 2000 Server and Windows 2003 Server systems. As time went by I was able to introduce Linux and FreeBSD servers in some clients, saving them money and us hassle. The last 18 months there I barely touched Windows systems: the increasing demand for Linux and the storage-hungry users led me to focus on SANs and NASes and Linux. I still did some very specific (read: complex) work on webservers, but that was the exception as I was already overloaded with work.

One day at the end of October 2006 I received an e-mail from another company saying they read about me in the aKademy 2006 site (I gave a conference last year) and would like to know more about me. I sent them my phone number and the next day we talked on the phone for about 20 minutes: they wanted me to work as a C++/Linux/Qt developer. I told Jesús (the CTO and one of the founders of the company) I had never had a developer job. The most ressembling job I had held was a summer internship in 2002 as a multimedia script writer but I didn’t think that qualified. I was not the person they were looking for. He insisted and we arranged a meeting for next week at their offices. Truth is I thought Jesús was crazy and I would be wasting his time and mine, but I agreed. How could I possibly have a job as a C++ developer? It had been years since I programmed in C/C++ and I only developed in Ruby and as a hobby (Ruby, QtRuby, Rails, etc). My visit to Arisnova went very well: Jesús was full of confidence I would be able to do the job and he was so convicing even I started to believe it (actually he was so confident I tried to hand him my resume and he declined the offer :-O)

Would it work? Venue Network was a tiny company where I held a very comfortable position and I already had earned my medals, I did not need to demonstrate anything anymore. At Arisnova I was going to start from scratch!

Fast forward to May 2007.

Turns out I accepted the offer and I have been working for Arisnova for 4 months now. My main job is porting our Integrated Platform Management System from Windows to Linux (auxiliary libraries, middleware, applications, everything). This software manages ships (frigates, corvettes, etc) and has been in use on Windows for several years now, ships have been sold for several countries and they all are very impressed with the software.

We use a lot of open source for the IPMS: Qt, Boost, ACE, ZeroC ICE, OpenSceneGraph, Lua and the list goes on. As the building blocks were already cross-platform, the port is being easier than everybody expected (including me).

The main innovation coming with the Linux version is the movement to KDE: the Windows version depends on several ActiveX components for video, documentation, videoconferencing and some other features. Obviously ActiveX do not work on Linux, so the first thing you think is we would need two different branches of code or a hell of a lot of #ifdef‘s. Not! (sorry, I couldn’t resist). Thankfully, being a KDE bigot is going to benefit our IPMS: KDE4 is multiplatform (Linux/Unix, Mac and Windows), therefore we will be making extensive use of KParts and almost every new technology KDE4 features: Phonon, Decibel, Strigi, etc (by the way, GNOME is not even close to this). We will also be using CMake.

As the port has progressed at a faster pace than we expected and we’d like the KDE4 to be quite stable when we invest our time, I have some time to fiddle with other things. Something I am looking at for the third version of our IPMS, which is currently in its inception, is Flash. Is it possible to integrate Flash in a desktop application (our GUI) and make it feel natural for the user? Will we need to embed a WebKit/Konqueror/whatever component as a "proxy" between the application and Flash? I don’t know yet, but I am currently investigating every lead: dlopen, libflashsupport, XEmbed (which has pretty easy to use since Qt 4.1).

Summarizing, I am very happy I moved to Arisnova: the job is interesting, I am learning a lot, people are nice, I am performing way better than I (and everybody) expected and I see exciting challenges coming. Thank you guys!