OsmAnd: alternativa a GoogleMaps en Android

Hace un tiempo que Google permite descargar mapas de GoogleMaps para utilizarlos offline, pero si no quieres depender de la empresa del buscador existe una alternativa Open Source, bajo licencia GPLv3: OsmAnd.

OsmAnd es un software para consulta de mapas y para navegación sirviéndose de GPS que se sirve de los mapas de Open Street Maps. Puedes encontrar dos versiones en el Play Store: una gratis, con algunas limitaciones, y una de pago. Por otra parte también está disponible completa en el repositorio F-Droid y en github puedes obtener el código del proyecto.

OsmAnd Compostela

Como navegador funciona muy bien: te da la opción de descargar los mapas completos o, si quieres ahorrar espacio y consumo de datos, sólo las carreteras. Al igual que GoogleMaps te irá guiando por voz y recalculará la ruta en caso de un cambio en el itinerario. Permite señalar puntos de interés en el mapa, buscar lugares ya sea por dirección o por coordenadas y, en la versión completa, obtener datos interesantes de la zona extraídos de la Wikipedia almacenándolos para su uso offline, una más que interesante funcionalidad si lo quieres utilizar para hacer turismo . En determinadas zonas incluso te avisará si estás superando el límite de velocidad en tu coche (esta funcionalidad creo que no está todavía disponible en todo el mapa, sólo en determinados puntos).

osmandstore

En las últimas versiones se le incluyeron interesantes opciones para rutas pedestres y ciclistas, una cantidad de rutas que aumenta dado que los usuarios pueden subir sus rutas GPX directamente desde la aplicación. De hecho la aplicación permite un modo de visualización diferente para rutas ciclistas. Y en algunhas ciudades se ha incluído la información sobre paradas y frecuencias del transporte público.

OsmAnd es un proyecto colaborativo todavía en expansión y tiene ciertas cosas que pulir. De hecho muchos usuarios señalan que HERE, que fue elegido mejor navegador del 2015 por Autobild, todavía ofrece unas opciones mejores. Pero creo que se trata de un proyecto interesante que seguir y con el que intentar colaborar, aunque sea un poquito. La versión completa está cargada de funcionalidades interesantes, e incluso la gratuíta es muy completa. Tal vez le pueda echar en falta que puede resultar poco intuitivo al primer uso, teniendo una curva de aprendizaje un pelín más marcada que GoogleMaps. Por el resto, según mi experiencia, chapeau.

Probando alternativas ligeras al app de Facebook en Android

Lo has leído en mil sitios: el app de Facebook para Android es lo peor. La han cargado de librerías propias hasta el infinito y más allá, su optimización es nula y chupa recursos que da gusto: almacena datos en la memoria interna que da gusto, se merienda la RAM con patatillas y la batería te dura menos que una caja de donuts en una cafetería de polígono.

¿Alternativas? Hemos (realmente he) probado cuatro, y aquí te las comento:

  • Facebook Lite: A su favor tiene que ocupa poco, apenas un mega, consume pocos datos, poca batería y te permite utilizar los menajes directos sin tener que utilizar messenger. En su contra que es muy poco fluída, proporciona una experiencia de usuario horrible y el diseño es más feo que pegarle a un padre. Conclusión: te da buen rendimiento, pero hay opciones mejores.Facebook Lite
  • Metal for Facebook: Me la vendieron como la panacea… y no. La he utilizado durante aproximadamente un mes y sí es cierto que el diseño está bien y que incluso te permite usarla como cliente de Twitter y prescindir del Messenger igual que la Lite. Pero presentaba problemas en ambas facetas: en Facebook no me permitía subir fotos (y me consta que a más usuarios tampoco) y si entraba en un artículo externo al volver al app se quedaba en blanco y tenía que cerrar y volver a abrir para que recargara. Como cliente de Twitter no me enviaba notificaciones. Reconozco el esfuerzo que hacen sus desarrolladores para mantener este proyecto grátis… pero no quedé nada contento de la experiencia. Metal for facebook
  • Tinfoil for Facebook: Realmente Tinfoil lo que hace es abrir la versión web de facebook dentro un sandbox para, en teoría, mejorar la privacidad del usuario, evitando el rastreo de su historial de navegación. No se hasta qué punto puede ser efectivo, pero puede resultar interesante para los que opten por usar simplemente la versión web de facebook.Tinfoil
  • Toffeed: Es la última aplicación que he probado y la que ha sustituído a Metal en mi teléfono. De momento no puedo analizar mucho. Me ha dado la impresión de que carga un poco más lenta que Metal o Lite, pero pude que sólo sea paranoia mía. Tiene opciones interesantes como activar la mensajería para poder prescindir del Messenger o desactivar la carga de fotos para que tire de caché y consuma menos datos y no he acusado los problemas que me daba Metal. De momento, se queda en mi teléfono.Toffeed
  • Bonus track: Realmente no necesitas un app para Facebook. Puedes acceder vía web a través del navegador del teléfono. Y es más, hasta puedes configurar Chrome para tenerlo en favoritos (de forma que en dos taps puedas acceder) y recibir notificaciones del navegador si te interesa. Existen otras alternativas como Folio for Facebook (un contenedor similar a Tinfoil) o Fast for Facebook (tiene buenas críticas, pero no la he probado así que no voy a opinar)

CONAN mobile: herramienta de seguridad para tu Android

CONAN mobile es una herramienta gratuita desarrollada por los técnicos de INTECO que te permitirá chequear el estado de la seguridad de tu móvil o tablet, proporcionándote consejos y soluciones para mejorarla.

Funciona en Android 2.2 y superiores, y te muestra información sobre diferentes ámbitos:

  • Configuración: Te mostrará los ajustes de tu configuración que pueden ser potencialmente peligrosas, las redes WIFI inseguras a la que estés conectado o los dispositivos Bluetooth con los que estés emparejado.
  • Aplicaciones: Listará las aplicaciones que están reconocidas como maliciosas, las que podrían serlo, las que no están actualizadas a la última versión y las que no están registradas. También te mostrará los permisos de la aplicación organizados por su nivel de inseguridad.
  • Servicio de seguridad proactivo: Alerta de comportamientos anómalos en el dispositivo tales como cambios en el fichero /etc/host, llamadas y sms a servicios de pago, conexiones a la red realizadas por las aplicaciones… y además analiza las redes WIFI a las que nos conectamos y las apps que descargamos.

Al momento de escribir esto la aplicación se encuentra en fase beta, por lo que todavía puede presentar fallos en su funcionamiento, además de sólo estar disponible para el mercado español. Para profundizar en su uso tenéis este videotutorial. Podéis descargarla desde GooglePlay

Cryptonite para Android: Cifrar carpetas locales y archivos de Dropbox

Cryptonite se trata de un proyecto de software libre (GPLv2) que te permite encriptar archivos y carpetas tanto en tu teléfono como en el conocido servicio de almacenamiento online. Está basado en TrueCrypt y EncFS y de momento todavía está en fase de desarrollo, por lo que puede que algunas funcionalidades no estén operativas, pero con todo ya te da las herramientas necesarias para tener un extra de privacidad en tu dispositivo.

Lo primero es descargar desde Google Play la aplicación, verás que sólo te va a pedir dos permisos (al menos así era cuando la descargué yo): acceso a internet (lógico por la compatibilidad con Dropbox) y al almacenamiento (lógico también), ambas justificadas. El resto, bussines as usual, aceptar y tirar p’alante como con cualquier app. Ya te advertirá que se trata de software en fase de desarrollo y que viene sin garantía, así que si te explota el teléfono no les puedes reclamar (ujejeje).

Una vez instalado verás que tiene tres pestañas con opciones (como en esta imagen sacada de la web original del proyecto):

Cryptonite
Cryptonite, pantalla principal

La primera te permite conectar el programa con Dropbox. La sincronización es inmediata y simple, basta meter tus credenciales. Si tienes un volumen encriptado con EncFS en Dropbox podrás trabajar con él a través del teléfono.

En cuanto a la pestaña Local verás varias opciones: Desencriptar directorio local, navegar por el directorio desencriptado, crear volumen local y montar un volumen EncFS (esto último sólo para teléfonos rooteados).

Si lo que quieres es crear un volumen nuevo en el teléfono, lo más habitual, entonces pulsas en Create Local Volume. Lo primero será que tengas que elegir el tipo de encriptación (como en la imagen):

Tipos encriptación Cryptonite
Tipos de encriptación

Yo me movería entre Paranoia y Standard, dependiendo ya de tu nivel de (valga la rebuznancia) paranoia.

Allí te llevará a un menú donde podrás elegir una carpeta ya existente o crear una nueva como directorio para guardar tus archivos encriptados. Tras seleccionar o crear una carpeta te pedirá que insertes la clave (recuerda, la fuerza de un buen algoritmo reside en la fuerza de la clave, así que no pongas 1234). Tras esto ya tienes tu directorio encriptado. Ahora ¿cómo metemos archivos dentro para que estén protegidos? No es cuestión de arrastrar a dentro de la carpeta y vía (pero casi, es fácil).

Para añadir nuevos archivos tendrás que pulsar “Decrypt Local Folder“. Allí os llevará a un navegador de archivos, seleccionáis la carpeta a usar e introducís la clave cuando os la pida. Con la carpeta temporalmente desencriptada basta pulsar Upload Files To This Folder para añadir nuevos archivos. Como puedes ver en la foto, está abajo a la derecha:

Añadir Archivos Carpeta Segura Cryptonite
Añadiendo archivos a carpeta encriptada

Cuando hayas acabado de añadirlos basta con pulsar Forget Decryption para que la carpeta vuelva a su estado de encriptado. Y ya ves, así de fácil tienes tus archivos protegidos.

Muchos dirán las babosadas de siempre: “Esto es para paranoicos”, “si alguien necesita tanta privacidad es que algo esconde”… En fin, ya no es hablar de espionaje ni de ese tipo de historias, simplemente piensa que si te roban el teléfono puede que haya algún archivo que lleves encima que no quieras que caiga en manos de otra persona. Incluso si lo usas para trabajar y por lo que sea tienes que llevar ahí documentos de un cliente (te mangan el móvil, se filtran y encima de comprar un teléfono nuevo y seguramente perder al cliente te chupas un multazo por no cumplir la LOPD).

Priyanka (Whatsapp): Evitar infección o eliminarlo.

En fin, esta mañana Priyanka es la palabra de moda. Si estás aquí mucho me temo que ya sabes por qué: el virus de Whatsapp ya está en tu teléfono…

Este malware, no un virus propiamente dicho, en principio (tampoco es que se sepa mucho sobre él) lo único que hace es aprovecharse de un error de programación en la versión para Android de Whatsapp para cambiar el nombre de todos tus contactos por el de Priyanka. Parece que no roba datos y no hace nada más destructivo, sólo eso, que es una tocada de huevos pero poco más.

Su transmisión es simple: desde uno de tus amigos te llegará un nuevo contacto llamado Priyanka. NO LO AGREGUES!!!!! Si lo haces, contagio al canto.

Si ya estás infectado tampoco es tan grave: basta con desinstalar Whatsapp y volverlo a instalar, y todo volverá a la normalidad. En este caso los antivirus de momento no valen para nada, así que sólo el sentido común te protegerá. Por si las mutaciones, ándate con ojo si te envían algún otro contacto con nombre raro, no vaya a ser que aparezca una nueva versión cuando todo el mundo se conozca el nombre de Priyanka.

Edito  para comentar que además de desinstalar y reinstalar Whatsapp me han comentado por facebook otra opción: detener el servicio y borrar los datos.

MirQ: App para preparar el MIR gamificada

Hoy toca una entrada un pelín publicitaria, ya que estoy colaborando en este proyecto como consultor y tester (aunque código no he tocado), pero creo que puede tratarse de un producto interesante para muchos: MirQ, un app gamificada que te ayudará a preparar el examen del MIR.

La aplicación viene de la mano de Questionarity, un joven proyecto gallego, y la idea es que permita a los usuarios preparar el examen del MIR pero siendo a la vez una aplicación divertida, en la que podrás competir con tus amigos.

mirq1Tiene un funcionamiento muy simple e intuitivo, por lo que el jugador desde el primer segundo verá de forma sencilla cómo jugar, sin necesidad de pesados tutoriales. Podréis decir “OK, ya existen otras apps para preparar el MIR”. Desde luego, pero ninguna con el espíritu lúdico y con la cuidada estética de esta.

De momento se trata de una beta con pocas preguntas, pero podéis seguir el proyecto en Twitter para ir enterándoos de las novedades. Podéis descargar la versión beta desde Google Play para vuestro Android (de momento no existe versión para otros sistemas operativos). Poco a poco se añadirán preguntas y modos de juego hasta llegar a la versión definitiva.

Consumir JSON en Android

Si el otro día hablaba de crear y consumir JSON en PHP, ahora toca su turno a Android.

¿Por qué usar JSON? Bueno, es un formato de intercambio de datos independiente de cualquier lenguaje y autodefinido. Ok, XML también, pero JSON es más ligero y fácil de parsear.

Existen varias librerías para JSON en Android, pero en el ejemplo usaremos los métodos nativos del SDK: las clases JSONArray y JSONObject.

JSONArray necesita recibir una cadena JSON para devolvernos un array de JSONObject. Supongamos que hemos recibido esos datos (sea de un web service o de un archivo) y los tenemos en una variable llamada data:

JSONArray jsArray = new JSONArray(data);

Ahora ya tenemos los datos dentro de un JSONArray. ¿Cómo lo recorremos? Pues con un for:

for (int i = 0; i < jsArray.length(); i++) {
    JSONObject jsObject = jsArray.getJSONObject(i);
    
    int intejemplo = jsObject.getInt(atributo1);
    String stringejemplo = jsObject.getString(atributo2);
}

El problema es que trabajar así puede ser muy plomífero, tratando los datos a mano, uno a uno. Existen librerías que te pueden echar un cable en esto, dándote mayores funcionalidades. En este caso las dos más populares son GSon y Jackson. En los enlaces podrás ver documentación sobre su uso.

El saber manipular JSON se torna capital cuando quieres trabajar con servicios web, o para comunicar apps con widgets.

Programando un activity de Android para que se abra a una hora definida

Ya sea para una aplicación de despertador, para programar una actualización diaria, para hacer una app de notas de aviso… cuando desarrollamos una app para android es muy útil (y a veces indispensable) poder aprovechar para programar que una aplicación se lance a una determinada hora.

Suponiendo que ya sabes sobre desarrollo Android, la idea es simple: creas una activity que, al recibir un evento de calendario (con la hora concreta) lanza la otra activity en cuestión. Por ejemplo, “Quiero que todos los días a las 12:01 la aplicación se conecte a la base de datos y actualice la información”.

El primer paso, lo dicho, es crear una clase que herede de BroadcastReceiver, sobreescribiendo su método onReceive:

public class Temporizador extends BroadcastReceiver{
@Override 
	public void onReceive(Context context, Intent intent)  { 
            Intent actividadALanzar = new Intent(context, actividadALanzar.class);
            context.startActivity(actividadALanzar);
	}
}

Debemos declarar esta clase en el Android Manifest, dentro de la etiqueta

<receiver  android:process=":remote" android:name="Temporizador"></receiver>

Lo siguientes es crear la pantalla principal y programar el evento, usando una clase PendingIntent:

Intent intentoLanzar = new Intent(getBaseContext(), Temporizador.class);
PendingIntent pIntent=PendingIntent.getBroadcast(this, 0, intentoLanzar, PendingIntent.FLAG_UPDATE_CURRENT);

Finalmente basta con crear un objeto calendario, con las horas definidas, y utilizar el AlarmManager para lanzar el intento pendiente a la hora prefijada (en este caso, estará pillando la hora actual):

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(System.currentTimeMillis());
cal.set (Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); 
cal.set (Calendar.MINUTE, timePicker.getCurrentMinute()); 
cal.set (Calendar.SECOND, 0);

AlarmManager aMan = (AlarmManager)getSystemService(ALARM_SERVICE); 
aMan.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent); 

Aunque este método os permite hacer llamadas periódicas a la aplicación, esto no es recomendable por el excesivo consumo de energía. Los servicios se crearon para hacer eso de forma eficiente.

Miniordenadores ¿qué opciones hay?

Todavía no he probado ninguno de estos miniordenadores, pero tras el susto que me llevé con el portátil hace unos días he estado pensando en hacerme con uno. A fin de cuentas, para lo más básico (consultar el correo electrónico, picar código) permiten ir tirando.

De momento los procesadores ARM se están llevando la palma en estos dispositivos, generalmente con SO Android o Linux. Aunque Intel ha anunciado la idea de sacar un modelo con arquitectura x86 bajo el nombre de NUC, pero en principio parece que este diseño iba destinado sólo a sistemas embebidos.

El proyecto inglés Raspberry Pi ha recibido muchos aplausos en los últimos timpos. Se trata de un proyecto orientado al campo educativo, pretendiendo ofrecer un sistema funcional a muy bajo coste orientado a la enseñanza de la programación a jóvenes estudiantes. Con 256 MB compartidos entre la RAM y la GPU, un CPU ARM mononúcleo a 700 MHz, salida vídeo HDMI y RCA y almacenamiento en tarjeta SD, se comercializan dos versiones: una de 25$ con un solo puerto USB y sin conexión a la red, y otro a 35$ con conexión 10/100 Ethernet RJ-45 y dos puertos USB (2.0). Aunque la idea de la fundación es que funcione con RISC-OS, existe soporte de Arch Linux, Debian o Fedora.

Como no, cuando se trata de producto barato los chinos tienen que sacar la cabeza. Los Allwiner 10 MK802, con aspecto de un usb grande (en esto ganan al Raspberry Pi por goleada), son equipos pensados originalmente para operar con Android (soportan la versión 4.0) aunque no deberían dar problemas con las versiones de Linux para procesadores ARM. Con un precio alrededor de los 74$, son bastante más potentes que el Pi: procesador mononúcleo de 1.5 GHz, 512 megas de RAM, GPU Mali 400, un puerto USB 2.0, un mini USB y una ranura para MicroSD. La salida de vídeo es HDMI e incluye receptor wifi interno.

La taiwanesa VIA Technologies también ha sacado una placa estilo Raspberry Pi por 49$. Montra un procesador ARM de 800 MHz, 512 megas de RAM DDR3, 2 gigas de memoria flash interna ampliable mediante tarjetas micro SD, salida de video VGA y HDMI, entrada y salida de audio por jack de 3.5”, cuatro USB 2.0, Ethernet LAN RJ-45… En principio viene con Android 2.3 y lo que no está claro es cómo será de abierto el sistema, si permitirá actualizar el Android libremente o habrá que esperar a que lo haga el fabricante, o si se podrán instalar versiones de Linux para ARM.

Finalmente la TXI Cotton Candy presenta un precio más caro (alrededor de los 199$) acompañado de un diseño atractivo, similar a un pen USB de 8 centímetros, con un conector USB macho que permite conectarlo a televisores, monitores o equipos que tengan puerto USB sin necesidad de cable HDMI. En todo casi también incorpora salida de vídeo HDMI para dispositivos sin USB, puerto micro USB, posiblidad de ampliar la memoria interna con tarjeta MicroSD hasta 64 gigas, 1 giga de RAM, GPU Mali-400 y procesador ARM de 1,2 GHz. Además permite conectividad wifi y bluetooth. Trabaja con SO Android y Ubuntu, e incluye un cliente de vitualización para Windows, MacOS y Linux.

¿Utilidad? Son equipos baratos y muy portátiles. Para mucha gente que sólo necesita el ordenador para surfear por la web pueden ser sobradamente potentes, y para otra pueden funcionar como un equipo de repuesto.