De la o bucată de lemn la App Store
În urmă cu vreo douăzeci de ani, colegul meu de cameră și cu mine am scos o bucată de lemn dintr-un container de gunoi, am desenat o grilă pe ea cu o riglă, am cumpărat niște pietre de sticlă dintr-un magazin de artizanat pentru vreo trei lire și am început să jucăm Go. Nu știam ce fac. Nici acum nu știu prea bine, de fapt. Dar ceva din acel joc m-a captivat imediat — felul în care ceva aparent atât de simplu putea fi atât de imposibil de profund. Un grilaj de 19×19. Pietre negre și albe. Reguli pe care le poți învăța în cinci minute. Și totuși, la acea vreme, cele mai puternice calculatoare de pe pământ nu puteau bate un jucător uman puternic. Asta m-a fascinat.
O obsesie timpurie
Fascinația a mers atât de adânc încât proiectul meu de absolvire la Universitatea Kingston a fost în computer vision — am codat manual un algoritm pentru a citi starea unei table de Go dintr-o fotografie, atingând o precizie de peste 87%. Pentru începutul anilor 2000, înainte de explozia deep learning, eram în liniște mândru de asta.
În aceeași perioadă, am vizitat Japonia timp de două săptămâni special pentru a experimenta cultura Go și a juca împotriva jucătorilor locali. Am pierdut fiecare partidă. Un joc iese în evidență: un tânăr, probabil de nivel dan, foarte timid, cu unghii remarcabil de lungi, însoțit de tatăl său. Am fost complet distrus înainte să realizez ce se întâmplase — mi-a luat ceva timp să observe că trebuia să renunț.
Fiecare salon de Go pe care l-am vizitat era atât de plin de fum de țigări încât era aproape imposibil să termini o partidă fără aer proaspăt — și eu sunt fumător. Jucătorii erau aproape exclusiv vârstnici. Go părea un hobby pentru cei aflați la vârsta de aur, ceea ce m-a nedumerit dat fiind reputația Japoniei pentru tehnologie și inovație. Nimeni nu părea să conecteze Go cu calculatoarele. Încă nu, în orice caz.
Pauza lungă
Viața a mers mai departe. Am lucrat ca dezvoltator Java, am petrecut un an la Accenture în timpul universității (în care tot părul mi-a căzut din stres), și în cele din urmă m-am trezit șomer pentru o perioadă lungă din cauza dificultăților de sănătate. Abilitățile mele Java au devenit din ce în ce mai irelevante pe măsură ce industria avansa fără mine. Am încercat să țin pasul, dar decalajul crescuse prea mult — și am descoperit că salariile în acea parte a industriei chiar scăzuseră. Nu merita.
Prin toate acestea, am continuat să joc Go. Nu serios — am mers la Exeter Go Club cu intermitențe timp de vreo cincisprezece ani, și sunt un jucător mediu în cel mai bun caz. Dar jocul nu m-a lăsat să plec.
Totul s-a potrivit dintr-o dată
Apoi, într-o perioadă remarcabil de scurtă, s-au întâmplat mai multe lucruri simultan.
A venit lockdown-ul COVID. Mă plimbam prin casă fără nimic de făcut, dar eram suficient de norocos să am trei dispozitive Apple — cadouri de la familie și partenerul meu. Am urmărit documentarul AlphaGo și am fost electrizat. Lucrul cu care fusesem fascinat la universitate — imposibilitatea unui calculator de a stăpâni Go — fusese rezolvat. Iar revoluția AI pe care o declanșase abia începea. A apărut ChatGPT. Apoi Claude. Apoi Apple a anunțat Vision Pro.
Am început să mă joc cu KataGo și am observat că nu are o interfață App Store corespunzătoare. M-am uitat la aplicațiile Go disponibile pentru iPhone și iPad și erau... bune. Funcționale. Dar niciuna nu avea funcții de accesibilitate. Nicio aplicație Go din întregul App Store nu declara suport pentru VoiceOver, Voice Control, Dynamic Type sau oricare din standardele de accesibilitate Apple. Niciuna.
Pentru un joc care a fost jucat de persoane nevăzătoare de decenii — folosind table tactile cu linii reliefate în Japonia, la Federația Franceză de Go, în Coreea — absența completă a oricărei versiuni digital accesibile părea un gol care nu ar trebui să existe. Jucătorii nevăzători de Go fuseseră complet excluși din ecosistemul de aplicații.
Totul a conspirat simultan și a dat clic. Îmi voi preda iOS development de la zero, folosind instrumente AI pentru a accelera învățarea, și voi construi o aplicație Go pe care oricine o poate juca — văzător sau nu.
Pornind de la zero
Pe 1 iulie 2024, am creat un proiect Xcode gol numit "RenderedGoApp" — nu un nume prea inspirat. Nu știam nimic despre Swift, SwiftUI, RealityKit sau oricare din tehnologiile de dezvoltare Apple. Mi-am predat totul prin documentația oficială Apple și sesiunile WWDC gratuite, fără formare formală, bootcamp-uri sau evenimente pentru dezvoltatori.
Două săptămâni mai târziu, pe 17 iulie, l-am redenumit "Goban3D". Un goban este numele tradițional japonez pentru tabla groasă de lemn cu picioare pe care se joacă Go. Numele mi s-a părut potrivit — respecta standardele de denumire Apple și spunea exact ce era aplicația.
Am primit sprijin pentru dislexie din școala primară până la colegiu. Știu cum e când instrumentele nu sunt construite cu tine în minte. Deci de la primul rând de cod, accesibilitatea nu a fost un gând ulterior — a fost motivul pentru care a existat proiectul.
Dezastrul cu SceneKit
Unul dintre cele mai grele momente a venit când Apple a deprecat SceneKit — framework-ul 3D în care construisem întreaga scenă a tablei. Devenisem bun cu el. Scena avea un fluture zburând, iarbă mișcătoare, iluminare bazată fizic. Rula frumos cu CPU minim. Apoi Apple a anunțat că va fi înlocuit de RealityKit.
Eram furios. Dar cu un angajament de a lansa ceva de ultimă generație și zero toleranță pentru datorii tehnice, știam că fiecare linie de SceneKit trebuia scoasă și înlocuită. Fluturele nu a supraviețuit. RealityKit este noul favorit Apple, dar este o fiară mult mai flămândă decât predecesorul — ceva ce mi-ar plăcea să discut cu un inginer Apple într-o zi.
Unde stau lucrurile
Astăzi, Goban3D este în beta externă pe App Store pentru iOS și macOS. Are acoperire 100% pentru toate cele șapte categorii de accesibilitate Apple — VoiceOver, Dynamic Type, Voice Control, Reduce Motion, Reduce Transparency, Sufficient Contrast și Differentiate Without Color. Rulează pe fiecare iPhone de la SE de 3,5" la Pro Max de 6,9", pe fiecare iPad de la 9,7" la 13", și nativ pe Mac prin Catalyst. Tabla 3D este redată în RealityKit cu materiale fizice care captează lumina ca lemnul și piatra reale. Există și un mod 2D curat pentru când vrei simplitate sau economie de baterie.
Nimeni din afara procesului de dezvoltare nu știe că există. Nicio acoperire de presă, nicio conștientizare comunitară, niciun tester beta extern. Această postare pe blog este, într-un fel, prima dată când spun cuiva despre asta în mod public.
Ce urmează
Cea mai importantă prioritate este găsirea de testeri beta cu nevoi reale de accesibilitate — jucători nevăzători, persoane cu vedere slabă, afecțiuni motorii. Aplicația a fost construită conform standardelor Apple, dar standardele sunt doar începutul. Am nevoie de oameni reali care să îmi spună ce funcționează, ce nu și la ce nu m-am gândit. A-i găsi va fi ca găsirea unui unicorn, dar nu voi renunța. Toată lumea ar trebui să fie inclusă.
Dacă ai vrea să încerci Goban3D, sau cunoști pe cineva care ar beneficia de o aplicație Go accesibilă, mi-ar plăcea să aud de la tine. Trimite un email la support@goban3d.com cu subiectul "Beta Tester" și adresa de email Apple ID pentru iPhone-ul, iPad-ul sau Mac-ul tău. Vei primi o invitație TestFlight în scurt timp după.
Acesta a fost cel mai greu și mai recompensator lucru pe care l-am făcut vreodată. De la o bucată de lemn într-un apartament de universitate la App Store — a durat douăzeci de ani, dar am ajuns.