← Powrót do bloga

Od kawałka drewna do App Store

Około dwudziestu lat temu mój współlokator na studiach i ja wyciągnęliśmy kawałek drewna ze śmietnika, narysowaliśmy siatkę linijką, kupiliśmy szklane kamienie ze sklepu plastycznego za około trzy funty i zaczęliśmy grać w Go. Nie miałem pojęcia, co robię. Właściwie wciąż nie do końca wiem. Ale coś w tej grze natychmiast mnie pochłonęło — sposób, w jaki coś tak pozornie prostego mogło być tak niemożliwie głębokie. Siatka 19×19. Czarne i białe kamienie. Zasady do nauczenia się w pięć minut. A jednak w tamtym czasie najpotężniejsze komputery na ziemi nie mogły pokonać silnego ludzkiego gracza. To mnie fascynowało.

Wczesna obsesja

Ta fascynacja była na tyle głęboka, że mój projekt na ostatni rok na Kingston University dotyczył widzenia komputerowego — ręcznie zakodowałem algorytm do odczytywania stanu planszy Go ze zdjęcia, osiągając ponad 87% dokładności. Jak na początki XXI wieku, przed eksplozją głębokiego uczenia, byłem z tego cicho dumny.

Mniej więcej w tym samym czasie odwiedziłem Japonię przez dwa tygodnie specjalnie po to, żeby doświadczyć kultury Go z pierwszej ręki i grać z lokalnymi graczami. Przegrałem każdy pojedynczy mecz. Jedna gra wyróżnia się szczególnie: młody mężczyzna, prawdopodobnie na poziomie dan, bardzo nieśmiały, z uderzająco długimi paznokciami, w towarzystwie ojca. Zostałem całkowicie zniszczony zanim zdałem sobie sprawę, co się stało — chwilę mi zajęło, żeby zorientować się, że powinienem zrezygnować.

Każdy salon go, który odwiedziłem, był tak gęsty od dymu papierosowego, że prawie niemożliwe było przeprowadzenie gry bez świeżego powietrza — a sam jestem palaczem. Gracze byli prawie wyłącznie w podeszłym wieku. Go wydawało się rozrywką dla tych w złotym wieku, co zastanawiało mnie, biorąc pod uwagę japońską reputację w zakresie technologii i innowacji. Nikt nie wydawał się łączyć Go z komputerami. Jeszcze nie.

Długa przerwa

Życie toczyło się dalej. Pracowałem jako deweloper Java, spędziłem rok w Accenture podczas studiów (w trakcie którego wszystkie włosy wypadły mi ze stresu) i ostatecznie znalazłem się bezrobotny przez długi okres po problemach zdrowotnych. Moje umiejętności w Javie stawały się coraz mniej aktualne, gdy branża poszła dalej beze mnie. Próbowałem nadrabiać, ale luka stała się zbyt duża — i odkryłem, że wynagrodzenia w tej części branży faktycznie spadły. Nie warto było.

Przez to wszystko grałem w Go. Nie poważnie — uczęszczam do Exeter Go Club na przemian od około piętnastu lat i jestem co najwyżej przeciętnym graczem. Ale gra nigdy mnie nie opuszczała.

Wszystko skoczyło naraz

Następnie, w niezwykle krótkim czasie, kilka rzeczy wydarzyło się jednocześnie.

Uderzył lockdown spowodowany pandemią COVID. Wchodziłem na ściany z nudów, ale na szczęście miałem trzy urządzenia Apple — prezenty od rodziny i partnera. Obejrzałem dokument AlphaGo i byłem zelektryzowany. Rzecz, która fascynowała mnie na studiach — niemożność maszyny opanowania Go — została rozwiązana. I rewolucja AI, którą to zapoczątkowało, dopiero się zaczynała. Pojawił się ChatGPT. Potem Claude. Potem Apple ogłosił Vision Pro.

Zacząłem bawić się z KataGo i zauważyłem, że nie ma porządnego interfejsu App Store. Spojrzałem na dostępne aplikacje Go dla iPhone i iPad i były... w porządku. Funkcjonalne. Ale żadna z nich nie miała żadnych funkcji dostępności. Ani jedna aplikacja Go w całym App Store nie deklarowała obsługi VoiceOver, Sterowania głosem, Dynamic Type ani żadnych standardów dostępności Apple. Ani jedna.

Dla gry, w którą niewidomi grają od dziesięcioleci — używając taktylnych plansz z wypukłymi liniami w Japonii, w Francuskiej Federacji Go, w Korei — całkowity brak jakiejkolwiek cyfrowo dostępnej wersji wydawał się luką, która nie powinna istnieć. Niewidomi gracze Go zostali całkowicie wykluczeni z ekosystemu aplikacji.

Wszystko sprzysięgło się naraz i po prostu zaskoczyło. Nauczę się tworzenia aplikacji iOS od zera, używając narzędzi AI do przyspieszenia nauki, i zbuduję aplikację Go, w którą każdy będzie mógł grać — widzący czy nie.

Zaczynając od zera

1 lipca 2024 roku stworzyłem pusty projekt Xcode o nazwie „RenderedGoApp" — niezbyt inspirująca nazwa. Nie wiedziałem nic o Swift, SwiftUI, RealityKit ani żadnych technologiach deweloperskich Apple. Nauczyłem się wszystkiego przez oficjalną dokumentację Apple i bezpłatne sesje WWDC, bez formalnych szkoleń, bootcampów ani wydarzeń deweloperskich.

Dwa tygodnie później, 17 lipca, przemianowałem go na „Goban3D". Goban to tradycyjna japońska nazwa grubej drewnianej planszy z nogami, na której gra się w Go. Nazwa wydawała się właściwa — odpowiadała standardom nazewnictwa Apple i mówiła dokładnie, czym jest aplikacja.

Przez całą szkołę podstawową i liceum korzystałem z wsparcia dla dyslektyków. Wiem, jak to jest, gdy narzędzia nie są budowane z myślą o tobie. Więc od samego pierwszego wiersza kodu dostępność nie była refleksją po fakcie — była powodem istnienia projektu.

Katastrofa SceneKit

Jeden z najtrudniejszych momentów nastąpił, gdy Apple wycofał SceneKit — framework 3D, w którym zbudowałem całą scenę planszy. Dobrze go znałem. Scena miała motyla fruwającego dookoła, kołyszącą się trawę, oświetlenie oparte na fizyce. Działała pięknie przy minimalnym użyciu CPU. Następnie Apple ogłosił, że jest zastępowany przez RealityKit.

Byłem wściekły. Ale ze zobowiązaniem do dostarczenia czegoś nowoczesnego i zerową tolerancją dla długu technicznego wiedziałem, że każda linia SceneKit musi zostać wyrwana i zastąpiona. Motyl nie przeżył. RealityKit to nowy ulubieniec Apple, ale jest znacznie bardziej wymagającą bestią niż jego poprzednik — coś, co chętnie omówiłbym z inżynierem Apple pewnego dnia.

Stan obecny

Dziś Goban3D jest w zewnętrznej becie w App Store dla iOS i macOS. Ma 100% pokrycia dostępności we wszystkich siedmiu kategoriach dostępności Apple — VoiceOver, Dynamic Type, Sterowanie głosem, Reduce Motion, Reduce Transparency, Sufficient Contrast i Differentiate Without Color. Działa na każdym iPhonie od 3,5" SE do 6,9" Pro Max, każdym iPadzie od 9,7" do 13" i natywnie na Macu przez Catalyst. Plansza 3D jest renderowana w RealityKit z materiałami opartymi na fizyce, które odbijają światło jak prawdziwe drewno i kamień. Dostępny jest również czysty tryb 2D dla tych, którzy chcą prostoty lub oszczędności baterii.

Nikt spoza procesu deweloperskiego nie wie o jej istnieniu. Brak relacji prasowych, świadomości społeczności, zewnętrznych beta testerów. Ten wpis na blogu jest w pewnym sensie pierwszym razem, kiedy publicznie komukolwiek o tym mówię.

Co dalej

Najważniejszym priorytetem jest znalezienie beta testerów z prawdziwymi potrzebami dostępności — niewidomi gracze, osoby słabowidzące, osoby z niepełnosprawnościami ruchowymi. Aplikacja została zbudowana zgodnie ze standardami Apple, ale standardy to dopiero początek. Potrzebuję prawdziwych ludzi, którzy powiedzą mi, co działa, co nie działa i o czym nie pomyślałem. Znalezienie ich będzie jak znalezienie jednorożca, ale się nie poddam. Wszyscy powinni być uwzględnieni.

Jeśli chciałbyś wypróbować Goban3D lub znasz kogoś, kto skorzystałby z dostępnej aplikacji Go, chętnie usłyszę od ciebie. Wyślij e-mail na adres support@goban3d.com z tematem „Beta Tester" i adresem e-mail Apple ID dla swojego iPhone, iPad lub Mac. Wkrótce otrzymasz zaproszenie TestFlight.

To była najtrudniejsza i najbardziej satysfakcjonująca rzecz, jaką kiedykolwiek robiłem. Od kawałka drewna w akademiku do App Store — zajęło to dwadzieścia lat, ale dotarliśmy.