מחתיכת עץ ל-App Store
לפני כעשרים שנה, חברי לחדר ואני הוצאנו חתיכת עץ ממכולה, ציירנו עליה רשת בעזרת סרגל, קנינו אבני זכוכית מחנות מלאכה בשלושה פאונד, והתחלנו לשחק גו. לא ידעתי מה אני עושה. עדיין לא, ממש. אבל משהו במשחק תפס אותי מייד — הדרך שבה משהו כה פשוט לכאורה יכול להיות כה עמוק בצורה בלתי אפשרית. רשת של 19×19. אבנות שחורות ולבנות. חוקים שניתן ללמוד בחמש דקות. ובכל זאת, באותה עת, המחשבים החזקים ביותר בעולם לא יכלו לנצח שחקן אנושי חזק. זה קסם לי.
אובססיה מוקדמת
הקסם היה עמוק מספיק שפרויקט השנה האחרונה שלי באוניברסיטת קינגסטון היה בראיית מחשב — כתבתי בעצמי אלגוריתם לקריאת מצב לוח גו מתצלום, עם דיוק של יותר מ-87%. לתחילת שנות האלפיים, לפני פיצוץ הלמידה העמוקה, הייתי שקט בגאווה על כך.
באותו זמן, ביקרתי ביפן למשך שבועיים ספציפית כדי לחוות את תרבות הגו ממקור ראשון ולשחק מול שחקנים מקומיים. הפסדתי בכל משחק בודד. משחק אחד בולט: צעיר, כנראה בדרגת דן, ביישן מאוד, עם ציפורניים ארוכות בצורה בולטת, שהגיע עם אביו. הושמדתי לחלוטין לפני שהבנתי מה קרה — לקח לי זמן להבין שהייתי צריך לוותר.
כל סלון גו שביקרתי היה כה עמוס בעשן סיגריות שהיה כמעט בלתי אפשרי לסיים משחק בלי אוויר צח — ואני עצמי מעשן. השחקנים היו כמעט כולם קשישים. גו נראה כבידור לאלה בשנות הזהב שלהם, דבר שהפתיע אותי לאור המוניטין של יפן בטכנולוגיה וחדשנות. איש לא נראה שמחבר את גו למחשוב. עדיין לא, בכל מקרה.
הפסקה הארוכה
החיים המשיכו. עבדתי כמפתח Java, בילתי שנה ב-Accenture בזמן האוניברסיטה (שבמהלכה כל שערי נשרו מהלחץ), ובסופו של דבר מצאתי את עצמי מובטל לתקופה ארוכה בעקבות קשיים בריאותיים. כישורי Java שלי הפכו לפחות ופחות רלוונטיים כשהתעשייה התקדמה בלעדיי. ניסיתי לעמוד בקצב, אבל הפער גדל יותר מדי — וגיליתי שהשכר בחלק הזה של התעשייה למעשה ירד. לא שווה היה.
לאורך כל זאת, המשכתי לשחק גו. לא ברצינות — הייתי מבקר במועדון גו של Exeter לסירוגין כשלושה עשר שנה, ואני שחקן ממוצע במקרה הטוב. אבל המשחק לא שחרר אותי.
הכל התחבר בבת אחת
אז, בפרק זמן קצר במיוחד, כמה דברים קרו בבת אחת.
סגר הקוביד הגיע. טיפסתי על הקירות ללא מה לעשות, אבל היה לי המזל שיהיו לי שלושה מכשירי Apple — מתנות ממשפחתי ומשותפי. צפיתי בסרט התיעודי על AlphaGo והתרגשתי. מה שריתק אותי באוניברסיטה — בלתי אפשרי שמכונה תשלוט בגו — נפתר. ומהפכת הבינה המלאכותית שהיא הצתה רק התחילה. ChatGPT הגיע. אחר כך Claude. אחר כך Apple הכריזה על Vision Pro.
התחלתי לשחק עם KataGo ושמתי לב שאין לו ממשק App Store® ראוי. הסתכלתי על אפליקציות הגו הזמינות ל-iPhone® ו-iPad® והן היו... בסדר. פונקציונאליות. אבל אף אחת מהן לא הייתה עם תכונות נגישות. אף אפליקציית גו יחידה ב-App Store לא הכריזה על תמיכה ב-VoiceOver, Voice Control, Dynamic Type, או כל אחד מסטנדרטי הנגישות של Apple. אף אחת.
למשחק שמשוחק על ידי עיוורים עשרות שנים — באמצעות לוחות טקטיליים עם קווים מוגבהים ביפן, בפדרציה הצרפתית לגו, בקוריאה — ההיעדר המוחלט של כל גרסה נגישה דיגיטלית הרגיש כמו פער שלא אמור להתקיים. שחקני גו עיוורים היו נעולים לחלוטין מחוץ לאקוסיסטם של האפליקציות.
הכל קשר יחד ופשוט התחבר. אלמד בעצמי פיתוח iOS מאפס, אשתמש בכלי AI להאצת הלמידה, ואבנה אפליקציית גו שכל אחד יוכל לשחק — רואה או לא.
מתחיל מאפס
ב-1 ביולי 2024, יצרתי פרויקט Xcode ריק בשם "RenderedGoApp" — שם לא מעורר השראה במיוחד. לא ידעתי כלום על Swift, SwiftUI, RealityKit, או כל אחת מטכנולוגיות הפיתוח של Apple. למדתי הכל דרך התיעוד הרשמי של Apple וסשני WWDC החינמיים, ללא הכשרה פורמלית, מחנות אתחול, או אירועי מפתחים.
שבועיים לאחר מכן, ב-17 ביולי, שיניתי את שמו ל-"Goban3D". גובן הוא השם היפני המסורתי ללוח העץ העבה עם הרגליים שעליו משחקים גו. השם הרגיש נכון — עמד בסטנדרטים של Apple לשמות ואמר בדיוק מה האפליקציה.
קיבלתי תמיכה לדיסלקציה מבית הספר היסודי ועד המכללה. אני יודע כיצד זה מרגיש כשכלים לא נבנו בשבילך. אז מהשורה הראשונה של הקוד, נגישות לא הייתה מחשבה שניה — היא הייתה הסיבה שהפרויקט קיים.
אסון SceneKit
אחד הרגעים הקשים ביותר הגיע כאשר Apple הצהירה על פרישת SceneKit — ה-framework התלת-ממדי שבניתי בו את כל סצנת הלוח. הייתי טוב בו. לסצנה היה פרפר מעופף, עשב מתנדנד, תאורה מבוססת-פיזיקה. רץ בצורה יפה עם מינימום CPU. ואז 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 מ-SE של 3.5" ועד Pro Max של 6.9", כל iPad מ-9.7" עד 13", ובאופן מקורי על Mac® דרך Catalyst. הלוח התלת-ממדי מרונדר ב-RealityKit עם חומרים מבוססי-פיזיקה שתופסים אור כמו עץ ואבן אמיתיים. יש גם מצב 2D נקי כשרוצים פשטות או חיסכון בסוללה.
אף אחד מחוץ לתהליך הפיתוח לא יודע על קיומה עדיין. ללא כיסוי עיתונאי, ללא מודעות בקהילה, ללא בודקי בטא חיצוניים. פוסט הבלוג הזה הוא, במובן מסוים, הפעם הראשונה שאני מספר על כך לאחרים בפומבי.
מה הבא
העדיפות הגדולה ביותר היחידה היא מציאת בודקי בטא עם צרכי נגישות אמיתיים — שחקנים עיוורים, אנשים עם ראייה חלשה, לקויות מוטוריות. האפליקציה נבנתה לפי הסטנדרטים של Apple, אבל סטנדרטים הם רק ההתחלה. אני צריך אנשים אמיתיים לספר לי מה עובד, מה לא, ומה לא חשבתי עליו. מציאתם תהיה כמו מציאת חד קרן, אבל לא אוותר. כולם צריכים להיות כלולים.
אם תרצה לנסות את Goban3D, או מכיר מישהו שיוכל ליהנות מאפליקציית גו נגישה, אשמח לשמוע ממך. שלח אימייל ל- support@goban3d.com עם שורת הנושא "Beta Tester" וכתובת ה-Apple ID ל-iPhone, iPad, או Mac שלך. תקבל הזמנת TestFlight® בקרוב לאחר מכן.
זה היה הדבר הקשה והמתגמל ביותר שעשיתי אי פעם. מחתיכת עץ בדירת מגורים של אוניברסיטה ל-App Store — לקח עשרים שנה, אבל הגענו לשם.