Archive for ‘General’

5 de noviembre de 2013

Configurar Sonar para que use MySQL

Sonar viene con una base de datos “incrustada”, en la que guarda el historial de análisis de nuestros proyectos. Sin embargo, es posible que prefiramos emplear un servidor de bases de datos propio que tengamos, algo fácil de hacer si sabes cómo. Vamos a ver cómo configurar sonar para que descargue los datos en un servidor MySQL local.

read more »

Anuncios
Etiquetas: ,
23 de septiembre de 2013

Integración Contínua IV – Testflight

Testflight

Testflight es un servicio web que nos permite la distribución de compilaciones de aplicaciones móviles. Hasta ahora, cuando desarrollamos apps, la forma de lograr que nuestros betatesters tuvieran acceso a ella era a través del correo, ya fuera adjuntándola o bien enlazando a un servidor dónde lo tuvieramos almacenado. Con testflight, una vez registrados y configurada una lista de distribución con los betatesters que la han de recibir, sólo tenemos que subir la compilación y notificar a nuestros testers para que se la descarguen y la prueben.

Testflight permite saber cuáles de los testers tienen la app instalada, qué dispositivos ha registrado cada uno… Incluso trae un sdk para poder tener un seguimiento de los errores que se den en el uso de la app, mas completo que el ACRA que ya vimos.

read more »

18 de septiembre de 2013

Integración Contínua III – Jenkins

Jenkins

Jenkins es una aplicación que monitoriza las ejecuciones de tareas repetitivas, tales como compilar un proyecto software o tareas ejecutadas por cron. Jenkins ofrece un sistema de Integración Contínua de fácil uso, permitiendo a los desarrolladores integrad los cambios al proyecto y facilitando que el usuario obtenga una compilación fresca. La compilación automatizada y continua aumenta la productividad.

Jenkins es una aplicación web java, por lo que para su ejecución precisaremos de un servidor apache-tomcat. La interfaz de jenkins, como la de sonar, se ve en el navegador.

read more »

18 de septiembre de 2013

Integración Contínua II – Sonar

Sonar

Sonar se define a sí mismo en su página web como “SonarQube is an open platform to manage code quality. As such, it covers the 7 axes of code quality.”. En castellano sencillo, viene a decir que es una plataforma abierta para gestionar la calidad del código. Cuando terminemos nuestra instalación de Sonar, podremos con un sencillo comando de Terminal ejecutar un análisis de calidad de nuestro código cuyos resultados veremos después en el navegador.

read more »

18 de septiembre de 2013

Integración Contínua I – Gradle

Introducción

Podemos leer en Wikipedia que la integración continua es un modelo informático propuesto inicialmente por Martin Fowler que consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes. Entendemos por integración la compilación y ejecución de tests de todo un proyecto.

El proceso suele ser, cada cierto tiempo (horas), descargarse las fuentes desde el gestor de versiones compilarlo, ejecutar tests y generar informes.

Yo uso git como gestor de versiones, guardando el código en github.com, como ya sabéis. La herramienta de compilación por defecto en Eclipse es ant, pero dado que Google ha marcado el camino hacia Gradle, optaremos por usarlo también nosotros. Sonar es una herramienta que analiza nuestro código y nos informa sobre código duplicado, estándares de codificación, pruebas unitarias, cobertura de código, complejidad ciclomática, posible errores, comentarios y diseño del software. Con el servicio testflight podremos subir nuestra apk para que un grupo de testers (a los que habremos invitado a nuestro “equipo”) puedan ponerla a prueba. Y para que no sea una carga tener que ir usando tantas herramientas, jenkins nos permite crear tareas para realizarlas secuencialmente y, si queremos, programarlas para que se ejecuten periódicamente.

En esta serie de artículos, explicaré cómo instalar las herramientas y configurar los servicios en Ubuntu (linux), que es el sistema operativo con el que trabajo. Los usuarios de Windows quizá tengan que seguir algún paso diferente en lo tocante a la instalación y temas de variables de entorno, pero la configuración y el uso debería ser el mismo.

read more »

1 de abril de 2013

Actualizando los recursos de geografía española

Quizá recordéis este post en el que mostré esta pequeña “librería” (por llamarla algo) con la que pretendía facilitar el trabajo relacionado con la geografía española en Android. Unos recursos que casaban Regiones/CCAA con Provincias y a éstas con sus municipios. Pues bien, a base de tener que usarlo, me di cuenta que podría estar mejor si pudiera encapsular todo el asunto en un objeto que me mostrara los selectores y me devolviera los valores seleccionados.

Fragment selector

Así que me puse a trabajar con un FragmentDialog. En él figuran los tres selectores y, como hasta ahora, cuando eliges Región se te muestran sus Provincias y al elegir una Provincia se te muestran sus municipios. Con todo elegido, se pulsa en “listo” y se reciben los valores de los tres campos.

El Fragment tiene que recibir un Listener para poder hacer la transferencia de datos. Aparte de eso, su uso es tan sencillo como esto:

Así se instancia y se muestra:

GeographySelector gs = new GeographySelector(this);
			gs.setOnGeograpySelectedListener(this);
			FragmentManager fm = getSupportFragmentManager();
			gs.show(fm, "geogTest");

Y así es como se reciben los datos. En este caso he optado por mostrarlos en un Toast ya que es una prueba.Toast con datos elegidos

@Override
	public void onGeographySelected(Map<String, String> hm) {
		Toast.makeText(this,
				"región: " + hm.get(GeographySpain.REGION)
				+ "\n" +
				"provincia: " + hm.get(GeographySpain.PROVINCIA)
				+ "\n" +
				"municipio: " + hm.get(GeographySpain.MUNICIPIO)
				, Toast.LENGTH_LONG).show();

	}

En la captura se muestra que recibes exactamente lo que hubiera seleccionado, ya sea la etiqueta (Región), el mensaje de “aún tiene que elegir de la categoría superior o el valor en sí mismo. Esto es así para permitir a cada uno personalizar la ausencia de selección. Igual quieres que lo tenga todo (en cuyo caso volverías a ponerle el diálogo por delante si recibieras los datos de no-selección) o igual se trata de un formulario opcional. Así el control lo tiene quien lo use.

El código está en el repositorio, el proyecto está configurado como “isLibrary”, de modo que sólo se tiene que añadir a nuestro proyecto como referencia.

17 de diciembre de 2012

Regiones, provincias y municipios de España para Android

Imagen

Para una app que tengo en mente necesitaba la lista de municipios, organizados por provincia, de toda España. Es fácil encontrarla en sql para bases de datos, pero unos datos que no van a sufrir cambio alguno no me justifican usar bbdd.

Mi idea era crear un xml en values con todas las regiones, provincias y municipios en forma de string-arrays bien organizados. Así, si quiero hacer una traducción de la app a, por ejemplo, catalán o gallego, puedo usar los nombres catalanes o gallegos de regiones, provincias y municipios con sólo crear una carpeta values con el sufijo adecuado.

read more »

17 de agosto de 2012

Preferencias Compartidas

Si tu aplicación necesita guardar pocos datos, una base de datos puede resultar demasiado elaborado para ello. Para guardar datos primitivos – tales como los valores de la configuración de una aplicación: frecuencia actualización, fichero de tono de llamadas, etc – la forma mas sencilla es a través de las Preferencias Compartidas o Shared Preferences.

read more »

9 de mayo de 2012

Comunicación entre actividades

Hasta el momento hemos hecho apps de una única actividad (Activity) cada una. La mayoría de aplicaciones que hemos visto tienen mas de una actividad. Por ejemplo, las apps de correos te muestran en una actividad la lista de correos, pero cuando pulsas en uno de ellos salta a otra actividad en la que te muestra todo el contenido de dicho correo. La primera actividad le pasó la información sobre el correo que seleccionaste a la segunda, y ésta ya se encargó de mostrarlo entero. Pues vamos a ver – de un modo muy simple – cómo hacer precisamente éso.

read more »