En mi trabajo actual utilizan el gestor de Base de Datos de Informix para algunos de los sistemas en los que desarrollamos, y es aquí donde me encontré una vez con un error como el siguiente al ejecutar una consulta:

 [Error Code: -528, SQL State: IX000]  Maximum output rowsize (32767) exceeded.

El problema es que la documentación de Informix tanto oficial como de los propios usuarios suele estar en su mayoría en Inglés y a veces aunque uno entienda el idioma de Shakespeare también suele haber muchas preguntas en foros sin respuestas que lo dejan a uno más frustrado que al principio. Es por eso que escribo el post para poder brindar alguna ayuda a quien tenga el mismo problema.

Dicho error solo se me presentaba con una consulta que tenía la particularidad de hacer un SELECT con muchos campos solicitados, al final encontré una explicación en una página que listaba los errores de Informix:

528 Maximum output rowsize max-size exceeded.

The total number of bytes that this statement selects exceeds the maximum that can be passed between the database server and the program. Make sure that the columns selected are the ones that you intended. Check that you have not named some very wide character column by mistake, neglected to specify a substring, or specified too long a substring. If the selection is what you require, rewrite this SELECT statement into two or more statements, each of which selects only some of the fields. If it is a join of several tables, you might best select all desired data INTO TEMP; then select individual columns of the temporary table. If this is a fetch via a cursor in a program, you might revise the program as follows. First, change the cursor to select only the ROWID of the desired row. Second, augment the FETCH statement with a series of SELECT statements, each of which selects one or a few columns WHERE ROWID = the saved row ID.

Lo cual explica básicamente que este error aparece debido a que se excede el límite de bytes que pueden ser transferidos desde el servidor de base de datos y el programa o la aplicación que realiza la consulta, la cual está limitada a 32k (esto no lo dice ahí pero se infiere en el error), lo que se recomienda es lo lógico, lo cual es bien quitar campos en el SELECT que no vayamos a utilizar, y de no ser posible esto entonces dividir la consulta en dos o más sentencias, de esta manera cada consulta se ejecutará correctamente y luego en nuestra aplicación tendríamos que hacer una fusión de los datos devueltos en cada una de las consultas. También ofrece una opción un poco más complicada referente a pasar la información a una tabla temporal utilizando el ROWID, pero debido a la complicación que conlleva no se me hace una opción viable.

En resumen el error solo se muestra cuando una fila es demasiado pesada para poder transferirse del servidor a la aplicación, esto también puede pasar debido a que los campos solicitados son demasiado grandes, es decir si tenemos campos de texto con mucha capacidad y llamamos muchos entonces provocaremos que se exceda este límite, por lo que otra solución puede ser en la consulta sacar un substring límitado a la información necesaria de cada uno de los campos de texto que tengan capacidad para más caracteres de los que en realidad utilizamos. O bien cambiar la tabla/tablas modificando los campos con capacidades menores de ser posible.

Espero les sirva la información.

Estos últimos días he tenido un problema con Emesene 1.5 (me imagino que no importa la versión, pero para presumirles que estoy actualizado) en el cual al iniciar sesión mi nick desaparecía para ser sustituido con el nombre que tengo registrado en mi perfil, es decir “Roberto”, vaya que ni siquiera “Roberto Briones” con todo y apellido :p , en fin que en un principio pensé que era un error de Emesene en sí, ya que lo actualizo seguido y pensé que una de esas actualizaciones podría haber causado el problema. Pero al buscar en Internet me dí cuenta de que era un problema común y que no solo afecta a Emesene sino a todos los clientes de Mensajería Instantánea para la red del MSN, es más bien un problema de red y no un problema de los clientes en sí.

Pues al final encontré una solución temporal para los que utilicemos Emesene en Ubuntu o en cualquier otra distribución de Linux (desconozco si funcione también para usuarios de Windows) , que no es más que la instalación de un Plugin llamado NickSaver.

Para instalarlo solo tienes que descargar el siguiente archivo (el plugin) :

NickSaver

Una vez descargado solo tienes que copiar ese archivo a la ruta de tu home donde esta la configuración del emesene:

/home/USUARIO/.config/emesene1.0/pluginsEmesene

Después abres el Emesene y activas el plugin desde el menú “Opciones –> Complementos” y ya puedes escribir tu nick, y cuando cierres y vuelvas a abrir Emesene tu nick estará intacto 😀 .

Es una solución temporal porque por lo que entendí que hace el plugin al revisar el código, es guardar el nick en una variable y volver a ponerlo automáticamente cada que iniciamos sesión, pero al menos nos resuelve el problema de momento.

La solución al parecer la creo un usuario de los foros de Ubuntu que se hace llamar juancho_77.

Si acabas de instalar Amarok 2 en Ubuntu seguramente no tendrás sonido al intentar reproducir cualquier archivo, el resolverlo es cosa fácil solo tienes que instalar una librería con el siguiente comando:

sudo apt-get install libxine1-ffmpeg

Solo tienes que abrir una consola, una terminal o similares y escribir el comando anterior presionar Enter y escribir tu password.

Con esto ya podrás escuchar música en el tan popular Amarok 2 😉

Desconozco si es un problema general o solo les afecta a algunos, pero al cargar el editor de textos Gedit en Ubuntu 8.10 se tarda mucho en abrir, aproximadamente medio minuto, lo cual llega a resultar desesperante, ya que también tarda al abrir cada archivo.

El problema no es de Ubuntu ni de el programa Gedit en sí, sino de un complemento del mismo, para resolver el problema no hay más que desactivar dicho complemento.

Para hacerlo abrimos Gedit, una ves abierto entramos al menú “Editar–> Preferencias” y en la ventana que se abrá nos vamos a la pestaña “Complementos” y desactivamos el que se llama “Panel del examinador de archivos”.

Una ves hecho, cerramos todo, volvemos a abrir Gedit y veremos que ya no tarda en abrirse 😀

1. Comenta a varios niveles

Comenta los distintos bloques de los que se compone tu código, aplicando un criterio uniforme y distinto para cada nivel. Puedes, por ejemplo, seguir un modelo como:

  • En cada clase, incluir una breve descripción, su autor y fecha de última modificación
  • Por cada método, una descripción de su objeto y funcionalidades, así como de los parámetros y resultados obtenidos

En realidad, lo importante es ceñirse a unas normas (comúnmente aceptadas si se trata de trabajo en equipo) y aplicarlas siempre. Las reglas concretas pueden ser elegidas a la conveniencia de cada cual.

Obviamente, una solución bastante aceptable e incluso aconsejable es utilizar las convenciones y herramientas (como XML en C# ó Javadoc para el mundo Java) que ayudan y facilitan esta tarea.

2. Usa párrafos comentados

Como complemento al punto anterior, es recomendable dividir un bloque de código extenso en “párrafos” que realicen una tarea simple, e introducir un comentario al principio de forma que se guíe al lector, precediéndolos, además, de una línea en blanco que ayude a separar cada uno del anterior.

  ...

  // Comprobamos si todos los datos
  // son correctos
  foreach (Record record in records)
  {
     if (rec.checkStatus()==Status.OK)
     {
        ...
     }
  }

  // Ahora pasamos a realizar las
  // transacciones
  Context ctx = new ApplicationContext();
  ctx.BeginTransaction();
  ...

3. Tabula por igual los comentarios de líneas consecutivas

Si tenemos un bloque de líneas de código donde existe por cada una de ellas un comentario, es buena costumbre tabularlos todos a la misma posición, de forma que quedarán alineados y serán más sencillos de leer, sobre todo si forman parte de la misma frase.

  const MAX_ITEMS = 10; // Número máximo de paquetes
  const MASK = 0x1F;    // Máscara de bits TCP

Ojo a las tabulaciones. Hay editores que usan el carácter ASCII (9) y otros, en cambio, lo sustituyen por un número determinado de espacios, que suelen variar según las preferencias personales del desarrollador. Lo mejor es usar espacios simples o asegurarse de que esto es lo que hace el IDE correspondiente.

4. No insultes la inteligencia del lector

Debemos evitar comentarios absurdos como:

   if (a == 5)     // Si a vale cinco, ...
      counter = 0; // ... ponemos el contador a cero
   ...

Este exceso necesita mucho tiempo a la hora de su creación, lo necesitará para su mantenimiento y, además, la mayoría de las veces distraerá al lector con detalles que no es necesario conocer o que pueden ser deducidos echando un vistazo al código.

5. Sé correcto

Evita comentarios del tipo “ahora compruebo que el estúpido usuario no haya introducido un número negativo”, o “este parche corrije el efecto colateral producido por la patética implementación del inepto desarrollador inicial”.

El uso de este tipo de comentarios no dice nada a favor de su creador, y, además, nunca se sabe quién los va a leer en el futuro. Emarts, en “Sapos, culebras y código fuente” muestra ejemplos de comentarios de este tipo.

Otro tema relacionado y, a mi entender, igualmente importante: cuida la ortografía. El hecho de que los comentarios no se vean desde el exterior no implican que puedas descuidarlos. Una ortografía correcta mejora la calidad de la expresión escrita y, por tanto, de la comunicación, que es de lo que se trata.

6. No pierdas el tiempo

No comentes si no es necesario, no escribas nada más queContinúa leyendo