3ENGINE

Programación y otros cachivaches

Archivo

Página 3/104

Tecnologia

Como habilitar SSH en Ubuntu 20.04


Definición de SSH

Secure Shell (SSH), es un protocolo de administración remota que permite a los usuarios controlar sus equipos remotamente a través de un mecanismo de autenticación.

Habilitar el servicio SSH en Ubuntu 20.04

Para habilitar SSH necesitamos ejecutar el siguiente comando:

sudo apt-get install ssh

Para verificar que se instalo y habilitó correctamente el servicio ejecuta el siguiente comando

systemctl status ssh.service

Ahora que tienes habilitado SSH en tu equipo, para conectarte remotamente usaremos el comando ssh. Te dejo alguna de las combinaciones mas comunes:

ssh hostname
ssh 192.168.1.10
ssh username@hostname
ssh username@192.168.1.10
ssh hostname -p 24

Otra opción es instalar un cliente SSH como por ejemplo mobaxterm

Extra: cambiar el puerto SSH que viene por defecto

Por defecto el puerto SSH es el puerto 22. Si necesitas cambiarlo, edita el fichero /etc/ssh/sshd_config




Tecnologia

Configurar acentos con teclado en Inglés en Ubuntu 20.02


Mi viejo portátil

Tengo un antiguo Lenovo Thinkpad X220 que adquirí de segunda mano hace unos años. Ahora he decido cambiarle el sistema operativo original a un Ubuntu 20.04 (Focal Fossa). Es un ordenador que tiene mas de 10 años, pero sigue siendo una maravilla y el cambio a Ubuntu le ha sentado fenomenal.

Lenovo ThinkPad X220

La única pega es que el teclado esta en inglés y es bastante molesto no poder insertar los acentos ni las letras como la ñ.

Como activar los acentos en un teclado inglés

Nos vamos a Configuracion > Region e idioma > Anadir fuente de entrada, seleccionamos Inglés (Estados Unidos) y añadimos la opción Inglés (EE.UU. internacional con teclas muertas)

Si tienes mas de una fuente de entrada, no olvides activar la nueva fuente de entrada Inglés (EE.UU. internacional con teclas muertas)

Ahora podrás colocar acentos y ñ en Ubuntu con las siguientes combinaciones de teclas

á  ==> AltGr + a
é  ==> AltGr + e
í  ==> AltGr + i
ó  ==> AltGr + o
ú  ==> AltGr + u
ü  ==> Mayusculas + ' + u
ñ  ==> AltGr + n



Tecnologia

Cómo imprimir una lista de forma más agradable en Python por línea de comandos


A menudo en Python necesitamos imprimir una lista por la línea de comandos. La manera mas habitual y sencilla es imprimir los elementos de la lista separados por comas. Por ejemplo:

Código

fruit_list = ['Albaricoque', 'Cereza', 'Ciruela', 'Higo', 'Kaki', 'Manzana', 'Melocoton', 'Nectarina',
              'Nispero', 'Pera', 'Uva', 'Aguacate', 'Carambola', 'Chirimoya', 'Coco', 'Datil', 'Fresa',
              'Fruta de la pasion', 'Kiwi', 'Litchi', 'Mango', 'Papaya', 'Platano', 'Grosella negra']

print ','.join(fruit_list)

Resultado

Aguacate, Albaricoque, Carambola, Cereza, Chirimoya, Ciruela,.....

Pero yo encuentro que no es muy legible para el usuario. Voy a dejar aquí una pequeña función que imprime por línea de comandos la lista formateada en columnas, ordenando los elementos alfabéticamente. A la función se le pasa por parámetro la lista (obvio) y el número de columnas que deseas. Como parámetro opcional (con un valor por defecto de 2) se puede indicar el espacio entre columnas. Para un ajuste óptimo, la función calcula el espacio que necesita para cada una de las columnas.

Código

def print_sorted_list(data, columns, gap=2):
    if data:
        gap = 2
        ljusts = {}
        for count, item in enumerate(sorted(data), 1):
            column = count % columns
            ljusts[column] = len(item) if (column not in ljusts) else max(ljusts[column], len(item))

        for count, item in enumerate(sorted(data), 1):
            print item.ljust(ljusts[count % columns] + gap),
            if (count % columns == 0) or (count == len(data)):
                print

Demo

fruit_list = ['Albaricoque', 'Cereza', 'Ciruela', 'Higo', 'Kaki', 'Manzana', 'Melocoton', 'Nectarina',
              'Nispero', 'Pera', 'Uva', 'Aguacate', 'Carambola', 'Chirimoya', 'Coco', 'Datil', 'Fresa',
              'Fruta de la pasion', 'Kiwi', 'Litchi', 'Mango', 'Papaya', 'Platano', 'Grosella negra']

print_sorted_list(fruit_list, columns=3)

Resultado

Aguacate             Albaricoque      Carambola
Cereza               Chirimoya        Ciruela
Coco                 Datil            Fresa
Fruta de la pasion   Grosella negra   Higo
Kaki                 Kiwi             Litchi
Mango                Manzana          Melocoton
Nectarina            Nispero          Papaya
Pera                 Platano          Uva

Saludos.




Tecnologia

Chart.js: grafica de tipo donut con múltiples anillos


En un artículo anterior expliqué cómo añadir texto dentro de una grafica de tipo donut. Hoy te voy a mostrar cómo crear una gráfica tipo donut con múltiples anillos.

Extra! tambien veremos cómo modificar la información que aparece al pasar el ratón por encima de cada uno de los datos de la gŕafica.

Básicamente tenemos que declarar varios conjuntos de datos, donde cada conjunto de datos es un anillo. Hasta aqui todo bien. Si queremos mostrar una etiqueta «personalizada» para cada uno de los datos, tenemos que añadir las etiquetas en cada conjunto de datos y sobreescribir la función encargada de mostrar la información que aparece al pasar el ratón por encima. Ademas, ya de paso, hemos aprovechado para calcular el porcentage.

Código HTML

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

Código Javascript

var data = {
    labels: [],
    datasets: [
        {
            data: [2, 3, 8, 3, 4],
            backgroundColor: ["orange", "red", "green", "violet", "lightgreen"],
            labels: ["naranjas", "mandarinas", "manzanas", "berenjenas", "calabacines"]
        },
        {
            data: [2 + 3 + 8,  3 + 4],
            backgroundColor: ["springgreen", "lightblue"],
            labels: ["frutas", "hortalizas"],
        },
        {
            data: [2 + 3 + 8 + 3 + 4],
            backgroundColor: ["lightgray"],
            labels: ["total"],
        }
    ]
};

var myChart = new Chart(document.getElementById('mychart'), {
    type: 'doughnut',
    data: data,
    options: {
        cutoutPercentage: 20,
        maintainAspectRatio: true,
        responsive: true,
        legend: {
            display: false
        },
        animation: {
            animateScale: true,
            animateRotate: true
        },
        tooltips: {
             /* activa esta funcion si deseas no mostrar alguna de las etiquetas
            filter: function (item, data) {
                if (item.datasetIndex == 1) {
                if (item.index == 1) {
                   return false;
                  }
                }
                return true;
            },
            */            callbacks: {
                label: function(item, data) {
                    // get label and data
                    var labels = data.datasets[item.datasetIndex].labels;
                    var dataset = data.datasets[item.datasetIndex].data;
                    
                    var currentLabel = labels[item.index];
                    var currentValue = dataset[item.index];
                    
                    // calc percentage
                    var total = dataset.reduce(function(previousValue, currentValue, currentIndex, array) {
                        return previousValue + currentValue;
                    });
                    var percentage = ((currentValue/total) * 100);

                    // put label
                    return " " + currentLabel + ": " + currentValue + " (" + percentage.toFixed(1) + "%)";
                     
                }
            }
        },
    }
});

Aqui dejo el jsfiddle