Segunda GUADEC

A menos que algo extraordinario ocurra, este año asistiré por segunda vez a GUADEC. La primera vez, en Birmingham, la pasé muy bien. Esta vez será en Estambul, lugar que, según he escuchado, es uno de los más bellos en el mundo. Estoy muy emocionado por este viaje. Muchas gracias a la Fundación GNOME por patrocinar gran parte de mis gastos.

Distributed Version Control

Actualmente se está dando una avalancha de migraciones desde sistemas de control de versiones centralizados (Subversion) hacia sistemas distribuidos. Prácticamente todos los grandes proyectos de software libre o ya migraron o están en discusiones sobre la migración o están usando sistemas paralelos.

A diferencia de lo que sucedió con Subversion, donde también hubo una avalancha de migraciones desde CVS, en esta ocasión hay varias buenas alternativas, lo que hace la cosa mucho más interesante. La guerra entreGitMercurial y Bazaar, está generando un montón de innovaciones en el campo del control de versiones. Nos está beneficiando mucho a nosotros los usuarios.

La carrera por popularidad la va ganando Git con proyectos como Linux, X.org, freedesktop.org, Wine, OLPC, entre otros. Mercurial va muy cerca con proyectos como Mozilla, OpenSolaris, OpenJDK, Xen, entre otros. Bazaar va en último lugar siendo usado por Ubuntu y otros más.

Git está escrito en C y muchos de sus comandos son scripts de Shell y Perl. En consecuencia, el soporte de Git en Windows es muy pobre. Mercurial está escrito principalmente en Python. Algunas rutinas cuello de botella están escritas en C. Mercurial funciona muy bien en Windows. Bazaar es 100% Python. Funciona muy bien en Windows. Mercurial y Bazaar son extensibles via Python.

Git va en primer lugar en cuanto a velocidad, Mercurial de segundo, Bazaar de tercero.

Git tiene una interfaz de usuario difícil de comprender. Mercurial y Bazaar son muy fáciles de usar.

En cuestión de documentación, Mercurial se lleva el primer puesto, Bazaar el segundo y Git, de lejos, el tercero.

Elegir uno de los tres es una tarea complicada. Hay un millón de páginas y entradas de blog que hablan a favor de uno u otro. Como van las cosas es muy posible que haya que aprender a usar los tres, al menos a un nivel básico. Mi elección personal ha sido Mercurial, por su documentación, facilidad de uso y velocidad.

Mi experiencia en las últimas semanas con Mercurial ha sido muy placentera. Los sistemas distribuidos no solo dan una gran ventaja para proyectos grandes y con muchos contribuyentes, sino también hace las cosas mucho más fáciles en proyectos pequeños de uno o pocos desarrolladores. Empezar a versionar un proyecto nunca fue más fácil.

Tengo muchos pequeños proyectos que no están versionados, por ejemplo los de PyWeek. No lo hago porque me da pereza arrancar un nuevo repositorio de Subversion, importar, hacer checkout… Con Mercurial es tan fácil comenzar un nuevo repositorio que nunca más tendré un proyecto no versionado.

La velocidad es un factor muy importante a la hora de que a uno no le de pereza usar un sistema de control de versiones. Con Mercurial todas las operaciones se sienten instantáneas. En cambio Subversion se siente taaan lento, incluso usado localmente.

El poder clonar repositorios fácilmente me da más seguridad. Sé que es menos probable que se pierdan datos. Sitios como freehg.org y github.com son lo máximo.

Trabajar al estilo Branchy Development se siente muy bien. Ahora tengo la costumbre de crear un branch por cada nueva característica, por pequeña que sea. Trabajar paralelamente cada cosa en un branch aparte es muy cómodo, ya que una cosa no rompe la otra. Además todo el historial termina mucho más organizado. Luego cuando todo está listo, un merge sin traumas.

A la hora de colaborar a un proyecto de software libre, me parece fundamental el hecho de que uno siempre tiene acceso al sistema de control de versiones. A diferencia de Subversión donde sólo el que tiene acceso decommit puede usarlo. El sistema de red de confianza del que hablaba Linus Torvals en el famoso vídeo de Git, también me parece una forma más natural de hacer las cosas.

Hay dos cosas que no me gustan de Mercurial. Una es que el soporte para Subversion es bastante pobre. No hay algo tan bueno como Git-svn. La otra es que la forma de hacer branches haciendo clones todavía se siente muy Subversion, me gusta más el estilo Git (Ivan habla de ello más detalladamente). No uso Git porque en el trabajo eventualmente me toca hacer ciertas operaciones en Windows. Sin embargo, como dije antes parece que dominar Git va ser esencial pronto. De todos modos aprender Mercurial me ha servido para entender muchos conceptos que no entendí bien cuando comencé a leer sobre Git.

La marcha del 6 de Marzo

En respuesta a Alejo:

Hernando Gomez Buendía, como siempre, muy lúcido. Es uno de mis columnistas de opinión preferidos.

El 6 de marzo no estaré en Colombia. Y si estuviera, no asistiría a la marcha. Tal vez si la marcha hubiera sido planeada en cualquier otro momento es muy seguro que hubiera asistido. Sin embargo, dada la coyuntura generada por la pasada marcha del 4 de febrero, considero que lo mejor es no asistir.

¿Por qué no realizaron esta marcha en cualquier otro momento antes del 4F? La respuesta es clara. Porque el objetivo de esta nueva marcha, más allá de protestar contra la violencia de los paras y el estado, es realizar un esfuerzo de contrarrestación a ese gran fenómeno social que fue el 4F. La razón principal para pensar eso es la contradicción general de la gente que apoya esta nueva marcha:

En primer lugar, gran parte de los grupos que están organizando la marcha no apoyaron el 4F. Muchos de ellos, igual que tu, argumentaron que no lo hacían porque no se condenaban las demás formas de violencia diferentes a las FARC. Sin embargo, en forma increíblemente contradictoria, deciden participar en esta marcha que es sólo contra el estado y los paramilitares. ¿Por qué esta vez no aplican el mismo raciocinio?

Otros argumentos contra la marcha fueron que estaba parcializada, politizada, que servía para los intereses de Uribe, etc. Yo me pregunto, ¿Qué acaso esta marcha no sirve para los intereses de las FARC? ¿Qué acaso esta marcha no va a estar politizada y parcializada? ¿Qué acaso en esta marcha no se van a escuchar insultos hacia los partidos contrarios?

En resumen: no asistieron a la marcha del 4 de febrero porque tenía ciertos defectos, pero participan en una nueva que adolece de lo mismo. Una persona realmente coherente con lo que dice decidiría no participar en ninguna de las dos marchas o, como Gomez Buendía, participar en las dos.

Por otro lado, yo sí creo que la marcha nació de personas independientes. Estuve en el grupo de facebook desde muchas semanas antes de que la cosa siquiera se asomara por cualquier medio de comunicación colombiano. Tampoco creo que estuviera parcializada, vi mucha gente de izquierda y de derecha. Creo que lo que se muestra en el vídeo no deja de ser un hecho aislado. Al menos en Popayán yo no vi nada de eso. La gente se concentró en el objetivo: “No más FARC”. Sabían que sólo era eso, no era ni a favor de Uribe, ni de los paramilitares, ni de nada. He escuchado comentarios similares de muchas personas que estuvieron en la marcha.

Tampoco creo que no se consiga nada con este tipo de marchas. Con el 4F se consiguió mucho. Se consiguió decirle al mundo que los colombianos no queremos a las FARC. Que no son liberadores sino opresores. Que no de ninguna manera podrían ser un ejercito beligerante, sino una manada de terroristas.

El amor en los tiempos del colera

Vi la película de “El Amor en los tiempos del cólera”. Pese a todas las críticas que ha recibido, me gustó bastante. Sólo hay un detalle negativo: la película está hablada en inglés. Siendo que está basada en un libro de autor colombiano, situada en Colombia, con personajes colombianos y actores todos hispanoparlantes, me parece un terrible desacierto hacerla en inglés. Además de eso me parece que la traducción al inglés es algo tosca, creo que incluso para los angloparlantes debe ser incómodo ver la película en inglés, oyendo a todos hablar con acento hispano donde a veces (me dio la impresión) los diálogos se notan recitados, como aquellas conversaciones grabadas que vienen con los cursos de inglés.

Le doy un 7/10.

Nokia compra Trolltech

Hoy he leído la noticia de que Trolltech ha sido comprada por Nokia. Pese a que Nokia ha expresado que seguirá desarrollando Qt y Qtopia y que seguirá apoyando a la comunidad de software libre, a mi me parece que no es una noticia muy agradable. Todavía no entiendo las razones de Nokia para comprar Trolltech.

Por un lado, Qtopia es usada por varios competidores de Nokia en el campo de los teléfonos celulares como Sony, Motorola y Panasonic. Ahora que Trolltech pertenece a Nokia y teniendo en cuenta que por más que Qt y Qtopia sean libres, son de la propiedad de Nokia, lo que significa que pueden cambiar la licencia de nuevas versiones en cualquier momento, existe una posibilidad de que estas marcas decidan alejarse de Qtopia por miedo a triquiñuelas de su competidor, si muchas empresas hacen eso, Qtopia podría enfrentarse a la extinción.

Segundo. Nokia lleva un buen tiempo desarrollando Maemo, una tecnología para dispositivos móviles basada en Linux, GTK+ y GNOME y que es usada en su serie de dispositivos N***. Nokia también es patrocinador del proyecto GNOME Mobile y tiene algunas personas en la Board of Directors de la Fundación GNOME. Ahora Nokia decide comprar Trolltech, que produce Qt y patrocina KDE que son tecnologias “competidoras” de las mencionadas anteriormente. En la comunidad de Maemo existe cierto temor de que Nokia decida dejar a un lado esta plataforma para basarse exclusivamente en Qtopia en las siguientes generaciones de tablets. Aunque la gente de Nokia ha dicho que los proyectos van a convivir (Qtopia impulsará los S40 y S60 y Maemo los N800 y N810) y que antes de acabar con Maemo lo que va a hacer la compra de Trolltech es impulsarlo, a mi me quedan ciertas dudas.

En un escenario muy pesimista, Nokia va a llegar a un punto en el cual tener dos tecnologías en contra vía no resulte rentable y tengan que decidir si se van por Maemo o por Qtopia. Independiente de cual sea la decisión el resultado será el mismo: Un proyecto de software libre que quedará agonizando.

Siendo Trolltech una empresa independiente esto difícilmente podría suceder. Ojalá me equivoque y este no sea el resultado de esta compra, al final sólo el tiempo dirá lo que va a pasar.

No mas ayuda en Africa

Via Menéame me encuentro con esta interesante entrevista a James Shikwati, un economista keniano. Shikiwati habla de como las ayudas de los paises industrializados, a través de cosas como el Programa Mundial de Alimentos, hacia África le están haciendo más daño que bien al continente.

Algunas citas interesantes:

Africans are taught to be beggars and not to be independent. In addition, development aid weakens the local markets everywhere and dampens the spirit of entrepreneurship that we so desperately need

Local farmers may as well put down their hoes right away; no one can compete with the UN’s World Food Program.

AIDS is big business, maybe Africa’s biggest business

But believe me, Africa existed before you Europeans came along. And we didn’t do all that poorly either.

Africa is like a child that immediately cries for its babysitter when something goes wrong. Africa should stand on its own two feet.

No podría estar más de acuerdo y me gusta mucho que esto lo diga uno de los mismos Africanos. La caridad sin sentido daña más de lo que ayuda.

Dolor de cabeza con Python

Un problema de usar lenguajes dinámicos es que, al no tener etapa de compilación, no es posible detectar muchos de los errores sino hasta que se lanza alguna excepción mientras el programa se ejecuta. Un problema peor es cuando por alguna razón el error no produce una excepción y el programa termina funcionando erróneamente si dar ninguna pista sobre dónde puede estar el problema.

Examinen este pedazo de código en Python:

class MyClass:
	pass

if MyClass() < 1:
	do_something()
else:
	do_something_else()

o algo más curioso todavía:

if MyClass() < float('-infinity'):
	do_something()

do_something() siempre se ejecuta.

Lo correcto debería ser que al hacer este tipo de comparaciones se lanzara una excepción. La única forma de poderlo hacer debería se cuando sea explícito que el objeto puede compararse.

Noten que este código si lanza una excepción del tipo TypeError:

a = MyClass() + 1

Según lo que me dijeron en #python, parece ser que todos los objetos en Python están habilitados para hacer comparaciones. Esta es la razón por la cual se pueden ordenar fácilmente listas con cualquier tipo de datos en ellas. Debido a que arreglar esto supondría un corte con la compatibilidad hacia atrás, sólo podremos disfrutar de una adecuado comportamiento hasta que tengamos Python 3.0. Si esto hubiera estado listo ahora mismo me habría ahorrado un gran dolor de cabeza buscando un error.