Archivos de la categoría Móvil

Blackberry Playbook ejecutando aplicaciones Android

Como ya sabéis, RIM me regaló a principios de año una tableta Blackberry Playbook para la que he hecho algunas aplicaciones.

Hace ya tiempo que anunciaron que en una actualización futura podrían ejecutarse aplicaciones Android sobre el Playbook, lo que sin duda abriría la puerta a una enorme cantidad de nuevas aplicaciones de las que carece el sistema actualmente.

Tras hacerse de rogar, a mediados de octubre publicaron finalmente Playbook OS 2.0 como una beta para desarrolladores con la esperada compatibilidad de Android. El comunicado inicial era que en noviembre se publicaría la versión final estable y todos los Playbook se actualizarían, pero tristemente han pospuesto el lanzamiento hasta febrero, una pena porque, en teoría, además de las aplicaciones Android, vendría con una aplicación nativa para correo electrónico pop/imap/exchange, algo de lo que carece hoy en día a no ser que la conectes con un smartphone Blackberry. Es decir, hoy por hoy, no se puede ver el correo en el Playbook a no ser que lo enlaces con un teléfono. Todo esto podría hacer de Playbook un aparato mucho más competitivo de cara a la campaña de Navidad y así podría vender muchos más PlayEpubs :P.

Hablando de Android puramente, lo que han hecho en realidad es embeber una máquina virtual Android que es la encargada de ejecutar las aplicaciones. Aquí podéis ver el “escritorio” de Android corriendo sobre Playbook.

La primera impresión, tras instalar algunas aplicaciones, fue tremenda ya que funciona relativamente bien. No puedo decir que sea 100% fluido ni estable, pero considero que vale la pena solo por la oportunidad de tener aplicaciones que hasta ahora no era posible, como un simple cliente SSH.

Pero no todo iba a ser tan bonito. No se pueden instalar directamente los .apk de aplicaciones, lo han “capado” y hay que instalarla como aplicaciones Playbook normales, si intentas instalar un .apk te indica que no es posible. Para ello han creado un sistema de reempaquetamiento de .apks en .bar. Una vez en el formato nativo ya se pueden instalar y aparecen tanto en el menú de la Playbook como en el menú de aplicaciones de Android.

Los teléfonos Android suelen tener tres botones que se han conseguido de distintos modos al trasladarlos a un Playbook sin botones físicos:

  • El botón “menú” de Android se convierte en el gesto “swipe down” de Playbook, con lo que la integración está bastante lograda.
  • El botón “back” se crea con la barra inferior que aparece en la imagen, es el peor logrado ya que implica añadir esa barra a la pantalla.
  • El botón “home” que lleva al escritorio se consigue con un gesto de 45º desde la parte inferior central de la pantalla, aceptable en cuanto le pillas el truco

Aquí cabe puntualizar que el “launcher” que trae por defecto el Blackberry Runtime for Android no permite acceder a las funciones básicas de Android (escritorio, menú de aplicaciones, etc), pero esto lo podemos solucionar instalando cualquier aplicación “launcher” (LauncherPro en mi caso) y tendremos a nuestra disposición un Android casi completo y, entre otras cosas, tendremos el cliente de email de Android, aunque podemos instalar cualquier otro :). Cabe decir que es poco probable que cuando se lance oficialmente RIM deje instalar otros “launchers” que no sean el suyo propio, con lo que habrá que seguir instalándolo igual que se hace en la beta.

Según la documentación, no todas las aplicaciones Android funcionarán, entre otras funcionalidades que no estarán disponibles están:

  • Widgets
  • Todo lo que tiene que ver con el teléfono propiamente dicho, llamadas, SMS, MMS, obvio ya que no tiene opciones de teléfono.
  • Bluetooth
  • Camara
  • NFC
  • VoIP
  • Apps that utilize native code bundled into their APK file
  • Linux virtual file systems (/proc and /sys will not be supported at the app level)
  • Add on libraries (all libraries defined by the tag in the app’s manifest other than “android.test.runner” are unsupported)
  • The following Java software packages:
    • Vending (In App Payments): com.android.vending
    • Cloud To Device Messaging (Push): com.google.android.c2dm
    • Google Maps: com.google.android.maps
    • Text to Speech: com.google.tts

Aunque dicen que no funcionará Google Maps, doy fé de que sí funciona. Eso sí, no es del todo estable, aunque creo que eso es problema del runtime en general.

Esto quiere decir que habrá muchas aplicaciones que no funcionarán, ya se ha encargado la gente de RIM de que no se instalen aplicaciones que puedan hacerles competencia. Por ejemplo, si intentamos acceder al menú de cuentas para configurar tu cuenta de Google, RIM amablemente nos indica que no se puede, con lo que no podremos sincronizar nuestros datos.

El nuevo sistema está disponible, por el momento, como beta para desarrolladores. Pero claro, al no poder instalar .apks directamente, seguimos sin tener aplicaciones para probar. Aquí es donde llega el efecto comunidad y se comienzan a liberar aplicaciones Android reempaquetadas, en playbookbars.com tenemos un listado completo de aplicaciones listas para instalar.


Hay que puntualizar que para instalar las aplicaciones hay que hacerlo desde el SDK de desarrollo o usando BBHTool que lo hace todo mucho más sencillo. Como ya he comentado, imagino que seguirá siendo la manera de instalar muchas de las aplicaciones que RIM no querrá que nos instalemos, comenzando por el launcher.


Mi opinión personal. Sin duda la compatibilidad con Android abre un mundo de posibilidades a la Playbook, ahora estoy mucho más satisfecho con él, sigue teniendo carencias, pero ahora menos, eso sí, el sistema NO es estable en general, el runtime de Android debería ir bien sobre el hardware de la Playbook teniendo en cuenta además que el S.O. es QNX, pero aún así tiene cierto aletargamiento que hace que la experiencia en juegos no sea optima. Angry Birds, por ejemplo, funciona correctamente, pero no es lo fluido que un juego como este requiere.

He puesto muchas de las capturas minimizadas para que se vea que debajo está la Playbook, sino podríais pensar que es un tablet Android ;).

Yo, de momento, no vuelvo al OS 1.7 :P.

Nuevo proyecto: PlayEpub, lector de ebooks para Blackberry Playbook

Ah!, que no os lo había contado, os tengo algo abandonados últimamente, pero es que he estado bastante liado, nuevo proyecto en la oficina y nuevo proyecto en casa :P. Research in Motion (más conocido como Blackberry) me ha regalado su nuevo tablet, el Playbook. ¿Adivináis por qué? ¡Sí! Por publicar Valenbisi para Playbook :).

No lo voy a negar, nunca me habría comprado un tablet si no me lo hubiesen regalado :P, y después de dos meses con él en casa, me confirmo, no le veo 500 euros de utilidad :P. El aparato en cuestión me parece muy buen cacharro, micro de doble núcleo a 1ghz, 1G de ram, salida HDMI y lo más sorprendente, sistema operativo QNX, un nuevo player en el mercado. RIM compró QNX, un sistema operativo en tiempo real, hace unos años y ahora ha aprovechado para incluirlo en su tablet. El rendimiento es espectacular, reproduciendo una película en HD, navegando y jugando simultáneamente sin notar ni un ápice de deterioro. Pero claro, todo tiene sus pegas :P. Desde mi punto de vista la mayor es la falta de aplicaciones. Aunque RIM anunció a bombo y platillo hace unos meses que se podrían ejecutar aplicaciones Android, lo cierto es que por el momento no, nos limitamos a las aplicaciones nativas. ¿Y cómo se desarrollan estas aplicaciones nativas? Pues más sorprendente aún, en Adobe AIR, por mi encantado :P, pero reconozco que tiene muchas limitaciones a la hora de poder hacer ciertas cosas, por ejemplo un cliente ssh. Aún así es más que suficiente para la mayoría de aplicaciones de usuario.

Cuando cayó en mis manos, lo primero que eché en falta fue un lector de ebooks que me permitiese abrir los epub que ya tenía y que suelo leer en el móvil o convertir a mobi para pasarlos al Kindle. Ni corto ni perezoso me dije, ¿por qué no hacerlo yo mismo? De eso hace dos meses y hoy os confirmo que ya está a la venta :).

La verdad es que inicialmente pensé que sería mucho más sencillo, de hecho, tras estudiar el formato epub y tener el sistema de descompresión y lectura preparado, creía que lo tenía prácticamente hecho, ¡cuanto me equivocaba!. La parte de paginación tipo libro, es decir, click para página siguiente, click para página anterior, se me complicó muchísimo. Rehice el sistema cuatro veces desde cero ya que no encontraba la forma correcta de que todo funcionase como debía. Finalmente di con algo que funcionaba, me limitaba para hacer otras cosas, pero al menos la navegación y lectura eran fluidas y usables :).

La última semana de desarrollo  fue la más satisfactoria a nivel personal ya que, una vez superados los problemas de la paginación (mes y medio solo para eso), me dediqué a añadirle funcionalidades más vistosas y llamativas de cara al usuario, aumentar el tamaño de fuente, modo noche que hace el fondo negro y la fuente blanca, reducir y aumentar el brillo de pantalla, añadir marcadores para volver rápidamente a ciertas páginas, porcentaje de lectura…

Creo que me quedó muy aparente :). En la imagen de abajo podéis ver la interactividad de la pantalla de lectura con 4 zonas sensibles para hacer click, cada una con una función distinta. Pero eso no es todo, si se hace un click largo, es decir, se pulsa con el dejo y de deja pulsado sin levantarlo más de un segundo, sale la opción para añadir marcadores (o eliminarlo si esa página ya lo tenía).

He de decir que la finalidad de la aplicación no es hacer negocio, la hice para leer mis libros, pero si entra algo… :P. Los primeros tres días a la venta generó casi 200 descargas a 2$. Tampoco me puedo quejar.

Y como siempre llego tarde a todas partes he de decir que me pasé estos dos meses de desarrollo controlando en la tienda de aplicaciones que no saliese otro lector de epubs. Pues bien, el mismo sábado que subí la mía apareció otra publicada. Encima tardaron una semana en validármela, con lo que la otra tuvo tiempo de copar el mercado, una lástima, pero como siempre, tarde a todas partes :P.

Más información en PlayEpub.

Nokia me regala un E7 en su nueva estrategia con los desarrolladores

Nokia ha cumplido la promesa que hizo justo después de anunciar que usará Windows Phone 7 en sus teléfonos de gama Alta, regalar un flamante Nokia E7 a todos los miembros del foro de desarrolladores, yo entre ellos :). El mío me llegó hace unos días directamente desde Finlandia. Justo cuando ya tenía mi Nexus S. Y es que no quieren que dejemos apartada la plataforma Symbian desde ya mismo :P.El teléfono me ha sorprendido gratamente, tanto la enorme pantalla como el acabado son excepcionales, todo metálico. Eso sí, lo hace pesar un poco, pero la primera impresión es genial.

Como ya comenté anteriormente (y aquí me llamareis friki), soy un Nokia-Fan desde hace mucho tiempo. El Nexus ha reforzado mi idea de que los teléfonos Nokia son mucho más sencillos de utilizar para el público general sin mermar en prestaciones, a mis hermanas les costaría muchísimo adaptarse a un Android, mientras que Symbian mantiene la esencia de un teléfono normal pero con con más cosas y táctil.

Aquí lo tenéis comparado con el Nexus S, como veis no tiene nada que envidiarle, todo lo contrario. La única pega es que la pantalla no es tan sensible como la del Nexus, pero eso sí, tengo que decir que el E7 aun tiene el plástico protector original, con lo que aún así el funcionamiento es adecuado incluso para jugar al Angry Birds.

Pero no todo iban a ser maravillas. En los pocos días que lo tenemos en casa lo hemos utilizado para cacharrear un poco y para jugar y se nos ha colgado y reiniciado varias veces. Ya veremos cuando mi pareja lo utilice habitualmente, miedo me da. Espero que lancen alguna actualización pronto ya que el teléfono me parece sencillamente genial.

A la interfaz le han dado un lavado de cara interesante, han mejorado el sistema de widgets y su gestión en el escritorio, han añadido escritorios virtuales que se desplazan lateralmente (a lo Android), en definitiva, un híbrido entre lo que era Nokia y esas cosas modernas :P.

Si a todo ello le sumamos el sistema de mapas Ovi, simplemente excepcional y el comedido consumo de batería tenemos un dispositivo a tener muy en cuenta, y es que aquí radica para mi una de las grandes ventajas de Symbian, con Bluetooth, gps y datos activados tienes teléfono para varios días. En Android, para unas horas. Esa es la gran diferencia.

Migrando de Symbian a Android manteniendo guía, agenda y mensajes

Finalmente llegó el momento. Tras casi diez años de teléfonos Nokia casi ininterrumpidamente (salvo por un Siemens y un SonyEricsson), los últimos seis con terminales Symbian s60, ha llegado el momento de cambiar y, como no podía ser de otro modo, el destino es un flamante Android, el Google Nexus S fabricado por Samsung y con Android 2.3.

La transición no ha sido complicada, pero pasar todos los datos de tu teléfono anterior al nuevo tiene su miga si no quieres perder nada. Aquí os explico como conseguí tener mi nuevo Nexus al día en un par de horas.

Guía de contactos

Los contactos de un teléfono Android se sincronizan con los de la cuenta de Google asociada al teléfono, los que tengas en tu cuenta de Gmail, así que así es como pasaremos nuestra agenda, copiándola a Gmail.

Desde la guía seleccionamos Opciones->Marcar->Marcar todos y después Opciones->Backup->A la tarjeta de memoria.

Esto nos creará en la tarjeta de memoria la ruta Others/Contacts con los .vcf de todos nuestros contactos. Conectamos ahora el teléfono por usb al ordenador y copiamos esta carpeta en, por ejemplo, c:. Desde la línea de comandos vamos a c:Contacts y ejecutamos:

cd c:contacts
copy /B *.vcf contactos.vcf

Con esto tendremos todos los contactos en un solo archivo y podremos importarlos directamente en Gmail desde Contactos->Más acciones->Importar. Escogemos este archivo “contactos.vcf” y nuestros contactos se añadirán a nuestra cuenta de Gmail y se sincronizarán automáticamente con nuestro teléfono.

Citas y eventos

Para las citas y eventos del calendario, debemos sincronizarlos con Google Calendar. Para ello primero, desde Ovi Suite sincronizamos la agenda con nuestro Outlook y posteriormente nos descargamos Google Calendar Syn que nos permitirá sincronizar nuestro calendario de Google con el de Outlook. Tendremos que introducir nuestra cuenta de Google y el sentido de sincronización que más os convenga.

Automáticamente aparecerá la lista de tareas y eventos en vuestro teléfono. Puedes dejar el programa de sincronización corriendo en tu ordenador y tendrás siempre sincronizados los calendarios de tu teléfono y de Outlook.

Mensajes

Esta parte es un poco más complicada. Yo seguí este procedimiento y me funcionó todo correctamente, en unos minutos tenía mis 800 mensajes en el teléfono nuevo.

Archivos de fotos y vídeos

Esta es la parte más fácil, las fotos, vídeos, música, etc. que tenías en tu teléfono Symbian los copias por USB del viejo al nuevo, no hay más truco.

Tono de llamada

Soy un poco tiquismiquis y llevo en el móvil el mismo tono de llamada desde hace muchos años, Narcotic de Liquido, me gusta porque empieza suave y a los 25 segundos mete caña :P. Tras copiar el mp3 al nuevo teléfono me di cuenta de que no hay una opción para configurar el tono en las opciones del teléfono, lo que hay que hacer es reproducir el mp3 desde el reproductor de música y en ese momento dar al botón de opciones y escoger Utilizar como tono.

Tono de alarma

Los tonos de alarma se configuran para cada alarma que creemos, no es genérico. El problema está en que por defecto no nos deja escoger más que entre los tonos de alarma que trae predefinidos y aquellos que hemos seleccionado previamente como tono de llamada, así que, la forma más rápida de poner el tono de alarma que queremos es ponerlo primero como tono de llamada desde el reproductor de música tal y como veíamos en el paso anterior, de este modo ya podremos seleccionarlo como tono de alarma.

Tras un par de horas mi nuevo teléfono estaba preparado para utilizar sin echar de menos nada de lo que tenía en el viejo. Eso sí, ahora vienen horas y horas de perder el tiempo toqueteando y jugueteando :P.

Aplicaciones Valenbisi para smartphones Android, Symbian y BlackBerry

Finalizo con éste la serie de artículos sobre el último miniproyecto en el que me embarqué hace ahora un mes, Valenbisi para dispositivos móviles.

Tras un par de semanas con las aplicaciones para los principales sistemas operativos para smartphones a pleno rendimiento (excepto iOS), parece que hay mucha más gente con buenos cacharros de lo que yo esperaba, teniendo en cuenta además que es una aplicación enfocada a una zona geográfica muy concreta.

Os comento además que, aprovechando la infraestructura que ya tenia montada y viendo que el proveedor del servicio es el mismo, decidí replicar el sistema para las bicis urbanas de Sevilla, información del estado de las estaciones de Sevici, acompañado también de su aplicación para Android.

Aquí van las estadísticas de descarga de las aplicaciones desde Android Market:

No está nada mal, sobre todo teniendo en cuenta que la de Sevici no la anuncié en ningún sitio :). Los números de la de Valencia me parecen espectaculares, desde luego ya hay mucha gente por ahí con un Android.

Y aquí las estadísticas para la aplicación para Symbian desde Ovi Store:

Éstas son, sin duda, más complicadas, parece que en la India se usa mucho Symbian :P. Aún así se nota que hay descargas.

Finalmente nos queda Blackberry. Tengo aplicaciones para OS4 y OS5, pero esta vez sin presencia en App World ya que me solicitaban firmas de notario, así que directamente pasé de ellos :P, la distribuyo directamente desde Valenbisi.mobi y que se la descargue quien quiera. De hecho, cada vez que entras, si tu terminal es compatible con alguna de las aplicaciones disponibles, te ofrece la posibilidad de descargar la aplicación. Se han hecho aproximadamente unas 20 descargas de la aplicación para BlackBerry, teniendo en cuenta que la visibilidad así es mucho menor que desde la tienda de aplicaciones, me parece un buen número :).

Finalmente tenemos las estadísticas globales de visitas al sitio web, contando tanto los que entran desde aplicaciones como los que entran directamente.

Me parecen muy buenos datos para una aplicación completamente local. Llama la atención el pico de visitas del 8 de diciembre, pero tiene sentido ya que, además de día festivo, hizo un día espectacular con 23º de temperatura, importante para ir en bici :P. Seguro que a medida que vaya mejorando el tiempo se notará el incremento de uso. Pese a que sólo oímos hablar de iPhone’s y Android’s, fijaos en la sorprendente relación de sistemas más utilizados. Aunque Android pega fuerte, Nokia sigue siendo lo más utilizado, un dato importante a tener en cuenta en cualquier aplicación para móviles que desarrollemos.

Con esto abandono el desarrollo :P. La aplicación está terminada, funciona bien y parece ser por los comentarios que es fiable. Espero no tener que hacer mucho mantenimiento :P, me aburre bastante :).

Miniproyecto – Valenbisi.mobi, geolocalización del servicio de bicicletas de Valencia para móviles y sms

Como supongo que la mayoría no sabréis de qué hablo, empezaré por el principio.

Valenbisi es el servicio urbano de alquiler de bicicletas de Valencia a semejanza del que existe en muchas otras ciudades españolas y europeas. La idea es fomentar su utilización para desplazamientos cortos ya que el abono anual (20 euros) permite alquilar gratuitamente la bicicleta la primera media hora de cada día. Hay varias estaciones a lo largo de la ciudad y simplemente coges la bici en una y la dejas en la que mejor te venga. Valencia creo que es una de las ciudades que más se prestan a un servicio de este tipo por dos razones básicas, la climatología y la falta de cuestas. Al parecer el éxito ha sido espectacular tras el verano hasta tal punto que el servicio de abonos está saturado de solicitudes, el nuestro tardó alrededor de un mes en llegarnos.

El sábado pasado mi pareja y yo decidimos acercarnos a la playa y darnos un paseo en bici, hacía un día fenomenal y el calorcito invitaba a pasear. El plan era coger la bicicleta al principio de la playa y dejarla al final para regresar a pie. Pues bien, el problema fue que a la hora de regresar no había ningún puesto libre donde dejar las bicis en las 3 estaciones por las que pasamos, tuvimos que volver al punto de inicio donde tuvimos la suerte de encontrar los dos que necesitábamos. Dos chicas que llegaron justos detrás nuestra no tuvieron la misma suerte :P. Esto nos planteó el problema que puede ser una situación de este tipo al tener que buscar otra estación que tenga enganches libres, puedes ir a la siguiente pero tampoco sabes si habrá puestos, con lo que te tocará ir a la siguiente y así indefinidamente. Si además del tiempo perdido tenemos en cuenta el dinero que pagas por el tiempo que pasa, no cabe duda que puede ser un serio inconveniente para el servicio. ¿Qué pasará cuando llegue el verano y todos los usuarios quieran bajar con sus bicis a la playa? Pues que no habrá donde dejarlas desde primera hora de la mañana. Estos días, siguiendo el problema, he visto que ocurre algo similar con las estaciones del centro de la ciudad en horario laboral, a las 10 de la mañana están casi todas completas. ¿Cómo sabes entonces dónde dejar tu bici?

Pues aquí llego yo a medio solucionar el problema :P. Una aplicación para el móvil que te dice las estaciones más cercanas con puestos libres o bicis disponibles, ya que el problema puede ser el contrario, que vayas a por una bicicleta y estén todas ocupadas. La diferencia con otras aplicaciones por el estilo es que no me he atado a Iphone o Android como casi siempre sucede en estos casos, he hecho algo que funcionará en la mayoría de terminales de los usuarios “normales”, otra cosa es que quieran utilizarlo. Para acompañarlo, he hecho una interfaz por SMS :P, que es más sencillo para la gente, pero sin la mayoría de opciones.

Como funciona el servicio

Muy sencillo. Entras en http://valenbisi.mobi, le dices donde estás, que puede ser tu dirección o el número de estación de Valenbisi, y automáticamente te indicará el estado de las estaciones que tienes a tu alrededor, es decir, bicis y huecos libres que tienen. Además, si las que tienes cerca no tuviesen bicis o puntos libres, te permite buscar las más cercanas con disponibilidad. Todo ello acompañado de imágenes con mapas con las estaciones indicadas posicionadas y rutas para llegar.

Detalles técnicos

La implementación del sistema no me habrá llevado más de 10 horas incluidas las pruebas. Gracias a todos los que me habéis ayudado con ellas y a vuestras sugerencias :).

Para desarrollarlo he utilizado:

  • API de Valenbisi, si se puede llamar así. Aporta la información de la localización de las estaciones y el estado de las mismas.
  • Google Geocoding API para obtener las coordenadas de una dirección y viceversa.
  • Google Directions API para obtener la ruta entre dos puntos.
  • Google Static Maps API para obtener imágenes de mapas.
  • Geolocation API Specification para aquellos navegadores que lo soporten, así el usuario no tiene que indicar su dirección, el GPS del dispositivo lo hace todo. Actualmente lo soportan, que yo sepa, Iphone, Android y las últimas Blackberry.
  • Wurfl, para obtener las características de su teléfono.

No voy a explicar cómo se utilizan las API’s ya que están bien documentadas y son muy sencillas, todas basadas en peticiones HTTP que devuelven XML o json.

Cuando el usuario accede a http://valenbisi.mobi, si su navegador soporta localización, le saltará el aviso de que la página quiere usar esa información y automáticamente posicionará al usuario. Si no lo soporta, la mayoría de los casos, el usuario debe introducir su dirección o el número de la estación Valenbisi que le interesa. Con esos datos averiguamos donde está. Si es una dirección a través de Google Geodecoding API y si es un número simplemente con el API de Valenbisi. De un modo o de otro ya sabemos donde está el usuario.

Ahora simplemente debemos buscar las estaciones que tiene alrededor. Yo lo he hecho de dos formas. La primera es mostrar las estaciones que tiene a su alrededor a partir del mapa. Esta es una de las primeras cosas curiosas que he hecho. Para obtener el mapa de la posición del usuario, le pido a Google Static Maps API una imagen del mismo tamaño que la pantalla del teléfono del usuario, así verá todo lo máximo que le permita su dispositivo. Esto significa que cada usuario verá un mapa de distinto tamaño. Ahora tengo que averiguar las estaciones que aparecen dentro del mapa. Podríamos pensar en pasarle todas al API y que éste pinte las que aparecen en nuestra imagen y pase de las otras, pero la idea no funciona ya que Static Maps tiene un tamaño máximo de url, que por cierto no es muy grande, rebasado el cual la imagen da error. Así que lo que hice fue calcular cuanto espacio geográfico cabe en la imagen. Le pedí una imagen posicionando marcas cada 0,001 puntos de longitud y latitud. A partir de esa imagen calcule a cuantos píxeles correspondía cada salto. Con esta información, y manteniendo el zoom fijo, sabremos en cada momento qué coordenadas se van a ver en la imagen que le pida a Google ya que conozco el ancho y el alto que le voy a pedir, conozco las coordenadas del centro (la posición del usuario) y sé cuánto me puedo desplazar a lo largo de la imagen. No es 100% fiable pero nos sirve para lo que necesitamos. Ahora simplemente recorro todas las estaciones y si sus coordenadas están entre los límites de la imagen que voy a mostrar, añado la marca. A medida que el usuario se mueve por el mapa con las flechas, voy actualizando las estaciones que se ven en el mismo con este procedimiento.

La segunda manera de buscar estaciones que he utilizado es mostrar las estaciones más cercanas que cumplan uno de los posibles requisitos, que tengan bicis o que tengan huecos libres. Aquí el usuario no puede navegar por el mapa, simplemente le muestro a las que puede acudir. Para localizar las estaciones más cercanas, la opción más clara es consultar Google Directions Api entre la posición del usuario y todas y cada una de las estaciones y obtener las que están más cerca (uno de los parámetros que devuelve es la distancia), pero esto implicaría más de 100 llamadas al API por consulta, con lo cual no es viable. Aplicando conceptos básicos de trigonometría y coordenadas cartesianas, sabemos que, en un plano, la distancia (en línea recta) entre dos puntos es:

Simplemente con los datos de la localización de estaciones y la posición del usuario y aplicando algunas operaciones matemáticas puedo averiguar aquellas estaciones que, siempre en línea recta y cumpliendo los requisitos de disponibilidad, están más cerca del cliente. Ordeno las distancias resultantes de menor a mayor y con las cinco primeras, ahora sí, consulto Google Directions API para que me de una distancia real entre el usuario y esas estaciones. Las vuelvo a ordenar por distancia y ya tengo aquellas más cercanas al usuario. Solo queda pedirle a Google Static Maps la imagen del mapa donde aparecen estas estaciones, ahora sin zoom para que lo ajuste automáticamente. Mucho más eficiente que consultar la distancia de las más de 100 estaciones.

Solo nos queda averiguar la ruta para ir desde la localización del usuario hasta la estación seleccionada. Static Maps no hace rutas, solo líneas rectas, pero podemos indicarle todos los puntos intermedios necesarios y que nos pinte las líneas entre ellos, con lo que si supiéramos los pasos que tiene que dar el usuario, podríamos pintar la ruta. Y para esto tenemos de nuevo Google Directions API, nos dirá los puntos entre el usuario y la estación. Solo tenemos que pasar estos puntos a Static Maps y tendremos la imagen de nuestra ruta.

Eso es todo, uniendo todas las piezas entre sí adecuadamente tendremos el sistema que os presento :). El último toque fue añadir las opciones de idioma, para que los turistas puedan utilizar el servicio :P.

Finalmente vinieron las pruebas con algunos conocidos y los ajustes para los terminales más antiguos (en los nuevos se ve todo fenomenal :P) .

Aquí van algunas capturas en distintos terminales:

Nokia X6

Nokia N95

Nokia N73

Nokia N70

Iphone

BlackBerry 9000

Android

Interfaz SMS

Cuando ya lo tenía terminado se me ocurrió, ¿y por qué no hacer también una interfaz SMS para los usuarios que no tienen Internet en el móvil? Ya tenía todas las piezas y dado que profesionalmente me dedico a eso… 10 minutos 🙂

Envía BICI númeroDeEstación al 215000 25325 y te devuelvo el estado de esa estación y las más próximas con sus direcciones. Por ejemplo:

BICI 146

Est. 165:12 bicis,8 libres.OTRAS:164,8 bicis,9 libres (C. PAVIA (OPUESTO Nº 15-17) )-167,17 bic 0,35Eur Alvento Soluciones S.A.n.atn.clte:902887786 alvento.es

Todo lo que quepa en los 160 caracteres permitidos, que no es mucho. Coste del SMS 0,35 euros, igual que un SMS normal 🙂. Si usas habitualmente la misma estación puedes saber con antelación si tendrás bici o hueco. Información legal del servicio: 0,35Eur.Alvento Soluciones S.A.n.atn.clte. 902887786 alvento.es

Más no se puede pedir en tan poco tiempo. Os invito a probarlo. Se aceptan críticas, mejoras de usabilidad, nuevas funciones, etc…

Actualización:

Sintiéndolo mucho he tenido que cambiar el número corto del servicio ya que el que había dicho inicialmente sólo funciona en Vodafone. El número actual, el 25325 es el más barato de los posibles, lo siento, ya sé que así se limita mucho su utilidad… quedará como ejemplo de lo que se podría hacer 😛 a no ser que alguien quiera hacerse cargo del servicio.

Liberar modem 3G Huawei E220 de Vodafone

Facilísimo. Y de paso, al actualizar el firmware, lo dejamos preparado para soportar 7,2Mbps. Este es un proceso delicado ya que si se corta a mitad la instalación del firmware se pierde el modem para siempre, hazlo bajo tu responsabilidad. Hay muchos sitios por ahí donde lo cuentan, yo os lo resumo :).

Desinstalamos completamente el software de Vodafone (o de cualquier otra operadora) y descargamos dos paquetes de actualización, el del firmware en sí mismo y el del software del del modem, ya que no queremos que siga cargando los de Vodafone.

  • El firmware te lo doy yo :P.
  • Para el software vas aquí y escoges el que prefieras:
    • El primero, HOSTB107D05SP00C03…, instala el Mobile Connect.
    • El último, UTPSB002D03SP16C03…, el Mobile Partner.

Yo me quedo con el Partner, me parece más sencillo e intuitivo.

Además necesitarás el Qmat (QC Mobile Analysis Tool) y esto otro.

El procedimiento es muy simple. Conectas el modem y cancelas la instalación de los drivers. A continuación ejecutas los dos archivos de actualización, firmware y software. Entre uno y otro (y al terminar el segundo también) conviene desconectarlo y volver a conectarlo (cancelando nuevamente la instalación de los drivers de Vodafone). Ya casi hemos terminado :P.

Instala ahora el Qmat y ejecútalo. En el menú superior ve a Hardware Forensics y Use Mobile Ports.

forensics

En la ventana que aparece seleccionas, en el primer combo, el puerto donde está tu modem, no tiene pérdida, pondrá algo parecido a COMxx – HUAWEI Mobile Connect – 3G PC UI Interface (COMxx). Pulsas en “Send” y deberían salir unos números en la caja de texto de abajo, eso quiere decir que se comunica correctamente con el modem.

En el combo que muestro desplegado en la imagen de abajo seleccionas “Display NVItem” y a la izquierda, en “Item” introduces 1156 y pinchas en “Let’s go“. Si todo va bien en la ventana de texto aparecerán unos números y, al final de todo, un código de 6 a 8 cifras, ése es tu código de desbloqueo. Cópialo. Si tienes algún problema prueba a desconectar el modem y volver a conectarlo o, incluso, a instalar los drivers nuevos cerrando el programa cuando arranque.

qcAhora vamos a la última utilidad, al CardLock_UnLock. Lo abres y te identificará el IMEI de tu teléfono. Pegas en la caja de texto el código que obtuviste en el paso anterior y voilà, el modem está liberado.

unlockLo he probado hoy mismo con SIM’s de Orange y Movistar, aunque la idea es utilizarlo con la de Simyo :). La configuración que hay que utilizar en este último caso es la siguiente:

partner

APN: gprs-service.com
Usuario: (vacío)
Clave: (vacío)
Número: *99***1#

Ya podemos utilizar el modem con la operadora que nos venga en gana.

Como última curiosidad veremos cómo dejar el software en castellano ya que la actualización lo deja en inglés y no podemos modificar los archivos de la memoria del modem. Editamos el archivo C:Program FilesMobile PartnerRunInfo.ini de manera que donde pone:

[language]
active=_en-us

ponga

[language]
active=_es-es

Listo!

Google compra Admob y se hace con el mercado de la publicidad en el móvil

Acabo de enterarme, Admob, la empresa líder en publicidad en el móvil, ha sido adquirida hoy mismo por Google, cómo no, por nada más y nada menos que 750 millones de dólares.

admob

Utilizo Admob desde hace 3 años y es, sin lugar a dudas, el servicio de publicidad para terminales móviles más utilizado tanto por anunciantes como por publicadores. Según mi experiencia es, incluso, el más efectivo. Hasta crearon su propio sistema de estadísticas al estilo Google Analytics pues vieron rápidamente que había un hueco en lo que a terminales móviles se refería.

Google hizo hace un par de años un intento por lanzarse a la publicidad en el móvil pero no consiguió ni llegar a los talones de Admob, así que, para qué pensárselo, mejor compramos algo que ya funciona.

Ahora se abre una nueva puerta, en su afán por acaparar el marcado publicitario Google no ha dudado en comprar a su mayor competidor en algo que ya está explotando, y es que cada día más y más gente se sube al carro del Internet Móvil, con lo que las expectativas a corto plazo son impresionantes. Cierto es que llevamos ya algunos años escuchando que el futuro de La Red pasa por el móvil, pero creo que ahora, más que nunca, es cierto. Las nuevas hornadas de terminales aprovechan al máximo las posibilidades de navegación, lo que unido a las tarifas planas de datos, que han tardado en llegar pero al fin están aquí, están provocando una avalancha de nuevos usuarios de sitios para móviles.

¡Qué miedo da Google! ¿Qué será lo próximo?

WordPress Mobile Pack, plugin para movilizar tu WordPress

Menuda sorpresa me he llevado hoy al leer esta noticia.

Ha habido otros intentos de hacer algo similar pero ninguno llegaba a la perfección que roza este nuevo plugin ya que lo ajusta todo al terminal del cliente, desde las imágenes hasta la paginación de artículos. En el link de presentación tenéis toda la información. No podía ser menos viniendo del organismo “oficial” de la web móbil, dotMobi.

Entre las características que me parecen importantes y fundamentales en un producto de este tipo y que hasta ahora otros habían obviado limitándose a presentar un blog menos recargado:

  • Detecta el móvil del cliente y consulta la base de datos de DeviceAtlas para obtener sus características (tamaño de pantalla, colores…).
  • Puedes hacer que cualquier petición a un dominio sea automáticamente móvil independientemente del dispositivo que acceda (m.tudominio.com).
  • Selección de temas concretos para la versión móvil independiente del web. No tienes que empezar de cero.
  • Versión móvil del panel de administración para publicar directamente desde tu dispositivo.
  • Paginación de artículos. En otros productos se mostraban en una sóla página y no todo el mundo escribe artículos pequeños 😛 .

Ahora me toca personalizar el tema, pero aquí tenéis mi blog en un Nokia N95.

Cerebro en la Sombra para móviles

Os recomiendo que le echéis un ojo ya que es muy interesante y hace todo el proceso de movilización de tu blog extremadamente sencillo.

Funciones útiles en XSLT

Una de las tecnologías que más utilizo en el desarrollo de proyectos para móviles son las transformaciones XSL (XSLT) ya que me dan la versatilidad adecuada para adaptar la capa de presentación a las compatibilidades del terminal del cliente (xHTML Mobile, WML, iMode…) o de la operadora (PML de Vodafone por ejemplo).

A lo largo de estos años he ido recopilando algunas funciones (en realidad templates) XSLT que me facilitan la vida a la hora preparar determinadas funcionalidades dentro de un portal wap. Os las dejo por si a alguien le vienen bien.

Capitalize

Un clásico. Convierte una cadena de texto de manera que devuelve el primer carácter en mayúsculas y el resto de la cadena en minúsculas.

<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>

<xsl:template name="capitalize">
    <xsl:param name="arg"/>
    <xsl:value-of select="concat(translate(substring($arg,1,1), $lcletters, $ucletters), substring($arg,2))"/>
</xsl:template>

Ejemplo de uso:

<xsl:call-template name="capitalize">
     <xsl:with-param name="arg" select="/ruta/al/texto"/>
</xsl:call-template>

 

URL-Encode

Lo que su propio nombre indica. Codifica una cadena de texto para ser enviada como parámetro de una URL. Muy útil en situaciones de integración con sistemas de billing.

<xsl:variable name="ascii"> !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~</xsl:variable>
<xsl:variable name="latin1"> ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ</xsl:variable>
<xsl:variable name="safe">!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~</xsl:variable>
<xsl:variable name="hex" >0123456789ABCDEF</xsl:variable>
<xsl:variable name="thestring" select="null" />

<xsl:template name="url-encode">
    <xsl:param name="str"/>
    <xsl:if test="$str">
        <xsl:variable name="first-char" select="substring($str,1,1)"/>
        <xsl:choose>
            <xsl:when test="contains($safe,$first-char)">
                      <xsl:value-of select="$first-char"/>
           </xsl:when>
            <xsl:otherwise>
                <xsl:variable name="codepoint">
                    <xsl:choose>
                           <xsl:when test="contains($ascii,$first-char)">
                                 <xsl:value-of select="string-length(substring-before($ascii,$first-char)) + 32"/>
                           </xsl:when>
                           <xsl:when test="contains($latin1,$first-char)">
                               <xsl:value-of select="string-length(substring-before($latin1,$first-char)) + 160"/>
                           </xsl:when>
                           <xsl:otherwise>
                               <xsl:message terminate="no">Warning: string contains a character that is out of range! Substituting "?".</xsl:message>
                               <xsl:text>63</xsl:text>
                           </xsl:otherwise>
                       </xsl:choose>
                </xsl:variable>
                <xsl:variable name="hex-digit1" select="substring($hex,floor($codepoint div 16) + 1,1)"/>
                <xsl:variable name="hex-digit2" select="substring($hex,$codepoint mod 16 + 1,1)"/>
                <xsl:value-of select="concat('%',$hex-digit1,$hex-digit2)"/>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:if test="string-length($str) > 1">
            <xsl:call-template name="url-encode">
                <xsl:with-param name="str" select="substring($str,2)"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:if>
</xsl:template>

Ejemplo de uso:

<xsl:call-template name="url-encode">
    <xsl:with-param name="str" select="/ruta/al/texto"/>
</xsl:call-template>

 

Search and Replace

Otra vez lo que su propio nombre indica. Reemplaza un texto por otro dentro de una cadena.

<xsl:template name="SEARCH-AND-REPLACE">
	<xsl:param name="string" />
	<xsl:param name="search-for" />
	<xsl:param name="replace-with" />
	<xsl:choose>
		<xsl:when test='contains($string,$search-for)'>
			<xsl:value-of select="substring-before($string,$search-for)"/>
			<xsl:value-of select="$replace-with"/>
			<xsl:call-template name="SEARCH-AND-REPLACE">
				<xsl:with-param name="string" select="substring-after($string,$search-for)" />
				<xsl:with-param name="search-for" select="$search-for" />
				<xsl:with-param name="replace-with" select="$replace-with" />
			</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="$string" />
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

Ejemplo:

<xsl:call-template name="url-encode">
    <xsl:with-param name="string" select="/ruta/al/texto/original"/>
    <xsl:with-param name="search-for" select="texto a buscar"/>
    <xsl:with-param name="replace-with" select="texto por el que se reemplaza"/>
</xsl:call-template>

Si habéis utilizado XSLT en alguna ocasión os habréis dado cuenta de que se echan en falta ciertas funciones “habituales” y que, tal cual, estás muy limitado. Sin embargo XSLT tienes las funcionalidades básicas a partir de las cuales se puede generar casi cualquier otra cosa que se te ocurra, sólo tienes que tener muy claro con lo que cuentas y qué quieres hacer.

Quiero aclarar que estas funciones NO las he hecho yo, las he ido recopilando los últimos años googleando un poco, a veces algo más que un poco, lástima no recordar de donde las fui sacando.

De momento estas tres son las que he localizado. Tengo otra más que suelo utilizar en integración con sistemas de billing para convertir a Base64, pero no la encuentro por ningún lado.