Solución a problema con J9 y Palm

Tungsten E2Hace algún tiempo desarrolle una aplicación en J2ME para mi PDA específicamente la Tungsten E2 que funcionaba a la perfección pero luego de un tiempo empece a experimentar algunos problemas como recibir errores de “Fatal Exception” y lo cual me indicaba que reinicie, pase varios dias investigando a ver de que podía provenir el error con decir que hasta me toco chatear con soporte técnico de palm y dormir pocas horas con la preocupación, pero bueno di con la solución y la quiero compartir con Uds.
Uno de los primeros problemas que experimente (Inicio del proyecto) y que fue por la novatada de no gestionar bien la variables y los procesos en mi sistema me salia un error al sincronizar los datos a mi aplicación bueno esto se soluciono con un Hardreset en el equipo.
Pero luego de un tiempo me volvió a dar otro problema (luego de 6 meses) el cual me daba un “Fatal Exception” al usar mi sistema y si volvía a reiniciar el problema persistía intente hacer un hardreset como lo habia hecho anteriormente pero esto no lo soluciono y ahora aparecían otros errores al intentar cargar solo la máquina virtual el problema por lo general tenia los siguientes síntomas o mensajes:

  • Mensaje de error luego de la sincronización “DataMgr.c Line: 8878” y no cargaba el J9 en la palm.
  • VSFDBCache.c, Line: 4051, unattached record
  • Carga el J9 pero al querer configurarlo en la Palm recibía “Fatal Exception” o la pantalla se quedaba pegada o colgada.

Porque se da este error:

La KVM de java tiene un algoritmo para liberar memoria y reservarla para otros objetos que no desfragmenta la memoria utilizada y como que llega a saturar los espacios de memoria, como no encuentra memoria intenta escribir en la ROM como ya sabemos que no es posible y lanzara el error “DataMgr.c….”.
El problema de este algoritmo es que no relaciona espacios de memoria libres, aunque sean vecinos, y por lo tanto produce una gran fragmentación de la memoria.
Una de las sugerencias es liberar todos los espacios de memoria y apuntarlos a null o en su defecto si son enteros encerarlos para ayudar de cierta manera el Garbage Collector.

Solución:

  • Realizar un warm reset y luego un software reset

Que es lo que se logra con este warm reset o tambien conocido como software reset es evitar que al reiniciar no cargue las extensiones (los hacks, programas gestores de hacks, parches del SO, preferencias e alamas, etc). Entonces evitaremos que todo lo que haya estado ocupando este programa no se cargue y como que de cierto modo se libere todo sus consumos de memoria.

Si tiene dudas de como se hace un hard reset o un warm reset lo puedes ver en la sección Palm de este blog además de algunos estrategias para desarrollar aplicaciones J2ME y optimizar el recurso de memoria.

Actualizado: Este detalle es bien importante no olvidarlo, una vez realizado los pasos anteriores realizas un hard-reset y restauras los datos desde un respaldo anterior que hayas tenido para que se sobreescriba cualquier archivo, aplicación o base de datos y de esta manera evitar este tipo de errores, tambien puedes probar a cambiar de usuario de sincronización para el PDA, con esto logras que se regeneren todas las aplicaciones para el nuevo usuario.

Saludos y espero les sea de mucha utilidad.

Estrategias para desarrollo en Palm

Treo 650Bueno este post lo he pensado para todos quienes desarrollamos en dispositivo mobiles y tenemos problemas con los recursos o los típicos cuelgues xq el aparato ya no dispone de recursos, por supuesto que en este post va enfocado a lo que es desarrollo en j2me.

Al momento de crear un programa tenemos que definir bien las estrategias y modelos a utilizar para optimizar de la mejor manera nuestros recursos que en este caso de nuestras dispositivos mobiles son muy limitados.

Por lo general cuando empezamos a desarrollar para estos dispositivos nos desorientamos un poco por no decir bastante ya que como siempre desarrollamos aplicaciones de escritorio sobre computadores de hoy en dia son tan potentes tendemos a despreocuparnos un poco de lo que es el ahorro de recursos y utilización de la memoria.

En fin mejor paso a destacar algunas ideas que he tomado de varios textos que me han servido para mi desarrollo y tambien al final voy a publicar los links para que Uds. mismos los lean.

Las limitaciones que son inherentes en dispositivos pequeños requiere cambiar la forma de programar nuestras aplicaciones.

Simplificar la Aplicación

Una de las cosas mas obvias para simplificar nuestra aplicación es remover características innecesarias. Considerando cada característica de nuestra aplicación cuidadosamente. Luego de quitar características innecesarias procedemos a hacer el uso y reuso de interfaces gráficas tanto como StringItems, TextField, Forms entre otras mas.

Con lo anterior me refiero que podemos utilizar un mismo botón para varias interfaces gráficas y asi mismo una forma con distintas formas de visualización es decir con diferentes objetos cargados. Intenta aprovechar cada oportunidad de aprovechar mejor tus interfaces gráficas esto haría que tu aplicación sea mas pequeña.

Usar menos memoria en tiempo de ejecución

La capacidad de memoria en tiempo de ejecución de un dispositivo pequeño puede ser limitado. Aveces estas limitaciones no son obvias. Por ejemplo, El sistema operativo de la palm define 2 tipos de memoria: dinámica y de almacenamiento. La memoria dinámica almacena los datos de la aplicación en tiempo de ejecución en particular, Esta en la pila y el monto de memoria en tiempo de ejecución. La memoria de almacenamiento es protección de escritura, memoria persistente.

El monto de memoria dinámica disponible en una aplicación varia de 32K a 256K, y lo principal RAM del dispositivo es memoria de almacenamiento. Aunque si un dispositivo tiene 8MB de RAM, los 256K limite en la memoria dinámica es importante. Si mas memoria es requerida la aplicación usa la memoria de almacenamiento, que tiene un acceso mas lento debido a al protección de escritura.
Lo siguiente son algunos tips y ejemplos de como reducir el monto de memoria en ejecución que nuestra aplicación java usa.

– Usar tipos escalares

– No depender solamente del Garbage Colector

– Ayudar al Garbage Colector

– Liberar Recursos con anterioridad

– Reusar los objetos

– Evitar Excepciones

La configuracion del Equipo

En la preferencias de tu máquina virtual de java instalada en tu palm tienes que aumentar los valores que te vienen por defecto es decir en las preferencias globales vas a activar tu el poder usar tu buffering doble es decir [Use double buffering] y la memoria máxima por defecto te viene en 2 Mb puedes ponerselo a 4Mb y el Set Maximum Java Thread Stack Size lo puedes poner tambien a 4Kb o a lo que tu gustes.

Documentos de Interés

  1. http://www.java-tips.org/java-me-tips/midp/
  2. http://www.javaperformancetuning.com/tips/j2me.shtml
  3. http://www.jasonlam604.com/books.php
  4. http://www.palowireless.com/java/tutorials.asp

Saludos y espero les sirva de mucho estos tips e ideas para el desarrollo de sus programas.

🙂

Convertir Jar a PRC

Una de las cosas que siempre nos provocan el querer explotar es que luego de haber programado y generado nuestro archivo .jar, nuestro primer midlet para el pda no podemos cargarlo, por lo cual nosotros deberíamos convertirlo en prc.

En fin existen dos formas de realizar este proceso

  • Con midp4palm
  • Con jar2prc.exe o jar2prc_w.exe

Depende que máquina virtual le hayamos instalado a nuestro pda.

  • MIDP.prc
  • J9JavaVMMidp20

Como puedes apreciar para cada uno existe un convertidor de jar a prc en el caso de jar2prc viene con el paquete completo de desarrollo Java_Tech_for_Garnet_WEME57-1 dentro de la carpeta tools.

Convertidor de prc

Explicare un poco los campos que contiene la interface de conversión.

El primer campo es JAD File or URL aqui este campo direccionaremos dondes hayamos copiado nuestro archivo .jad

Automáticamente luego de que hayamos cargado el .jad veremos que se autocompleta los campos restantes hasta el Version Number.

Podemos cargarle un icono a nuestro aplicación

Una parte importante es el id que le pongamos a nuestro midlet porque eso nos serviría mas adelante para futuras operaciones.

Finalmente presionamos el botón Generar PRC.

Como puedes observar es de fácil uso.

Saludos y suerte con la conversión.

Ejecutar midlet en PDA

Logo de PalmEl siguiente post va dirigido a aquellos de nosotros que un día empezamos programando para J2ME y al querer correr la aplicación nos dio el problema de que es imposible hacerlo (Por favor asegurate que esta instalada la máquina virtual de IBM) a pesar de que habíamos instalado la máquina virtual J9 para nuestro Palm (Es necesario aclarar que las pruebas las realice en Palm 600 Treo y en Palm Tungsten E2).

Este problema se da frecuentemente xq no instalamos los archivos necesarios para que se ejecute nuestro midlet o instalamos archivos de mas como me sucedió a mi en alguna ocasión.

Es decir la siguiente pantalla:

Error de Virtual Machine

Para poder ejecutar la aplicación nuestro midlet “Hola mundo” lo que debemos hacer es instalar los siguientes archivos en tu Palm :

  • J9JavaVMMidp20.prc
  • JavaVMCheck_esES.prc

Estos archivos los obtienes del archivo que proporciona Palm para desarrollo: Java_Tech_for_Garnet_WEME57-1.zip

Cuando ya puedas ver esta pantalla en tu palm quiere decir que ya puedes correr aplicaciones .prc o en su defecto tu midlet “Hola mundo”

j9vm

J9

Y con eso ya corre nuestra aplicación.

Pruebalo y me dices como te ha ido.

Además pongo aqui el url para quienes desarrollan aplicaciones para pda.

http://www.access-company.com/spanish/developers/index.html

Saludos.