lunes, 11 de abril de 2011

PhotoGeolocator supera las 10.000 descargas

PhotoGeolocator ya ha superado las 10.000 descargas!

En estos escasos nueve meses he recibido comentarios y sugerencias desde diversas partes del mundo, que han contribuido a mejorar la aplicación:

Ken Gauger - Mejorada precisión y compatibilidad con números racionales.
Masakazu Kawahara - Compatibilidad con dispositivos japoneses.
Marcello Anselmi - Compatibilidad con dispositivos que no disponen de trackball. Traducción al italiano.
Fritz Endres - Permitir vista satélite.
Brianna Laugher - Permitir la búsqueda por dirección.

¡Gracias a todos!

lunes, 1 de noviembre de 2010

Code Swarm

El año pasado escribí en este cuaderno acerca de Code Swarm

Aquí está la representación orgánica de la actividad CVS desde que montamos el repositorio hace dos años y medio hasta hoy. Un total de 48901 commits resumidos en un vídeo de dos minutos y medio.



Un saludo a todos los commiters que aparecéis en el vídeo, y también a los que os encontrabais "detrás de las cámaras" en el despacho :)

domingo, 8 de agosto de 2010

¿Por qué no iPhone?

Puedo programar mi Android usando únicamente herramientas y librerías de código abierto: Linux, NetBeans o Eclipse y Java.

Además puedo compilar mi aplicación y pasársela a un amigo para que la instale en su dispositivo. Aunque pueda parecer increíble, iPhone OS no permite hacer algo así. Usando la metáfora de Richard Stallman, es como si no pudieses compartir tu propia receta de cocina con un amigo.

Si desarrollas para iPhone, deberás registrar el dispositivo de tu amigo como dispositivo de desarrollo para tu aplicación (creo que puedes registrar un máximo de 100 por aplicación, o por desarrollador...) para poder compartirla con él. Otra opción es publicar tu aplicación en el AppStore, y esperar pacientemente a que te la autoricen!



La otra opción si quieres poder distribuir libremente tu aplicación, es que tus amigos "desenjaulen" su dispositivo, lo que se conoce como jail break.

¿Y para los que ya se hayan comprado un iPhone? Bueno... siempre pueden instalar Android en sus iPhones

sábado, 24 de julio de 2010

PhotoGeolocator ya está en el Market

El Miércoles subí al Market la aplicación que he desarrollado para el PFC de los estudios de informática en la UOC. Hoy Sábado mi consola de administración de aplicaciones publicadas marca 378 instalaciones de las cuales 264 continúan instaladas (69%).

El programa sirve para el geoetiquetado de fotografías (geotagging en idioma inglés). Se puede tomar una foto utilizando la cámara del dispositivo y guardar en ella la información geográfica. Esto ya lo hace la mayoría de dispositivos Android, pero no todos, como mi G1 (HTC Dream en España).

Además el programa permite modificar la información geográfica de una foto existente, cuando no está geoetiquetada o la información no es precisa. La información geográfica se puede obtener mediante GPS o bien puede escogerse manualmente marcando en el mapa. Por último el programa también permite mostrar en el mapa la ubicación de una foto almacenada en nuestro Android.

El desarrollo de esta aplicación para Android ha sido toda una experiencia. He respetado los principios ágiles para el desarrollo de aplicaciones, contando con un equipo de 11 colaboradores voluntarios que desempeñaban el rol de "cliente"... Hemos utilizado Google Groups, Google Talk y el programa se ha probado en HTC Dream, HTC Magic, Motorola Dext, HTC Tatoo, HTC Hero, HTC Legend y Nexus One. Aunque no me han puesto la máxima nota, me han aprobado. Y ya soy ingeniero en informática 8D

Por supuesto, la aplicación no sólo es gratuita sino que es libre, el código fuente está publicado en Google Code bajo licencia GNU GPL v3. Para quien quiera usarla, copiarla, modificarla o simplemente contribuir notificando posibles defectos y/o mejoras.

Quiero dar las gracias a todos los que me habéis apoyado en esta aventura.

viernes, 7 de mayo de 2010

iPod en Ubuntu

Esta semana Ubuntu 10.04 LTS "Lucid Lynx" ha visto la luz, y el primer día mis compañeros David y Seba se lo instalaron en sus puestos de trabajo.

Yo había leído acerca de la integración de una tienda de música on-line en esta nueva versión de Ubuntu... Entonces tuve una corazonada, y conecté mi iPod Touch al ordenador de David. ¡SIIII! ¡El Lince Lúcido reconoció el aparato y mostró todas sus canciones! ¡Y permite sincronizar la música con el dispositivo!

Efectivamente, Ubuntu 10.04 ofrece compatibilidad con iPod y iPhone de forma nativa.

Desde que Mari me regaló el iPod, no he vuelto a comprar un CD de música. Comprar la música en mp3 tiene sus ventajas, y la mejor alternativa para mí era iTunes pese a estar disponible sólo para Windows y MacOS, lo cual mantenía esclavo a mi iPod... hasta ahora. Porque a partir de hoy mi tienda de música es Ubuntu One Music Store.

miércoles, 9 de diciembre de 2009

Editor Visual Java

Hoy un compañero me ha dado el empujoncito que me hacía falta para ponerme a escribir un pequeño tutorial acerca de cómo crear un interfaz gráfico de usuario en Java. Vamos a crear en unos minutos un interfaz gráfico que nos permita acceder a las propiedades de un objeto Java. Usaremos un editor al azar, por ejemplo... NetBeans!

Cierto, he hecho trampa. En realidad he escogido NetBeans porque trae "de serie" el sistema más avanzado para creación visual de interfaces de usuario multiplataforma: Swing powered Matisse :)

Abrimos NetBeans y vamos al menú Archivo, seleccionamos Proyecto Nuevo... En el diálogo seleccionamos la categoría Java y el tipo de proyecto Aplicación Java.



A continuación damos un nombre a la aplicación y pulsamos Terminar.



Aparece en pantalla el proyecto recién creado, con el paquete miinterface y una clase generada automáticamente Main.java.



Ahora crearemos un objeto que encapsule los datos a los cuales accederemos desde nuestro interfaz gráfico. Lo haremos siguiendo el patrón JavaBean. Es un buen momento para explicar qué es un JavaBean :) Un JavaBean es un objeto Java con las siguientes propiedades:

- Tiene un constructor vacío, para que pueda ser instanciado siempre.
- Todas las variables se declaran private (o protected).
- Hay un método accesor de la forma getNombrePropiedad para cada variable que se quiera exponer para lectura.
- Hay un método accesor de la forma setNombrePropiedad(Tipo nuevoValor) para cada variable que se quiera exponer para escritura.

Además, nosotros usaremos el mecanismo de notificación de cambios de propiedades en la implementación de los métodos accesores de escritura para mejorar la integración con Swing.

Hagamos botón derecho en el paquete miinterface y seleccionemos Nuevo -> Clase Java... en el menú emergente. Le damos un nombre a la clase,



y al terminar nos aparece una plantilla con la declaración del paquete y una clase vacía.

Vamos a crear las propiedades del objeto, con sus métodos accesores de lectura/escritura y mecanismo de notificación de cambio de propiedad: Ponemos el cursor dentro del cuerpo de la clase y pulsamos alt-ins para añadir una nueva propiedad al objeto. Seleccionamos Agregar Propiedad...



Especificamos nombre de la propiedad, su tipo (por ejemplo "descripcion" de clase String) y activamos la opción delimitado para poder conectar este objeto a otros JavaBeans, como son por ejemplo los componentes visuales de Swing.



Al aceptar el formulario vemos que NetBeans ha generado el código para la variable, métodos accesores de lectura y escritura para la propiedad, y código boilerplate para la notificación de evento de cambio de propiedad.

Añadimos otra propiedad, por ejemplo "peso" de tipo Number, activando también la opción delimitado en el formulario. Esta vez la opción Generar soporte para cambio de propiedad estará deshabilitada porque ya se ha generado el código para esta compatibilidad.



Y para que nuestro nuevo objeto cumpla con las especificaciones del patrón JavaBean, añadimos un constructor vacío: hacemos alt-ins y seleccionamos Constructor... en el menú emergente.



Ya tenemos nuestro JavaBean acabado. Ahora vamos a conectar este objeto a nuestro formulario para poder interactuar con sus propiedades a través de nuestro interfaz gráfico.. Es la parte más divertida :)

Volvamos a hacer botón derecho en el paquete miinterface y seleccionemos esta vez Nuevo -> Formulario JFrame...



Damos un nombre a la clase, por ejemplo MiFrame y al terminar nos aparece el editor visual.



Para poder usar nuestro JavaBean en el formulario, lo primero que tenemos que hacer es compilarlo (F11). Y luego, simplemente arrastrarlo a nuestro formulario. Podemos ver la nueva instancia que ha creado el IDE en la categoría Otros Componentes del Inspector en el editor.



Arrastramos ahora un Campo de texto de la paleta al formulario y le hacemos click con el botón derecho. Seleccionamos enlazar -> text y escogemos miCosa1 como origen y descripcion como expresión.



Repetimos la operación para vincular un segundo componente a la propiedad peso, pero en este caso usaremos un Cuadro formateado (Formatted Field) en lugar de un Campo de texto, ya que se trata de un valor numérico. Estiramos los componentes para que su tamaño no esté limitado al valor inicial del texto. Si los estiramos hasta el ancla que aparece en el borde derecho del formulario, su tamaño se ajustará al del formulario.

Ahora vamos a especificar que el valor del Cuadro formateado es numérico. Seleccionamos el componente en el editor y ajustamos la propiedad formatterFactory.


Por último, arrastramos el componente Botón de la paleta hasta el formulario y le hacemos botón derecho -> Eventos -> Action -> actionPerformed para implementar la acción... por ejemplo mostrar las propiedades de mi cosa en un diálogo:



Será necesario importar la clase JOptionPane, lo hará automáticamente NetBeans si escribimos ayudándonos de ctrl-espacio o bien si hacemos fix imports (mays-alt-f).

Ya está! Botón derecho en MiFrame.java y Ejecutar archivo.



Podemos probar la conexión de nuestro JavaBean con los componentes visuales, y el mecanismo de notificación de cambio de propiedad, conectando otro componente visual a la misma propiedad. Por ejemplo usemos esta vez una Etiqueta.



Al modificar la descripción, la etiqueta se actualiza automáticamente. ¿Y si usamos un Desplazador (JSlider) para establecer el peso?


Está claro que este formulario no ganaría un premio de diseño...

sábado, 24 de octubre de 2009

Corrector ortográfico en OpenOffice

Ahí va una chuletilla para instalar un corrector ortográfico en OpenOffice, para Ubunteros, al menos los que utilizamos la última LTS, 8.04 Hardy cuya versión de OpenOffice apt-compatible es la 2.4.1. Probablemente este procedimiento seguirá funcionando en las próximas versiones LTS de Ubuntu, y también de OpenOffice, pero seguramente no será necesario porque podrá hacerse desde el menú Archivo -> Asistentes -> Instalar nuevos diccionarios, sin problemas (o eso espero :)

El diccionario de OpenOffice está ubicado en el directorio /usr/lib/openoffice/share/dict/ooo. Vemos que esta carpeta es realidad un enlace hacia ../../../../share/myspell/dicts. Así que para editar el archivo que necesitamos modificar podemos hacer:

$ sudo gedit /usr/lib/openoffice/share/dict/ooo/dictionary.lst

o bien:

$ sudo gedit /usr/share/myspell/dicts/dictionary.lst

Y bastará añadir la línea:

DICT yy XX yy_XX

donde yy es el idioma y XX el país. Por ejemplo, para habilitar el diccionario catalán, escribimos:

DICT ca ES ca_ES

Si nuestro Ubuntu no tenía aún instalado el corrector que queremos utilizar, nos faltará el archvo yy_XX.dic en ese directorio. El archivo estará ahí si por ejemplo hemos instalado la compatibilidad con ese idioma en Firefox. Otra opción es descargar el archivo y copiarlo en esa carpeta. Si buscamos "dicooofull" o "pack_full_20070914" en google seguro que encontramos algún ftp del cual descargar todos los idiomas.

Para comprobar si el corrector ya está operativo en OpenOffice, podemos ir al menú Herramientas -> Opciones -> Configuracion de idioma -> Idioma, y verificar si el idioma que queremos tiene activo el icono "ABC":