从一块木头到App Store
大约二十年前,我和大学室友从一个废料堆里捡了一块木板, 用尺子在上面画了棋盘格,又花了大约三英镑在手工艺品店买了一些玻璃棋子, 然后开始下围棋。我完全不知道自己在做什么。老实说,现在也差不多。 但围棋一下子就抓住了我——这么看似简单的东西,怎么能深不见底呢? 一张19×19的棋盘,黑白两色棋子,五分钟就能学会的规则。 然而在那个年代,地球上最强大的计算机也无法击败顶尖的人类棋手。 这件事让我着了迷。
最初的痴迷
这份着迷深入骨髓,以至于我在Kingston University的毕业设计就是计算机视觉方向—— 我从零开始手写了一个算法,通过照片识别棋盘上的棋局状态,准确率超过87%。 在深度学习大爆发之前的2000年代初期,我对此还是挺自豪的。
差不多同一时期,我专程去了日本两周,目的就是亲身体验围棋文化,和当地棋手对弈。 每一局都输了。有一盘棋我至今难忘:对手是一位年轻人,大概有段位水平, 非常腼腆,指甲长得引人注目,身旁有父亲陪同。 我还没反应过来就被彻底击溃了——过了好一会儿我才意识到自己该认输了。
我去过的每一家围棋沙龙都弥漫着浓到化不开的烟雾, 就连我这个烟民也几乎无法在不透口气的情况下下完一整局。 棋手几乎清一色是老年人。考虑到日本在科技和创新方面的声誉, 围棋沦为老年人的消遣让我觉得很不可思议。 似乎还没有人把围棋和计算联系到一起。至少当时还没有。
漫长的空白
生活继续。我做过Java开发,大学期间在Accenture实习了一年 (压力大到头发全掉光了),后来因为健康问题陷入了很长一段时间的失业。 我的Java技能在行业飞速发展中逐渐过时。 我试过追赶,但差距已经拉得太大了—— 更令人沮丧的是,我发现那个领域的薪资水平竟然还下降了。 不值得再坚持了。
然而,在这一切起伏中,我一直在下围棋。算不上认真—— 大约十五年来,我断断续续地参加Exeter围棋俱乐部的活动,水平顶多算中等。 但围棋从未真正放开过我。
一切同时到位
接着,在一段出奇短暂的时间里,好几件事同时发生了。
新冠疫情来了,封城开始。我百无聊赖,快把墙壁都爬遍了, 但幸运的是手头有三台Apple设备——都是家人和伴侣送的礼物。 我看了AlphaGo的纪录片,整个人像被电击了一样。 大学时代让我着迷的那件事——机器不可能掌握围棋——竟然已经被攻克了。 而由此引发的AI革命才刚刚拉开序幕。 ChatGPT出现了,紧接着是Claude,然后Apple发布了Vision Pro。
我开始玩KataGo,发现它并没有一个像样的App Store界面。 我翻遍了iPhone和iPad上的围棋应用,它们……还行。功能是有的。 但没有一个具备任何无障碍功能。 整个App Store上的围棋应用,没有一个声明支持VoiceOver、Voice Control、 Dynamic Type或Apple的任何无障碍标准。一个都没有。
对于一项几十年来一直有盲人参与的运动来说—— 在日本、法国围棋联合会和韩国,都有使用凸线触觉棋盘下棋的传统—— 数字世界中竟然完全没有无障碍版本,这个空白不应该存在。 视障围棋爱好者被整个应用生态完全排斥在外了。
所有这些因素同时汇聚,一下子全对上了。 我要从零自学iOS开发,借助AI工具加速学习过程, 做一款人人都能玩的围棋应用——无论看得见还是看不见。
从零起步
2024年7月1日,我创建了一个空白的Xcode项目,名叫"RenderedGoApp"—— 这名字毫无灵感可言。我对Swift、SwiftUI、RealityKit以及Apple的各种开发技术一无所知。 我完全通过Apple的官方文档和免费的WWDC视频自学, 没有参加过任何正式培训、训练营或开发者活动。
两周后的7月17日,我把项目改名为"Goban3D"。 碁盘(goban)是围棋中传统厚木棋桌的日语名称。 这个名字感觉恰到好处——符合Apple的命名规范, 也精准地表达了这款应用是什么。
从小学到大学,我一直接受读写障碍方面的支持。 我深知当工具不是为你而设计时是什么感受。 所以从第一行代码开始,无障碍就不是事后补救—— 它是这个项目存在的理由本身。
SceneKit的灾难
最痛苦的时刻之一,是Apple宣布弃用SceneKit—— 那是我用来构建整个棋盘场景的3D框架。 我已经用得很熟练了。场景里有蝴蝶翩翩飞舞、草丛随风摇曳、 基于物理的光照效果。运行流畅,CPU占用极低。 然后Apple宣布它将被RealityKit取代。
我气炸了。但既然立志要做最前沿的东西, 又对技术债务零容忍,我知道SceneKit的每一行代码都必须推倒重来。 那只蝴蝶没能幸存。RealityKit是Apple新的招牌框架, 但它比前任要贪婪得多—— 这个话题我很想有朝一日跟Apple的工程师好好聊聊。
目前的状态
如今,Goban3D已在App Store上以iOS和macOS外部测试版的形式发布。 它在Apple无障碍功能的全部七个类别中实现了100%覆盖—— VoiceOver、Dynamic Type、Voice Control、Reduce Motion、Reduce Transparency、 Sufficient Contrast和Differentiate Without Color。 它能在从3.5英寸SE到6.9英寸Pro Max的所有iPhone上运行, 也支持从9.7英寸到13英寸的所有iPad, 并通过Catalyst在Mac上原生运行。 3D棋盘使用RealityKit渲染,采用基于物理的材质, 光影效果如同真实的木头和石头。 还有一个简洁的2D模式,适合追求简约或节省电量时使用。
除了开发过程中的参与者之外,目前还没有人知道它的存在。 没有媒体报道,没有社区认知,没有外部测试人员。 这篇博客文章,某种意义上是我第一次公开谈论它。
下一步
当前最重要的事情是找到有真实无障碍需求的测试者—— 盲人棋手、低视力用户、运动功能障碍人群。 这款应用是按照Apple的标准构建的,但标准只是起点。 我需要真实用户告诉我哪些做得好、哪些不够好、哪些是我没想到的。 找到他们或许像大海捞针,但我不会放弃。每个人都应该被包含在内。
如果你想试用Goban3D,或者认识可能受益于一款无障碍围棋应用的朋友, 我非常期待收到你的消息。请发送邮件至 support@goban3d.com, 主题写"Beta Tester",并附上你iPhone、iPad或Mac的Apple ID邮箱地址。 我会尽快发送TestFlight邀请。
这是我做过的最艰难、也最有成就感的事情。 从大学宿舍里的一块木板到App Store——花了二十年,但我们走到了这里。