Saltar al contenido principal

FlintBox: Mi Laboratorio Selfhosted

· 6 min de lectura
Oscar Adrian Ortiz Bustos
Contando lecturas...

Introducción

¿Alguna vez has necesitado probar un filtro de jq o una expresión de awk sin tener acceso a una terminal? ¿No? Vaya, no esperaba esa respuesta, pero aun así continúo. Ya que quizás querías mostrarle a alguien cómo funciona sed sin pedirle que instale nada. Bueno, pues esa fricción me llevó a construir FlintBox: un laboratorio self-hosted, accesible desde el navegador, que te permite probar herramientas de texto como jq, awk, sed, grep y cut de manera fácil y segura.

WelcomeBanner

La idea es simple: una interfaz web donde puedes escribir tus parámetros, pegar datos de entrada (o hacer fetch desde una URL), ejecutar la herramienta y ver el resultado real. El binario real, en un contenedor aislado, con salida real.

Demo en vivo → flintbox.neanderhub.com

Por Qué el Binario Real Importa

A esto me refiero a que perfectamente pude haber creado algo "simulado" o "controlado", pero considero que eso le quita diversión y utilidad al laboratorio. Cuando aprendes jq o awk, lo que quieres entender es cómo se comporta la herramienta de verdad — no una aproximación. Una simulación en JavaScript puede funcionar para casos básicos, pero el comportamiento real diverge en todo lo que importa:

  • Las versiones específicas de jq tienen diferencias de semántica que afectan filtros avanzados
  • Los flags encadenados de grep (-E, -v, -o juntos) producen resultados que un mock no puede predecir fielmente
  • awk con múltiples patrones, bloques BEGIN/END y variables externas requiere el intérprete real para dar la salida correcta
  • El comportamiento con entradas vacías, caracteres especiales o encodings inesperados solo lo reproduce el binario real

Si el objetivo del laboratorio es aprender y probar herramientas reales, simularlas derrota el propósito. FlintBox ejecuta los binarios en un contenedor aislado: lo que ves en pantalla es exactamente lo que verías en tu terminal.

Las Herramientas Disponibles

Cada herramienta tiene su panel dedicado con un ejemplo de inicio. Aquí un recorrido rápido por lo que puedes hacer.

jq — Filtrar y transformar JSON

Filtro: .[] | .name Input:

[{"name":"Alice","age":30},{"name":"Bob","age":25}]

Output:

"Alice"
"Bob"

jq es la herramienta por defecto cuando trabajas con APIs REST. Puedes encadenar filtros, seleccionar campos, aplanar estructuras anidadas, transformar arrays, y mucho más. FlintBox corre jq 1.8 y tienes acceso al panel de ayuda con flags y ejemplos de filtros directamente en la interfaz.

JQExample


grep — Buscar patrones en texto

Flags: -i root Input:

admin:x:1000:1000::/home/admin:/bin/bash
root:x:0:0:root:/root:/bin/sh
guest:x:1001:1001::/home/guest:/bin/sh

Output:

root:x:0:0:root:/root:/bin/sh

Útil para filtrar logs, extraer líneas que coinciden con un patrón, o validar expresiones regulares. Soporta -E para regex extendida, -v para invertir el match, -o para extraer solo la parte que coincide, y contexto con -A, -B, -C.

grepExample


sed — Transformar líneas de texto

Expresión: s/error/WARN/g Input:

2024-01-01 error: db timeout
2024-01-02 error: conn refused
2024-01-03 info: ok

Output:

2024-01-01 WARN: db timeout
2024-01-02 WARN: conn refused
2024-01-03 info: ok

sedExample

Ideal para reemplazos en logs, limpiar outputs de herramientas, o preparar datos antes de pasarlos a otro comando.


awk — Procesar texto estructurado por columnas

Programa: {print $1, $3} Input:

PID  USER    CMD
1 root init
22 root sshd
123 alice bash

Output:

PID CMD
1 init
22 sshd
123 bash

awk brilla cuando los datos tienen estructura de columnas. Puedes definir separadores, sumar columnas, filtrar por condiciones, y usar bloques BEGIN/END para inicialización y resumen.

awkExample


cut — Extraer campos de texto delimitado

Opciones: -d, -f1,3 Input:

apple,red,10
banana,yellow,5
kiwi,green,8

Output:

apple,10
banana,5
kiwi,8

cutExample

La herramienta más simple del grupo, pero indispensable para trabajar con CSV, TSV, o cualquier formato con delimitador fijo.

Input HTTP: Datos Reales de APIs

La verdad me daba mucha flojera tener que estar haciendo la petición a la api y copiar/pegar la salida en FlintBox así que una de las funcionalidades que más uso es el input HTTP. Basta con apuntar a una API y usar su respuesta directamente como stdin de la herramienta.

Hay dos modos:

Modo campos — formulario con método, URL, headers y body:

GET https://api.example.com/users
Accept: application/json

HTTPInputForm

Modo curl — pega directamente el comando curl que ya tienes:

curl -H "Authorization: Bearer token123" \
-H "Accept: application/json" \
https://api.example.com/data

HTTPInputCurl

El parser de curl maneja continuaciones de línea (\), strings con comillas, y más de 20 flags (-X, -H, -d, --json, -L, -s, etc.). Al pulsar Run, el fetch ocurre automáticamente antes de ejecutar la herramienta.

Esto convierte FlintBox en algo muy práctico: apuntas a una API real, filtras con jq, extraes campos con awk, y ves el resultado limpio en segundos.

Desplegarlo

Para hacer sentido al título de "laboratorio selfhosted", obviamente necesitas poder desplegarlo tú mismo. FlintBox está construido con Docker Compose, así que el proceso es sencillo:

git clone https://github.com/4drian0rtiz/flintbox
cd flintbox
docker compose up --build -d

Abre http://localhost:3000 y tienes el laboratorio funcionando.

Conclusión

FlintBox nació de una necesidad real: un lugar donde probar jq, awk, sed y compañía sin fricción, con datos reales de APIs, sin instalar nada localmente. El binario real, en un contenedor aislado, con salida real.

No lo mencioné antes porque los que me conocen saben que siempre me doy un tiro con los nombres, y siempre termino con un juego de palabras rebuscadísimo. El nombre viene del pedernal — la herramienta primitiva más poderosa que existió. Herramientas primitivas, pero letales cuando sabes usarlas.

Desde La Cueva del NeanderTech te invito a desplegarlo, probarlo con tus propios datos y proponer nuevas tools. El código está disponible y las PRs son bienvenidas.

"Las herramientas más simples son las más poderosas — solo hay que saber dónde golpear."

Anónimo
Escrito por un humano