Archivos para Marzo 2008

Pequeño análisis del plugin de BlackBerry para Eclipse

Las vacaciones de semana santa, el trabajo y un problema en el servidor, que volvió inaccesible este blog durante varias horas del miércoles, se han conjurado para hacerme establecer un nuevo record de días sin publicar nada. Pero hay mucho sobre lo que escribir, así que confío en que la próxima semana compense esta que acaba.

Contaba en una entrada anterior que había aparecido un plugin de BlackBerry para Eclipse, sin que yo supiese siquiera que se estaba preparando uno. El JDE de RIM no es un entorno de desarrollo de mi gusto, así he instalado el plugin con la esperanza de que resulte una alternativa más interesante. Y así es.

Al contrario que los plugins habituales de Eclipse, el plugin de BlackBerry es un instalable de Windows que copia en la carpeta plugins del IDE tanto los habituales jar como exes y dlls. Una vez completada la instalación, Eclipse se muestra con una nueva opción en la barra de menús:

Desde esta opción podremos acceder a la aplicación de petición de firmas digitales o a algunas propiedades del proyecto:

La configuración en Eclipse está bastante dispersa, así que el habitual menú Project->Properties de Eclipse podemos definir varias propiedades específicas de Eclipse:

incluyendo el tipo de aplicación: CLDC, Midlet…

Y en el menú de ejecución (también en el de depuración) podemos configurar, entre otras cosas, el emulador que queremos usar con acceso a todos los parámetros del mismo:

El plugin encontró sin problemas todos los simuladores instalados, y también los que instalé tras el plugin.

En Window->Preferences podemos configurar una opción clave: los componentes BlackBerry a usar, es decir, con qué versión del sistema vamos a compilar. El plugin encuentra tantos las instalaciones completas de JDE como las instalaciones de los componentes independientes, y enlaza la ayuda correspondiente. En esta ventana establecemos también la versión de la JDK a usar:

En resumen, para los que estamos acostumbrados a Eclipse programar para BlackBerry se ha vuelto una experiencia familiar, y para los que no han usado Eclipse antes, este plugin supone una alternativa que sin duda resultará más satisfactoria.

Navegación 2D en una pantalla de móvil

Así se llama el muy interesante artículo (2D navigation on a mobile screen) que acabo de leer en Sender 11. El autor analiza las soluciones propuestas por Opera Mini y por la versión para el iPhone de Safari para acercar la web a los dispositivos móviles. Aunque Opera Mini tiene que ser necesariamente una solución más versátil y genérica que Safari (el primero se ejecuta en decenas de dispositivos distintos y el segundo sólo en uno) ambos realizan aproximaciones similares al problema, en las cuales la clave es la posibilidad de hacer zoom: se parte de una vista general que nos muestra la estructura de la página, se selecciona una sección cuyo contenido se nos muestra con un tamaño que podamos leer, y se vuelve a la vista general para realizar otra selección (el modelo de Safari es más flexible, gracias a su interfaz táctil y a contar siempre con una buena resolución).

Solucionar el problema de la web móvil va a ser uno de los desafíos tecnológicos más interesantes en los próximos meses. Y lo va a ser porque, pese a que podemos contar con que la evolución tecnológica nos traerá dispositivos cada vez más rápidos, potentes y con más memoria, el tamaño de pantalla y el dispositivo de entrada seguirán siendo la barrera que separe a los dispositivos móviles de los ordenadores personales.

P.D. Al final del artículo se enlaza una presentación sobre una tecnología de Microsoft llamada Photosynth (Blaise Aguera y Arcas: Jaw-dropping Photosynth demo). Realmente impresionante.

Plugin de BlackBerry para Eclipse

Una de las cosas que se echaban de menos a la hora de desarrollar para BlackBerry era un plugin para Eclipse, similar a los que ya existen para Java ME o Android. Pues hoy me ha sorprendido leer en RIMarkable (BlackBerry JDE Plug-in for Eclipse) que ya está a disposición de los desarrolladores. Fue anunciado ayer por RIM (RIM Announces BlackBerry JDE Plug-in for Eclipse) y está disponible para descargar aquí. Intentaré probarlo esta semana.

Nueva SDK de Symbian: S60 3rd Edition Feature Pack 2

Con una discreción que contrasta con el espectáculo montado alrededor de la SDK del iPhone, Nokia ha hecho pública la que parece ser la versión definitiva de la SDK de S60 3rd Ed. FP2, la última versión del exitoso sistema Symbian, que empezarán a incorporar algunos móviles de Nokia a partir de este año. Por lo que he leído (S60 3rd Edition FP2 SDK released, yo aún la estoy descargando) el paquete incluye SDK C++, Java, Open C y Web Runtime. Junto con la recién liberada versión 1.3 de Carbide.c++ consituye el conjunto de herramientas que Nokia pone a disposición de los desarrolladores.

El éxito de Nokia a la hora de vender dispositivos hace que me sorprenda su poco decidida estrategia para crear una comunidad de desarrolladores sobre su plataforma de smartphones. Documentación escasa, herramientas complejas y una plataforma muy cerrada muestran que la compañía finlandesa no considera importante que los desarrolladores opten por las alternativas de Microsoft, Google o Apple. Veremos si con el tiempo tienen que cambiar de opinión.

Mostrando un mapa estático de Yahoo! en con la BlackBerry

Veíamos en un artículo anterior (Cómo mostrar imágenes de mapas en el móvil) distintas opciones para mostrar mapas estáticos (simples imágenes de mapas, nada de JavaScript). Vamos a ver con un poco de código cómo utilizar la Yahoo! Map Image API en BlackBerry (que con algunos cambios se podrá adaptar a cualquier aplicación Java ME).

La API acepta varios parámetros para elegir la ubicación del mapa a mostrar, y nosotros vamos a utilizar como parámetros la longitud y latitud del punto central, así como el nivel de zoom y el tamaño de la imagen:

String url = "http://local.yahooapis.com/MapsService/V1/mapImage?appid=mi_yahoo_appid"
+ "&latitude=" + latitude + "&longitude=" + longitude +
“&image_height=” + height + “&image_width=” + width + “&zoom=” + zoom;

El parámetro mi_yahoo_appid es nuestro id de aplicación de Yahoo!, que se puede obtener gratuitamente aquí: Yahoo! Application ID. Con la url formada podemos realizar la llamada a la API.

StreamConnection s = (StreamConnection)Connector.open(url);
HttpConnection httpConn = (HttpConnection)s;
int status = httpConn.getResponseCode();
if (status == HttpConnection.HTTP_OK)
{
try
{
DocumentBuilder doc = DocumentBuilderFactory.newInstance().newDocumentBuilder();
DataInputStream dis = s.openDataInputStream();
Document d = doc.parse(dis);
Element el = d.getDocumentElement();
url = el.getFirstChild().getNodeValue() ;
dis.close();
}
catch(SAXException e)
{
System.err.println(e.toString());
}
catch(ParserConfigurationException e)
{
System.err.println(e.toString());
}

Realizamos la conexión de forma normal, y si todo ha ido bien Yahoo! nos devolverá un documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<Result xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
http://img.maps.yahoo.com/mapimage?MAPDATA=eJz6K.d6wXVM6myr2yRPfx6.kl.uMGgD3Tu4JtDQzr_33pFEsTT
SaosZ9OCtsiDrsLv9t65fzjz0CJm6JO2v_ZIHLflY9gto.xWMK9ovlRJVmrBLO4FoSsh3Ipsr
</Result>

Este documento contiene un único elemento, cuyo texto es otra url que contiene la imagen solicitada en formato PNG. Para acceder a esta url, en el package net.rim.device.api.xml.parsers encontramos la clase DocumentBuilder, que nos permite convertir un InputStream en un objeto Document de org.w3c.dom, a partir del cual accedemos fácilmente al valor del elemento. Con esta segunda url volvemos a abrir una conexión:

s = (StreamConnection)Connector.open(url);
httpConn = (HttpConnection)s;
status = httpConn.getResponseCode();
if (status == HttpConnection.HTTP_OK)
{
java.io.InputStream input = s.openInputStream();
byte[] data = new byte[1];
ByteVector bv = new ByteVector();
while ( -1 != input.read(data) )
{
bv.addElement(data[0]);
}
Bitmap bitmap = Bitmap.createBitmapFromPNG(bv.getArray(), 0, -1);
// Mostramos la imagen almacenada en el bitmap
}

Esta vez utilizamos el flujo de bytes devuelto para crear un Bitmap. No podemos utilizar el método getLength() de la conexión para averiguar el número de bytes total porque las cabeceras de la página no incluyen el campo Content-Length. Así que recorremos byte byte el stream para obtener un array de bytes con el que generar el Bitmap.
Ya tenemos nuestro Bitmap para mostrar. Bastará añadir, por ejemplo, un BitmapField y asignarle el Bitmap recién creado.

Acceder a Internet con Java en una BlackBerry

Entre las peculiaridades que presentan las BlackBerry como dispositivos programables, la que más quebraderos de cabeza suele causar es la conexión a Internet. El motivo no es la API utilizada, que es la habitual Generic Connection Framework de CLDC 1.0, sino los diferentes tipos de acceso a Internet que se pueden usar en los dispositivos BlackBerry. Los tipos de conexión dependen tanto servicio contratado, del modelo de BlackBerry, de la operadora… De hecho, lo que viene a continuación no es información contrastada, sino conclusiones que he sacado tras investigar en diversas páginas y manuales que he encontrado por Internet. Es además una exposición simplificada, destinada a desarrolladores que quieran programar en la BlackBerry aplicaciones que se conectan a Internet. Cualquier aportación o corrección es como siempre bienvenida.

Existen dos servicios BlackBerry distintos. Uno es el empresarial, llamado BlackBerry Enterprise Solution (o BES para abreviar), en el cual la empresa tiene un servidor (el BlackBerry Enterprise Server) que todas las BlackBerry corporativas usan como punto de acceso. A través de él acceden al correo corporativo o se descargan aplicaciones corporativas. Tambien proporciona un servicio, llamado Mobile Data Service, que actúa de proxy para acceder a Internet. Con BES, las únicas restricciones son las que la empresa configure en su servidor.

Para usuarios individuales, o para pequeñas empresas que no puedan permitirse la infraestructura BES, existe el servicio BlackBerry Internet Service (BIS). Este servicio permite acceder a Internet a través de una pasarela gestionada por RIM, habitualmente con un plan de datos con tarifa plana. Pero, y aquí empieza la complicación, sólo pueden acceder a esta pasarela aquellas aplicaciones que tengan permiso para ello. A día de hoy existen varias aplicaciones que funcionan bajo la pasarela de BIS (por ejemplo, hay una lista, no sé cómo de completa, aquí: ¿Entra en la Tarifa Plana?). Imagino que es neecsario un acuerdo con RIM para que una aplicación tenga acceso a esta pasarela, pero no he conseguido información al respecto.

Además de BIS, las operadoras pueden ofrecer una pasarela propia para acceder a Internet. Esta pasarela puede ser WAP o no (creo que las que ofrecen en España son WAP). Para utilizar estas pasarelas es necesario tener definido un APN (Access Point Name) con los parámetros especificados por el operador (nombre, y opcionalmente ip, puerto, usuario y contraseña), aunque también es posible incluir estos parámetros desde el código que abre la conexión.

El problema de las pasarelas que no son BIS es que se cobran aparte, por lo su coste no va incluido en la tarifa plana de BlackBerry; eso sí, es posible no contratar el servicio BIS y contratar una tarifa plana de datos convencional, que sí cubrirá todas nuestras conexiones a Internet. Pero si no se tiene tarifa plana, lo mejor es asegurarse de que no hay APNs configuradas y de que las aplicaciones que usamos funcionan en BIS.

Como conclusión, las aplicaciones Java que hagamos para BlackBerry no podrán acceder a Internet por BIS. Hay que tener en cuenta, además, que con el emulador de BlackBerry sólo podemos probar conexiones a través del MDS, ya que no hay forma de emular un servicio BIS ni una pasarela directa a Internet. Las diferencias son relevantes en el código, ya que por defecto casi todas las BlackBerry intentan conectarse por Mobile Data Service.  Los parámetros para especificar un tipo de conexión u otro, así como para especificar una pasarela wap se encuentran en este artículo de la base de conocimiento de BlackBerry: What Is - Different ways to make an HTTP or socket connection.

Referencias:

Lo que entra en el plan BB
BESADMIN.es
¿Entra en la Tarifa Plana?

Primeras impresiones sobre la SDK del iPhone

Con algo de retraso, algunas ideas sobre el anuncio de Apple:

  • Sólo Mac OS X v10.5. Nada de desarrollo sobre Windows o Linux, ni siquiera sobre Tiger. Supongo que tiene sentido, pero aún así es una lástima para los que no tenemos (ni planeamos tener) un Mac.
  • Aplicaciones sandbox. Nada de interaccionar con otras aplicaciones. Nada de ejecutarse en segundo plano.
  • Distribución de aplicaciones sólo a través de Apple. Lo que garantiza que sólo se distribuyan aplicaciones ortodoxas, que hagan uso sólo de las APIs oficiales de la manera aprobada por Apple.
  • Lo importante es el negocio. Y para demostrarlo, con la SDK se presentaron videojuegos y correo push. El iPhone como sustituto de BlackBerry y NintendoDS a la vez.

De momento la SDK está en beta, y sólo disponible desde estados unidos. A ver si en los próximos días va apareciendo más información para hacer un comentario algo más técnico.

Entradas siguientes »