Powerline Docker: Si existe y es fácil de instalar

De la saga peliculera: Powerline: configurandolo para Bash y GNU/Linux (of course) y mi duda si había un segmento para vigilar docker.

Pues si, lo hay y se llama: Powerline Docker

Y para instalarlo, primero tienes que tener instalado el Powerline (revisa el anterior link de arriba) y después instalarlo con:

$ pip install powerline-docker

Y después la coña marinera de añadir el juego de colores…debería ser distinto en plan cargarlo de un fichero que venga adjunto al plugin.

Añadir a:

/home/<usuario>/.config/powerline/colorschemes/default.json

    "docker":                    { "fg": "gray8",           "bg": "darkestblue", "attrs": [] },
    "docker_running":            { "fg": "green",           "bg": "darkestblue", "attrs": [] },
    "docker_paused":             { "fg": "brightestorange", "bg": "darkestblue", "attrs": [] },
    "docker_exited":             { "fg": "brightred",       "bg": "darkestblue", "attrs": [] },
    "docker_restarting":         { "fg": "gray10",          "bg": "darkestblue", "attrs": [] },
    "docker:divider":            { "fg": "gray4",           "bg": "darkestblue", "attrs": [] }

Añadir el segmento a vuestro fichero de configuración de shell:

{
	"function": "powerline_docker.docker",
	"priority": 30
},

Y después el típico replace del demonio:

$ powerline-daemon --replace

Y ya esta:

Y os saldrá el emoji de la ballenita con el contador de contenedores en funcionamiento en mi caso solo 1 y 13 contenedores parados.

Por cierto las frutitas que veis es un segmento que he hecho.

Powerline: configurandolo para Bash y GNU/Linux (of course)

No tengo tiempo para escribir, y estoy hablando del famoso powerline que ha habido mucho artículo en la blogosfera hispana estas últimas semanas.

Y paso como con SQLite la gente mucho hablar, que si tal que si cual, pero enseñame la mandanga, porque puedo hablar del espíritu de la gominola y pero si no me he manchado las manos es como ser «entrenador de fútbol de barra de bar», y tengo que reconocer que SQLite ha mejorado pero por ejemplo no trae comprobación de tipos por defecto y aquí te lo explicaba en Domesticando SQLite.

Hace unos años un excompa de curro que por desgracia usaba Apple, nadie es perfecto, puede que ya haya gente nativa digital en el mundo libre, pero muchos hemos usado cosas asquerosas como m$-win98 y andabas que si cygwin, dev c++ y al final decías «¡Que cojones! ¡¡¡Vamos a ser serios y valientes y ni particionar disco duro, ni ostias, todo para GNU/Linux!!!» Y pasado unos meses ya estas siendo libre. En mi caso la última vez que hice el gilipollas fue con WinXP haya por 2004, después, ya los discos duros están eticamente configurados.

Pues lo lamentable de los maqueros, es que no se si por secta o por gilipollez parecida a un adolescente que se gasta un pastizal en una zapatillas de marca o unos vaqueros (en mis tiempos mozos eso pasaba), o por economía porque tiene que ser muy vergonzoso gastarte un pastizal en portátil que le cambias el sistema operativo y ya no es elitista y encima ves que va mejor y que podrías haberte gastado menos dinero.

Pero bueno esta gente intenta acercarse a como vivimos bien la gente en GNU/Linux, pero sin dar el paso, y este excompa me enseño el rollito de que usaba mucho la terminal y tenia un invento que no se si sería powerline o algo parecido.

Pasaron los años. Y eso la blogosfera hispana empezaron a hablar de Powerline.

Pensé, voy a ponerlo y catástrofe, no funciona bien. Y a partir de este punto os voy a contar la mandanga de Powerline y como ponerlo rechulon y útil.

¿Qué es el powerline?: Es un script python para tener una linea de comandos hipervitaminada. Pasamos de:

A esto:

También se puede usar como barra de aplicaciones en I3 hasta barra de estado para Vim, entre otros. Pero en este articulo nos centramos en la shell de toda la vida.

El powerline se pueden configurar zonas/lados, en una shell típica tienes el prompt a la derecha. Pero el powerline soporta derecha, izquierda e incluso arriba.

Malas noticias, Bash no soporta lado derecho, solo lado izquierdo.

Instalar Powerline, puedes o instalarlo desde pip pero es mas recomendable (aunque no sera la última versión) instalarlo desde el gestor de paquetes del GNU/Linux en mi caso LinuxMint:

$ sudo apt install powerline fonts-powerline

Para activarlo en Bash tiene su miga porque tienes que editar tu fichero de configuración de usuario en:

/home/<usuario>/.bashrc

Añades al final el siguiente trozo de código que le dice que lance el demonio de powerline y ejecute el powerline

# Powerline
if [ -f /usr/share/powerline/bindings/bash/powerline.sh ]; then
	powerline-daemon -q
	POWERLINE_BASH_CONTINUATION=1
	POWERLINE_BASH_SELECT=1
	source /usr/share/powerline/bindings/bash/powerline.sh
fi

Y lo mejor salir y entrar de la terminal para que cargue la nueva configuración.

La configuración de Powerline por defecto es chula, pero se le puede dar mas cera, en la documentación dice que merguea el fichero de configuración por defecto del sistema con la que tengas personal en tu usuario ¡¡MENTIRA!! . La que tengas en personal te la machaca, sobre todo los segmentos. Los segmentos son los trozitos del separados del prompt. Solución al machaque insensible, pues copiarte el fichero de configuración del sistema y modificarlo a tu gusto.

Entonces tienes que hacer:

$ cd ~
$ mkdir -p .config/powerline/themes/shell/
$ cp /usr/share/powerline/config_files/themes/shell/default.json /home/<usuario>/.config/powerline/themes/shell/
$ <editor_favorito> /usr/share/powerline/config_files/themes/shell/default.json

Hay plugins para Powerline yo uso powerline-gitstatus, después os cuento como se instala, pero antes os muestro mi configuración, os explico cosas y tal:

{
	"segments": {
		"left": [
			{
				"function": "powerline.segments.common.time.date",
				"priority": 20,
                "args": {
					"format": "%H:%M"
				}
			},
			{
				"function": "powerline.segments.shell.mode"
			},
			{
				"function": "powerline.segments.common.net.hostname",
				"priority": 10
			},
			{
				"function": "powerline.segments.common.env.user",
				"priority": 30
			},
			{
				"function": "powerline.segments.common.env.virtualenv",
				"priority": 50
			},
			{
				"function": "powerline.segments.shell.cwd",
				"priority": 10
			},
			{
                "function": "powerline_gitstatus.gitstatus",
                "priority": 90
            },
            {
				"function": "powerline.segments.shell.jobnum",
				"priority": 20
			},
			{
				"function": "powerline.segments.shell.last_status",
				"priority": 20
			}
		]
	}
}

«Cosas» de la configuración:

  • Es un fichero json
  • Si necesitas saber si la configuración esta bien, Powerline te da un comando para probar si la configuración (usando la de sistema y la tuya a la vez que es como sera) es:
    $ powerline-lint

    Y te devolvera errores o mejor ninguno.

  • Como estamos en Bash, solo usamos el subarray «left«.
  • El orden es de arriba abajo, y en la pantalla saldran de izquierda a derecha.
  • Cada hash, dict, array asociativo o platanos con chocolate (aunque mas o menos se esta poniendo de moda lo de dict) es un segmento (un trozito del prompt), y es:
    • function: el segmento a poner, podeis ver que son en plan modulos de python, «modulo.submodulo.submodulo.funcion». Y por ver los que hay (hay muchos muchos y muy curiosos en el core y como plugin, que si batería, que si carga de cpu, metereología….) :
      • powerline.segments.common.time.date: segmento para poner fecha y tiempo. Si ya se que en el escritorio, en el movil y puede que en la muñeca tienes un reloj, pero es muy útil para ver a si a ojo cuando lanzaste un comando o cuanto tardo un comando en terminar.
      • powerline.segments.shell.mode: el modo de la shell, si esta en el normal no aparece.
      • powerline.segments.common.net.hostname: el nombre la maquina, solo sale si te conectas a ti mismo por ssh.
      • powerline.segments.common.env.user: el usuario que estas, junto con el anterior poco útil.
      • powerline.segments.common.env.virtualenv: si estas usando virtualenv te pone el nombre. En mi caso tampoco muy útil, todos estos inventos (venv, chroot…) con el invento de docker es el que mas juegas.
      • powerline.segments.shell.cwd: el path donde estas trabajando, vamos como el prompt normal (creo que se puede vitaminar con la configuración).
      • powerline_gitstatus.gitstatus: este es uno que me hizo ponerme serio con powerline, en el segmento te muestra muy resumido mucha información si el directorio es un proyecto git, desde la rama que estas, hasta los commits que tienes pendientes de subir, ficheros añadidos y sin añadir al siguiente commit. Este viene de un plugin externo, después os comento como se instala.
      • powerline.segments.shell.jobnum: no uso mucho el rollo de mandar trabajos a background, pero cuando lo uso mola saber cuando han terminado la ejecución, muestra en amarillo un contador de trabajos en background. También útil cuando se te escapa un & y no te has dado cuenta que has mandado a background una ejecución.
      • powerline.segments.shell.last_status: otro muy útil, ya sabéis que en GNU/Linux cualquier comando que lances devuelve 0 si ha terminado correctamente y un numero distinto si mal. Este segmento solo aparece cuando el ultimo comando ha salido mal y en un rojo alarma, muy útil porque hay comando que no devuelven ninguna salida de texto pero si petan.
    • priority: un valor numerico que dice la prioridad del segmento en mostrarse, se ocultan primero los que tienen los numeros mas grandes, cuando:
      • la linea de prompt es mas grande que el ancho de ventana/pantalla.
      • cuando supera un espacio para dejar el escribir al usuario, en principio se puede configurar pero no funciona creo que apesta a bug.
    • args: es un dict json donde pasarle parametros al segmento para personalizarlo, el único que tengo configurado yo es el del tiempo que le he puesto solo para mostrarme las horas y minutos, hay que mirar en la documentación del segmento que parametros acepta:
      "args": {
      	"format": "%H:%M"
      }

Y ya esta, no es muy complicado, después hay ficheros de configuración de powerline o para separar la configuración de los segmentos de la configuración de diseño, también hay un fichero de configuración de colores, pero con los que vienen por defecto a mi me sobran.

Aunque autocarga la configuración cada vez que se cambia (un hotreloader como dicen los modernos), algunas veces no lo hace y puedes forzar la recarga con:

$ powerline-daemon --replace

Instalar Powerline-gitstatus ,tiene su miga porque no es solo instalarlo hay que meterle configuración de color por defecto si no peta.

Instalarlo es:

$ pip3 install powerline-gitstatus

Y tienes que hacerte los directorios de las configuraciones de colores:

$ mkdir -p /home/<usuario>/.config/powerline/colorschemes/shell

Y después copiar los ficheros (ya sabes que el mergeo no funciona bien) de por defecto del sistema. El solarized no se si es un cargocult pero a mi me petaba el powerline-gitstatus aunque no usara ese esquema de colores, total no molesta mucho:

$ cp /usr/share/powerline/config_files/colorschemes/shell/default.json /home/<usuario>/.config/powerline/colorschemes
/shell
$ cp /usr/share/powerline/config_files/colorschemes/shell/solarized.json /home/<usuario>/.config/powerline/colorschemes
/shell

Y añadir el juego de colores de powerline-gitstatus, por no liar os pego los dos ficheros mios, pero basicamente son los valores para powerline-gitstatus:

default.json

{
	"name": "Default color scheme for shell prompts",
	"groups": {
		"hostname":         { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
		"environment":      { "fg": "white", "bg": "darkestgreen", "attrs": [] },
		"mode":             { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
		"attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] },
	"gitstatus":                 { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch":          { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_clean":    { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_dirty":    { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_detached": { "fg": "mediumpurple", "bg": "gray2", "attrs": [] },
    "gitstatus_behind":          { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_ahead":           { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_staged":          { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_unmerged":        { "fg": "brightred", "bg": "gray2", "attrs": [] },
    "gitstatus_changed":         { "fg": "mediumorange", "bg": "gray2", "attrs": [] },
    "gitstatus_untracked":       { "fg": "brightestorange", "bg": "gray2", "attrs": [] },
    "gitstatus_stashed":         { "fg": "darkblue", "bg": "gray2", "attrs": [] },
    "gitstatus:divider":         { "fg": "gray8", "bg": "gray2", "attrs": [] }
	},
	"mode_translations": {
		"vicmd": {
			"groups": {
				"mode": {"fg": "darkestcyan", "bg": "white", "attrs": ["bold"]}
			}
		}
	}
}

solarized.json

{
	"name": "Solarized dark for shell",
	"groups": {
		"mode": { "fg": "solarized:base3", "bg": "solarized:green", "attrs": ["bold"] },
        	"gitstatus":                 { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch":          { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_clean":    { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_dirty":    { "fg": "gray8", "bg": "gray2", "attrs": [] },
    "gitstatus_branch_detached": { "fg": "mediumpurple", "bg": "gray2", "attrs": [] },
    "gitstatus_behind":          { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_ahead":           { "fg": "gray10", "bg": "gray2", "attrs": [] },
    "gitstatus_staged":          { "fg": "green", "bg": "gray2", "attrs": [] },
    "gitstatus_unmerged":        { "fg": "brightred", "bg": "gray2", "attrs": [] },
    "gitstatus_changed":         { "fg": "mediumorange", "bg": "gray2", "attrs": [] },
    "gitstatus_untracked":       { "fg": "brightestorange", "bg": "gray2", "attrs": [] },
    "gitstatus_stashed":         { "fg": "darkblue", "bg": "gray2", "attrs": [] },
    "gitstatus:divider":         { "fg": "gray8", "bg": "gray2", "attrs": [] }
	},
	"mode_translations": {
		"vicmd": {
			"groups": {
				"mode": { "fg": "solarized:base3", "bg": "solarized:blue", "attrs": ["bold"] }
			}
		}
	}
}

Y ya sabéis si un restart del powerline-daemon y ya esta.

Y bueno por finalizar el articulo, os pongo los segmentos que echo en falta y que creo que no existen:

  • Un segmento que muestre el estado del watson es un tracker/contador de tiempo desde terminal (escrito en python) para en el curro cuando te preguntan en que has estado trabajando decir pues «he estado X horas mierda que necesita este cliente» yo antes usaba Hamster Applet pero se han metido en una rescritura del proyecto y se han cargado el soporte para cualquier cosa que no sea Gnome3.
  • Un segmento que muestre estado del docker (actualización: si hay…os debo un articulo), rollo contenedores levantados, caidos y alguna cosa mas.
  • Un segmento que te avise que el directorio es un montaje sshfs o así.
  • Un segmento que muestre un cita rollo el fortune.
  • Un segmento que muestre un string desde un api web o así, para enganchar resultados deportivos, valores de criptomonedas o votos en meneame.
  • Lo mismo pero pasando como argumento un comando a ejecutar.
  • La tragaperras que se hizo años para elbinario .

Y falta un awesome_list de powerline en el m$-github.

Domesticando SQLite

Le tengo cariño a SQLite aunque no pase mucho con el, ni siquiera los findes vamos al parque a echar pan duro a los patos. Eso de tener una base de datos embebida en cualquier programa que piques o una base de datos tirando de un fichero y un cli es mágico en esta época de microservicios y apis y miles de capas.

Me recuerda también a Lua otro invento que también le tengo cariño pero menos tiempo paso con el, porque este es un lenguaje de programación para añadirlo a tus proyectos y tener un punto abierto para que la gente extienda y haga locuras con tu proyecto en forma de extensiones, plugins, mods…desde un entorno mas o menos seguro.

Pues parece que se ha vuelto a poner de moda SQLite, pero los tutoriales que he encontrado por ahí…y no quiero señalar a nadie, hablan de como instalarlo y lo bonito que es y tal.

Pero nadie habla de lo malo de SQLite, algo que descubres cuando pasas tiempo con el…y es que parece pregunta típica y tópica de entrevista de trabajo, «Del lenguaje PliPli….dime que cosas te gustan y que cosas no te gustan.».

Y una cosa que nadie trata es que SQLite es muy espartano en relación a un PostgreSQL o un MariaDB (MySQL como Belalugosi is dead), como simil o metafora, es como pasar de un Python o un lenguaje de muy alto nivel a ensamblador.

Ya que estamos hablando de Bela Lugosi is Dead, la mejor adaptación del tema original (salvo que Marilyn Manson haga una y sea decente porque últimamente el chico anda de capa baja) de Opera IX:

SQLite no trae chequeo de tipos de columnas

 

Puedes meter un entero en una columna de texto y al revés y se queda tan pancho el SQLite y no es un bug, aquí tenéis la explicación.: SQLite lets me insert a string into a database column of type integer!

Pero se puede arreglar con:

create table test (
   id integer check(typeof(id) = 'integer'),
   name "text" check(typeof("text") = 'text')
);

Y aquí, se acaba la lista de cosas….porque iba a hablar de las foreing keys, pero mira que soy perro viejo que recuerdo que hace unos años no tenía y he mirado se introdujeron en el 2009, espero que mi memoria no me falle y es porque no estaba esa versión en las distros hasta mas tarde.

Y por cierto otra cosa que me encanta de SQLite que cuando hace poco años, los SJW y demás calaña (pero en serio que calaña de gente, no hace nada mas que intoxicar los colectivos en vez de ayudar y si quiere poner su granito de arena de su ideología) se pusieron serios con mierdas de códigos de conducta, el creador D. Richard Hipp en vez de bajarse los pantalones, pues dijo «queréis código conducta, pues toma código conducta» y adopto para el proyecto las reglas de los templarios del siglo VI.

MAN, se que lo odias. Hay alternativas al man

Las páginas manual de Unix (claro esta GNU/Linux también), son oscas y duras, ayudan pero son como el viejo sabio profesor de artes marciales vas a maldecirlo pero al final vas ha seguir el camino de kungfu y transcender y luchar como Neo en Matrix sin ni siquiera mirar al contrincante.

Historias de abuelo cebolleta digital

Como siempre queridos niños acercaros aquí a la chimenea junto al abuelo cebolleta, que os voy a contar un cuento. En mis tiempos cuando era un niño pequeño e intentaba hacer mis cosillas en un ZX Spectrum +2A (con 128Kb de RAM y se podía hacer de todo), pues en aquellos tiempos sin internet ni nada, solo tenías:

  • el manual del ordenador, que en aquellos tiempos te daban en papel un manual del ordenador, y era un tocho de manual de 100 y pico páginas. Era en blanco y negro y plagado de textos, pero oye te explicaba como programar en Basic. Era bastante espartano. Y al final del libro un par de listados en Basic de juegos o programas de contabilidad.
  • bibliotecas de barrio, donde no se porque…pero tenían en mi caso libros de programación para niños. De vez en cuando me pregunto quién pensó en comprar libros de programación para niños en una biblioteca de barrio obrero del extrarradio. Era una biblioteca que pertenecía a la obra social de Caja Salamanca y Soria (obra social que era obligada por ley). Aun recuerdo el pasillo oscuro con estanterías a los lados y los libros de programación para niños en un rinconcito, y como niños no había internet, solo sabías que había mas libros de una colección por la contra portada, e incluso descubrías que había otros ordenadores ademas de nuestro querido Spectrum y el amigo raro del Amstrad (porque reconozcamoslo en aquella época fue el Spectrum en España), había ordenadores como C64, el Dragon 64. Y aprendías a base de escribir listados de código en basic y audazmente cambiar cosas y ver que pasaba.

Cómo usar el man

Antes de ver alternativas al MAN, vamos a ver como usar MAN por si acaso ayuda. Recordar que el Man no necesita internet para nada, puedes estar después de una guerra nuclear, encerrado en un bunker soviético sobreviviendo al invierno nuclear y si tenéis un ordenador con GNU/Linux y tenéis que buscar como hackear un t1000 si podréis….con un Atari Porfolio…

Para ver el Man de un commando en GNU/Linux:

$ man <comando>

Las ayudas o mejor dicho páginas de man tienen el siguiente formato o estructura (hay raras excepciones):

  • Nombre: nombre y descripción corta.
  • Sinopsis: ejemplos muy cortos de como se usa.
  • Descripción: descripción de como se usa, mas o menos larga.
  • Opciones: lista de parámetros posibles.
  • Copyright: quien hizo en comando, licencia y tal.
  • Errores: sección que describe errores conocidos o como reportar errores.
  • Véase también: lista otros comandos parecidos o relacionados.
  • Notas: sección de notas.

Para moverse y usar el Man (es parecido a Vi/Vim)

  • con la flecha arriba y flecha abajo, hacer scroll por el texto.
  • AvPág y RePág para desplazarte como bloques de páginas.
  • G para ir al final del archivo (páginas se llaman) Man.
  • g para ir al principio del página Man.
  • q para salir del man.
  • / para entrar en modo busqueda, entonces abajo te aparece una barra donde escribir lo que buscas.
  • n para buscar el siguiente
  • N para buscar el anterior
  • q para salir del modo buscar

Si no te apañas en la terminal…golpe de remo…bueno siempre es duro esa pantalla de fondo negro y letras blancas, pues tienes unos ruedines para el man que es verlos en navegador con:

$ sudo apt-get install groff

Y después con:

$ man -H <comando>

Si se queja de que no encuentra navegador puedes forzarlo con:

$ man --html=<navegador> <comando>

¿Qué son esos números en plan chmod(2) que salén en las páginas man algunas veces?

Pues son otras páginas sobre un comando (si se usa por ejemplo en C):
Sección – Descripción

  1. Comandos Generales
  2. Llamadas al sistema
  3. Biblioteca C de funciones
  4. Ficheros especiales (normalmente dispositivos, que se pueden encontrar en /dev) y drivers
  5. Formatos de fichero y convenciones
  6. Juegos y salvapantallas
  7. Miscelánea
  8. Comandos de administración del sistema y Demonios

Y para abrir por ejemplo chmod(2) es:

$ man 2 chmod

Y finalmente para buscar entre todas la páginas man que hay instaladas, un texto en especial es:

$ man -wK <texto buscar>

Te devuelve una lista de ficheros que cada linea es:

<path_man>/man<num_página>/<nombre_página>.<num_página>.gz

Por ejemplo para:

$ man -wK game

Devuelve una lista larga (en mi caso porque cada programa puede instalar su página de manual), y la última linea mia pone:

/usr/share/man/man7/tc-hfsc.7.gz

Y para abrirlo:

$ man 7 tc-hfsc

Por cierto hay commandos que no tienen binarios en el sistema por ejemplo el cd (que es como una función de bash), si haces:

$ whatis cd
cd: nothing appropriate.

Si haces por ejemplo un:

$ whatis ls
ls (1) - list directory contents

Y para ver ayuda del cd es en la página builtins:

$ man builtins

Alternativas a man

Hay un montón, parece que cada lenguaje moderno se a quedido hacer su própia alternativa…usando su sistema de paquetería, que si python, que si ruby, que si nodejs…

Las voy a dividir en si necesitas internet o no (una vez instaladas para instalarlas sera necesario internet), por si estas en un bunker soviético sobreviviendo al desastre nuclear por culpa del capitalismo e internet no existe…quiza packet rádio sigue ahí.

Por cierto un truco para comprobar si un comando necesita internet es usar

unshare -r -n <comando>

Alternativas de ayuda en GNU/Linux con internet

Bropages

Son listados de ejemplos de comandos, porque algunas veces se aprende mas fácilmente viendo ejemplos que leyendo tochazos de documentación. Además incluso puedes votar los ejemplos. El nombre de bro es por el rollo ya de hace unos años de la invasión por chulos de discoteca en las carreras de ingenieria dejando a parte a la fauna friki y que se les llamo brogramers gente mas interesada en el gimnasio que en el dado de 20 caras.

Esta ayuda se instala con el sistema de paquetes de Ruby, que se llama gem, para instalar gem (en Debian/Ubuntu) es:

$ sudo apt install ruby
$ sudo apt-get install ruby-dev

Y después:

$ sudo gem install bropages

Para usarlo es tán fácil como:

$ bro <comando>

Se pueden botar las chuletas, pero  creo que hay que registrarse.

cheat.sh

Este es curioso porque puede consultarse vía nuestro gran amigo el comando curl como un servicio, pero te lo pinta con colores (que queda todo mas hacker) y todo en terminal. O descargarse un bash que te da una shell para hacer las consultas. Tiene su propio «lenguaje de consultas» por ejemplo:

$ curl cheat.sh/

Devuelve una tabla de ayuda muy vistosa de como funciona cheat.sh .

Te devuelve ejemplos de la llamada de php

$ curl cheat.sh/php

Te devuelve ejemplos de zip.

$ curl cheat.sh/php/zip

Para listar terminos posibles en cada rama que hay se puede hacer con:

$ curl https://cht.sh/:list
$ curl https://cht.sh/php/:list

Ayuda

$ curl https://cht.sh/:help

Incluso por lenguaje

$ curl https://cht.sh/php/:help

También te da un articulo o bigcheatsheet como lo llaman ellos sobre variados temas del lenguaje:

$ curl https://cht.sh/php/:learn

Para buscar en todos los articulos es:

$ curl cheat.sh/~list

Para descargar el bash es tan fácil como:

$ curl https://cht.sh/:cht.sh > ~/bin/cht.sh

Para ejecutar

$ bash curl cheat.sh

Y te da una shell para ir de forma interactiva.

Alternativas de ayuda en GNU/Linux sin internet

Cheat

También devuelve listados de ejemplos de un comando, este se instala con pip el sistema de paquetes de Python. Al no necesitar conexión a internet, los listados de ejemplos se actualizan con cada nueva versión del paquete cheat.

Para instalar pip (para python3) es:

$ sudo apt install python3-pip

Y para instalar cheat es:

$ sudo pip3 install cheat

Para usarlo es realmente fácil con:

$ cheat ls

TLDR

Otra ayuda para comandos en terminal programada en nodejs (javascript) y por lo tanto para instalarla es con su gestor de paquetes npm. También es un listado de ejemplos de comandos como el resto. Su nombre viene «too long didn’t read» en español «demasiado largo; no lo leí». Lo meto en la categoría «sin conexión» pero es no es cierto del todo porque este tiene una cache de ayudas de comandos, que se descarga la primera vez que lo usas y que puedes actualizar de vez en cuando.

Para instalar npm te recomiendo el siguiente link de como instalar npm en Ubuntu/Debian ya que siempre es un poco jaleo de instalar

Y para instalar tldr es:

$ sudo npm install -g tldr

Y usarlo es:

$ tldr <comando>

Y actualizar la cache:

$ tldr --update

Tiene una cosa curiosa como mostrar un commando al azar (por aprender mola) que es así:

$ tldr --random

Incluso lo puedes «pipear» con cowsay y queda una cosa muy hacker y curiosa:

Resumen

El mundo de software libre siempre hay alternativas mas o menos curiosas a todo. Y además se ve que lo estándar es importante, porque las páginas Man ya pronto tendrán 50 años.

Lo cierto, a nivel personal, tengo instaladas todas estas alternativas pero siempre se me olvidan usar.

El software libre ha fracasado

SI

El software libre HA FRACASADO en el mundo.
Te cuento mi experiencia personal, llevo últimamente estos años muchos cambios de empresas y he visto que…

Estuve en una empresa que firmaban proyectos de cinco ceros y seis ceros creo hubo alguno, esta empresa casi el 99% del stack tecnológico era software libre, django, docker, reactjs….los desarrolladores no hacíamos mas que coger los ladrillos de software libre y pegarlos con cemento de lógica de negocio. Pues ahora te preguntaras cuanto era el retorno a los proyectos que vampirizabamos….0 cero patatero. No donaban unos tristes 100€ o así o nos decían «chicos el viernes último de cada mes podéis dedicarlo a colaborar en los proyectos de software libre que tanto dinero nos hacen ganar.».

Y para mas asco, yo era entre los desarrolladores el incomodo rojeras hippy comunista que usaba GNU/Linux y que le asqueaba esta situación, tenia un compañero que no sabía hacer en terminal un triste merge en git porque usaba un blanquito mac y el puto pycharm de los cojones (es el ejemplo de R. Stallman de droga a la puerta del colegio porque la versión «open source» del pycharm es una mierda pinchada en un palo).

Y por lo que he oído por ahí, hay empresas BBVA que tiene forks privados de proyectos libres con mejoras que no devuelven a la comunidad.

Y en la empresa que estoy ahora, poco mas o menos lo mismo, pero para mas sorna, como es de temas GIS, pues ya hasta nos robamos datos libres, en este caso OpenStreetMap, un dump de la BD.
Para mi el software libre, esta en decadencia porque el sistema capitalista lo ha vampirizado, solo hay que ver el fallo de seguridad de Heart Bleed en OpenSSL que todo dios se aprovechaba del proyecto pero solo tenia 1 desarrollador a tiempo completo.
Metafóricamente, me recuerda al tema de la ecología, hace 40 años (y ahora en los países tercermundistas) una fabrica química la construían al lado de un río, se llevaba el agua de gratis con tuberías y la devolvían contaminada y tóxica, hasta que se regulo y se sacaron leyes medioambientales que decían «oiga señor empresario, el agua es un bien común, puede usarla pero tiene que devolverla igual de limpia».
Pues con el software libre deberían salir leyes así, por que no es de recibo que empresas y empresarios se forren de dinero robando al software libre, rollo leyes «si usted se aprovecha de un software libre, tiene que dar cierto % de sus ganancias obligatoriamente al proyecto que vampiriza».

Porque esa es otra, estamos acercándonos a una edad media tecnológica, se esta estancando los avances porque la gente usa y reusa viejos ladrillos y ni siquiera se mejora el molde de esos ladrillos.

Y esto viene en relación a la charleta:


APP DE aNDROID DE wORDPRESS + DESPERTADOR = tINY DESASTRE

Si habéis visto la entrada de Amo /tmp. Es un articulo que tengo a medias de escribir y que por azar de unos dedos dormidos al intentar apagar el despertador, acabo siendo publicado.

De momento ando sin mucho tiempo para escribir, lo siento, a ver si puedo sacar tiempo para escribir.

XoR y NXOr en Python3

Algunas veces necesitas el XOR o el NXOR cuando programas y en mi caso se me ha dado en python.

No sabía si tenía un operador propio, pero parece que no tiene, así que he picado picado una forma de conseguir el XOR, os pego el código:

>>> print("---XOR----")
---XOR----
>>> for i in range(0,4):
...      a, b = list("{:02b}".format(i))
...      a, b = (int(a), int(b))
...      print(a, b, bool(a) is bool(b))
... 
0 0 True
0 1 False
1 0 False
1 1 True
>>> print("---NXOR----")
---NXOR----
>>> for i in range(0,4):
...      a, b = list("{:02b}".format(i))
...      a, b = (int(a), int(b))
...      print(a, b, bool(a) is not bool(b))
... 
0 0 False
0 1 True
1 0 True
1 1 False

El truco esta en castearlo a bool la variable y usar el operador is (para el XOR) y el operador is not (para el NXOR).

MI pasión POR LOS NO JUEGOS

Los que me conocen personalmente saben que me apasionan los juegos, videojuegos y otras formas interactivas de ocio. Y dentro de este rollo, me gustan lo que llamo los «no juegos».
«¿Pero MD que es eso de los «no juegos» ?» Te preguntarás.

Pues si te digo la verdad, no lo se, es como el arte…¿Cuando es algo arte y cuando no?

Pero vamos a viajar en el tiempo…

Aun recuerdo cuando no estaba en el mercado la videoconsola de Nintendo la Wii. Y en un foro de videojuegos español, un pavo (supongo que el típico cani de playstation) escribió extrañado por el frontend nativo de la consola y que el mando parecía un mando a distancia de la televisón que mostraba como canales, y dijo la palabra mágica –¿Qué tiene pensado Nintendo que sea un canal de la tele …y ¿Cómo se juega?…¿Va estar ahí y ya esta? Es que es un «no juego«- .

Es que lo que me apasiona es la «deconstrucción del juego» y quitarle cosas o hacer «recetas raras» con los elementos del juego o juegos para sacar algo que…¿Qué es un juego? ¿Tiene que ser divertido? ¿Tiene que tener duración finita? ¿Tiene que tener un objetivo? ¿Tiene que tener jugadores? ¿Tienen los jugadores saber que están jugando? ¿La vida es un juego y no lo sabemos?

Lo que yo (personalmente, subjetivamente y porque me sale de mis cojones morenos) meto en la categoría de los «no juegos»son:

  • los juegos abstractos, super abstractos
  • los juegos mentales
  • los juegos de programación
  • los juegos raros, super raros
  • los juegos sin reglas
  • Zero player games.

Y algo que tengo claro que no es «no juego»

  • la gamificación, porque es una mierda neoliberal que han inventado para que compitamos los trabajadores (o los estudiantes o las personas bajo otras con poder) usando caramelos, karma, palo y zanahoria.
  • las escape rooms, antes las tenia como no juego, pero ahora ya tienen entidad propia y fuerza para ser un tipo de juego. Además que ultimamente me recuerdan a una versión analógica de las viejas aventuras gráficas.

Listado de «no juegos»:

  • simulaciones psicológicas, rollo celda y tal.
  • fluxx, juego de cartas muy interesante y muy hippy.
  • mil cartas en blanco, otro juego muy parecido al anterior.
  • dvorak, como un 1000 cartas en blanco pero mas serio (no confundir con el teclado).
  • Nomic, he flipado con este juego de mesa y es el que me ha incitado a escribir el articulo, es un juego muy simple en que entra en juego el poder cambiar las reglas por medio de votaciones.
  • Juegos de programación:
    • Core war, un videojuego en que programas virus en ensamblador, del 84 pero muy vivo.
    • Realtime Battle, videojuego libre donde programas en cualquier lenguaje robots para que luchen en una arena.
    • CTF, es básicamente un servidor que se pone para intentar hackearlo y llegar al objetivo.
    • Huevos de pascua en videojuegos y software, secretos ocultos en estos.
    • Progress Quest, El juego de rol que juega solo en linux.
  • Minetest, que le den por donde amargan los pepinos al puñetero Minecraft (vendidos cabrones). Un juego que es como un cajón de arena virtual.
  • Juegos de construcción, como de bloques (no voy a decir marca).
  • Cataclysm DDA, un juego que no tiene objetivo, ni final, tu te pones la razón por la que picarte a jugarlo.
  • el juego, has perdido, ya estas infectado con este virus mental.
  • Había un juego de rol sin master de hace unos años que no recuerdo el nombre e incluso era narrativo y en vivo durante días y hablando con los jugadores por teléfono.
  • los juegos de espías por internet y conspiraciones, en plan usando hasta páginas reales sin que se sepa que hay un juego en marcha. Ver juego ubicuos.

Un vídeo sobre la maldición del Copyright

Que en algún momento de la historia en el planeta los seres humanos la cagamos…que cojones, la estamos cagando continuamente por acción directa (somos nosotros los cabrones) o por acción indirecta (dejamos que la cabrones nos jodan).

Y en el tema del Copyright es lo mismo, es de es esas leyes que un grupo de cabrones nos vino a joder.

Pues ha salido un vídeo muy interesante sobre el copyright, espero que a mis amados y amadas lectores no les vengan nada de lo que cuentan de nuevas:

Lo siento solo es un blog.