viernes, 29 de octubre de 2010

[Java] Excepciones: Unable to construct record instance



Sentí la necesidad de publicar ésta excepción porque no encontré ayuda de utilidad en internet, apenas en inglés, tampoco en español; inclusive, al buscar el error, los primeros links de los resultados sólo llevan a foros, donde otro usuario pide ayuda respecto al mismo problema, sin una respuesta puntual o certero.


Al trabajar reportes en Java con plantillas de archivos Excel (MS Office, Open Office, Libre Office, etc) ubicadas en memoria no volátil (entiéndase, un disco de almacenamiento); se corre el riesgo de que el archivo esté corrupto; o se corrompa en el proceso de creación.

El error -aparentemente sin sentido- que apareció fue:
ex.getMessage(): Unable to construct record instance.
(Mensaje: No se puede construir instancia de registro)

ex.getCause(): org.apache.poi.hssf.record.RecordFormatException: HSSF does not currently support encrypted workbooks.
(HSSF no es compatible con "libros" cifrados)

ex.getClass(): class org.apache.poi.hssf.record.RecordFormatException.
(Clase: RecordFormatException)
Y la línea de código que lanzó la excepción fue:
Workbook wb = new HSSFWorkbook(inp);
Como son reportes sobre plantillas de excel, ya se tiene un patrón de programación, librerías para interactuar con excel ya agregadas, y varía básicamente la agrupación, manipulación, lectura y muestra de los datos.

Y si bajo ese patrón que siempre ha funcionado, algo empieza a fallar, no es problema del código ni del JDK ni del IDE de Java ni del programador;  es problema externo. Ahora... cómo identificarlo?

viernes, 30 de julio de 2010

Juego de Damas en Prolog


Para días de junio, unos amigos de la UPN me mandaron a hacer un proyecto de su curso Lenguajes de programación...
Fue así como asumí el reto de realizar un proyecto de curso en 2 días.
El proyecto consistía en realizar un juego de Damas en prolog, particularmente swi-prolog.

Así que, sin más preludios, voy directo al grano:
Y como el post va a ser realmente extenso, voy a dedicarle varias entradas

Tuve que clasificar los predicados según su tarea... y así reduje a 4 clases:

1. Hechos:
  • fichaEsImg(numeroEnMatriz, idImagenEnMemoria).
2. Operaciones de Listas y Matrices:
  • extraerElementoLista(Lista, Posicion, Elemento).
  • extraerElementoMatriz(Lista, CoordX, CoordY, Elemento).
  • mostrarLista(Lista).
  • mostrarMatriz(Matriz).
  • cambiarElementoLista(Lista, Posicion, Elemento, NuevaLista).
  • cambiarElementoMatriz(Matriz, CoordX, CoordY, Elemento, NuevaMatriz).
  • esPar(Ficha).

martes, 11 de agosto de 2009

Los 10 mandamientos para crear buen código


Una cadena de enlaces... encontré éste link desde la página de Angel "Java" López; quien a su vez referencia la página donde encontró el original: making good software.

El artículo, la traducción, me parecen tan buenos, y los comentarios agregados tan puntuales y prácticos, que cometeré el pecado de copiarlo textualmente:

Los 10 mandamientos para crear buen código
(10 commandments for creating good code)

1. DRY - Don't repeat yourself – No se repita
DRY es usualmente el principio más fácil de entender, pero el más difícil de aplicar. Significa que cuando encontramos código similar en uno o más lugares, deberíamos abstraerlos en un nuevo método y cambiar los anteriores fragmentos de código para que llamen al nuevo método con los parámetros apropiados.
DRY es posiblemente el principio de codificación más universal, yo nunca he encontrado un desarrollador que argumentara que repetir código es bueno, pero, he encontrado desarrolladores que olvidan este principio cuando codifican pruebas unitarias, como ejemplo: imaginen que han cambiando la interface de una clase que tiene montones de pruebas unitarias, si no han usando DRY, tendrán que cambiar a mano las llamadas a esa interface para cada caso de prueba.


"Pienso que podemos repetirnos, siempre y cuando tengamos planeado el refactoreo del código. Si siguen Test-Driven Development, no hay que hacer hincapié en este principio siempre, sino tenerlo presente en la etapa de refactoreo. A veces, no tenemos claro cuál es la implementación que necesitamos abstraer, hasta que tengamos varios casos resueltos."

miércoles, 28 de enero de 2009

El primer Bug informático


Un clásico en la historia de la computación:

"First actual case of bug being found"

La palabra "bug" se usa para denominar a los errores en los programas, y que dicho término se debía a que, alguna vez, se encontró una polilla en el interior de una computadora, lo cual provocó un error en el funcionamiento de la misma.

La fotografía es de esta polilla, sobre las notas del ingeniero que la descubrió.

sábado, 27 de diciembre de 2008

Abrir carpetas en una sola ventana


Por eliminar un virus, jugar con el regedit, y jugar con:
Herramientas → Opciones de Carpeta → Tipos de Archivos ;
Fregué el modo de abrir carpetas en Windows; a pesar de tener la configuración correcta: "Abrir las carpetas en la misma ventana" en "Examinar carpetas";
Igual, cada vez que abría una carpeta contenida en otra, las habría en distintas ventanas, y se me acumulaban ventanas abiertas innecesarias. (Ver imagen)

Configuración normal:


Entonces, en vista de que de la forma anterior no me funcionaba, recurrí a hacer los siguientes pasos para solucionarlo:

1. Abrir el editor de registros (regedit.exe)

* Se puede acceder desde: Inicio→Ejecutar... ; y escribiendo "regedit"

2. Al acceder al registro, expandir las carpetas así:
HKEY_CLASSES_ROOT → Directory → shell


3. En el bloque derecho, dale doble clic al elemento "(Predeterminado)", y escribe el valor "none" (sin comillas).
Quedando como en la 3º imagen.

voilà.

fuente: noticias3d.

domingo, 21 de diciembre de 2008

Validación de Windows (Windows Genuine Advantage)


De la noche a la mañana me apareció el mensaje:


Podría ser víctima de una falsificación de software.
Esta copia de Windows no ha superado el proceso de validación de Windows original.

Un mensaje de WGA (Windows Genuine Advantage) el cual -valga la redundancia- verifica que la versión del windows que utilizas, sea original.

Y ese mensaje me sorprendió muchísimo, pues yo pagué $2 por el CD que me vendieron de windows XP (nótese el sarcasmo :)

En fin, la solución no fue tan difícil de hallar (felizmente)

Primero, es necesario descargar éste archivo: