Від шматка дерева до App Store
Близько двадцяти років тому ми з моїм сусідом по кімнаті в університеті витягли з контейнера для сміття шматок дерева, намалювали на ньому сітку лінійкою, купили скляні камені в магазині художніх виробів приблизно за три фунти та почали грати в го. Я поняття не мав, що роблю. Насправді, досі не маю. Але щось у цій грі одразу мене захопило — те, як щось таке, здавалося б, просте, може бути таким неймовірно глибоким. Сітка 19×19. Чорно-білі камені. Правила, які можна вивчити за п'ять хвилин. І все ж, на той час, найпотужніші комп'ютери на землі не могли перемогти сильного гравця-людину. Це мене захоплювало.
Рання одержимість
Це захоплення було настільки глибоким, що мій проект на останньому курсі в Кінгстонському університеті був пов'язаний з комп'ютерним зорем — я вручну написав алгоритм для зчитування стану дошки для гри Go з фотографії, досягнувши точності понад 87%. На початку 2000-х, до вибуху глибокого навчання, я тихо пишався цим.
Приблизно в той самий час я відвідав Японію на два тижні спеціально для того, щоб на власні очі відчути культуру Ґо та зіграти проти місцевих гравців. Я програв усі матчі. Одна гра виділяється: молодий чоловік, ймовірно, рівня дан, дуже сором'язливий, з разюче довгими нігтями, у супроводі батька. Я був повністю знищений, перш ніж усвідомив, що сталося — мені знадобився деякий час, щоб зрозуміти, що мені потрібно звільнитися.
Кожен салон Го, який я відвідував, був настільки насичений сигаретним димом, що було майже неможливо провести гру без свіжого повітря — а я сам курець. Гравці були майже виключно літніми людьми. Го, здавалося, було розвагою для людей у золотому віці, що мене спантеличило, враховуючи репутацію Японії в галузі технологій та інновацій. Здавалося, ніхто не пов'язував Го з обчислювальною технікою. Принаймні, поки що.
Довга прогалина
Життя тривало. Я працював розробником Java, провів рік в Accenture під час навчання в університеті (під час якого в мене випало все волосся від стресу) і зрештою опинився без роботи на довгий період через проблеми зі здоров'ям. Мої навички Java ставали дедалі менш актуальними, оскільки галузь розвивалася без мене. Я намагався надолужити згаяне, але розрив став занадто великим — і виявив, що заробітна плата в цій частині галузі насправді знизилася. Воно того не варте.
Протягом усього цього часу я продовжував грати в го. Не серйозно — я відвідую го-клуб Ексетера вже близько п'ятнадцяти років, і я в кращому випадку посередній гравець. Але гра ніколи мене не відпускала.
Все клацнуло одразу
Потім, протягом надзвичайно короткого періоду, сталося кілька речей одночасно.
Настав карантин через COVID. Я ледве справлявся з труднощами, маючи справжнє задоволення, але мені пощастило мати три пристрої Apple — подарунки від родини та мого партнера. Я подивився документальний фільм про AlphaGo і був у захваті. Проблема, яка мене захоплювала в університеті — неможливість опанування Go машиною — була вирішена. А революція штучного інтелекту, яку це започаткувало, тільки починалася. З'явився ChatGPT. Потім Клод. Потім Apple анонсувала Vision Pro.
Я почав гратися з KataGo і помітив, що в нього немає належного інтерфейсу App Store®. Я переглянув програми Go, доступні для iPhone® та iPad®, і вони були... непогані. Функціональні. Але в жодній з них не було функцій спеціальних можливостей. Жодна програма Go в усьому App Store не заявляла про підтримку VoiceOver, голосового керування, динамічного введення чи будь-якого іншого стандарту спеціальних можливостей Apple. Жодної.
Для гри, в яку незрячі люди грають десятиліттями — з використанням тактильних дощок з рельєфними лініями в Японії, у Французькій федерації го, в Кореї — повна відсутність будь-якої цифрової версії здавалася прогалиною, якої не повинно існувати. Сліпі гравці в го були повністю вимкнені з екосистеми додатків.
Все змішалося в один момент і стало на свої місця. Я б самостійно навчився розробці iOS з нуля, використовуючи інструменти штучного інтелекту для пришвидшення навчання, і я б створив додаток Go, в який міг би грати кожен — зрячий чи ні.
Починаючи з нуля
1 липня 2024 року я створив порожній проєкт Xcode під назвою «RenderedGoApp» — не дуже надихаюча назва. Я нічого не знав про Swift, SwiftUI, RealityKit чи будь-які інші технології розробки Apple. Я самостійно навчився всьому через офіційну документацію Apple та безкоштовні сесії WWDC, без формального навчання, навчальних таборів чи заходів для розробників.
Через два тижні, 17 липня, я перейменував його на «Goban3D». Гобан — це традиційна японська назва товстої дерев’яної дошки з ніжками, на якій грають у го. Назва здавалася правильною — вона відповідала стандартам іменування Apple і точно описувала, що це за додаток.
Я отримував підтримку з питань дислексії від початкової школи аж до коледжу. Я знаю, як це, коли інструменти не створюються з урахуванням твоїх потреб. Тож з самого першого рядка коду доступність не була другорядною думкою — вона була причиною існування проєкту.
Катастрофа SceneKit
Один із найскладніших моментів настав, коли Apple відмовилася від підтримки SceneKit — 3D-фреймворку, на якому я створив усю сцену на дошці. Я вже добре в цьому навчився. У сцені пурхав метелик, коливалася трава, було фізичне освітлення. Все чудово працювало з мінімальним використанням процесора. Потім Apple оголосила, що його замінює RealityKit.
Я був розлючений. Але, маючи на меті створити щось передове та не допускаючи технічних заборгованостей, я знав, що кожен рядок SceneKit потрібно вирвати та замінити. «Метелик» не вижив. RealityKit — це новий візитний картка Apple, але він набагато голодніший за свого попередника — те, про що я б із задоволенням колись обговорив з інженером Apple.
Де справи
Сьогодні Goban3D перебуває у зовнішньому бета-тестуванні в App Store для iOS та macOS. Він має 100% покриття доступності у всіх семи категоріях доступності Apple — VoiceOver, Dynamic Type, Voice Control, Reduce Motion, Reduce Transparency, Sufficient Contrast та Differentiate Without Color. Він працює на кожному iPhone від 3,5-дюймового SE до 6,9-дюймового Pro Max, на кожному iPad від 9,7 до 13 дюймів та нативно на Mac® через Catalyst. 3D-дошка візуалізується в RealityKit з використанням фізичних матеріалів, які відбивають світло, як справжнє дерево та камінь. Також є чистий 2D-режим, коли вам потрібна простота або тривалий час роботи від батареї.
Ніхто поза процесом розробки ще не знає про його існування. Ні висвітлення у пресі, ні обізнаності спільноти, ні зовнішніх бета-тестерів. Цей допис у блозі, певною мірою, вперше розповідаю про це комусь публічно.
Що далі
Найбільшим пріоритетом є пошук бета-тестерів із реальними потребами у доступності — незрячих гравців, людей зі слабким зором, людей з порушеннями рухових функцій. Додаток створено за стандартами Apple, але стандарти — це лише початок. Мені потрібні реальні люди, які підкажуть мені, що працює, що ні, і про що я не подумав. Знайти їх буде схоже на пошук єдинорога, але я не здамся. Усі мають бути залучені.
Якщо ви хочете спробувати Goban3D або знаєте когось, кому була б корисна доступна програма Go, я буду радий почути вашу думку. Надішліть електронного листа на адресу support@goban3d.com із темою листа «Бета-тестер» та адресою електронної пошти Apple ID для вашого iPhone, iPad або Mac. Невдовзі після цього ви отримаєте запрошення на TestFlight®.
Це було найскладніше і найкорисніше, що я коли-небудь робив. Від шматка дерева в університетській квартирі до App Store — знадобилося двадцять років, але ми дійшли сюди.