De un trozo de madera a la App Store
Hace unos veinte años, mi compañero de habitación de la universidad y yo sacamos un trozo de madera de un contenedor, dibujamos una cuadrícula con una regla, compramos unas fichas de cristal en una tienda de manualidades por unas tres libras y empezamos a jugar al Go. No tenía ni idea de lo que hacía. La verdad es que sigo sin tenerla muy clara. Pero algo del juego me cautivó de inmediato: la forma en que algo aparentemente tan simple podía ser tan increíblemente profundo. Una cuadrícula de 19x19. Fichas blancas y negras. Reglas que se aprenden en cinco minutos. Y, sin embargo, en aquel entonces, los ordenadores más potentes del mundo no podían vencer a un buen jugador humano. Eso me fascinaba.
Una obsesión temprana
Esa fascinación era tan profunda que mi proyecto de fin de carrera en la Universidad de Kingston versó sobre visión artificial: programé manualmente un algoritmo para leer el estado de un tablero de Go a partir de una fotografía, logrando una precisión superior al 87 %. Para principios de la década de 2000, antes del auge del aprendizaje profundo, me sentía discretamente orgulloso de ello.
Por esas mismas fechas, visité Japón durante dos semanas específicamente para experimentar la cultura del Go de primera mano y jugar contra jugadores locales. Perdí todas las partidas. Una en particular me marcó: un joven, probablemente de nivel dan, muy tímido, con uñas sorprendentemente largas, acompañado por su padre. Me aniquiló por completo antes incluso de darme cuenta de lo que había pasado; tardé un rato en percatarme de que debía rendirme.
En todas las salas de Go que visité, el humo del cigarrillo era tan denso que resultaba casi imposible jugar una partida sin aire fresco, y eso que yo también fumo. Los jugadores eran casi exclusivamente ancianos. El Go parecía ser un pasatiempo para personas mayores, lo cual me desconcertaba dada la reputación de Japón en tecnología e innovación. Nadie parecía relacionar el Go con la informática. Al menos, todavía no.
El largo hueco
La vida siguió su curso. Trabajé como desarrollador Java, pasé un año en Accenture durante la universidad (durante el cual se me cayó todo el pelo por el estrés) y, finalmente, me encontré desempleado durante un largo periodo debido a problemas de salud. Mis habilidades en Java se volvieron cada vez más irrelevantes a medida que la industria avanzaba sin mí. Intenté ponerme al día, pero la brecha se había ampliado demasiado, y descubrí que los salarios en ese sector de la industria habían bajado. No merecía la pena.
A pesar de todo, seguí jugando al Go. No en serio; llevo unos quince años asistiendo al Club de Go de Exeter de forma intermitente, y soy un jugador mediocre, en el mejor de los casos. Pero el juego nunca me abandonó.
Todo encajó a la vez.
Entonces, en un período de tiempo sorprendentemente corto, sucedieron varias cosas a la vez.
Llegó el confinamiento por la COVID-19. Estaba desesperado por no tener nada que hacer, pero tuve la suerte de contar con tres dispositivos Apple: regalos de mi familia y mi pareja. Vi el documental AlphaGo y me quedé fascinado. Aquello que me había intrigado en la universidad —la imposibilidad de que una máquina dominara el Go— se había resuelto. Y la revolución de la IA que desencadenó no había hecho más que empezar. Llegó ChatGPT. Luego Claude. Y después Apple anunció el Vision Pro.
Empecé a usar KataGo y me di cuenta de que no tenía una interfaz adecuada en la App Store®. Busqué aplicaciones Go para iPhone® y iPad® y estaban bien. Funcionaban. Pero ninguna tenía funciones de accesibilidad. Ni una sola aplicación Go en toda la App Store declaraba compatibilidad con VoiceOver, Control por Voz, Texto Dinámico ni con ninguno de los estándares de accesibilidad de Apple. Ni una sola.
Para un juego que las personas ciegas han practicado durante décadas —utilizando tableros táctiles con líneas en relieve en Japón, en la Federación Francesa de Go y en Corea—, la ausencia total de una versión digital accesible se sentía como una carencia que no debería existir. Los jugadores ciegos de Go habían quedado completamente excluidos del ecosistema de aplicaciones.
Todo se dio a la vez y encajó a la perfección. Aprendería desarrollo de iOS desde cero, utilizando herramientas de IA para acelerar el aprendizaje, y crearía una aplicación de Go que cualquiera podría usar, tuviera vista o no.
Partiendo de cero
El 1 de julio de 2024, creé un proyecto vacío en Xcode llamado "RenderedGoApp", un nombre poco inspirador. No sabía nada de Swift, SwiftUI, RealityKit ni de ninguna de las tecnologías de desarrollo de Apple. Aprendí todo por mi cuenta a través de la documentación oficial de Apple y las sesiones gratuitas de la WWDC, sin formación formal, cursos intensivos ni eventos para desarrolladores.
Dos semanas después, el 17 de julio, le cambié el nombre a "Goban3D". Goban es el nombre tradicional japonés para el tablero de madera grueso con patas en el que se juega al Go. El nombre me pareció adecuado: se ajustaba a los estándares de nomenclatura de Apple y describía con precisión la aplicación.
Recibí apoyo para la dislexia desde la escuela primaria hasta la universidad. Sé lo que se siente cuando las herramientas no están diseñadas pensando en ti. Por eso, desde la primera línea de código, la accesibilidad no fue una ocurrencia tardía, sino la razón de ser del proyecto.
El desastre de SceneKit
Uno de los momentos más difíciles fue cuando Apple dejó de dar soporte a SceneKit, el framework 3D con el que había creado toda la escena del tablero. Me había vuelto un experto. La escena tenía una mariposa revoloteando, hierba meciéndose e iluminación basada en la física. Funcionaba a la perfección con un consumo mínimo de CPU. Entonces Apple anunció que sería reemplazado por RealityKit.
Estaba furioso. Pero con el compromiso de lanzar un producto de vanguardia y sin tolerancia alguna a la deuda técnica, sabía que cada línea de SceneKit debía ser eliminada y reemplazada. La mariposa no sobrevivió. RealityKit es el nuevo producto estrella de Apple, pero es una bestia mucho más voraz que su predecesor; algo que me encantaría comentar con un ingeniero de Apple algún día.
¿Cuál es la situación actual?
Actualmente, Goban3D está disponible en beta externa en la App Store para iOS y macOS. Ofrece una cobertura de accesibilidad del 100 % en las siete categorías de accesibilidad de Apple: VoiceOver, Dynamic Type, Control por voz, Reducción de movimiento, Reducción de transparencia, Contraste suficiente y Diferenciación sin color. Funciona en todos los iPhone, desde el SE de 3,5" hasta el Pro Max de 6,9", en todos los iPad, desde el de 9,7" hasta el de 13", y de forma nativa en Mac® mediante Catalyst. El tablero 3D se renderiza en RealityKit con materiales basados en la física que reflejan la luz como la madera y la piedra reales. También incluye un modo 2D sencillo para cuando se busca simplicidad o ahorro de batería.
Nadie fuera del proceso de desarrollo sabe aún de su existencia. No hay cobertura de prensa, ni conocimiento por parte de la comunidad, ni probadores beta externos. En cierto modo, esta entrada del blog es la primera vez que hablo públicamente de ello.
¿Qué sigue?
La prioridad principal es encontrar beta testers con necesidades reales de accesibilidad: jugadores ciegos, personas con baja visión y discapacidades motoras. La aplicación se ha desarrollado siguiendo los estándares de Apple, pero estos son solo el principio. Necesito que personas reales me digan qué funciona, qué no y qué aspectos no he considerado. Encontrarlos será casi imposible, pero no me rendiré. Todos deben ser incluidos.
Si te gustaría probar Goban3D o conoces a alguien que podría beneficiarse de una app Go accesible, me encantaría saber de ti. Envía un correo electrónico a support@goban3d.com con el asunto "Beta Tester" e incluye la dirección de correo electrónico de tu ID de Apple (iPhone, iPad o Mac). Recibirás una invitación a TestFlight® en breve.
Esto ha sido lo más difícil y a la vez lo más gratificante que he hecho en mi vida. Desde un trozo de madera en un piso de estudiantes hasta la App Store: nos llevó veinte años, pero lo conseguimos.