There is a nifty piece of software called zsync, which is kind-of like rsync, except it is totally different.

Rsync

Rsync is mainly useful when you want to synchonize a list of files, or directories, between two servers. It will only download the new files and files which have changed. It will even delete or backup the files which have been removed at the original site. Nice.

For a project I was involved until recently at work we had a slightly different problem: we generate a huge file (an ISO image) which contains about 6 GB of data. This ISO image contains the daily build of our application. It contains only a handful of files. Problem is some of them are generated and GB in size, yet from day to day only maybe 100-150 MB have changed (and it would be even less if it were not because of this “feature” of .NET that never generates identical binaries even if using exactly the same source code)

Rsync was not useful in this case: it would download the whole file, gigabytes! (some of the people downloading the ISO are on a slow link in India)

 

zsync

This is exactly the case zsync targets: zsync will only download the changed parts of the file thanks to the rolling checksum algorithm.

Best of all: no need for an rsync server, opening port TCP 873 (which requires months of arguing with BOFHs in some companies), or anything special: HTTP over port 80 and you are done. Provided that you are not using Internet Information Server, which happens to support only 6 ranges in an HTTP request (hint: configure nginx in reserve proxy mode).

But I’m digressing.

Cool. Great. Awesome. Zsync. The perfect tool for the problem.

 

Hello Windows

Except for this project is for Windows, people work on Windows, they are horrified of anything non-Windows, and zsync is only available for Unix platforms.

Uh oh.

In addition to that, the Cygwin�port suffers from many connection error problems on Windows 7 and does not work on a cmd.exe prompt, it wants the Cygwin bourne shell prompt.

So I started to port zsync to Windows natively.

 

Native port howto

The starting point was:

  • C99 code
  • autotools build system
  • No external dependencies (totally self-contained)
  • Heavy use of POSIX and Unix-only features (such as reading from a socket via file descriptors, renaming a file while open, deleting a file while open and replacing it with another file yet still use the same file descriptor, etc)

To avoid breaking too much, and because I wanted to contribute my changes upstream, my intention was to do the port step by step:

  1. Linux/gcc/autotools
  2. Linux/gcc/CMake
  3. Cygwin/gcc/CMake
  4. MSYS/MinGW gcc/CMake
  5. Visual C++/CMake

 

Autotools

Autotools was the first stone in the path.

With some work (calling MSYS from a DOS prompt, etc) it would have been possible to make it generate a Visual C++ Makefile but it would have been painful.

Plus the existing autotools build system did not detect the right configuration on MinGW.

Step 1: replace autotools with CMake. On Linux. This was relatively easy (although time consuming) and did not require any change in the code.

 

Cygwin

The second step was to build zsync on Windows using Cygwin (which provides a POSIX compatibility layer) and CMake.

No code changes were required here either, only a few small adjustments to the CMake build system. I tested on Linux again, it worked fine.

At this point, I had only made a pyrrhic progress: zsync was still Unix only, but with a cross-platform build system.

 

MinGW

My next step was a serious one: port zsync to use MinGW, which generates a native Windows application with gcc.

That means using Winsock where required.

5And hitting Microsoft’s understanding of “POSIX-compliant”: the standard Windows POSIX C functions do not allow to treat sockets as files, rename open files, temporary files are created in C:\ (which fails on Windows Vista and newer), etc. And that’s when the functions do exist. In many cases (mkstemp, pread, gmtime_r…) those functions were outright inexistent and I needed to provide an implementation.

Plus adapting the build system. Fortunately, I was still using gcc and Qt Creator provides great support for MinGW and gdb on Windows, and decent support for CMake.

Some other “surprises” were large file support, a stupid “bug”�and the difficulties of emulating all the file locking features of Unix on Windows.

Regarding LFS, I took the easy path: instead of using 64-bit Windows API directly, I used the mingw-w64 flavor of gcc on Windows, which implements 64-bit off_t on 32-bit platforms transparently via _FILE_OFFSET_BITS.

 

Visual C++ misery

Porting to Visual C++ was the last step.

This was not strictly required. After all, all I had been asked for as a native version, not a native version that used Visual C++.

Yet I decided to give VC++2010 a try.

The main problem was lack of C99 support (though you can partially workaround that by compiling as C++) and importing symbols due to lack of symbol exports in the shared library (attributes for symbol visibility were introduced in gcc4.0, but many libraries do not use them because gcc does its “magic”, especially MinGW, which will “guess” the symbols).

Porting to Visual C++ 2010 required either to give up some C99 features in use (e. g. moving variable declarations to the beginning of the functions) or adding a lot of C++-specific workarounds (extern “C”).

I was a bit worried upstream would not accept this code because it didn’t really provide any benefit for the application (for the developer, use of a great IDE and very powerful debugger), therefore I didn’t finish the Visual C++ port. Maybe some day if Microsoft decides to finally provide C99.

The result (so far) is available in the zsync-windows space in Assembla.

 

Lo s�, lo s�: “��mal pagados!? �Pero si un concejal, ministro, presidente del Gobierno, etc cobran 80.000 EUR pr�cticamente libres de impuestos!”

Pues es un sueldo bajo, mira por donde.

 

Los sueldos de los pol�ticos

Hace unos d�as, el Gobierno de Mariano Rajoy aprob� un proyecto de ley por el que el sueldo m�ximo de concejales y alcaldes ser� el mismo que un diputado: no llega a 69.000 EUR al a�o.

El Presidente del Gobierno cobra algo m�s, unos 78.000 EUR.

 

Casos reales

El se�or Pizarro ganaba unos 10 millones de euros al a�o en Endesa. Cuando fue elegido diputado por el Partido Popular pas� a ganar unos 65.000 EUR al a�o. En los 2 a�os que fue diputado, Manuel Pizarro perdi�, en n�meros redondos, 20 millones de euros. Probablemente m�s, porque no estamos contando los paquetes de acciones, opciones sobre acciones, jubilaciones, etc.

Luis de Guindos, actual Ministro de Econom�a, cobraba m�s de 300.000 EUR al a�o como consejero de varias empresas. Ahora gana la cuarta parte, es uno de las personas m�s odiadas de Espa�a y no s� c�mo duerme por las noches.

Hay m�s casos: Pedro Moren�s (Ministro de Defensa del Gobierno Rajoy, ex-presidente de MDBA), Pedro Arg�elles (Secretario de Estado de Defensa, ex-presidente de Boeing Espa�a), etc

 

Pero son raros

Visto que en la empresa privada se gana mucho m�s que en la pol�tica, lo normal es que el cambio vaya en sentido contrario: pasar de la pol�tica a la empresa privada.

Casos hay muchos: Felipe Gonz�lez, Jos� Mar�a Aznar, Elena Salgado, Pedro Solbes, Eduardo Zaplana, Jordi Sevilla, Josu Jon Imaz, Josep Piqu�, en fin, mil.

 

Gestores in�tiles

Visto lo visto, �a alguien le extra�a que estemos gobernados por in�tiles? �Es la evoluci�n natural!

  • Si uno es bueno en su trabajo, gana mucho m�s en la empresa privada que en la pol�tica
  • Si uno es un in�til, en la empresa privada no se va a “comer un torrao”, as� que se mete a pol�tica.

 

Corolario

Los in�tiles se meten en pol�tica, hacen contactos y con su gesti�n destrozan la econom�a. Al poco de dejar la pol�tica, pasan a la empresa privada, donde ganar�n mucho dinero en empresas a las que “casualmente” beneficiaron mientras estaban en pol�tica.

 

La soluci�n

Menos pol�ticos, muchos menos, pero mucho mejor pagados: �c�mo vamos a encontrar un ministro de Econom�a capaz si s�lo pagamos 69.000 EUR al a�o?

Los �nicos dispuestos a aceptar un cargo as� son unos pocos gestores buenos que tienen vocaci�n pol�tica (se cuentan con los dedos de una mano), o una caterva de pol�ticos in�tiles que quieren usar el cargo como lanzadera para irse luego a la empresa privada y ganar mucho m�s. Abundan los segundos.

(Todo lo dicho sobre ministros y presidentes del gobierno se aplica id�ntico a concejales, alcaldes, diputados auton�micos, presidentes auton�micos, etc)

 

Wikipedia tiene un buen art�culo sobre el Protocolo de Kioto:

El Protocolo de Kioto sobre el cambio clim�tico2 es un protocolo de la CMNUCC Convenci�n Marco de las Naciones Unidas sobre el Cambio Clim�tico , y un acuerdo internacional que tiene por objetivo reducir las emisiones de seis gases de efecto invernadero que causan el calentamiento global: di�xido de carbono (CO2), gas metano (CH4) y �xido nitroso (N2O), adem�s de tres gases industriales fluorados: Hidrofluorocarbonos (HFC), Perfluorocarbonos (PFC) y Hexafluoruro de azufre (SF6), en un porcentaje aproximado de al menos un 5%, dentro del periodo que va desde el a�o 2008 al 2012, en comparaci�n a las emisiones al a�o 1990.

La realidad

Bueno, esa era la intenci�n. Lo que ha sucedido en realidad ha sido:

  1. Muy pocos pa�ses han conseguido reducir las emisiones de CO2
  2. Se cre� un mercado de “aire limpio”, en�el cual los pa�ses que exced�an en sus emisiones de CO2 compraban “no emisiones” a los pa�ses que s� cumpl�an. Un anglosaj�n dir�a que literalmente hemos creado un mercado “out of thin air“. Yo lo completar�a con un “out of thin clean air”

En cuanto al primer punto, hay que destacar que Espa�a es uno de los pa�ses m�s idiotas del Protocolo de Kioto: asumimos unos compromisos irrealizables, a los que en realidad nadie nos obligaba, y en lugar de abandonar el Protocolo, como hicieron el resto de pa�ses que no iban a cumplir (Estados Unidos, Canad�, etc), seguimos y hemos pagado y vamos a pagar un dineral.

En cuanto al segundo punto, en realidad los pa�ses “contaminadores” no est�n comprando a pa�ses “limpios”, sino (mayoritariamente) a pa�ses subdesarrollados, que simplemente no contaminan m�s porque no tienen industria, no porque su industria sea eficiente.

 

�Y Espa�a?

Espa�a ha fracasado absolutamente en todo: no hemos cumplido con las emisiones, y en lugar de abandonar, seguimos porque somos “buenrrollistas”, y como consecuencia vamos a pagar unos 800 millones de euros por el periodo 2008-2012.

Ya es demasiado tarde para ahorrarnos esos 800 millones de euros (la fecha l�mite era el 31 de diciembre de 2011), pero lo que s� podemos hacer “darnos de baja” del “club post-Kioto“.

 

�Contaminador! �Antiecol�gico! �Asesino de la Naturaleza!

Para el carro.

Me gustar�a que cumpli�ramos con Kioto, con Durban y con Bali, pero ya que no vamos a poder hacerlo, y ya que tenemos la econom�a hecha trizas, lo mejor es que nos borremos y que lo hagamos lo mejor que podamos.

Y sin pagar est�pidas sanciones autoimpuestas.

Prefiero destinar esos 800 millones de euros a mil cosas m�s importantes.