Blog de Daniel Zegarra Rotating Header Image

Linux

Mi primer app para Android

No diré que fue difícil porque la verdad no lo fue. A pesar de que llevo con un dispositivo Android por varios meses ya no he tenido tiempo ni interés suficiente para intentar crear una aplicación por mi mismo. El catalogo de aplicaciones para Android es de por si tan extenso que no había tenido la necesidad de crear algo para el.

Mi intención era compilar una aplicación muy simple en corto tiempo y con el menor esfuerzo posible y para conseguirlo utilice la ayuda del proyecto App Inventor de Google.

App Inventor es una herramienta que te permite crear aplicaciones simples para Android de forma rapida y sin tener que aprender Java. El diseno de la interfaz se crea desde el browser y la logica utilizando un ejecutable java (es necesario tener instalado Java SDK).

Diseño de la aplicación

Diseño de la aplicación

Creando la lógica.

Creando la lógica

Para mi primer experimento elegí crear un catalogo electrónico de cuentas contables, en clase de contabilidad nos han pedido conseguir un listado de las cuentas contables y, ademas de la hoja de excel con los mas de mil cuentas existentes, no he podido encontrar un lugar donde vendan este listado en formato físico. Poder consultar la identidad de una cuenta a partir de su código sera de utilidad en clase.

  1. Instalar el SDK de App Inventor.
    El instalador copia archivos en la pc que son necesarios para compilar la aplicación y probarla en un emulador en el mismo teléfono.
  2. Utilizar el diseñador desde el browser y armar la lógica usado el complemento java.
  3. Probar la aplicación utilizando el emulador que viene con el SDK o en un dispositivo Android compatible.
  4. Compilar la aplicación y copiarla al teléfono. El archivo compilado ya se encuentra con la extensión apk. Por lo tanto, es tan simple como copiarla al teléfono y ejecutarla desde ahí.

Ahora, publicar el instalador en el market no es tan sencillo. Para empezar, el instalador generado no esta preparado para la tienda de Android porque no esta firmado digitalmente ni incluye los datos mínimos requeridos para ser compartido con otros usuarios. App Inventor es un proyecto que aun se encuentra en fase de pruebas y no esta pensado para crear aplicaciones que sean utilizadas en producción, sin embargo hay una forma de modificar el instalador para agregar las características restantes y que este sea aceptado por la tienda.

Los pasos para conseguirlo se pueden encontrar aquí y es necesario que ya tengas el instalador apk generado.

El resultado del experimento puedes descargarlo siguiendo el siguiente enlace:

Descargar AndroidApp: Plan Contable 2011 (Perú)

No he tenido tiempo que prepararlo para la tienda. Por el momento, solo puede instalarse copiandolo manualmente al dispositivo.

Información sobre la aplicación

Emulador de dispositivo

Emulador de dispositivo

Muestra información de la cuenta contable asociada al código ingresado. Ademas muestra la naturaleza del registro y lo que representa. La información la halla de una tabla de google docs compartida. Fue la manera mas rápida que encontré de realizar una búsqueda en una tabla. Como la tabla se encuentra en mi cuenta de google docs requiere de otra cuenta de google valida para tener acceso a la tabla de mi cuenta, sin importar que la tabla de datos sea publica. Por lo tanto te pedirá acceso a tu cuenta de google al realizar la primera consulta. Esto puede parecer sospechoso :P . Repito, esto se debe a que los datos de este ejemplo se encuentran almacenados en una cuenta de google docs. Lo ideal seria que se almacenen en la aplicación (ya que esta data suele no cambiar en años).

Enhanced by Zemanta

GingerDX v005 liberado. Por fin fotos a 3MP en Gingerbread con Xperia X8

Hoy doixanh publico una nueva version de GingerDX, su ROM personalizada para el Xperia X8, la primera que puede utilizar todo el potencial de la cámara incluida en el teléfono (tampoco es que sea “la cámara” pero tomar fotos a VGA pudiendo hacerlas a 3MP era molesto).

Ver la entrada en el foro de xda-developers

doixanh fue hasta hace poco el desarrollador de FroyoBread, la ROM que actualmente uso en mi teléfono. Las actualización de FroyoBread ha finalizado para dar paso al desarrollo de GingerDX el cual usa Android 2.3. GingerDX es un fork de Cyanogen que al parecer corre perfectamente sobre el Xperia X8.

Estoy descargando la ROM y la instalare en unos minutos. Luego contare como me va y podre hacer comentarios propios.

Cambiar el scrollbar de Ubuntu 11.04

Personalmente, no me gusta esta “mejora”. Considero que el ahorro de espacio (no mas de 20px) no valía la pena la implementación.

Para desactivar la nueva barra de desplazamiento ejecuta las siguientes en tu consola favorita:

sudo su
echo "export LIBOVERLAY_SCROLLBAR=0" > /etc/X11/Xsession.d/80overlayscrollbars

Error del garbage collector en distribuciones Linux que tienen a Debian como base

Hay un bug inquietante en la instalación por defecto de PHP sobre servidores Debian y distribuciones que parten de él (como Ubuntu). Aparentemente el error aparece de forma aleatoria y con el siguiente mensaje:

session_start() [function.session-start]: ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13)

Si vuelves a ejecutar refrescar la página el error ya no aparece. Con el tiempo llega a ser desesperante :P
Bueno, si tu te has encontrado mas de una vez con este insecto te explico porque este error se dispara y como solucionarlo.

Las sesiones de php son datos asociados a un cliente que visita el servidor. Cuando un visitante se conecta por primera vez al servidor este le asigna un codigo para identificar al mismo cliente durante su visita. El cliente entrega este codigo en cada comunicacion de tal forma que el servidor pueda reconocer al visitante y a su vez asociar informacion adicional a este codigo sin que el cliente lo sepa. Para entenderlo mas facilmente, el servidor le asigna al visitante un casillero numerado y le entrega el numero de la llave para reconocerlo mas tarde.
En servidores web de produccion, que pueden tener miles de visitantes en tan solo unos minutos, almacenar los codigos de sesion en memoria resulta una mala idea, por lo que almacena todos estos codigos en el disco duro (quedando los mas nuevos o mas utilizados en la RAM del servidor).
Cuando un visitante deja de comunicarse con el servidor por un largo tiempo, el servidor entiende que ese visitante ya se ha retirado y procede a anular su sesion, pero la informacion asociada a esta aun queda en el disco duro. PHP esta configurado para depurar regularmente las sesiones inactivas y asi no llenar el disco duro de basura.
El problema aparece aqui. En los servidores Debian las sesiones son almacenadas en un directorio con permisos restringidos y estas son depuradas por el cron del sistema. Entonces, cuando PHP intenta realizar la depuracion se produce un error debido a que PHP no tiene los permisos suficientes sobre el directorio de sesiones.

La solucion es muy simple: Decirle a PHP que no depure las sesiones. Dejar que cron lo haga.
Para esto abre y modifica la siguiente linea en el archivo de configuracion de PHP (php.ini). En Ubuntu lo puedes encontrar usualmente en /etc/php5/apache2/php.ini. (no olvides abrirlo con permiso de escritura).

$config['gc_probability'] = 1;

No recuerdo el numero de linea ahora. Debe estar ubicado en la seccion de parametros de configuracion de sesiones.
Cambia el valor de gc_probability a 0 para que PHP nunca depure las sesiones olvidadas.

Guardar los cambios, reinicias apache y listo.

La solucion fue hallada gracias a este hilo de discusión:
http://forum.kohanaframework.org/discussion/565/garbage-collector-error-with-sessions-on-debian/p1

Depurar Code Igniter con Eclipse y Zend Debugger

Sin hacer cambios a Code Igniter no se puede. Aun si enable_query_strings esta definido en FALSE Code Igniter leera las variables que PDT pasa usando GET para que Zend Debugger conecte correctamente a la consola. Es una tonteria que Eclipse no nos permita NO pasar estas variables via GET. La solucion mas rapida pero no permanente es abrir el sitio que deseamos depurar en un browser aparte luego de tener a Eclipse esperando la conexion del depurador, pero es una salida molesta.

Lo que hice fue decirle a Code Igniter que ignore ciertas variables entregadas via GET aprovechando los Hooks para no tocar el codigo base de CI.

Para usar este hook sigue estos pasos:

  1. Descarga este archivo y guardalo en tu escritorio.
  2. Descomprime el contenido del archivo en el directorio application de tu instalacion de CI. Si ya tienes registrado algun hook entonces no reemplaces el archivo config/hooks.php. Agrega el contenido del archivo descargado tu archivo hooks.php actual.
  3. Asegurate que enable_hooks es igual a TRUE en el archivo config.php ubicado en CIroot/application/config/.

Luego de hacer esto, intenta depurar tu aplicacion. Deberia correr sin problemas y ya no mostrar el error de que no se encuentra el controlador.

Nota: La intencion de este articulo es solo compartir un archivo fuente para utilizar Zend Debugger con CI. Para informacion de la instalacion de Zend Debugger o su uso con Eclipse PDT  puedes… googlear.

Descargar ZendDebugger&CI Hook