Από ένα Κομμάτι Ξύλο στο App Store
Πριν από περίπου είκοσι χρόνια, ο συγκάτοικός μου στο πανεπιστήμιο κι εγώ βγάλαμε ένα κομμάτι ξύλο από έναν κάδο κατεδάφισης, χαράξαμε ένα πλέγμα με χάρακα, αγοράσαμε μερικές γυάλινες πέτρες από ένα κατάστημα χειροτεχνίας για περίπου τρεις λίρες, και αρχίσαμε να παίζουμε Go. Δεν ήξερα τι έκανα. Δεν ξέρω και τώρα, στην πραγματικότητα. Αλλά κάτι σε αυτό το παιχνίδι με τράβηξε αμέσως — ο τρόπος που κάτι τόσο απλό στην εμφάνιση μπορούσε να είναι τόσο απίστευτα βαθύ. Ένα πλέγμα 19×19. Μαύρες και άσπρες πέτρες. Κανόνες που μαθαίνεις σε πέντε λεπτά. Κι όμως, εκείνη την εποχή, οι πιο ισχυροί υπολογιστές στη Γη δεν μπορούσαν να νικήσουν έναν δυνατό ανθρώπινο παίκτη. Αυτό με γοήτευε.
Μια Πρώιμη Εμμονή
Αυτή η γοητεία ήταν τόσο βαθιά που η εργασία της τελευταίας χρονιάς μου στο Kingston University ήταν στην όραση υπολογιστών — κωδικοποίησα χειροκίνητα έναν αλγόριθμο για να διαβάζει την κατάσταση μιας σκακιέρας Go από μια φωτογραφία, επιτυγχάνοντας ακρίβεια άνω του 87%. Για τις αρχές της δεκαετίας του 2000, πριν την έκρηξη της βαθιάς μάθησης, ήμουν κρυφά υπερήφανος γι' αυτό.
Την ίδια περίπου εποχή, επισκέφθηκα την Ιαπωνία για δύο εβδομάδες αποκλειστικά για να ζήσω την κουλτούρα του Go από κοντά και να παίξω με τοπικούς παίκτες. Έχασα κάθε παιχνίδι. Ένα ξεχωρίζει: ένας νεαρός, πιθανώς dan-επιπέδου, πολύ ντροπαλός, με εντυπωσιακά μακριά νύχια, που τον συνόδευε ο πατέρας του. Με συνέτριψε πλήρως πριν καν καταλάβω τι είχε συμβεί — χρειάστηκε λίγος χρόνος για να αντιληφθώ ότι έπρεπε να παραιτηθώ.
Κάθε σαλόνι Go που επισκέφθηκα ήταν τόσο γεμάτο τσιγαριλίκι που ήταν σχεδόν αδύνατο να ολοκληρώσεις ένα παιχνίδι χωρίς φρέσκο αέρα — και καπνίζω κι εγώ ο ίδιος. Οι παίκτες ήταν σχεδόν αποκλειστικά ηλικιωμένοι. Το Go φαινόταν να είναι ασχολία για τα χρόνια της σύνταξης, πράγμα που με μπέρδευε δεδομένης της φήμης της Ιαπωνίας για την τεχνολογία και την καινοτομία. Κανείς δεν φαινόταν να συνδέει το Go με την πληροφορική. Όχι ακόμα, τουλάχιστον.
Το Μεγάλο Κενό
Η ζωή συνεχίστηκε. Δούλεψα ως προγραμματιστής Java, πέρασα ένα χρόνο στην Accenture κατά τη διάρκεια των σπουδών μου (κατά τη διάρκεια του οποίου έπεσαν όλα μου τα μαλλιά από το άγχος), και τελικά βρέθηκα άνεργος για μεγάλο διάστημα λόγω προβλημάτων υγείας. Οι δεξιότητές μου στη Java έγιναν όλο και πιο άσχετες καθώς ο κλάδος προχωρούσε χωρίς εμένα. Προσπάθησα να ακολουθήσω, αλλά το χάσμα είχε γίνει πολύ μεγάλο — και ανακάλυψα ότι οι μισθοί σε εκείνο τον τομέα της βιομηχανίας είχαν στην πραγματικότητα μειωθεί. Δεν άξιζε τον κόπο.
Μέσα σε όλα αυτά, συνέχισα να παίζω Go. Όχι σοβαρά — πηγαίνω στο Exeter Go Club πότε πότε εδώ και περίπου δεκαπέντε χρόνια, και είμαι μέτριος παίκτης στην καλύτερη περίπτωση. Αλλά το παιχνίδι δεν με άφηνε ποτέ.
Όλα Έπεσαν στη Θέση τους Ταυτόχρονα
Έπειτα, μέσα σε ένα εκπληκτικά σύντομο διάστημα, συνέβησαν αρκετά πράγματα ταυτόχρονα.
Ήρθε το lockdown λόγω COVID. Ανέβαινα στους τοίχους χωρίς τίποτα να κάνω, αλλά ήμουν τυχερός που είχα τρεις συσκευές Apple — δώρα από την οικογένεια και τον σύντροφό μου. Είδα το ντοκιμαντέρ για το AlphaGo και ηλεκτρίστηκα. Το πράγμα που με είχε γοητεύσει στο πανεπιστήμιο — η αδυναμία μιας μηχανής να κατακτήσει το Go — είχε λυθεί. Και η επανάσταση της Τεχνητής Νοημοσύνης που ξεκίνησε ήταν μόλις στην αρχή της. Ήρθε το ChatGPT. Μετά το Claude. Κι έπειτα η Apple ανακοίνωσε το Vision Pro.
Άρχισα να ασχολούμαι με το KataGo και παρατήρησα ότι δεν είχε μια σωστή διεπαφή App Store. Κοίταξα τις εφαρμογές Go που ήταν διαθέσιμες για iPhone® και iPad® και ήταν… εντάξει. Λειτουργικές. Αλλά καμία δεν είχε λειτουργίες προσβασιμότητας. Ούτε μία εφαρμογή Go σε ολόκληρο το App Store® δεν δήλωνε υποστήριξη για VoiceOver, Voice Control, Dynamic Type, ή οποιοδήποτε πρότυπο προσβασιμότητας της Apple. Ούτε μία.
Για ένα παιχνίδι που παίζεται από τυφλούς ανθρώπους εδώ και δεκαετίες — με ανάγλυφες σανίδες στην Ιαπωνία, στην Ομοσπονδία Go της Γαλλίας, στην Κορέα — η πλήρης απουσία οποιασδήποτε ψηφιακά προσβάσιμης έκδοσης φαινόταν σαν ένα κενό που δεν έπρεπε να υπάρχει. Οι τυφλοί παίκτες Go είχαν αποκλειστεί τελείως από το οικοσύστημα των εφαρμογών.
Όλα συνωμότησαν ταυτόχρονα και έπεσαν στη θέση τους. Θα μάθαινα iOS development από το μηδέν, χρησιμοποιώντας εργαλεία ΤΝ για να επιταχύνω την εκμάθηση, και θα έφτιαχνα μια εφαρμογή Go που θα μπορούσε να παίξει ο καθένας — με ή χωρίς όραση.
Ξεκινώντας από το Μηδέν
Την 1η Ιουλίου 2024, δημιούργησα ένα κενό project στο Xcode με το όνομα "RenderedGoApp" — όχι και το πιο εμπνευσμένο όνομα. Δεν ήξερα τίποτα για Swift, SwiftUI, RealityKit, ή οποιαδήποτε τεχνολογία ανάπτυξης της Apple. Έμαθα τα πάντα μέσα από την επίσημη τεκμηρίωση της Apple και τις δωρεάν συνεδρίες WWDC, χωρίς επίσημη εκπαίδευση, bootcamps ή developer events.
Δύο εβδομάδες αργότερα, στις 17 Ιουλίου, το μετονόμασα "Goban3D". Το goban είναι το παραδοσιακό ιαπωνικό όνομα για τη χοντρή ξύλινη σανίδα με πόδια πάνω στην οποία παίζεται το Go. Το όνομα ένιωθα σωστό — συμμορφωνόταν με τα πρότυπα ονοματοδοσίας της Apple και έλεγε ακριβώς τι ήταν η εφαρμογή.
Έλαβα υποστήριξη για δυσλεξία από το δημοτικό σχολείο μέχρι και το λύκειο. Ξέρω πώς είναι όταν τα εργαλεία δεν έχουν φτιαχτεί με γνώμονα εσένα. Έτσι από την πρώτη γραμμή κώδικα, η προσβασιμότητα δεν ήταν μια δεύτερη σκέψη — ήταν ο λόγος ύπαρξης του project.
Η Καταστροφή του SceneKit
Μια από τις πιο δύσκολες στιγμές ήρθε όταν η Apple αποσύρει το SceneKit — το 3D framework πάνω στο οποίο είχα φτιάξει ολόκληρη τη σκηνή της σανίδας. Το είχα μάθει καλά. Η σκηνή είχε μια πεταλούδα που πετούσε τριγύρω, γρασίδι που κουνιόταν, φυσικό φωτισμό. Έτρεχε όμορφα με ελάχιστη κατανάλωση CPU. Έπειτα η Apple ανακοίνωσε ότι θα αντικατασταθεί από το RealityKit.
Έγινα έξαλλος. Αλλά με δέσμευση στην παράδοση κάτι τεχνολογικά προηγμένου, και μηδενική ανοχή στο τεχνικό χρέος, ήξερα ότι κάθε γραμμή SceneKit έπρεπε να ξεριζωθεί και να αντικατασταθεί. Η πεταλούδα δεν επέζησε. Το RealityKit είναι το νέο παιδί-αφίσα της Apple, αλλά είναι ένα πολύ πιο πεινασμένο θηρίο από τον προκάτοχό του — κάτι που θα ήθελα πολύ να συζητήσω με έναν μηχανικό της Apple κάποια μέρα.
Η Σημερινή Κατάσταση
Σήμερα, το Goban3D βρίσκεται σε εξωτερική beta στο 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. Η τρισδιάστατη σανίδα αποδίδεται σε RealityKit με υλικά φυσικής βάσης που πιάνουν το φως όπως πραγματικό ξύλο και πέτρα. Υπάρχει επίσης ένα καθαρό 2D mode για όταν θέλετε απλότητα ή εξοικονόμηση μπαταρίας.
Κανείς εκτός από τη διαδικασία ανάπτυξης δεν γνωρίζει ακόμα ότι υπάρχει. Καμία κάλυψη από τον τύπο, καμία κοινότητα που να το γνωρίζει, κανένας εξωτερικός beta tester. Αυτή η ανάρτηση στο ιστολόγιο είναι, κατά κάποιον τρόπο, η πρώτη φορά που το λέω δημόσια σε κάποιον.
Τι Ακολουθεί
Η μεγαλύτερη προτεραιότητα είναι να βρω beta testers με πραγματικές ανάγκες προσβασιμότητας — τυφλούς παίκτες, ανθρώπους με χαμηλή όραση, κινητικές αναπηρίες. Η εφαρμογή έχει φτιαχτεί σύμφωνα με τα πρότυπα της Apple, αλλά τα πρότυπα είναι μόνο η αρχή. Χρειάζομαι πραγματικούς ανθρώπους που να μου πουν τι δουλεύει, τι δεν δουλεύει, και τι δεν έχω σκεφτεί. Το να τους βρω θα είναι σαν να ψάχνω για μονόκερο, αλλά δεν θα τα παρατήσω. Όλοι πρέπει να έχουν πρόσβαση.
Αν θέλετε να δοκιμάσετε το Goban3D, ή γνωρίζετε κάποιον που θα ωφελούνταν από μια προσβάσιμη εφαρμογή Go, θα χαρώ πολύ να σας ακούσω. Στείλτε ένα email στη διεύθυνση support@goban3d.com με θέμα "Beta Tester" και τη διεύθυνση Apple ID email για το iPhone, iPad ή Mac σας. Θα λάβετε μια πρόσκληση TestFlight® λίγο αργότερα.
Αυτό ήταν το πιο δύσκολο και πιο ανταποδοτικό πράγμα που έχω κάνει ποτέ. Από ένα κομμάτι ξύλο σε ένα φοιτητικό διαμέρισμα μέχρι το App Store — χρειάστηκαν είκοσι χρόνια, αλλά φτάσαμε.