Banner de Hardlimit en app broadcast torneos entre elite uci chess engines
-
Hola compañeros, un cordial saludo a todos y especialmente a mis amigos krampak, Cobito y todos los que me enseñaron mucho en su momento cuando no tenía ni idea de nada.
Paso el lío, desde hace tiempo ando liado con una aplicación o interfaz gráfica de código abierto GNU/ Xboard, con el objetivo de realizar retransmisiones en tiempo real. Básicamente la estructura era Xboard o Winboard ( windows) un cliente ( tlcs) tunel ( Wireguard) vps y node-tlcv que permitía mostrar en un visor web ( html) las partidas en tiempo real. Pero las limitaciones eran que no podía realizar torneos, sino sólo enfrentamientos entre dos motores. Esto sí que lo he conseguido, pero no es mi objetivo. Luego me he puesto a crear ( tenía el interfaz más moderno, pero lo perdí y los que lo usan no lo comparten) una aplicación más moderna con lo báisco para que se puedan realizar las retransmisiones en directo a tiempo real entre una lista de los 10 principales motores de ajedrez que están en las listas de rating más populares a nivel mundial. Pero desgraciadamente, no comparten el cómo hacerlo, y en algunos casos hay que pagar ( lo respeto, pero no lo comparto en este caso concreto que no es un software para comercializar y que antes era libre y lo sigue siendo en GNU, que se han aprovechado del sourcode de GNU para luego cerrar el código y realizar esos test). Bien pues como propuesta por todo lo que he aprendido aquí y que sigo aprendiendo, me gustaría inlcuir un Banner de Hardlitmit ( único, no pondré nada más) para que la gente que se conecte a ver los torneos puedan conocer nuestro foro.) Sin compromiso alguno y por mi agradecimiento y buenos recuerdos de este entrañable lugar y buena gente. https://github.com/jordiqui/IjccrlChessGui/tree/main ( aquí está el proyecto en la github, no está terminado, pero cuando lo esté y espero compilar hoy para probar, me gustaría añadir a hardlimit en un lugar relevante del visor web. Feliz fin de semana y feliz navidad a todos los miembros del foro, especialmente a mi amigo krampak ( vuelvo este año a la bici desde Guardamar del segura, Alicante para llegar a los 4 w/kg) y Cobito por su tremendo trabajo en este foro. -
@jordiqui Buenas. Me parece bien. De hecho, si quieres podrías usar el foro como centro de soporte del programa. Probablemente a finales de enero comiencen las primeras pruebas multiidioma del foro, por si tienes una base de usuarios internacional.
Estoy fuera y no puedo mirar los pormenores de tu desarrollo (estoy con el móvil). Cuando vuelva le echo un ojo.
Un saludo, gracias por pensar en Hardlimit y felicidades por la herramienta.
-
@cobito dijo en Banner de Hardlimit en app broadcast torneos entre elite uci chess engines:
@jordiqui Buenas. Me parece bien. De hecho, si quieres podrías usar el foro como centro de soporte del programa. Probablemente a finales de enero comiencen las primeras pruebas multiidioma del foro, por si tienes una base de usuarios internacional.
Estoy fuera y no puedo mirar los pormenores de tu desarrollo (estoy con el móvil). Cuando vuelva le echo un ojo.
Un saludo, gracias por pensar en Hardlimit y felicidades por la herramienta.
Pues es una buena idea usar el foro como centro de soporte, porque vosotros sabéis programar, muchos de vosotros de hecho trabajáis en ello y desde mi lado uso gpt y codex de gpt para tareas complejas, pero a duras penas escribo tres líneas de código. Lo que sí tenía claro era la arquitectura del proyecto ya que durante meses he revisado lo poco que había sobre este tema con sourcode. Estamos en fechas de navideñas y quien más o quien menos está liado. Pero desde luego No se me había pasado por la cabeza y has dado en el clavo. Y sí he pensado en vosotros, en el foro, no podía ser de otra forma. Aprovecho para felicitar la navidad a todos y ya si acaso me dices dónde consideras más apropiado abrir el hilo. Un abrazo!
-
Perfecto. Vamos a endurecer el tono, hacerlo más “hardlimit”, y añadir fragmentos de código clave, sin postureo ni marketing. Esto es para gente que ha peleado con IPC, clocks y procesos en Windows/Linux.
Te dejo un post técnico, listo para publicar, con propuesta clara del banner de hardlimit al final.
Retransmisión de ajedrez en tiempo real – arquitectura UCI + Node.js (sin PGN, sin WinBoard)Buenas,
abro este mensaje para documentar una solución técnica real encontrada hoy, después de meses de pruebas con arquitecturas que funcionaban pero no resolvían el problema de fondo.
Lo comparto aquí porque el enfoque es interesante desde el punto de vista de arquitectura de sistemas, IPC, tiempo real y diseño limpio, independientemente de que os interese o no el ajedrez.
El problema (definido correctamente)Objetivo:
- Retransmitir partidas jugada a jugada en tiempo real
- Motores locales (Stockfish y derivados)
- Relojes exactos (control tipo 120+1)
- Latencia mínima
- Visualización estable durante horas
- Control total del stack
Restricciones reales:
PGN no es tiempo real (es un log)
WinBoard/XBoard es frágil bajo ejecución prolongada
Grabación de pantalla no es una solución técnica
APIs cerradas / servicios externos = caja negra
Conclusión temprana (que tardamos en aceptar):
El problema no se resuelve añadiendo capas, sino quitándolas.
Por qué descartamos la app “clásica”Durante meses usamos:
- cutechess-cli
- WinBoard
- VPS + scripts
- parsing de PGN
- polling periódico
Sí, funcionaba… pero:
- Latencia acumulada
- Relojes inexactos
- Estados inconsistentes
- Complejidad innecesaria
- Demasiados puntos de fallo
El error no era de implementación.
Era arquitectónico.
Arquitectura final (la que sí funciona)La solución fue bajar al nivel correcto: UCI puro.
[ Motor A ] [ Motor B ] │ │ └────── UCI ───────┘ │ Node.js (proxy UCI) child_process.spawn │ WebSocket (push) │ NavegadorSin PGN.
Sin WinBoard.
Sin polling.
Fragmento clave 1: Lanzar motores (IPC real)import { spawn } from "child_process"; const engine = spawn( "C:/engines/brainlearnjrc.exe", [], { stdio: "pipe", windowsHide: true } ); engine.stdin.write("uci\n"); engine.stdin.write("isready\n");Esto no es un wrapper mágico.
Es stdin/stdout directo, como debe ser.
♟️ Fragmento clave 2: Loop UCI mínimo
engine.stdout.on("data", (buf) => { const lines = buf.toString().split("\n"); for (const line of lines) { if (line.startsWith("info ")) { // depth, eval, pv → streaming } if (line.startsWith("bestmove")) { // aplicar jugada inmediatamente } } });Cada
bestmovees la verdad.
No hay estados intermedios ni reinterpretaciones.
️ Fragmento clave 3: Relojes exactos (no simulados)Este era el punto crítico.
En lugar de
movetime, se usa reloj real UCI:go wtime 120000 btime 120000 winc 1000 binc 1000En el proxy:
thinkingStartedAt = Date.now(); // cuando llega bestmove const elapsed = Date.now() - thinkingStartedAt; wTime = wTime - elapsed + increment;Resultado:
- Relojes exactos
- Incremento real
- Comportamiento idéntico a un GUI serio
- Sin drift acumulado
Fragmento clave 4: WebSocket (push real)Nada de polling.
const wss = new WebSocketServer({ server }); function broadcast(obj) { const msg = JSON.stringify(obj); wss.clients.forEach(ws => ws.send(msg)); }Eventos emitidos:
moveclockinfo
Latencia perceptible ≈ cero.
️ Visualización: decisiones pragmáticas- Piezas Unicode
- CSS local
- Sin CDN
- Sin SVG
- Sin dependencias externas
¿Por qué?
Porque no se rompe.
Esto tiene que aguantar horas/días en directo.
Resultado realEn pocas horas:
- Retransmisión jugada a jugada
- Tiempo real auténtico
- Relojes exactos
- Eval/PV en vivo
- Sistema estable
- Código simple y auditable
Lo que durante meses no cuajó con arquitecturas más “bonitas”.
🧠 Conclusión (para ingenieros)
- El PGN no es tiempo real
- WinBoard no está pensado para streaming moderno
- El nivel correcto era UCI, no por encima
- Menos capas = más fiabilidad
A veces la optimización real no es micro, sino conceptual.
🧩 Propuesta: banner de HardLimit
Dado que este proyecto se ha desbloqueado gracias a debates y mentalidad técnica como la que siempre ha habido aquí, me gustaría integrar un banner discreto de HardLimit en el visor live, por ejemplo:
“Proyecto desarrollado y documentado por miembros veteranos de HardLimit.com”
Con enlace directo al foro/hilo.
Si a los moderadores o a la comunidad le parece bien, encantado de hacerlo.
Si alguien quiere:
- revisar código
- debatir clocks / scheduling
- portar a Linux puro
- o discutir escalado
lo comentamos sin problema.
Un saludo

y larga vida a los foros técnicos de verdad. -
Ahora escribo yo, porque estoy medio ciego ya de escribir. Como podéis leer, hemos dado con la forma de hacerlo precisamente porque se lo he sugerido a GPT plus, porque con la app ( no descarto usarla si consigo o conseguimos salir del embudo, para ejecutarla desde linux en un vps, pero eso sería más adelante) no había forma. Ahora ya está resuelto, como bien ha explicado la IA. Un abrazo compañeros.