Y una bonita mañana de primavera Clipperz me da el susto final …

… y se acabó lo que se daba.

Después de usarlo durante varios meses prácticamente sin problemas, de haberme
acostumbrado a sus extravagancias y a su ritmo pausado entre cifrado y
descifrado, ida y venida de bloques de datos … hoy se ha muerto y ha dicho
que no, que no reconoce a nadie. Ni siquiera funciona la creación de cuentas.

O sí, depende de cómo se mire. Porque en la tabla de usuarios aparecen
nuevos registros pero no deja entrar con ninguno de ellos. Y como toda la
información está cifrada, pero toda, toda, ni siquiera puedo ver a qué fila pertenece un usuario. Sospecho que la más antigua es la mía pero tampoco tengo la certeza.

Quizás lo más frustrante es saber que los datos siguen ahí, que están en la
base de datos, pero que soy incapaz de acceder a ellos empleando el programa
ni aún teniendo la contraseña. Y eso sí que ha resultado ser una sorpresa. No me esperaba que estuviese tan verde que se disparase en el pie.

Detalles

¿ Qué creo que ha ocurrido ? Pues después de pasarme unas cuantas horas de mi
tiempo buscando en la red y comprobando la configuración y los fuentes del
programa (hasta donde he podido hacerlo), he llegado a la conclusión de que
ayer añadí un par de entradas a la base de datos y alcancé algún límite que ha
terminado por corromper de alguna manera el mecanismo de autenticación o el
índice. He leído alguna referencia a ello en los foros como ésta y ésta donde hablan sobre desbordamientos de campos y corrupción de datos, pero no puedo asegurar que tengan que ver con lo que dicen. Si que he podido ver, tras restaurar la última copia de la base de datos, que basta con añadir una entrada para reproducir el problema: no se puede entrar en las cuentas.

Todo esto después de descartar que la copia offline funciona, que otra instalación prácticamente gemela excepto en contenidos sigue funcionando y tras probar ambos extremos en varios tipos de navegadores y versiones de sistema operativo. Un buen atracón de absurdos mensajes de error y choques contra el muro.

Como decía, he buscado y buscado y buscado en los foros y he aprendido unas
cuantas cosas para la próxima:

  1. Javascript puede ser la coña en verso para algunas cosas, incluso para muchas, pero no para depurar errores en los programas. O funciona o lo llevas claro por el número de ñapas que debes realizar para saber qué es lo que ocurre. Y ún así más vale que sepas qué debe hacer el programa …
  2. En aplicaciones como ésta es donde se ve lo difícil que es conseguir que herramientas dispares como Javascript, PHP, MySQL y Apache proporcionen información útil sobre qué está ocurriendo entre ellas, siquiera a los propios desarrolladores.
  3. Los desarrolladores del programa están centrados en una nueva versión a la que llaman gamma y supongo que también en su negocio -algo totalmente legítimo- por lo que la versión de la comunidad está muy desatendida. ¿ Mala versión ? No, simplemente no está atendida.

Dos consideraciones más al respecto del segundo punto:

  1. Es lo que hay y no reniego de ello pero a veces las cosas simplemente no se pueden unir limpiamente y sería mejor ponerse de acuerdo en enviar un buen trazado a algún sitio fácilmente accesible. El mecanismo podría desactivarse también limpiamente sin liarla tocando configuraciones globales y reiniciando servicios.
  2. He visto al menos un error que se arreglaba desactivando la salida de mensajes en PHP porque interfería con el funcionamiento de AJAX (otro que tal) lo que demuestra lo dificultoso que resulta depurar nada.

Más detalles y una solución

Le he echado un vistazo a la tabla principal y me he encontrado con que el campo header está a punto de desbordarse. Aún sin saber exactamente para qué y cómo se emplea, he comprobado que basta con añadir una ficha más a la base de datos para que el acceso queda completamente aniquilado.

mysql> select userid, length(header) from user order by 1;
+--------+----------------+
| userid | length(header) |
+--------+----------------+
|     51 |          65252 |
|     52 |            436 |
+--------+----------------+
2 rows in set (0.00 sec)
mysql>

Como también he encontrado un repositorio Git del cual bajarme la ultimísima versión del programa, he procedido con ello de la siguiente forma:

  1. Clonar el repositorio desde las fuentes en
    git clone git://github.com/clipperz/clipperz-communityEdition.git

    .

  2. Instalarlo reemplazando la versión actual.
  3. Aplicar las modificaciones a la base de datos que consisten principalmente en cambiar el tipo algunos campos de
    TEXT

    a

    LONGTEXT

    [1]

  4. Invocar el mecanismo POG para construir los objetos PHP y verificar la instalación.
  5. Usar el programa …

Pero como he dicho al principio se acabó lo que se daba, y es que cuando tienes que meterte tanto en las tripas de un programa por fallos tan de diseño como éste la confianza se esfuma y todo se vuelve crítico con él. Es más, desde que me he encontrado con este problema -así como por jugar- he empezado a diseñar un mecanismo parecido y me he dado cuenta de que con requerimientos menos estrictos podría valerme perfectamente algo más simple.

Notes

[1] Según Anthony Willard pasa de 64K a 4Gb