3ENGINE

Programación y otros cachivaches

Categoría: Tecnologia

Página 4/45

Tecnologia

Chart.js: cómo añadir texto dentro de una grafica de tipo donut


A continuación te muestro cómo añadir texto dentro de una grafica de tipo donut en Chart.js

Chart.js es una libreria open source para crear gráficos en javascript basados en HTML5. Entre la amplia lista de gráficos disponibles de esta fantástica librería tenemos el donut (doughnut). Que básicamente es un gráfico de torta pero con un agujero en el centro … sorprendidos ¿verdad? 😉

Yo lo que quiero es aprovechar ese agujero del centro para añadir información, ya sea un simple texto o el total. Algo asi como los pop dots 😉

cómo añadir texto dentro de una grafica de tipo donut

Básicamente esto se consigue añadiendo un plugin e implementando el evento beforedraw. En mi ejemplo muestro el total pero podeis modificar el código para mostrar otra información.

Código HTML

<div id="mychart-holder">
    <canvas id="mychart"/>
</div>

Código Javascript

var data = {
    labels: ["Error", "Failure", "Success", "Skip", "Unknown"],
    datasets: [
        {
            data: [10, 5, 20, 2, 1],
            backgroundColor: ["red", "orange", "green", "blue", "violet"],
        }
    ]
};

var myChart = new Chart(document.getElementById('mychart'), {
    type: 'doughnut',
    data: data,
    options: {
        //cutoutPercentage: 50,
        maintainAspectRatio: true,
        responsive: true,
        legend: {
            display: false
        },
        animation: {
            animateScale: true,
            animateRotate: true
        },
    },
    plugins: [{
        id: 'total',
        beforeDraw: function(chart) {
            const width = chart.chart.width;
            const height = chart.chart.height;
            const ctx = chart.chart.ctx;
            ctx.restore();
            const fontSize = (height / 114).toFixed(2);
            ctx.font = fontSize + "em sans-serif";
            ctx.textBaseline = 'middle';
            var total = data.datasets[0].data.reduce(function(previousValue, currentValue, currentIndex, array) {
                return previousValue + currentValue;
            });
            const text = total;
            const textX = Math.round((width - ctx.measureText(text).width) / 2);
            const textY = height / 2;
            ctx.fillText(text, textX, textY);
            ctx.save();
        }
    }]
});

Aquí el código en jsfiddle

Si lo que queremos es utilizar el plugin en varias gráficas, entonces podemos registrar el plugin

Código Javascript (2)

var data = {
    labels: ["Error", "Failure", "Success", "Skip", "Unknown"],
    datasets: [
        {
            data: [10, 5, 20, 2, 1],
            backgroundColor: ["red", "orange", "green", "blue", "violet"],
        }
    ]
};

Chart.Chart.pluginService.register({
    beforeDraw: function(chart) {
        const width = chart.chart.width;
        const height = chart.chart.height;
        const ctx = chart.chart.ctx;
        ctx.restore();
        const fontSize = (height / 114).toFixed(2);
        ctx.font = fontSize + "em sans-serif";
        ctx.textBaseline = 'middle';
        var total = chart.data.datasets[0].data.reduce(function(previousValue, currentValue, currentIndex, array) {
                return previousValue + currentValue;
        });
        const text = total;
        const textX = Math.round((width - ctx.measureText(text).width) / 2);
        const textY = height / 2;
        ctx.fillText(text, textX, textY);
        ctx.save();
    },
});

var myChart = new Chart(document.getElementById('mychart'), {
    type: 'doughnut',
    data: data,
    options: {
        //cutoutPercentage: 50,
        maintainAspectRatio: true,
        responsive: true,
        legend: {
            display: false
        },
        animation: {
            animateScale: true,
            animateRotate: true
        },
    }
});

Aquí el código en jsfiddle




Tecnologia

Bootstrap: cómo agregar estado checked a los elementos de un menu dropdown


A continuación te muestro cómo agregar estado checked a los elementos de un menu dropdown de Bootstrap

Bootstrap es un framework Open Source creado por Twitter que facilita el diseño web. En la lista de componentes facilitados por este genial framework tenemos el dropdown. Un dropdown permite mostrar una lista de opciones en un desplegable. El problema es que bootstrap no permite indicar si una opcion de la lista está checked (activada) o unchecked (desactivada). Para conseguir esto por nuestra cuenta vamos a necesitar un poco de css y javascript:

  • La clase dropdown-item-checked añade un símbolo ‘✓’ a la izquierda de la opción, esto se consigue con CSS.
  • Con HTML asociamos cada una de las opciones del dropdown a la clase option que nos servirá para capturar el evento click y añadimos la clase dropdown-item-checked a las opciones que queremos a checked por defecto.
  • Javascript captura el evento click sobre las opciones y conmuta la clase dropdown-item-checked de la opcion sobre la que hemos hecho click. Cuando la opción no tiene la clase dropdown-item-checked el símbolo ‘✓’ desaparece y viceversa, cuando la opción tiene la clase dropdown-item-checked el símbolo ‘✓’ aparece de nuevo.

Código HTML

<div class="btn-toolbar">
  <div class="input-group">
    <div class="input-group-btn">
      <button type="button" class="btn btn-default" data-toggle="dropdown">
        <span class="caret"></span>
      </button>
      <ul class="dropdown-menu" id="menu">
        <li><a href="#" id="option-one" class="option dropdown-item-checked">My option one</a></li>
        <li><a href="#" id="option-two" class="option">My option two</a></li>
        <li><a href="#" id="option-three" class="option dropdown-item-checked">My option three</a></li>
        <li role="separator" class="divider"></li>
        <li><a href="#" id="option-five" class="option">My option five</a></li>
      </ul>
    </div>
  </div>
</div>

Código CSS

.dropdown-item-checked::before {
   position: absolute;
   left: .4rem;
   content: '✓';
   font-weight: 600;
}

Código Javascript

$(".option").click(function(event){
  event.preventDefault();
  var id = $(this).attr('id');
  $(this).toggleClass("dropdown-item-checked");
  var isChecked = $(this).hasClass("dropdown-item-checked");
  if (id == 'option-one') {
   if (isChecked) {
     // bla bla bla 
     }
  } else if (id == 'option-two') {
  // bla bla bla
  } else if (id == 'option-three') {
  // bla bla bla
  } else if (id == 'option-four') {
  // bla bla bla
  }
});

Aqui el código en jsfiddle




Tecnologia

Puesta en marcha y configuracion Wifi de Orange PI Zero


Orange PI Zero (OPI) es un mini ordenador de 7 euros que funciona con Android, Ubuntu, Debian. Utiliza el AllWinner H2 SoC y tiene 256MB/512MB DDR3 SDRAM

Puesta en marcha y configuración Wifi de una Orange PI Zero

Paso 1: Instalar SO

1. Descargar de armbian la ultima versión estable del SO para la OPI. Me recomiendan Ubuntu Xenial server legacy kernel como versión solo por linea de comandos o la Ubuntu Xenial desktop legacy kernel si necesitamos desktop.

La OPI Zero no dispone de salida HDMI. Pero dispone de salida de video compuesto. Dos opciones. Puedes adquirir la placa de expansión para la OPI Zero:

expboard

O bien fabricarte uno casero y mediante un adaptador RCA conectar la OPI a un monitor o a una TV:

rca_opi

2. Descargar un instalador para instalar el SO en la tarjeta SD. Yo recomiendo bajarse la versión portable que es standalone y por lo tanto no instala nada en el PC. No preocuparse si Windows no reconoce la tarjeta SD una vez que etcher ha instalado el SO.

etcher

3. Opcional. Si etcher no reconoce la tarjeta micro SD, intenta formatearla a ver si hay suerte. Sigue las instrucciones de como formatear una tarjeta sd (para linux):

  1. Conectar la tarjeta micro SD
  2. Identificar nuestra tarjeta (por ejemplo sdc)
    > lsblk
    ... o bien ...
    > fdisk -l
    
  3. Crear partición (por ejemplo sdc)
    > sudo parted /dev/sdc
    
  4. Introducir contraseña de root
  5. Crear etiqueta
    > mklabel msdos
    
  6. Crear partición única
    > mkpart primary fat32 1MiB 100%
    
  7. Salir
    > quit
    

Paso 2: Configurar WIFI

1. Conectar Orange PI Zero (OPI) al router mediante cable ethernet
2. Enchufar un cargador de smartphone de 5V y 2A (recomendado) al OPI
3. Esperar unos minutos, se tiene que encender una luz verde en la placa y una luz roja debe parpadear
4. Averiguar IP asignada al OPI. Por ejemplo con colasoft MAC scanner o desde la consola mediante un PING a la IP de broadcast (192.168.1.255)
colasoft
5. Conectarse mediante SSH al OPI. Por ejemplo con MobaXterm user: root / password: 1234
Puesta en marcha y configuracion Wifi de Orange PI Zero
6. Nos pide que cambiemos el password del usuario root. Lo hacemos.
7. Ahora nos pide crear un usuario para el trabajo diario. Lo hacemos.
8. Rebotamos y esperamos 1 minuto

> reboot

9. Actualizar el sistema (este paso puede tardar bastante y es opcional)
> sudo apt-get update
> sudo apt-get upgrade

10. Configurar wifi con nmtui
> nmtui

11. En el menu seleccionar “activate a connection”
tui activate connection
12. Elegimos el SSID (el nombre de tu wifi) que nos interese
13. Introducimos la contraseña
14. Editamos la conexión para que la IP asignada al OPI sea siempre fija y así no tener que averiguar la IP asignada cada vez que necesitemos conectarnos por terminal al OPI.
Puesta en marcha y configuracion Wifi de Orange PI Zero
15. Para activar el wifi al arranque, editar el archivo /etc/rc.local y añadir la línea ‘nmtui connect
> nano /etc/rc.local

16. Reiniciar (reboot) y retirar el cable de red. Al volver a encenderse, la OPI debería funcionar por wifi.




Tecnologia

Validar un XML mediante Notepad++


Para validar un XML con el Notepad++ primero necesitamos instalar el plugin «XML Tools». Que se puede instalar desde el plugin manager.

El XML necesita de dos tags para indicar el XSD requerido para la validación.

<?xml version="1.0" encoding="UTF-8" ?>
<mycars xsi:schemaLocation="mycars.xsd" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <car>
    <name>ford</name>
    <color>red</color>
  </car>
  <car>
    <name>seat</name>
    <color>green</color>
  </car>
</mycars>

Una vez abierto el XML podemos validar haciendo click en «plugins->XML Tools->validate now»

Validar un XML mediante Notepad++

Si la validación es exitosa aparecerá un mensaje como este o en su defecto un mensaje con los errores detectados:

Validar un XML mediante Notepad++

Si el validador no encuentra el XSD especificado en xsi:schemaLocation apacerá un mensaje de este estilo:

Validar un XML mediante Notepad++

Si sucede esto o bien corregimos la ruta o bien eliminamos xsi:schemaLocation. Ahora el validador nos preguntará la localización del XSD:

<?xml version="1.0" encoding="UTF-8" ?>
<mycars xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <car>
    <name>ford</name>
    <color>red</color>
  </car>
  <car>
    <name>seat</name>
    <color>green</color>
  </car>
</mycars>

Validar un XML mediante Notepad++