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

SVN – Añadir ficheros recursivamente

Para añadir ficheros de forma recursiva, por línea de comando, tienes dos maneras de hacerlo:

  • Moverte de carpeta en carpeta donde sepas que se han añadido ficheros nuevos y usar (algo bastante tedioso si tienes un gran árbol):
    svn add *
  • Ponerte en la raíz y ejecutar:
    svn add --force * --auto-props --parents --depth infinity -q

    De esta manera se añadirán todos los ficheros de todas las carpetas hija.

Después de esto, sólo queda hacer commit:

svn commit -m 'Mensaje'

Y a transferir…

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.

Herramientas/Utilidades, Linux

Instala Spotify en Ubuntu 15.04

 Si quieres instalar Spotify en Ubuntu, a partir de la versión 15.04 no es suficiente con seguir las instrucciones que da la propia página de Spotify. El problema surge porque Spotify usa unas librerías que a partir de las versión 15.04 ya no vienen instaladas por defecto, sino que viene una versión más avanzada de las mismas. Supongo que esto se arreglará con la siguiente versión de Spotify para Linux, pero mientras, habrá que hacer esto: 1. Añade el respositorio:

sudo add-apt-repository “deb http://repository.spotify.com stable non-free”

2. Añade la clave pública de seguridad:

sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 94558F59

3. Refresca los repositorios:

sudo apt-get update

(Hasta aquí, igual que las instrucciones de la web de Spotify. A partir de ahora cambia un poco) 4. Instala el cliente de Spotify:

sudo apt-get install spotify-client spotify-client-qt

5. Descarga e instala la librería que falta:

libgcrypt11 for 64-bit OS

libgcrypt11 for 32-bit OS

Con esto ya debería funcionar perfectamente Spotify para Linux.

Spotify Premium - Linux Preview_007

Fuente

Herramientas/Utilidades, Linux

Reproduce contenido Flash en el navegador Chromium de Ubuntu

Una de las principales pegas de usar Ubuntu es que, al abrir ciertas páginas web, no funciona el contenido flash. La solución para poder visualizarlo en el navegador Chromium es la siguiente:

1. Abre el Centro de Software de Ubuntu:

Centro de software de Ubuntu_001

2. Dale a Editar -> Orígenes del Software…:

Menú_004

3. Asegúrate de que tienes la casilla de Multiverso activada en la sección de repositorios de Ubuntu:

Software y actualizaciones_002

4. Instala pepperflashplugin-nonfree:

Centro de software de Ubuntu_005

5. Y ya debería estar listo. Reinicia el navegador Chromium y prueba alguna web que use flash, como por ejemplo, loteriasyapuestas.es. Prueba a jugar la Quiniela o algún otro juego. En vez de aparecer el mensaje de error de que no hay flash, debería aparecer algo como esto (el funcionamiento normal :D):

Loterías y apuestas

Fuente

Herramientas/Utilidades

FreeCAD: la alternativa opensource a AutoCAD

Si eres usuario de AutoCAD, esta entrada te puede ser útil.

Existe una alternativa opensource (vamos, que es gratis), FreeCAD.

No creo que llegue al altísimo nivel del AutoCAD, pero seguro que a más de un usuario le es suficiente para las tareas que realiza.

Además, si te gusta programar, aquí puedes aportar en forma de trabajo nuevas herramientas a FreeCAD o reparación de errores.

FuenteFreeCAD