jueves, 29 de noviembre de 2012

Java en Android

Si tienes un terminal Android (teléfono, tablet...) seguramente habrás echado de menos que no ejecute java en alguna ocasión. Desde juegos hasta aplicaciones de turismo (si te gusta viajar habrás encontrado esos puntos que dicen: ¡Enciende el Bluetooth y descarga la guía de visita...!), pasando por el desarrollo de nuevas aplicaciones (como es nuestro caso), es interesante poder ejecutar archivos de java en nuestro terminal. La mala noticia es que Android no soporta una máquina virtual Java de forma nativa en estos momentos. La buena es que existen emuladores para todo: consolas de videojuegos, sistemas operativos como el propio Android y, como no, de la máquina virtual de Java.



El problema


Después de quemar unas cuantas neuronas aprendiendo a desarrollar aplicaciones java para dispositivos móviles nos encontramos con un problema a la hora de probarlas en real. Disponemos de un terminal iPad (iOS): no soporta java. Disponemos de otro terminal Android: no soporta java... vamos, que tenemos que recurrir a un móvil casi obsoleto para probar los .jar.

Pero, ¿por qué? Con lo fácil, flexible y potente que es trabajar con Java. La alternativa es programar en otro tipo de lenguajes (ActiveC, Adobe Flash...), pero eso será objeto de otros post. Aquí nos interesa ejecutar java en Android.


phoneME

Como casi siempre en informática, no somos los únicos que tenemos este mismo problema y hay gente mucho más especializada que aporta soluciones (bendita comunidad internauta).

La solución que nos ha solucionado un poquito la existencia ha sido phoneME (podéis visitar su web aquí). Se trata de una implementación de J2ME (Java2 Micro Edition para los profanos) para diferentes sistemas operativos entre los que se encuentra Android (si queréis más información sobre la versión de phoneME para Android podéis encontrarla aquí).


Instalación

En la sección de descargas de la página de phoneME podemos encontrar las versiones para los distintos sistemas operativos. A nosotros nos interesa el siguiente perfil:

phoneME Advanced - Foundation Profile + MIDP High Resolution b168 rev20547 (apk)

Se trata del perfil MIDP para ejecutar MIDlets en alta resolución (más de 240x320 pixels). Descargaremos un archivo APK que instalaremos en nuestro dispositivo Android.



Funcionamiento

Para ejecutar un archivo .jar tenemos dos opciones: 


  1. Si sólo tenemos el .jar debemos ejecutarlo desde phoneME (interfaz un poco engorrosa)
  2. Si disponemos del .jad y el .jar podemos utilizar un explorador de ficheros como el Astro y asignar la extensión .jad al phoneME (mucho más agradable de utilizar).
Vamos a centrarnos en la primera forma, por si acaso no tenéis el Astro todavía (mal, os recomiendo que lo probéis ;). El primer paso (y obvio) es pasar el .jar al terminal (por bluetooh, wifi, cable USB o como prefiráis). Una vez allí tomad nota de la ruta absoluta donde se ubica (en nuestro caso la carpeta de entradas de bluetooth: /mnt/sdcard/bluetooth) y el nombre del archivo. Esto es necesario porque phoneME no dispone de un módulo de exploración de ficheros: tendremos que darle la URL de nuestro archivo y pulsamos ejecutar:



Como podéis ver es un MIDlet sencillo desarrollado por nosotros, pero el programa es capaz de ejecutar MIDlets más complejos o incluso aplicaciones con la configuración CDC (instalando el apk correspondiente).

Espero que os resulte útil, si tenéis alguna pregunta no dudéis en escribir el comentario!

miércoles, 24 de octubre de 2012

Recuperar IMEI Samsung Galaxy S2

Samsung almacena la información sensible de sus teléfonos Android en una carpeta llamada efs situada en el directorio raíz del teléfono. Allí almacena datos como el IMEI encriptado.

En ocasiones un mal funcionamiento del sistema Android puede corromper la carpeta efs con el resultado de perder ese IMEI. Lo que notaréis es que el terminal no reconoce ninguna tarjeta SIM (se queda "bloqueado" en modo avión por más que lo reinicies).

Me ha ocurrido recientemente y cuando ya estaba casi resignado a llevar el terminal al soporte técnico encontré este programa que puede ayudarte en un par de clics.


GSII_Repair

Este programa es capaz de reparar la carpeta EFS automáticamente aun sin copia de seguridad previa. Podéis encontrarlo en el market (o Google Play) o pulsando aquí.

Esta aplicación tiene un par de requisitos importantes:

Una vez descargado, lo ejecutamos con permisos de root:


Nos situamos sobre la pestaña "Repair GSII":


Aquí sencillamente seguimos los pasos:

  1. Pulsamos sobre el icono 1 para hacer una copia de seguridad de nuestra carpeta EFS (aunque si está corrupta nos servirá de poco y podemos omitirlo).
  2. Haciendo clic en el paso 2 montamos el sistema de ficheros de Android en modo RW (lectura y escritura).
  3. En este paso la aplicación elimina el archivo corrupto con el IMEI encriptado (si todavía existe) y genera uno nuevo.
Después de este paso el terminal se reinicia y podréis ver que se ha recuperado el IMEI (desde las opciones de configuración o tecleando *#06# y pulsando tecla de llamada).

Es una buena idea hacer una copia de seguridad ahora de toda la carpeta EFS. Esta aplicación también te permite hacerlo desde la pestaña "Save/Restore efs folder". Simplemente pulsa en esa pestaña y haz clic en el paso 1 ("Save Efs Folder").

lunes, 22 de octubre de 2012

Activar el display de errores de PHP en tiempo de ejecución

En la mayoría de alojamientos web que soportan PHP tenemos el display de errores desactivado (y normalmente no vamos a poder editar el php.ini para activarlo).

Aquí os dejamos un código muy sencillo para activar temporalmente el display de errores en tiempo de ejecución, incluyéndolo en vuestro script:

 <?php
  error_reporting(E_ALL);
  ini_set("display_errors", 1);
 ?>


Si necesitáis activarlo o desactivarlo en todas vuestras páginas siempre podéis escribir ese código en un script php e incluirlo en la cabecera de todas las páginas del sitio. Cuando no necesitéis ese display de errores basta con cambiar ese uno del código por un cero (y viceversa cuando haga falta).

Si sois desarrolladores en PHP seguro que os resulta útil. Saludos!

jueves, 6 de septiembre de 2012

Centrar un div en nuestra web con css

Si programáis en entorno web es bastante probable que hayáis encontrado este problema. Entre los atributos de estilo de un div podemos especificar la alineación central del contenido del div (con text-align), pero no del propio contenedor.

Algunos hemos hecho "ñapas" del tipo de declarar un div contenedor con text-align=center que contenga al div que queremos centrar, pero la solución es mucho más sencilla: poner tanto el margen derecho como el izquierdo a auto:


En css



#centrar{ 
  width:500px; /* Por ejemplo, si ocupa el 100% de la página no hay centrado ;) */
  margin-right: auto;
  margin-left: auto; 
  /* Estas dos siguientes son sólo para ilustrar mejor el ejemplo */
  padding:20px;
  color:red;
 }

(Y en nuestra página)
<div id="centrar">div centrado con contenido a la izquierda</div>

En HTML 


<div style="width:500px;margin-left:auto;margin-right:auto;background-color:red;padding:20px;">div centrado con contenido a la izquierda </div>

El resultado



Está probado en Firefox 15 y Explorer 9. Espero que os sea tan útil como a mí

Recomendaciones de Alcasoft