Mis Herramientas

Un listado de librerías y herramientas que encuentro útiles.

View on GitHub

Tools

Este repositorio es una recopilación de herramientas interesantes. Principalmente se trata de herramientas por linea de comando para linux.

Tratamiento de ficheros

Datamash

Herramienta genérica para el tratamiento de ficheros de texto que contienen datos delimitados.

CSVKit

Herramientas para el tratamiento de ficheros en formato CSV y similares. Permiten realizar consultas, extracciones de datos, reformateados y estadísticas sobre este tipo de fichero.

jq

Herramienta para trabajar con ficheros en formato JSON. Nos permite extraer y reformatear información de un JSON en otro JSON.

q - Text as Data

Permite realizar consultas SQL sobre ficheros de texto en formato CSV y similares. También puede combinarse con la salida de otros comandos para realizar tratamientos complejos de la información obtenida.

Miller

Miller es como awk, sed, cut, join y sort para CSV, TSV y JSON tabular.

Drake

Herramienta para la creación de pipeline de tratamiento de datos con bash. Drake es ‘Make for data’.

feedgnuplot

Herramienta para crear gráficos con gnuplot. Permite definir el gráfico mediante parámetros de la línea de comando en lugar de tener que crear un script. También permite leer los datos desde la entrada estándar en lugar de requerir un fichero y puede hacer streaminig de los datos.

rnr

Una herramienta para el renombrado de ficheros y directorios en modo batch y de forma segura.

brök

Chequea enlaces presentes en ficheros de texto. Por ejemplo yo lo utilizo para chequear que las URLs en este README son existen.

gron

Convierte ficheros JSON a un formato de líneas que permite tratarlos con herramientas linux convencionales. Una vez tratados es posible volver a convertirlos en fichero JSON.

jid

Herramienta cli que permite filtrar un documento JSON de forma interactiva.

jet

Herramienta cli de transformación entre json, edn y transit. Está desarrollada por el mismo programador que ba·bash·ka.

jqp

Herramienta TUI para probar visualmente expresiones ‘jq’ sobre un fichero json. Útil si no tienes muy clara la sintaxis de estas expresiones-

Git

tig

Interfaz modo texto para realizar tareas de inspección y mantenimiento de repositorios git locales.

Lazygit

Otra muy buena interfaz en modo texto para git similar a tig.

Le.git

Añade algunos comandos extra a git de modo que sea más sencillo realizar tareas como la sincronización upstream y el cambio entre ramas de forma ‘limpia’.

gas

Este es un gestor de authors para git. Con el se simplifica el uso de múltiples usuarios en una misma máquina a la hora de hacer commits en los repositorios. Se trata de una gema de ruby así que es necesario tener este interprete instalado.

$> gem install gas

git-delta

Se trata de un paginador avanzado para ‘git diff’. Permite no solo ver claramente los cambios si no además añade coloreado sintáctico.

Extra-commands

Colección de scripts para facilitar ciertas tareas complejas. Contiene algunas joyas como ‘move-commits’ o ‘change-author’.

Plain text accounting

Estas herramientas están relacionadas con la contabilidad de doble entrada. Todas ellas se basan en realizar la entrada de información usando ficheros de texto plano.

hledger

Clon de ledger hecho en haskell.

beancount

Clon de ledger hecho en python.

Fava

Interfaz gráfica para beancount.

Bases de datos

MyCLI

Es una alternativa a la interfaz de linea de comandos de MariaDB y MySQL (por favor usa siempre la primera). Tiene soporte para el autocompletado de comandos SQL con referencia a los objetos presentes en la base de datos actual.

PGCLI

Es una alterna a la interfaz de linea de comandos de Postgres con el mismo tipo de soporte para el autocompletado de comandos que MyCLI.

LiteCli

Otro cliente TUI del mismo estilo que los anteriores pero para sqlite3.

Flyway

Herramienta de versionado y migración de bases de datos.

Shell

Fish Shell

Shell con autocompletado ‘al vuelo’. Según escribes un comando te ofrece sugerencias según tu historial de comandos.

pueue

Es un comando que permite encolar y monitorizar la ejecución de múltiples procesos. Es útil cuando queremos hacer en una misma consola múltiples procesos cuyo tiempo de ejecución es largo.

fzf

Es un comando para implementar búsquedas difusas en tus scripts. En particular viene preparado para integrarse en el shell mediante el atajo de teclado ctrl-T y permitir búsquedas en la carpeta local.

fd

Es una mejora sobre el comando find. Ideal para combinarlo con fzf en la creación de buscadores de ficheros.

silver sercher - ag

Es otro buscador de archivos pensado para tener el mejor rendimiento posible. Es similar a grep y ack pero más rápido en ejecución. Está escrito en C y se puede instalar desde aptitude con:

sudo aptitude install silversearcher-ag

ack3

Sustituto de grep escrito en perl y mucho más rápido.

asciinema

Un comando que permite generar y compartir un GIF animado de la ejecución de una sesión interactiva del shell.

sshfs

Es un filesystem FUSE que permite montar directorios remotos por SSH a nuestra máquina local. Ideal para editar con herramientas gráficas ficheros que se encuentran en máquinas servidoras.

sudo aptitude install sshfs

Un ejemplo de uso:

mkdir ~/remotes/servidor1
sshfs -o IdentityFile=~/.ssh/id_rsa user@servidor1:/a/given/path ~/remotes/servidor1

rclone

Es un programa que permite hacer rsync a múltiples servicios de almacenamiento en nube e incluso montarlos en local con FUSE. Algunos de los servicios soportados son googlee drive, dropbox, mega.nz…

mole

Es un programa para simplificar la creación de túneles ssh.

entr

Con entr es posible planificar la ejecución de comandos arbitrarios cuando uno o varios ficheros cambian.

sudo aptitude install entr

watchexec

Similar al anterior pero escrito en rust. También sirve para planificar la ejecución de tareas cuando se producen cambios en un directorio. No obstante este está más enfocado a la ejecución de tareas durante el desarrollo de aplicaciones.

cargo install watchexec-cli

pass

El gestor de passwords de Unix basado en gpg. Puede ser instalado desde el gestor de paquetes de la distribución pero para obtener la última versión estable es preferible hacerlo manualmente desde el repositorio.

Una vez descargado el mismo puede ejecutarse:

$> sudo PREFIX=/usr/local make install

drip

Lanzador de procesos java alternativo. Precalienta una JVM para cada proceso que se lanza de modo que las siguientes ejecuciones arrancan mucho más rápido. Ideal para herramientas por línea de comando. Se utiliza por ejemplo con Drake.

run-one

El comando ‘run-one’ es un wrapper que permite garantizar que solo se ejecuta simultáneamente una instancia de un determinado proceso y argumentos.

Tiene algunas alternativas útiles como ‘run-this-one’, ‘run-one-constantly’, ‘keep-one-running’, ‘run-one-until-success’ y ‘run-one-until-failure’.

pypager

Un pager (estilo less) muy potente e implementado en python.

ptrepl

Permite utilizar cualquier comando cli como si fuera una linea de comandos con autocompletado. Por ejemplo ptrepl git simplifica el uso de git.

newsboat

Agregador RSS para la línea de comando. Permite acceder a feeds en paginas de noticias, canales de youtube, subreddits, etc…

colorls

Versión avanza de ls que utiliza icons y degradados de color para representar los tipos y antigüedad de los ficheros.

nerd-fonts

Colección de fuentes parcheadas para terminales linux que incluyen los iconos necesarios para el prompt powerline y otras utilidades como colorls.

glances

Sustituto de htop que crea un dashboard sobre el estado del sistema. Permite, mediante un plugin, monitorizar también los contenedores docker en ejecución.

bashtop

Otra herramienta al estilo de htop con un dashboard y una interfaz más modernos.

pydf

Versión mejorada del comando df que representa la información de forma más visual.

trash-CLI

Sustituto del comando rm que integra el borrado de ficheros en el shell con la papelera del desktop. Permite también listar, recuperar y borrar los contenidos de la papelera desde la línea de comandos.

NOTA: Lo instalé usando ‘pip3 install –user trash-cli’

http-echo-server

Es un servidor http que procesa peticiones simplemente devolviendo lo mismo que ha recibido tanto nivel de cabeceras como de contenido. Es útil para verificar que está enviando una determinada aplicación.

NOTA: Lo instalé haciendo npm install -g http-echo-server en el node por defecto de mi instalación de asdf.

ttyd

Este comando permite compartir una aplicación de terminal como una aplicación web.

charm vhs

Este comando permite crear GIFs animados a partir de un fichero de comandos. Esto es útil para hacer pequeñas demos de ejecución de comandos/CLIs/TUIs.

httplab

Es un programa que levanta un servidor http pero con la característica particular de que tiene una TUI en la que podemos modificar la respuesta que el mismo devolverá a cualquier petición. Se puede cambiar el cuerpo, las cabeceras, el tiempo de retraso y el código de la respuesta. También permite analizar las requests recibidas. Es muy útil como herramienta para testear o depurar clientes de servicios web.

hostctl

Una herramienta para manejar el contenido de tu fichero hosts de una forma civilizada. Permite crear ‘profiles’ que agrupan varias entradas que pueden ser administradas conjuntamente. También permite añadir de forma automática las IPs de contenedores docker en el fichero hosts dentro de uno de estos ‘profiles’.

distrobox

Una herramienta casi mágica que permite ejecutar terminales con una distribución de linux diferente a la que tenemos en la máquina real. Para ello hace uso de docker pero configura automáticamente el acceso a los discos y el entorno gráfico. El nuevo entorno está montado por encima de tu entorno real por lo que tienes acceso al software (si es compatible a nivel de libc). Si no se quiere alterar la home del usuario nativo, al crear el entorno se puede especificar que haga uso de otro directorio.

Es útil para ejecutar programas no disponibles en tu distribución nativa o para aprender el uso del sistema de paquetería de una distro diferente.

xcp

Versión extendida del comando cp escrita en rust. Tiene barra de progreso para la copia de ficheros y directorios. Utiliza optimizaciones presentes en las versiones más recientes de linux para mejorar el rendimiento de la copia entre filesystems y unidades de red.

CRIU

Checkpoint/Restore In Userspace, puede congelar un contenedor en ejecución (o una aplicación individual) y guardar su estado en el disco como una colección de archivos. Los datos guardados se pueden utilizar para restaurar la aplicación y ejecutarla exactamente de la misma manera que estaba durante el tiempo de congelación. Con esta funcionalidad, ahora es posible realizar la migración en vivo de aplicaciones o contenedores, crear instantáneas, depuración remota y muchas otras cosas.

toolong

Esta herramienta TUI permite ver logs de forma fácil. Tiene buscador, coloreado syntáctico y permite modo tail. Tiene modo de mergeo de ficheros por fecha y navegación temporal, avanzando o retrocediendo por minutos, horas o días.

frogmouth

Un lector TUI de ficheros markdown, similar a glow, pero con un renderizado más parecido al de una aplicación de escritorio. Permite navegar por los documentos en el filesystem y crear marcadores a los mismos.

envio

Envio es una herramienta que facilita la gestión de variables de entorno. Permite crear perfiles encriptados que contienen conjuntos de variables asociadas a un proyecto o caso de uso específico. Es posible cambiar fácilmente entre perfiles e importarlos a la sesión del terminal actual para usarlos de inmediato.

silicon

Es una herramienta para generar screenshots de tu código al estilo de Carbon pero desde la línea de comando y sin depender del navegador.

Python Libraries

Rich

La API de Rich facilita la adición de color y estilo a la salida del terminal. Rich también puede renderizar tablas atractivas, barras de progreso, Markdown, código fuente con resaltado de sintaxis, bolcados de stack y más, todo listo para usar.

Textual

Textual agrega interactividad a Rich con una API inspirada en el desarrollo web moderno. En software de terminal moderno (instalado por defecto en la mayoría de los sistemas), las aplicaciones Textual pueden usar 16.7 millones de colores con soporte para el mouse y animación suave sin parpadeos. Un potente motor de diseño y componentes reutilizables permiten crear aplicaciones que rivalizan con la experiencia de escritorio y web.

pex

Herramienta que permite crear un empaquetado autoejecutable a partir de un entorno virtual o un conjunto de paquetes instalados en local.

prompt-toolkit

Librería python que permite crear REPL complejos con histórico, autocompletado, autosugerencias basadas en el histórico, coloreado sintáctico, etc…

meza

Librería para el tratamiento de ficheros tabulares en múltiples formatos (csv, xml, xlsx, excel, etc…) El objetivo es ser una alternativa a pandas cuando no son necesarias las características de esta librería. Meza es más ligera a la hora de instalarla y de usarla.

RPLY

Parser generator en python puro y pensado para usar con RPython.

RPython

Es un framework para dar soporte a la implementación de lenguajes dinámicos usando Python como base. Hace especial énfasis en la separación entre la definición del lenguaje y su implementación.

Logzero

Librería de logging para python muy completa.

Loguru

Otra librería de logging para python con un enfoque pragmático que la hace muy fácil de usar.

epr

Lector de epub para la línea de comandos.

tox

Automatización y estandarización del proceso de construcción y testeo de paquetes y aplicaciones python.

poetry

Un mejor sistema de gestión de dependencias y empaquetado para proyectos python.

pyrsistent

Una librería que implementa reemplazos funcionales (inmutables) de las estructuras de datos básicas de python. Estas utilizan técnicas de ‘structural sharing’ para tener un performace aceptable.

jschon

Librería de validación con JSONSchema.

IDEs

Spacemacs

Una reconfiguración de emacs25 ideada para simplificar a los usuarios de vim el uso de este editor. Se basa en EvilMode aunque también puede usarse en modo nativo.

Nightlight

Un IDE integrado en tu proyecto leiningen o boot.

nvim

Un mejor vim. Más rápido y compatible con el vim tradicional.

SpaceVim

Spacevim es un conjunto de plugins y un sistema de configuración basado en layers para vim. Es similar al Spacemacs.

PDF/Slide/Publication Tools

pandoc

Pandoc es el transpilador de documentos universal. Es capaz de transformar documentos de un tipo en otro. Es especialmente útil para la conversión de markdown a pdf o docx.

eisvogel pandoc pdf template

El mejor template para la creación de libros y handouts a usando de markdown y pandoc.

pdfbook

Esta utilidad del sistema operativo (instalable mediante aptitude) permite convertir un documento pdf a una cara en un documento pdf en formato 2up listo para su impresión.

vegetables

Convierte documentos en formato markdown en slides HTML.

markdown-to-slides

Conversor simple de documentos markdown a slides HTML.

jekyll

Creación de blogs como sitios estáticos a partir de ficheros markdown. Este es el sistema que se utiliza para las ‘github pages’. Está implementado en ruby así que necesitaremos un interprete del mismo y su gestor de paquetes (gem). Es recomendable utilizar una herramienta de gestión de entornos ruby como rbenv.

mkdocs

Un proyecto similar a jekyll pero para la creación de páginas de documentación. Esta herramienta está implementada en python. Será necesario tener un interprete de este lenguaje y su gestor de paquetes (pip). Es recomendable utilizar un entorno virtual con virtualenvs o venv.

decktape

Es una aplicación node que permite exportar una URL como PDF. Útil para pasar presentaciones web a PDF.

appImages

dockstation

Interfaz gráfica para la administración de contenedores docker en local y remoto.

sioyek

Lector de PDF/EPUB orientado al teclado y a la documentación técnica. Es una gran herramienta para usar desde la línea de comandos.

Gestión de entornos / paquetes

nala

Un frontend para apt (Debian/Ubuntu) muy mejorado con capacidad de descarga en paralelo de paquetes y una funcionalidad de histórico de instalaciones/actualizaciones que te permite conocer todo lo que has instalado y cuando. Además desde ese histórico es posible hacer undo/redo de cualquier acción.

nix

Gestor de paquetes y entornos de software para linux. Permite instalar versiones más recientes de algunas herramientas como por ejemplo GIT.

snap

Otro gestor de paquetes de software para linux. Se parece mucho a chocolatey.

appimages

Repositorio de aplicaciones autocontenidas para linux. También existe una herramienta para crear este tipo de aplicaciones.

Templating

Aplicación muy sencilla para crear plantillas de fichero o proyecto y luego crear esos tipos de elemento a partir de las mismas.

Filemanagers

ranger

Completo navegador de ficheros por línea de comando.

Gestión del tiempo

timetrap

CLI time tracker escrito en ruby.

Awesome lists

Compendio de mis awesome lists favoritas.

Awesome

Recopilación de las mejores awesome-lists de github.

Terminals are Sexy

Listado de cosas alucinantes para tu terminal.

Awesome python Apps

Listado de las mejores aplicaciones escritas en python.

Awesome python (a secas)

Listado de herramientas, librerías y aplicaciones en python.

Presentaciones

Métodos alternativos de realizar presentaciones.

markdownd presentations

Presentaciones en el terminal usando markdown como lenguage de composición.

Escritorio

screenkey

Applicación para mostrar en pantalla las teclas pulsadas. Útil para charlas y screencasts.

synapse

Aplicación para lanzar programas sin dejar el teclado.

flameshot

Aplicación para tomar pantallazos con las herramientas de edición y publicación incorporadas.

Lisp

ABCL (Armed Bear Common-Lisp)

Una implementación de Common-Lisp para la JVM.

Clojure

Que decir… es Clojure…

SBCL (Steel Bank Common-Lisp)

Una implementación de Common-Lisp que compila a código nativo casi tan eficiente como C/C++.

CLISP

Otra implementación de Common-Lisp nativa the GNU.

ASDF (Another System Definition Facility)

Un sistema de definición y publicación de systemas que pueden ser usados como librerías.

OJO: No confundir con ‘asdf’ el instalador multiversión/multiprograma.

QuickLisp

Un sistema de paquetería unificado compatible con múltiples implementaciones de Common-Lisp.

Roswell

Un sistema de gestión de versiones e implementaciones de Common-Lisp. integra además un mecanismo unificado de ‘compilación’ de systemas, ASDF y QuickLisp.

Joker

Es un dialecto de Clojure como Babashka pero implementado en Go. Es muy rápido y su uso fundamental es crear scripts usando la sintaxis de Clojure.

CVs

online-cv

Es un repositorio preparado para publicar un CV usando github pages. Solo require clonar el repositorio y modificar los datos.