Archivo de la categoría: Tutoriales

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.

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).

Como mejorar el funcionamiento del portátil HP Stream 11 (parte 2)

Posts in this series
  1. Como mejorar el funcionamiento del portátil HP Stream 11 (parte 1)
  2. Como mejorar el funcionamiento del portátil HP Stream 11 (parte 2)

Lo primero que hay que hacer en cualquier portátil o sobremesa es poder arrancar un pendrive USB con un instalador de GNU/Linux. Y para eso es necesario dos cosas: un pendrive USB con un instalador de GNU/Linux y un HP Stream 11 que arranque y se deje instalar por USB un GNU/Linux…ya os adelanto que lo primero es mas sencillo que lo segundo.

un pendrive USB con un instalador de GNU/Linux

Hay muchas alternativas para hacer un pendrive USB autoarrancable, por casualidad en uno de los últimos podcast de Birras & Bits (el titulado BYB 2×08 – Los Testigos de Godot ) el que voy a usar en este tutorial es ETCHER porque es muy muy fácil, dice que tiene soporte para Windows…pero asumo que tu lector eres una persona que ya ha pasado al otro lado del espejo y tiene un ordenador a mano con GNU/Linux, y para crear un pendrive USB autoarrancable necesitamos las siguientes cosas:

  • Un pendríve USB de 1 Gb mínimo y limpio o relleno de cosas sin valor, porque aunque no estoy seguro, pero creo que Etcher cuando pone una imagen de un instalador en un pendrive lo formatea.
  • Una ISO de Debian…¿Por qué Debian? Porque es la que voy a usar para este tutorial, pero si seguro que si te apañas con otra distribución, seguro que cambiando cuatro cosas de las recetas puedes hacer lo mismo. Para descargarla podréis en la página oficial en Installing Debian via the Internet y descargáis el link de «Small CDs or USB sticks» amd64. El cual os descargará un fichero .iso con el instalador de Debian.

Etcher viene en formato appimage (link a la wikipedia inglesa) o un tutorial en español en Cómo usar AppImage en GNU/Linux que recuerda mucho a como se instalan y usan los programas en los ordenadores de la manzana envenenada. Es un formato que viene en un solo fichero todo el programa y no necesita librerías extra ni nada, y se puede instalar.

Al ejecutarlo, salen 3 iconazo enormes en la ventana del programa, que son los pasos que hay que ir haciendo para completar el USB autoarrancable. Y se empieza de izquierda a derecha, y se van a ir iluminando según se van haciendo.

  1. Elegir la ISO en tu carpeta de descargas o donde la tengas.
  2. Elegir el pendrive USB enchufado, OJO mira bien que es un pendrive USB y no otro disco duro que tengas enchufado a la vez en el PC…y recuerda que se va formatear por lo que tenlo vacío o lleno de mierda sin importancia…sin fotos de comunión ni nada.
  3. Flashear, en este punto ya guarda en USB la ISO y la prepara para ser autoarrancable. Te pedirá la contraseña de root o sudo para hacerlo.

Mientras quema la imagen en el USB veras una barra de progreso y un tiempo de espera estimado y después chequeara si lo ha copiado bien y finalmente lo desmonta (para sincronizar como dice el señor Eugenio) para después mostrarte en ventana una bonita/hipster imagen de que lo ha completado.

un HP Stream 11 que arranque y se deje instalar por USB un GNU/Linux

Menuda metedura de pata adrede o no…me da que pensar adrede para evitar que la gente entre a la BIOS, pero para conseguir acceder a la BIOS en un HP Stream 11 necesitas un teclado USB externo, porque para entrar al minimenu previo a elegir las opciones como entrar a la BIOS, elegir sistema de arranque…Hay que hacerlo con la tecla ESC que como digo no la coge muy bien, pero con un teclado externo a la primera te la coge.

En mi caso, tenia por casa un teclado inalámbrico USB que uso para el PC de las pelis y las series en el sofá y con ese me he apañado.

Una vez llegas al minimenu tendrás que pulsar F10 como ves en la siguiente imagen:

Y ya en la BIOS hay un par de cosas que hacer:

  • Quitar el asqueroso caballo de troya de Micro$oft llamado Secure Boot: que es en moviendote a la derecha en las pestañas de arriba, comenzando por Main, vas a Security y otra vez a la derecha «System Configuration». Ahí vas para abajo hasta «Boot options» y pulsas intro (o enter como vos lo llames), y ahí esta el satánico «Secure boot» activado vas para abajo hasta resaltar su satánica linea y le das intro y te sale un popup para activar o desactivar…si quieres continuar en el camino de la libertad, desactívalo.
  • En esa misma pantalla activa USB Boot y para mayor facilidad sube al primero la opción de arranque para «USB Diskette on Key/USB Hard Disk» con las teclas F5 para bajar y F6 para subir.
  • Y de propina en la pantalla anterior «System Configuration» activa «Virtualization Technology» que te puede venir bien para cosas como XEN o Virtualbox para algún apaño.

Y para guardar la configuración de la BIOS ve a la pestaña de arriba llamada Exit y en la pantalla de salida elige la opción «Exit Saving Changes».

Al arrancar otra vez el miniportatil, ten enchufado el pendrive con la instalación de GNU/Linux, te saldrá un menú para instalar si todo lo anterior ha ido bien (si te da problemas ESC y después en el minimenu elige F9 para que te salga un menú de posibles opciones de arranque y elijas lanzar el instalador de USB).

La instalación de Debian desde hace años es muy muy sencilla, pero vamos a fijarnos en los siguientes puntos:

  • ¡¡OJO!! NO SE COMO TENÉIS EL HP STREAM 11, en mi caso fue sacarlo de la caja de cartón y hacer lo que os comento en estos artículos para que funcione mejor que con la basura de Windows, pero puede que vosotros lo hagáis con un portátil usado y queráis guardar las fotos de las últimas vacaciones. HACER BACKUP DE VUESTROS FICHEROS.
  • Pero señor MD yo quiero tener Windows en dualboot…PUES BÚSCATE OTRO TUTORIAL, este es para TENER UN SOLO SISTEMA OPERATIVO EN EL PORTÁTIL. A partir de este punto si seguís os va quedar un buen ordenador pero ni rastro de la mierda de windows.
  • En el particionado tenéis que elegir uso completo del disco duro y LVM.
  • Y en un par de pantallas siguientes tenéis que elegir que el directorio /home este separado en una partición.

Y con eso ya esta lo importante para en la instalación para aprovechar la magia del LVM.

Siguiendo con la instalación, en estos tiempos es tan fácil que solo hay que darle siguiente, elegir idioma, elegir claves para el usuario por defecto y usuario root, alguna cosilla mas y después elegir entorno/escritorio. En mi caso elegí Mate porque es la civilización Gnome en su máximo esplendor…después vino la edad media….

Y ya tienes un flamante netbook, ligero y potente porque tiene GNU/Linux, aunque no se vayan todavía porque tenemos para la parte 3 de esta telenovela de tutorial:

  • instalar los drivers privativos de el chip wifi, porque como siempre los cabroncetes de Realtek haciendo tarjetas wifi sin liberar los drivers para GNU/Linux, pero en Debian es fácil de instalar…los no-libres…
  • ponerle sin abrir el HP Stream 11 mas disco duro con la magía que os comente de LVM, por 17€ le he multiplicado por dos el tamaño de disco duro.
  • Y si queda pequeño, comentar como aprovechar la pantalla tan pequeña y la poca RAM de este netbook usando «escritorios frikis» y ligeros como I3 que quita mucha tonteria.

Cataclysm DDA: ¿Cómo traigo de los muertos a mi personaje?

Cómo decían en Fullmetal Alchemist.

«El hombre no puede obtener nada sin primero dar algo a cambio. Para crear, algo de igual valor debe perderse. Esa es la primera ley de la Alquimia de la Equivalencia de Intercambio. En ese entonces, realmente creiamos que esa era la única verdad del Universo»

Ahora que conoces las reglas de la alquimia, algo deberías dejar a cambio de traer de los muertos a ese personaje tan querido de tu videojuego favorito, no hablamos si no del genial Cataclysm Dark Days Ahead. uno de los mejores ejemplos de videojuegos de software libre con un mundo abierto que muchos videojuegos triple A desearan.

Si de verdad, amas los roguelikes, deberías dejarlo estar y no seguir leyendo, porque una muerte, es una muerte permanente, las leyes naturales de los roguelikes lo dictan y así es, no hay una jodida vida mas como cualquier mario bros cutre, si mueres has muerto y has perdido un pedacito de tu vida con ese personaje.

Pero hay veces, que hay que violar las leyes naturales, en mi caso en una partida que estaba disfrutando y que morí a lo tonto por una sobredosis de morfina mientras dormía, como los viejos rockeros en los 70.

Comencemos con las artes oscuras de levantar a los muertos….

Cataclysm DDA, cuando muere un personaje, se lleva todos los ficheros de la partida guardada al directorio:

Cataclysm-DDA/graveyard

Tienes que localizar los últimos ficheros editados que serán un buen puñado, por eso ordenalos por fecha, tendras un puñado de ficheros con nombre ilegible que se habrán editado ultimos, esos son la partida guardada de tu difunto personaje, tienes que moverlos a:

Cataclysm-DDA/save/<nombre_mundo>

Y ya esta, si comienzas a jugar a Cataclysm DDA, tendrás otra vez la partida con ese personaje que ha vuelto a ser carne viva con un corazón caliente.

Asqueado de que Google Maps te pregunte cosas, ayuda a OpenStreetmap

Seguro que te rayas, cuando sales de un bar o una tienda y te llega un aviso del señor Google preguntándote cosas sobre donde has estado, te tiene mas controlado que tu madre cuando eras un crío.

Pues…¿Por qué no ayudas a la disidencia y la revolución? OpenStreetmap, es a google maps como era la Encarta a la Wikipedia, (corrección, gracias a ElTioDeLaTecla) es a google maps como es a la Wikipedia la extinta Encarta, una plataforma colaborativa y libre para crear un mapa libre, son 13 años ya del proyecto y hay imágenes de su evolución sencillamente deliciosas.

Hay una web (OSM Then And Now) que te muestra las diferencias entre 2007 y 2017 (10 añazos), mirar por ejemplo Madrid, a la izquierda en la imagen el 2007 solo con las carreteras principales y tal y en la derecha ya un señor mapa muy completo.

Bueno volviendo a Android y como ayudar con el móvil a OpenStreetmap, hoy hablaremos de StreetComplete en F-Droid, por favor si no conoces F-Droid…instalarlo, es una «tienda» de  aplicaciones libres para Android, hay de todo y muy buenos videojuegos.

Es como el google maps preguntas, pero no es intrusivo, tu cuando quieres entras a la aplicación y hechas una mano.

Después de instalarlo, es muy fácil de usar:

  • hazte una cuenta de usuario (o usa la que tengas ya de antes) en openstreetmap en https://www.openstreetmap.org/user/new .
  • Arriba a la derecha en icono de opciones, en ajustes engancha tu cuenta en «autorizar el acceso a OSM».
  • Ya que estás en ajustes, te recomiendo  tener activado «Sincronización automática» para que sea transparente el descargar chinchetas (o tareas como lo llaman ellos) y subir tus aportaciones.

En relación a descargar chinchetas o tareas, si estáis en una zona del mapa y no salen, podéis forzarlo, en el menú de opciones (arriba a la derecha) y la opción del menú «Descargar tareas», empezará a llenarse una tímida barra de progreso amarilla que esta justito debajo del título de azul de StreetComplete.

Yo llevo ya 501 aportaciones (^_^) .

¿Qué suele preguntar StreetComplete?

  • Números de portales: son el del icono azul con un número.
  • Tipo de carretera: son el icono…de la carretera, primero te pregunta que tipo de carretera, y después subtipo. Es realmente fácil, porque te pone una imagen de ejemplo.
  • Si tiene marquesina la parada de autobús: son el icono del autobus, tiene 3 opciones, SI, NO o «No sabría decir» que es para dejar una nota…yo que se…por ejemplo que ya no existe la parada o que la han movido o que ha venido un platillo volante y se la ha llevado.
  • Horarios de comercios e instituciones públicas: con un icono de un reloj, este es un poco mas complejo de usar porque hay que ir haciendo por pasos, elegir los días de la semana y después la hora, o en «Otras respuestas» hay otras opciones para elegir cosas mas concretas.
  • Altura de los edificios: con un icono de una casita, es solo poner el numero de plantas, pero incluyendo al bajo e incluso si esta en un terraplén el edificio y de un lado tiene mas plantas poner el máximo, incluyendo también las plantas que hacen de tejado o de ático.
  • Nombre de vía o calle: con un icono de un poste con carteles,  este no he ayudado a completar datos, porque salvo cosas claras, pregunta como cruces y así. Y me da miedo meter la pata y meter datos erroneos a OpenStreetmap.
  • Parking público de bicis: con un icono de una señal de parking de bicis,  te pide el numero de bicis posibles que se pueden aparcar en el armazón metálico puesto por tu ayuntamiento.
  • Tipo de deporte en campo deportivo: con un icono de un balón de fútbol europeo,  igual te da opciones con iconos de cada deporte. Yo he llenado un motón de campos de dentro de colegios, y entonces he ido a «otras respuesta…» y he puesto la opción «no es para ningún deporte en especial» porque lo usan para las clases de gimnasia y el recreo y tal de los críos.
  • Límite de velocidad en la vía o en la calle: con un icono de «gauge» un velocimetro, a mi me han salido sobre todo en pueblos, por supuesto mi ética me dicta que si no lo conozco no pongo nada, porque por ejemplo el pueblo de mi padre tiene limite de velocidad 20…muy por debajo del que viene escrito en el código de circulación.

Al pulsar sobre un icono, te marca en azul claro lo que quiere preguntar, el edificio, la linea azul que dibuja la carretera….

Hay muchas mas chinchetas o iconos, como podéis ver en el wiki de OpenStreetmaps, en http://wiki.openstreetmap.org/wiki/StreetComplete/Quests , pero yo os he contado las que conozco y me han salido por Madrid y Salamanca a mi.

Chuleta pequeña sobre Git

El maravilloso git que fue regalo del dios en la tierra Torvals jejejeje…lastima que no triunfara mercurial…que era en el maravilloso Python.

Tiene un par de comandos que siempre se me olvidan y me toca buscar, es jugar con las ramas, porque no es algo diario pero con la suficiente rutina para que maldigas la falta de memoría.

  • Crear rama (en local y en remoto)
git checkout -b <branch_name>
git push <remote_name> <branch_name>

Por ejemplo:

git checkout -b feature_para_ayer
git push origin feature_para_ayer
  • Borrar una rama (en local y en remoto)
    git branch -d <branch_name>
    git push <remote_name> :<branch_name>

Por ejemplo:

git branch -d feature_para_ayer
git push origin :feature_para_ayer

Chuleta de tmux

Tmux es una excelente herramienta para trabajar cómodamente con la terminal en GNU/Linux, lo que hace es darte como darte en forma de terminal una especie de escritorio (como Mate, XFCE, LXDE…) pero en plan tiling o paneles en vez de ventanas (como el editor Atom, o el programa de 3D Blender, o el escritorios de paneles Awesome, i3), e incluso el tmux trae un sistema de escritorios virtuales cosa muy útil que me asombro cuando descubrí GNU/Linux hace años.

Y todo ello mouseless que esta tan de moda porque «aumenta la productividad».

También esto es una autochuleta porque nunca me acuerdo de todo los atajos de teclado de tmux, y no estan todos, si no los que mas útiles me parecen a mi.

Por cierto, el que me embarco a empezar a usar tmux, fue el tutorial de Santiago Romero sobre tmux y un ex-compañero de curro Ramón que lo usaba efusivamente.

Bueno vayamos con la chuleta:

  • Panel = «Ventana tmux»
  • Ventana = «escritorio tmux»
  • Solo hay un panel activo y tiene el  borde marcado a verde.
  • Solo hay una ventana activa y aparece marcada en «la barra de tareas» abajo con un * .
  • Paneles
    • ctrl + b: para empezar  a mandarle comandos al tmux, todas empiezan así y después es pulsar otra tecla o combinación.
    • esc: cancela el modo comando tmux por si te has liado y quieres volver a empezar.
    • ctrl + b ?: muestra un listado de los comandos.
    • ctrl + b %: divide el terminal actual en dos paneles en vertical, dejándote en el mismo path y todo, pero no lo que este en ejecución ni su salida.
    • ctrl + b «: divide el terminal actual en dos paneles en horizontal.
    • ctrl + b (cursores dirección): te cambia de panel activo, si pulsas izquierda al que esta a la izquierda y así con todas las direcciones, es rotativo si estas en la mas arriba empieza en la de abajo.
    • ctrl + b q: muestra unos números grandes que identifican a cada panel durante un segundo mas o menos, si pulsas el numero vas a ese panel (solo funciona con números del 0 al 9).
    • ctrl + b ctrl + (cursores dirección): estrecha o amplia el panel activo, es decir si pulsas hacia la izquierda y es el derecho lo agrandas estilo como las ventanas cuando tiras del borde con el ratón.
    • ctrl + b x: cierra el panel actual.
    • ctrl + b z: amplia el panel actual a toda la pantalla, volver a pulsar para volver a ver el mosaico de paneles.
    • ctrl + b [: entra en el «modo buffer» en el panel actual porque si no te has dado cuenta has perdido las barras de desplazamiento de tu ventana (del escritorio) del terminal, para salir pulsa q o esc.
  • Ventanas (estilo escritorios virtuales repito)
    • ctrl + b c: crea una nueva ventana, te pone como activa y veras abajo que la añade a la lista de ventanas.
    • ctrl + b <numero>: cambia a la ventana con ese número.
    • ctrl + b !: crea una ventana nueva del panel actual, ¡ojo! no hay vuelta atrás.
    • ctrl + b &: cierra la ventana actual con todos sus paneles, pregunta abajo en la barra de tareas.
  • Para trabajar en remoto con servidores
    • ctrl + b d: sirve para «desenganchar» el tmux actual, se queda en ejecución con todos sus paneles y ventanas.
    • ctrl + b s: lista todos los tmux que hay en ejecución para engancharte, ¡ojo! que al desengancharte del actual vacío para engancharte a otro te lo deja ahí y la lista cada vez se hace mas gorda.
    • tmux list-sessions: desde el terminal antes de ejecutar tmux, para listar los tmux abierto, mejor que el de ctrl + b s.
    • tmux attach -t <numero>: engancharte a un tmux vivo sin crear uno nuevo.
  • ctrl + b : :entra en modo estilo vi y puedes escribir por ejemplo kill-session para cerrar todo el tmux actual.

Mi siguiente paso es aprender a usar bien bien, el escritorio tileado/mosaico como I3 para buscar la máxima comodidad y quitar comerecursos.