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!

I have started a new open source project called Destral. It is a command-line utility to split and join files, much like Hacha and HJSplit.

The main advantages of Destral over Hacha and HJSplit are:

  • Multiplatform
    It is written in pure C, therefore it should build in every operating system with a C compiler.
    This single utility works the same for Linux, Windows, Mac, etc, forget about using a different utility in each operating system. Same use, same flags, same everything.
  • Destral is able to split and join using Hacha 3.0, Hacha 3.5 and HJSplit formats. To state it clearly: Destral does not use a new split and join algorithm. It does not need Hacha 3.0, Hacha 3.5 or HJSplit to work, I have implemented the algorithms.
  • Destral is intelligent and uses sensible defaults.
    Most times you will not need to tell it what split and join algorithm you want to use, it will discover.
    For instance, when you want to join several chunks in a file you just run destral -j myfile.0, or destral -j myfile.000, or destral -j myfile.001 (at this moment you need to provide it with the path for the first chunk, but this weekend I will make it intelligent enough to search for the first chunk if you pass, for instance, chunk #3).

There is no release yet, if you are interested you will need to access the code via Subversion. The only dependency besides a C compiler is CMake, but it’s possible and easy to build it without CMake.

Current features:

  • Join Hacha 3.0, Hacha 3.5 and HJSplit/lxsplit files (no CRC check in Hacha files yet)
  • Multiplatform
  • It works and is very fast

Known bugs: there is an issue I just discovered with the names of the joint file under certain conditions, I will fix this soon.

Future features:

  • Fix bugs
  • Implement splitting of files, with sensible defaults: Destral will automagically select certain chunk sizes depending on the input file (it will be possible to override that using parameters).
  • GUI
  • CRC reverse engineering (the Hacha developer does not answer my e-mails, so I have no information about the CRC algorithm he is using)

I am not a Microsoft Windows user, but 870 million people are. On January, 2007, Microsoft will release the newest version of its desktop operating system, christened “Windows Vista”.

Recently I have gathered knowledge Windows Vista will, by default, put the computer in a stand-by status when you will try to shut it down. You can check this by yourselves looking at this article (look at point 5, the second half of the page) on Computer World magazine (screenshot)

So, to summarize it: you will believe your computer is not consuming any power, but it will be wasting 25% of electricity. Now multiply this 25% by 870 millions of computers. Assuming each computer will consume 250-350 Watts (this is a pretty realistic value for a computer like the one Microsoft requires to run Windows Vista) and you have:
0.25 * 300W * 870Million = 65250 MegaWatts

I think we should immediately start a campaign for Microsoft to change its mind. We cannot afford such a waste of energy. In case Microsoft does not attend to reason, I think we should suggest people not to buy a Windows Vista-preloaded computer, but an Apple Macintosh (operating system: Apple Mac OS X) or a computer with the Linux operating system.

Update ENERGY STAR-labeled computers are required to power down to 15 percent of their maximum power use. So we will only be wasting a measly 39170 MegaWatts. What a relief!

Today they arrived, after two weeks crossing the ocean: Code Complete, 2nd Edition and Programming Ruby, The Pragmatic Programmers Guide 2nd Edition.

I have really big expectations from Code Complete, everybody keeps saying it’s a wonderful book and McConnell is a genius of software development management. Hope to learn at least 10% what he knows 🙂

I also have big expectations from Ruby, but not because of the language per se but because of Ruby on Rails. If everything goes fine, in a few weeks I will be leading a very big project where I will need to develop a web application really fast, and RoR seems to be the right choice here. I tried Subway (it uses Python, a language I am more familiar with), but it just does not compare to RoR, maybe in a few years.

These books didn’t came alone, they were in good company: What do you care what other people think? by Richard P. Feynman, Perfectly Reasonable Deviations From The Beaten Track: The Letters Of Richard P. Feynman and The Elegant Universe by Brian Greene (yes, I know it’s in Spanish, but it’s soooo expensive in Spanish!)

Do you know what DotNet is? Well, it was hard to me, but I finally cope with the idea.
But, do you know what Dotnet is useful for? What’s new in DotNet? What does DotNet have that I couldn’t have done with existing technologies?

This is a great question, and here is the answer: NOTHING. DotNet brings nothing new to the Internet. I’ll post here an (extensive) collection of links when I have time to. For now, read what Joel Spolsky (a former Microsoft employee, responsible for Visual BASIC for Applications and part of the Excel team) thinks. There’s also the answer of an anonymous Microsoft employee (part a of the actual Passport team).

Yep, even MS doesn’t know what DotNet is and does.

So you belived Microsoft and you thought XP is the most stable version of Windows out there? In fact it’s not. Zappadodle‘s people say this will break it:

main (){
  for (;;)
    printf ("Hung uptbbbbbb") ;
  }
}

Well, I’ve not tried it, but I think it should not crash (at least, not with every compiler: it should depend on what microinstructions the compiler generates). If anyone could comment on this, please do so.