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
Uncategorized

Funciones y Scripts en Scilab.

SciLab, alternativa gratuita a MatLab. Uso básico

El Blog de Programación para Ingenierías

Scilab es uno de los programas y lenguajes más usados a nivel académico esto se debe a su gran potencial de calculo y sintaxis a la hora de realizar (por así llamarlo) ‘programación científica’, y por otro lado por que es la contra-parte libre al paquete de cálculo científico Matlab del que hemos hablado en este blog antes. Aunque la sintaxis entre ambos lenguajes resulta ser bastante familiar, hay qeu reconocer que Matlab en cuanto a facilidad de uso en algunos casos llega a ser superior por lo que a veces la migración hacia Scilab resulta un poco tediosa cuando estamos muy acostumbrados a trabajar en Matlab, sin embargo no es tanto el trabajo para adaptarse rápidamente a la alternativa libre.

Algo muy importante a lo hora de trabajar con estos sistemas es el hecho de poder escribir funciones o scripts en ficheros aparte además de escribir los comandos…

Ver la entrada original 1.280 palabras más

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.

Linux

Problema con Eclipse Mars en Ubuntu 16.04

Si estás teniendo problemas con Eclipse Mars en Ubuntu 16.04, en plan no te abre bien las preferencias, no hace conexiones GIT… no te desesperes más.

Por lo visto hay un error con al versión de GTK+3.

Para empezar, abre un terminal y escribe el siguiente comando:

export SWT_GTK3=0

Si te ha funcionado, puedes hacer una modificación persistente, ya que la anterior era sólo temporal. En la carpeta raíz de eclipse, edita el archivo eclipse.ini. Inserta las 2 siguientes líneas:

--launcher.GTK_version
2

Insértalas justo antes de esta línea:

--launcher.appendVmargs

Con esto ya debería funcionar correctamente 🙂


Fuente askubuntu.com