Android, Herramientas/Utilidades, Personal

Durabatt – Android Apps on Google Play

Make an estimate of the duration of the batteries you use in a device.

From the electrical charge of the battery in mAh (or sum of the batteries in series) and the consumption indicated in the device (mA or W and V) you can obtain an estimate of the duration until its exhaustion.

You will get the nominal duration (theoretical duration, if everything was perfect, if that will never happen) and the approximate duration (empirical duration, an approximation to the real world).

Keep in mind that the consumption indicated on a device is the maximum consumption it is capable of producing. It does not mean that you are always consuming that amount, but it will always be according to the type of device.

Keep in mind also that the batteries are not perfect and they will not always have the indicated electric charge (usually they will have something less, but they can also have something more).

If you have several batteries in series, the total electric charge will be the sum of the individual charges.
If you indicate the electrical current of the device (mA), this will be correct if the total voltage of the batteries (sum of V) is that indicated in the device.

Origen: Durabatt – Android Apps on Google Play

Anuncios
Herramientas/Utilidades, Programación, XSLT

XSL – Llamada recursiva

Si necesitas iterar sobre un XML en el que los nodos son genéricos, pero siguiente un orden, como por ejemplo, este XML de entrada:

<?xml version="1.0" encoding="UTF-8"?>
<lista>
    <PARAM1>Favoritos</PARAM1>
    <PARAM2>Antonio</PARAM2>
    <PARAM3>28/03/2017</PARAM3>
    <PARAM4>2</PARAM4>
    <PARAM5>León</PARAM5>
    <PARAM6>Panthera leo</PARAM6>
    <PARAM7>Félidos</PARAM7>
    <PARAM8>Panthera</PARAM8>
    <PARAM9>El rey de la selva</PARAM9>
    <PARAM10>Lemming</PARAM10>
    <PARAM11>Lemmus lemmus</PARAM11>
    <PARAM12>Roedor</PARAM12>
    <PARAM13>Cricetidae</PARAM13>
    <PARAM14>Dicen que se suicidan</PARAM14>
</lista>

Esto puede venir como respuesta de algún WebService, como por ejemplo haría este código en Java:

public static String getAnimalesFavoritos(String username, List<Mamifero> list) {
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	String date = sdf.format(new Date());
	StringBuilder sb = new StringBuilder();
	sb.append("<lista>\n");
	sb.append("\t<PARAM1>Favoritos</PARAM1>\n");
	sb.append("\t<PARAM2>").append(username).append("</PARAM2>\n");
	sb.append("\t<PARAM3>").append(date).append("</PARAM3>\n");
	sb.append("\t<PARAM4>").append(list.size()).append("</PARAM4>\n");
	int i = 5;
	for (Mamifero elem : list) {
		sb.append("\t<PARAM" + i + ">").append(elem.getNombre()).append("</PARAM" + i + ">\n");
		sb.append("\t<PARAM" + (i + 1) + ">").append(elem.getNombreLatin()).append("</PARAM" + (i + 1) + ">\n");
		sb.append("\t<PARAM" + (i + 2) + ">").append(elem.getFamilia()).append("</PARAM" + (i + 2) + ">\n");
		sb.append("\t<PARAM" + (i + 3) + ">").append(elem.getEspecie()).append("</PARAM" + (i + 3) + ">\n");
		sb.append("\t<PARAM" + (i + 4) + ">").append(elem.getDescripcion()).append("</PARAM" + (i + 4) + ">\n");
		i += 5;
	}
	sb.append("</lista>");
	return sb.toString();
}

Para ello, se puede aplicar una plantilla XSL como la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts" version="1.0" exclude-result-prefixes="msxsl user">
    <xsl:template match="/lista">
        <xsl:variable name="lista" select="PARAM1" />
        <xsl:variable name="username" select="PARAM2" />
        <xsl:variable name="dateTime" select="PARAM3" />
        <xsl:variable name="numero" select="PARAM4" />
        <animales>
            <tipoLista>
                <xsl:value-of select="$lista" />
            </tipoLista>
            <userName>
                <xsl:value-of select="$username" />
            </userName>
            <dateTime>
                <xsl:value-of select="$dateTime" />
            </dateTime>
            <mamíferos>
                <xsl:call-template name="animal">
                    <xsl:with-param name="node" select="." />
                    <xsl:with-param name="count">
                        <xsl:value-of select="1" />
                    </xsl:with-param>
                    <xsl:with-param name="cursor">
                        <xsl:value-of select="5" />
                    </xsl:with-param>
                    <xsl:with-param name="max">
                        <xsl:value-of select="$numero" />
                    </xsl:with-param>
                </xsl:call-template>
            </mamíferos>
        </animales>
    </xsl:template>
    <xsl:template name="animal">
        <xsl:param name="node" />
        <xsl:param name="count" />
        <xsl:param name="cursor" />
        <xsl:param name="max" />
        <mamífero>
            <nombre>
                <xsl:value-of select="$node/*[name() = concat('PARAM', $cursor)]" />
            </nombre>
            <nombreLatin>
                <xsl:value-of select="$node/*[name() = concat('PARAM', $cursor + 1)]" />
            </nombreLatin>
            <familia>
                <xsl:value-of select="$node/*[name() = concat('PARAM', $cursor + 2)]" />
            </familia>
            <especie>
                <xsl:value-of select="$node/*[name() = concat('PARAM', $cursor + 3)]" />
            </especie>
            <descripción>
                <xsl:value-of select="$node/*[name() = concat('PARAM', $cursor + 4)]" />
            </descripción>
        </mamífero>
        <xsl:if test="$count &lt; $max">
            <xsl:call-template name="animal">
                <xsl:with-param name="node" select="$node" />
                <xsl:with-param name="count">
                    <xsl:value-of select="$count+1" />
                </xsl:with-param>
                <xsl:with-param name="cursor">
                    <xsl:value-of select="$cursor+5" />
                </xsl:with-param>
                <xsl:with-param name="max">
                    <xsl:value-of select="$max" />
                </xsl:with-param>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Donde se utiliza una llamada a una función de manera recursiva.
Es importante que se pase el número de “animales” que se van a enviar, ya que es la única forma que tiene la función de saber cuándo parar.

El XML resultante sería el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<animales>
    <tipoLista>Favoritos</tipoLista>
    <userName>Antonio</userName>
    <dateTime>28/03/2017</dateTime>
    <mamíferos>
        <mamífero>
            <nombre>León</nombre>
            <nombreLatin>Panthera leo</nombreLatin>
            <familia>Félidos</familia>
            <especie>Panthera</especie>
            <descripción>El rey de la selva</descripción>
        </mamífero>
        <mamífero>
            <nombre>Lemming</nombre>
            <nombreLatin>Lemmus lemmus</nombreLatin>
            <familia>Roedor</familia>
            <especie>Cricetidae</especie>
            <descripción>Dicen que se suicidan</descripción>
        </mamífero>
    </mamíferos>
</animales>
Herramientas/Utilidades, Java, Programación, Uncategorized

Java – Comprobar si un texto está en formato JSON

Método para comprobar si un texto está en formato JSON:

import com.fasterxml.jackson.databind.ObjectMapper;
public static boolean isJSONValid(String jsonInString) {
    try {
        final ObjectMapper mapper = new ObjectMapper();
        mapper.readTree(jsonInString);
        return true;
    } catch (IOException e) {
        return false;
    }
}

ObjectMapper se encuentra en la librería jackson-databind-2.7.4.jar

Por supuesto hay mil formas más de hacerlo. Más adelante pondré otras librerías.

(II) - Instalación de las herramientas, Java, Programación, Tutoriales, Web Maven Spring JSF

Proyecto Web Maven con Spring y JSF (II) – Instalación de las herramientas

En este capítulo explicaré cómo instalar las distintas herramientas que se van a usar  para la realización del proyecto web. En el capítulo anterior puedes encontrar los enlaces de descarga.

  1. JDK: imprescindible para la programación en Java.

Descárgate el adecuado a la máquina (32 o 64 bits) y al Sistema Operativo que vas a usar para programar. En mi caso, me descargo la versión de Windows x64. (¡¡¡Acepta el acuerdo de licencia antes de volverte loco!!! Accept License Agreement)

JDK

Instalar el JDK no tiene misterio alguno, ya que sólo hay que lanzar el ejecutable que se descarga y seguir los pasos del asistente de instalación (conviene instalarlo todo en las carpetas que el asistente asigna por defecto).

Instalar jdk

 

También pedirá instalar el JRE (Java Runtime Environment), que también hay que instalar, ya que es el medio por el que se ejecutan las aplicaciones Java.

 

Instalar JRE

 

  1. Eclipse: el IDE en el que crearemos el proyecto web.

Nos descargamos la versión Eclipse IDE for Java EE Developers. Es el Eclipse Standard, sólo que ya tiene instaladas algunas de las herramientas que necesitaremos para este proyecto, así ahorraremos tiempo.

 

Versión eclipse

 

En mi caso, descargo la versión para Windows 64 bits.Eclipse no tiene un asistente de instalación. Se descarga un ZIP. Este ZIP lo descomprimes en la ruta que quieras, aunque siempre conviene que sea una ruta corta (en plan C:\eclipse), ya que maneja muchos archivos con nombres muy largos y rutas largas y esto puede dar problemas.

 

Archivos eclipse

 

  1. Apache Maven: servidor para la gestión de dependencias y de proyectos.

Descarga el archivo apache-maven-3.2.2-bin.zip y sigue los siguientes pasos:

  1. Descomprime el archivo descargado en el directorio que quieras, aunque se recomienda que sea en la ruta C:\Program Files\Apache Software Foundation, así será más fácil encontrarlo en caso de que hiciera falta, ya que la documentación está basada en esa ruta.
  2. Añade a las variables del usuario la variable M2_HOME con el valor  C:\Program Files\Apache Software Foundation\apache-maven-3.2.2.
    También añade a las variables de usuario la variable M2 con el valor %M2_HOME%\bin.
    Para acceder rápidamente a las variables de entorno, pulsa la combinación de teclas Windows+Pause donde aparecerá la siguiente ventana:
    Configuración avanzadaHacemos click en la última opción de la columna izquierda: Configuración avanzada del sistema. Apareceré el siguiente cuadro:
    Propiedades del sistema
    Pulsa en el botón Variables de entorno. Aparece el siguiente cuadro:
    Variables de entorno

    En este cuadro ya se puede ver que he añadido ambas variables.
  3. Añade también a las variables del sistema la variable JAVA_HOME con el valor c:\Program Files\Java\jdk1.8.0_11. Y asegúrate de que en la variable del sistema Path exista la ruta %JAVA_HOME%\bin y también la ruta %M2%. No sustituyas los valores que hay ya en la variable, pon punto y coma para separar las distintas rutas.
  4. Abre una ventana de comandos (pulsa Windows y escribe cmd) y escribe mvn –version para comprobar que está instalado correctamente. Debería aparecer esto:
    Comandos
    IMPORTANTE: la consola hay que ejecutarla en modo administrador (pulsa Windows, escribe cmd, click derecho al resultado encontrado y Ejecutar como administrador).
  1. Spring Framework:
Gracias a Maven, no será necesario descargarse las librerías necesarias para el uso de Spring, ya que Maven lo hará por ti, por lo que se configurará cuando llegue su momento.
  1. JSF:
Si descargaste la versión de Eclipse, Eclipse IDE for Java EE Developers, significa que me hiciste caso y que habrás ahorrado tiempo, ya que no hace falta instalar nada de JSF, viene ya incluido.
Cuando llegue el momento se configurará en el proyecto.
  1. BBDD MySQL:
 Y, por último, instalaremos las bases de datos de MySQL. Descarga el instalador más completo,  MySQL Installer 5.6.19, y ejecuta el asistente de instalación.
Sigue todos los pasos y deja los valores por defecto que ofrece el asistente. Cuando te pida poner la contraseña del ‘root’, simplemente acuérdate de cuál es 😉 Como es sólo un ejemplo, pon como contraseña ‘root’ o ‘admin’ y será más fácil recordarlo. Para un proyecto real que vayas a publicar ni se te ocurra poner estas.

Pues ya tenemos la base para comenzar a crear el proyecto 😀

la-flecha-azul-a-la-izquierda-detras-de-anteriores-icono-5726-64(I) – Introducción (III) – Creación del proyecto base con Maven
(I) - Introducción, Java, Tutoriales, Web Maven Spring JSF

Proyecto Web Maven con Spring y JSF (I) – Introducción

Tras varios años trabajando con JavaSE puro, he decidido tratar de refrescar las tecnologías de software más modernas que en su momento aprendí y que, al no trabajarlas, gran parte he olvidado.

Y ya de paso, lo voy publicando aquí para tener una guía de lo que voy haciendo, además de servir de ayuda para quien también haya decidido refrescar o aprender estos temas.

¿Y por qué he decido usar las tecnologías Maven, Spring y JSF? Principalmente porque son las tecnologías más solicitadas por las empresas (no siempre juntas, suelen estar por separado) y porque son tecnologías que en su momento aprendí, en versiones anteriores y que no he vuelto a utilizar, por lo que me convenía volver a verlas.

Las publicaciones las iré haciendo agrupadas por funcionalidades conforme vaya teniendo tiempo para hacerlas, por lo que este tutorial te lo puedes encontrar a medias dependiendo de cuándo te lo encuentres.

Las herramientas que se van a utilizar

  • La, a día de hoy (22/07/2014), última versión de Java Development Kit, la versión 1.8.0_11 de 64 bits para Windows: JDK 8u11

Java 8

Eclipse Luna

  • Apache Maven 3.2.2 para la gestión de proyectos, referencias, dependencias…: Maven 3.2.2
    En el capítulo correspondiente se explicará cómo usar Maven. Por lo pronto, instala el servidor local.

Apache Maven

  • Spring Framework 4.0.6 para la gestión de la lógica de negocio de la aplicación. (Se instalará desde eclipse)

Spring Framework

  • Java Server Faces 2.0 para la gestión de la navegación web. (Se instalará desde eclipse)

Java Server Faces

  • Bases de datos MySQL para la persistencia de datos. Con el paquete MySQL Community Installer 5.6.19 tendremos todo lo necesario (BBDD, drivers, workbench,…): MySQL Installer 5.6.19

MySQL

(conforme vaya avanzando en capítulos iré poniendo aquí las herramientas que se van utilizando)

Requisitos de la máquina (no los mínimos, sino los míos, para que tengas una referencia)

  • Windows 7 Home Premium de 64 bits
  • CPU: i7 – 7200M @ 1.60 GHz
  • RAM: 4 GB

Ya tenemos las herramientas mínimas para empezar con el proyecto web. Ahora, a instalarlas.

(II) – Instalación de las herramientas  
Android, Java, Programación

Curso de Android GRATUITO

A través de este enlace http://cursointroduccionandroid.upvx.es/ficha, puedes acceder a un curso GRATUITO de Android a distancia a dado por la Universidad Politécnica de Valencia.

Sólo hay que dedicarle unas poquitas horas a la semana para conocer los principios básicos de Java y de Android.

Próxima edición: 18/02/2014
Duración: 10 semanas
Trabajo estimado: 10 horas a la semana
Programación, Tutoriales

Ejemplo de cliente Flex y servlet en FlexBuilder

Aquí dejo un ejemplo de cliente Flex y servlet en FlexBuilder que ha hecho mi compañero Sergio Medialdea.

Sergio Medialdea

Previamente, es necesario tener instalados:

Flex Builder 3 o superior.

Plugin para desarrollo JEE integrado en Flex Builder.

Apache Tomcat 6.

Creación del cliente Flex

En Flex Builder, crear nuevo proyecto Flex de tipo aplicación Web:

Creación del cliente FlexIncluir el siguiente código:

Tras ejecutarlo deberíamos ver algo tal que así:

e1_2Creación del servlet Java

Primeramente hemos de añadir Tomcat en Flex Builder, para ello hemos de abrir la perspectiva JEE y en la pestaña de Servidores incluir Apache Tomcat:

e1_4e1_5A continuación, crear nuevo proyecto web dinámico:

e1_3Incluir el siguiente código en el servlet:

Configurar el descriptor de despliegue con el siguiente contenido:

Desplegar el servlet en el Tomcat que hemos integrado en Flex Builder:

e1_6Finalmente, si todo ha ido bien tras arrancar Tomcat e introducir contenido en la caja de texto del cliente Flex, debemos recibir el saludo por parte de nuestro servlet:

e1_7En el próximo post, trataremos de…

Ver la entrada original 15 palabras más