Jesús Rodríguez Casado

Ingeniero Informático · Computación

Sobre mí

Ingeniero Informático titulado en la Universidad de Córdoba.
Estudiante de Máster Big Data y Data Engineering en la Universidad Complutense de Madrid.
Desarrollando Lux, mi propio framework web en C++ con su propio lenguaje de programación, sobre el que está construida esta misma página.

La sirve Lux desde mi propio servidor, con nginx por delante y HTTPS de Let's Encrypt. Detrás hay una pequeña API en /v1 que devuelve los datos de este mismo CV (perfil, estudios, experiencia y proyectos) y una documentación OpenAPI que Lux genera sola a partir del código.

Educación

Máster en Big Data y Data Engineering
Universidad Complutense de Madrid
2026 – actualidad

Grado en Ingeniería Informática (Computación)
Universidad de Córdoba
2022–2026

Experiencia

Prácticas de Ingeniero Informático — Cosigein Feb 2026 – Jul 2026
  • Desarrollo con C++ y Python.
  • Minería de datos.
  • Desarrollo con ESP32 y Raspberry Pi.
  • Desarrollo de APIs y aplicaciones web.

Proyectos

Lux — Framework web hiperoptimizado
  • Núcleo en C++23 para Linux, un binario (técnicamente portable) de entre 1 y 5 MB.
  • LuxScript: lenguaje propio, sintaxis tipo Python con tipado estático, clases y genéricos.
  • Rendimiento muy superior al de otros stacks web.
  • Tan cómodo como ejecutar el binario indicándole un archivo .lux con los endpoints.
Lux-Local — Alternativa a Electron/Tauri
  • Apps multiplataforma sobre Lux con WebView nativo del sistema, sin Chromium embebido: pensado para Linux y en desarrollo para Android.
  • Compila a un único binario autocontenido; escrito en LuxScript en lugar de Node.

Lux

Lux es mi framework web. El núcleo está escrito en C++23 y se programa en LuxScript, un lenguaje propio que se lee casi como Python pero con tipado estático. La idea es tener la comodidad de Flask o FastAPI pero sin tener que sacrificar rendimiento, y sin tener que recurrir a Javascript.

Este es el código real de la API de este CV. El binario se arranca con lux ./cv, él solo se encarga de recargar todo si detecta cambios en esa carpeta. También se puede indicar un archivo .lux a secas. El OpenAPI lo genera a partir de las rutas y de las clases.

app:
    name   "CV API"
    port   8081
    static "/" -> "./public"
    docs

class Project:
    string       slug
    string       name
    string       tagline
    string       repo
    List<string> highlights

get endpoint("/v1/projects/:slug", string slug):
    for Project p in all_projects():
        if p.slug == slug:
            return p
    return { "error": "project not found", "slug": slug }.status(404)

Con 100 000 usuarios concurrentes leyendo y escribiendo, Lux sobre PostgreSQL responde en 11 ms; Actix tarda 583 ms, Drogon y Gin 2 y 3,4 s, y el resto más de 10 s. Con SQLite y replicando todos los cambios a una copia de seguridad, Lux aguanta 400 000 usuarios con p99 por debajo de 4 ms. Con PostgreSQL, en cambio, todos se hunden.

Desliza la tabla hacia los lados →

Usuarios concurrentes50k100k150k200k250k300k350k400k450k500k550k600k650k700k
Lux + SQLite + réplica0,3 ms15,0k0,4 ms23,9k0,5 ms32,7k0,6 ms41,4k0,7 ms49,8k1 ms58,1k2 ms66,4k4 ms74,4k288 ms81,2k166 ms91,3k2,8 s77,3k8,4 s74,4k5,5 s96,0k17 s64,5k
Lux + PostgreSQL3 ms15,0k11 ms23,8k4,1 s26,9k3 err.11 s26,8k18 s25,4k2 err.25 s25,3k1 err.————————
Actix + PG3 ms15,0k583 ms23,1k6,9 s23,9k16 s22,8k27 s20,5k40 s17,9k————————
Drogon + PG3 ms15,0k2,0 s21,6k10 s20,1k21 s17,6k29 s18,2k—————————
Gin + PG7 ms15,0k3,4 s20,5k9,8 s21,2k21 s20,2k31 s19,6k42 s19,9k————————
FastAPI + PG9,4 s8,5k26 s7,2k44 s6,9k65 s6,7k——————————
Fastify + PG8,4 s9,0k23 s7,7k42 s6,7k62 s6,0k——————————
Flask + PG5,0 s7,6k12 s6,2k18 s6,2k28 s6,2k——————————
Django + PG6,9 s5,8k22 s3,3k37 s3,0k44 s3,7k——————————

En cada celda, la latencia p99 y, debajo, las peticiones por segundo (k = miles) y los errores, si los hay. El p99 es el tiempo por debajo del cual se responde el 99 % de las peticiones: el 1 % más lento tarda eso o más. Verde: menos de 50 ms · ámbar: menos de 1 s · rojo: 1 s o más. Una raya significa que ese stack colapsó y la prueba se detuvo. Lux con SQLite además replica cada cambio a una copia de seguridad.

A partir de unos 500 000–600 000 usuarios, el propio simulador, con cientos de miles de conexiones abiertas, empieza a consumir recursos del sistema que el servidor también necesita, así que los datos de esas columnas se ensucian bastante (se nota en que las peticiones por segundo suben y bajan sin orden).

Este benchmark no tiene en cuenta el tiempo que la petición tarda en llegar al servidor, solo mide el rendimiento puro de los frameworks. En un servidor real estos números serían mucho más bajos, pero aun así muestran que Lux es muy rápido y es capaz de escalar como ninguno usando SQLite.

```