從一塊木頭到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——花了二十年,但我們走到了這裡。