Δικό μας προϊόν · Παίξτε και μάθετε σκάκι

Μια πλατφόρμα σκακιού, χτισμένη από την πρώτη κίνηση.

Το chessGM είναι μια δωρεάν εφαρμογή σκακιού: ζωντανές παρτίδες online, bots που παίζουν σαν άνθρωποι, πλήρης ανάλυση παρτίδων με φωνητικό προπονητή, γρίφοι με βαθμολογία και μαθήματα, σε αγγλικά, μπενγκάλι και χίντι. Τη μηχανή σκακιού, τον διακομιστή, τις εφαρμογές και την υπηρεσία φωνής τα γράψαμε εμείς και τα λειτουργούμε στη δική μας υποδομή.

Σε λειτουργία στο web. Η εφαρμογή iOS είναι σε έλεγχο από την Apple και η εφαρμογή Android σε κλειστές δοκιμές: σύντομα στο App Store και στο Google Play.

  • Web (PWA)
  • Android
  • iOS
  • iPadOS
γρίφοι με βαθμολογία, όλοι επαληθευμένοι από μηχανή
15.200
μαθήματα, και μια διαδρομή από το μηδέν
60
Elo απέναντι στο Stockfish 19 περιορισμένο στα 3000 (200 παρτίδες· η δική του κλίμακα)
+164
p99 εγγραφή κίνησης σε δοκιμή φόρτου με 2.500 ταυτόχρονες παρτίδες
3 ms

Μέσα στην εφαρμογή

Πραγματικές οθόνες από την εφαρμογή, όπως εμφανίζονται στα καταστήματα εφαρμογών.

Τι παίρνουν οι παίκτες

  • Ζωντανό online παιχνίδι

    Γρήγορο ζευγάρωμα σε bullet, blitz, rapid και κλασικό, με ή χωρίς βαθμολογία, με ρολόγια στον διακομιστή, βαθμολογία Glicko-2, φίλους, προκλήσεις, μηνύματα και παρακολούθηση.

  • Bots που παίζουν σαν άνθρωποι

    13 πρωτότυποι χαρακτήρες και bots εμπνευσμένα από δημόσιες παρτίδες διάσημων παικτών (χωρίς σχέση μαζί τους). Το καθένα κάνει τα λάθη που θα έκανε ένας άνθρωπος της βαθμολογίας του.

  • Ανάλυση παρτίδας με προπονητή

    Βέλη λαθών στη σκακιέρα, «Δείτε τη γραμμή» με προφορικά βήματα, εικονίδια ετικετών κινήσεων και πάνελ προπονητή που εξηγεί το γιατί. Η ακρίβεια βαθμονομήθηκε σε 739 δημόσιες παρτίδες του chess.com (τυπική διαφορά περίπου 4 πόντους) και οι ετικέτες κινήσεων ρυθμίστηκαν με βάση το Game Review του chess.com. Χωρίς καμία σχέση με το chess.com.

  • Γρίφοι και Puzzle Rush

    Περίπου 15.200 γρίφοι με βαθμολογία, θέματα, υποδείξεις και καθημερινό γρίφο. Puzzle Rush 3 και 5 λεπτών και Survival, και online Rush Battle με δική του βαθμολογία.

  • Μαθήματα με επανάληψη σε διαστήματα

    30 μαθήματα ανοιγμάτων με περίπου 50 γραμμές το καθένα, 30 μαθήματα τακτικής, μέσου παιχνιδιού και φινάλε, και διαδρομή αρχαρίων από βαθμολογία 200. Κάθε γραμμή επαληθεύεται από μηχανή και επαναλαμβάνεται με FSRS.

  • Προπονητής που εξηγεί και μιλά

    Η μηχανή σκακιού και οι κανόνες εξήγησής μας, όχι chatbot, γράφουν τι βρέθηκε, τι χάθηκε και γιατί μια κίνηση ήταν κακή, σε αγγλικά, μπενγκάλι και χίντι. Μια υπηρεσία φωνής με μοντέλα ανοιχτού κώδικα το εκφωνεί· οι φωνές παράγονται από μηχανή. Δεν καλείται καμία εξωτερική υπηρεσία AI.

  • Λειτουργεί χωρίς σύνδεση και ειδοποιεί

    Γρίφοι, bots, παιχνίδι δύο παικτών και πίνακας ανάλυσης λειτουργούν χωρίς σύνδεση στον ιστότοπο και στην εφαρμογή Android. Οι ειδοποιήσεις του ιστότοπου δουλεύουν σε browsers υπολογιστή και Android· στο iPhone, αφού προστεθεί ο ιστότοπος στην Αρχική οθόνη.

  • Δωρεάν, με ημερήσια όρια και συναίνεση

    Χωρίς αγορές μέσα στην εφαρμογή. Ορισμένες λειτουργίες έχουν δωρεάν ημερήσια όρια (10 υποδείξεις, 3 βαθιές αναλύσεις, 3 κλήσεις, 3 παρτίδες με φωνητική συνομιλία) και μια διαφήμιση με ανταμοιβή στις εφαρμογές προσθέτει μία ακόμη από την καθεμία. Οι νέοι παίκτες έχουν αρχή χωρίς διαφημίσεις και οι διαφημίσεις ακολουθούν τις επιλογές συναίνεσης του παίκτη (εξατομικευμένες μόνο με συναίνεση). Σύνδεση με Google, Apple ή email και διαγραφή λογαριασμού μέσα στην εφαρμογή.

  • Νικήστε τα bots, ένα σκαλί τη φορά

    Μια σκάλα 13 bots εξάσκησης, από το ευκολότερο έως το δυσκολότερο, με δικό μας οδηγό για καθένα, συμπαίκτες εξάσκησης, ανάλυση παρτίδων που επικολλάτε ως κείμενο, γρίφους από τα λάθη σας και αποθηκευμένη πρόοδο. Δεν συνδέεται ποτέ με bots άλλων.

  • Μάθετε πώς να νικήσετε τον αντίπαλό σας

    Πληκτρολογήστε ένα όνομα χρήστη chess.com: ο browser σας διαβάζει τις πρόσφατες δημόσιες παρτίδες του παίκτη από το δημόσιο API δεδομένων του chess.com και το chessGM τις μετατρέπει σε σχέδιο με βήματα και υπενθυμίσεις. Χωρίς σχέση με το Chess.com.

  • Φωνητική συνομιλία και κλήσεις

    Μόνο φωνή, χωρίς βίντεο. Ο ήχος πηγαίνει απευθείας ανάμεσα στις δύο συσκευές (μέσω ενδιάμεσου κόμβου μόνο όταν δεν γίνεται άμεση σύνδεση)· ο διακομιστής μας περνά μόνο τα μηνύματα εγκατάστασης και τίποτα δεν καταγράφεται ή αποθηκεύεται. Δωρεάν κάθε μέρα: 3 παρτίδες με φωνητική συνομιλία και 3 κλήσεις που απαντήθηκαν.

  • Σκακιέρες και πιόνια

    Δικά μας σετ πιονιών και σκακιέρες chessGM, μαζί με τέσσερα premium σετ πρωτότυπης τέχνης: Ebony & Boxwood, Royal Gold, Marble και Crystal. Όλα είναι δωρεάν· το «Premium» είναι μόνο ετικέτα.

Φτιαγμένο από το μηδέν

Κάθε επίπεδο είναι δικό μας, από τους κανόνες του παιχνιδιού μέχρι τον διακομιστή όπου τρέχει.

  1. Ένας διακομιστής Go

    Ένα μόνο εκτελέσιμο Go εξυπηρετεί το HTTP API και τον κόμβο WebSocket, και τρέχει τα ρολόγια, το ζευγάρωμα, έναν στόλο 1.200 λογαριασμών bot (πάντα σημασμένων ως bots) και τις μηχανές γρίφων και μαθημάτων.

    • Go
    • WebSocket
    • SQLite (WAL)
    • Glicko-2
  2. Δική μας μηχανή σκακιού

    Παραγωγή κινήσεων με bitboards επαληθευμένη με perft και αναζήτηση alpha-beta, όλα σε Go. Στη μέγιστη δύναμη προστίθεται ένα μικρό νευρωνικό δίκτυο (NNUE) που εκπαιδεύσαμε εμείς, κυρίως με τις ανοιχτές αξιολογήσεις του lichess, με μερικές θέσεις βαθμολογημένες από το Stockfish ως δάσκαλο· δεν χρησιμοποιούνται βάρη δικτύου άλλης μηχανής. Μετράει περίπου 3160 στην κλίμακα UCI_Elo του Stockfish 19 (αγώνες 200 παρτίδων με 10+0,1, ένα νήμα· η προηγούμενη μηχανή μέτρησε 2840), κλίμακα που δεν είναι Elo FIDE ή ιστότοπου. Οι νεότερες εκδόσεις είναι ακόμη ισχυρότερες. Η ίδια μηχανή τρέχει στον διακομιστή, με μεγαλύτερο δίκτυο, και μεταγλωττισμένη σε WebAssembly στον browser και στις εφαρμογές, με μικρότερο. Η ανάλυση παρτίδας, ο προπονητής και τα κατώτερα bots χρησιμοποιούν την προηγούμενη παγωμένη μηχανή, ώστε οι αριθμοί τους να μένουν σταθεροί.

    • Go
    • Bitboards
    • NNUE
    • WebAssembly
  3. Εφαρμογή web

    Στατική εφαρμογή SvelteKit σε TypeScript, με service worker για παιχνίδι χωρίς σύνδεση και γλώσσες που φορτώνονται μόνο όταν χρειάζονται.

    • SvelteKit
    • TypeScript
    • Service worker
    • PWA
  4. Εφαρμογές iOS και Android

    Εφαρμογές Capacitor με εγγενή σύνδεση, διαφημίσεις με συναίνεση, ειδοποιήσεις push, εγγενή ομιλία και ενσωματωμένο αντίγραφο εκτός σύνδεσης στην έκδοση iOS.

    • Capacitor
    • AdMob
    • Firebase Cloud Messaging
    • APNs
  5. Υπηρεσία φωνής

    Υπηρεσία μετατροπής κειμένου σε ομιλία σε Go με μικρό βοηθητικό πρόγραμμα C πάνω στο sherpa-onnx, που τρέχει ανοιχτά νευρωνικά μοντέλα φωνής και αποθηκεύει ό,τι λέει. Τα ίδια μοντέλα τρέχουν και στον browser.

    • Go
    • C
    • sherpa-onnx
    • onnxruntime-web
  6. Φωνητική συνομιλία και κλήσεις

    Ήχος WebRTC peer-to-peer ανάμεσα στις δύο συσκευές, με ενδιάμεσο κόμβο όταν η άμεση διαδρομή μπλοκάρεται. Ο διακομιστής περνά μόνο τα μηνύματα εγκατάστασης και μετρά τα δωρεάν ημερήσια όρια.

    • WebRTC
    • TURN

Λειτουργία

Τρέχουμε τους διακομιστές μόνοι μας

Καμία υπηρεσία backend ενδιάμεσα: δικός μας διακομιστής, δικές μας εκδόσεις, δική μας παρακολούθηση.

  • Ένας διακομιστής Linux που διαχειριζόμαστε εμείς, πίσω από nginx και Cloudflare, με TLS από άκρη σε άκρη
  • Ο διακομιστής του παιχνιδιού τρέχει ως υπηρεσία systemd· τα WebSockets περνούν από το nginx
  • Εκδόσεις με μία εντολή: build, ανέβασμα έκδοσης με χρονοσφραγίδα, εναλλαγή, έλεγχος υγείας, παλιές εκδόσεις για άμεση επαναφορά
  • Πολλές εκδόσεις την ημέρα, με εναλλαγή σε δευτερόλεπτα και σελίδα αναμονής κατά την επανεκκίνηση
  • SQLite σε λειτουργία WAL με νυχτερινά αντίγραφα ασφαλείας
  • Content Security Policy, IP πελατών αποδεκτές μόνο από το Cloudflare, απόρριψη εγγραφών από άλλους ιστότοπους, όρια ρυθμού στα WebSockets

Δύσκολα προβλήματα που λύσαμε

Όσα δεν βλέπουν ποτέ οι παίκτες, με τα νούμερα που μετρήσαμε.

  1. Αποθήκευση κάθε κίνησης χωρίς να καθυστερεί το παιχνίδι

    Το πρόβλημα
    Υπό φόρτο, η άμεση εγγραφή κάθε κίνησης στη βάση έφτανε τις πιο αργές εγγραφές στα 100 ms περίπου.
    Τι κάναμε
    Οι κινήσεις ομαδοποιούνται και γράφονται στο παρασκήνιο κάθε 250 ms, σε SQLite με WAL, ενώ τα ρολόγια μένουν στον διακομιστή.

    Αποτέλεσμα p99 εγγραφής κίνησης από περίπου 100 ms → 3 ms με 2.500 ταυτόχρονες παρτίδες σε δοκιμή φόρτου. Ερώτημα προφίλ 17 ms → 1,1 ms.

  2. Ακρίβεια που εμπιστεύονται οι παίκτες

    Το πρόβλημα
    Οι παίκτες συγκρίνουν τη βαθμολογία ακρίβειάς τους με τα νούμερα που ήδη ξέρουν από τους μεγάλους ιστότοπους σκακιού.
    Τι κάναμε
    Βαθμονομήσαμε το μοντέλο ακρίβειας σε 739 πραγματικές παρτίδες με βάση τις δημοσιευμένες βαθμολογίες του chess.com (χωρίς καμία σχέση μαζί του) και το ελέγξαμε σε παρτίδες που δεν είχε δει.

    Αποτέλεσμα Τυπική διαφορά περίπου 4 πόντων ακρίβειας σε παρτίδες ελέγχου, με συσχέτιση 0,9. Οι ετικέτες κινήσεων συμφωνούν ακριβώς με του chess.com περίπου στις μισές περιπτώσεις και τα πλήθη είναι κοντά.

  3. Γρίφοι με μία μόνο λύση

    Το πρόβλημα
    Ένας γρίφος με δύο καλές λύσεις, ή που τον έχεις ήδη δει σαν κατοπτρική εικόνα, μοιάζει χαλασμένος.
    Τι κάναμε
    Παράγουμε γρίφους μόνοι μας από παρτίδες της μηχανής με τον εαυτό της και από παρτίδες με ανθρώπινο μοντέλο. Μια βαθιά αναζήτηση αποδεικνύει ότι κάθε κίνηση λύσης είναι μοναδική, και αφαιρούνται τα διπλότυπα, μαζί με τα κατοπτρικά χρωμάτων και σκακιέρας.

    Αποτέλεσμα Περίπου 15.200 γρίφοι με βαθμολογία, ανάμεσά τους περίπου 4.900 νέοι από την τελευταία παραγωγή.

  4. Χωρίς σύνδεση στο iPhone, με τις διαφημίσεις να λειτουργούν

    Το πρόβλημα
    Η προβολή web της Apple επιτρέπει service workers εκτός σύνδεσης μόνο με app-bound domains, που χαλάνε το AdMob.
    Τι κάναμε
    Η επόμενη έκδοση iOS θα κουβαλά δικό της αντίγραφο της εφαρμογής web, με εγγενή κοινόχρηστη αποθήκευση που συγχρονίζεται όταν επιστρέψει η σύνδεση.

    Αποτέλεσμα Πλήρες παιχνίδι χωρίς σύνδεση στο iOS με +0,06 MB μέγεθος, στην επόμενη έκδοση του καταστήματος.

  5. Γρήγορο σε αργά δίκτυα

    Το πρόβλημα
    Πολλοί παίκτες μας είναι σε δεδομένα κινητής, και η σελίδα ανάλυσης «χοροπηδούσε» όσο φόρτωνε.
    Τι κάναμε
    Στατικό build, γλώσσες κατ’ απαίτηση, δεσμευμένος χώρος για κάθε σκακιέρα και πάνελ, και cache με service worker.

    Αποτέλεσμα First contentful paint 2,8 s → 1,0 s σε αργό 4G. Μετατόπιση διάταξης στη σελίδα ανάλυσης 0,81 → 0.

  6. Βαθμολογίες που δεν πλαστογραφούνται

    Το πρόβλημα
    Οι πίνακες κατάταξης προκαλούν απάτη όταν το κινητό αποφασίζει τι είναι σωστό και πόσο χρόνο πήρε.
    Τι κάναμε
    Οι απαντήσεις του Puzzle Rush ελέγχονται στον διακομιστή και χρονομετρούνται από το ρολόι του. Αν δεν βρεθεί άνθρωπος μέσα σε 5 δευτερόλεπτα, ένα bot μπαίνει στο Rush Battle και λύνει με ταχύτητα και ακρίβεια που αντιστοιχούν στη βαθμολογία του.

    Αποτέλεσμα Δίκαιοι πίνακες κατάταξης και bots που σχεδόν δεν κοστίζουν CPU: τα Rush bots προσομοιώνουν τη λύση αντί να τρέχουν τη μηχανή, και μια κίνηση bot σε παρτίδα παίρνει λίγα χιλιοστά του δευτερολέπτου.

  7. Νευρωνική μηχανή χωρίς φάρμα GPU

    Το πρόβλημα
    Μια ισχυρότερη μηχανή έπρεπε να τρέχει σε browser και σε έναν μικρό διακομιστή, και για την εκπαίδευση είχαμε ένα Mac και κανένα σύμπλεγμα GPU.
    Τι κάναμε
    Εκπαιδεύσαμε ένα μικρό δίκτυο NNUE με τις ανοιχτές αξιολογήσεις του lichess (τα περισσότερα δεδομένα ήταν ο μεγαλύτερος μοχλός: 10M, 20M και 94M θέσεις έδωσαν +111 και μετά +99 Elo), το ενημερώνουμε κίνηση προς κίνηση αντί να το υπολογίζουμε ξανά, και γράψαμε γρήγορο κώδικα για τους επεξεργαστές του διακομιστή που ελέγχεται bit προς bit απέναντι στην απλή έκδοση. Μια αλλαγή βγαίνει μόνο αν ένας αγώνας απέναντι στην προηγούμενη έκδοση πει ότι κερδίζει.

    Αποτέλεσμα +349 ± 37 Elo έναντι της προηγούμενης μηχανής σε 600 παρτίδες με τον εαυτό της, και 164 Elo πάνω από το Stockfish 19 περιορισμένο στα 3000 και περίπου στο ίδιο επίπεδο με το περιορισμένο στα 3190 (200 παρτίδες το καθένα, 10+0,1· ο περιορισμός του Stockfish είναι η δική του κλίμακα, όχι λίστα βαθμολογιών).

  8. Δωρεάν ημερήσια όρια, που επεκτείνονται με διαφήμιση που δεν πλαστογραφείται

    Το πρόβλημα
    Ένας παίκτης μπορεί να δει μια διαφήμιση για μία ακόμη υπόδειξη, βαθιά ανάλυση, κλήση ή παρτίδα με φωνητική συνομιλία, και τίποτα στο κινητό μόνο του δεν πρέπει να μπορεί να δώσει στον εαυτό του την ανταμοιβή.
    Τι κάναμε
    Ο διακομιστής δίνει την ανταμοιβή όταν λάβει την υπογεγραμμένη επαλήθευση από την πλευρά του διακομιστή του Google AdMob για την προβολή της διαφήμισης (με περιορισμένη εναλλακτική επιβεβαίωση από την εφαρμογή) και επαληθεύει, περιορίζει και μετρά ο ίδιος τις ανταμοιβές και τα ημερήσια όρια.

    Αποτέλεσμα Δωρεάν κάθε μέρα: 10 υποδείξεις, 3 βαθιές αναλύσεις, 3 κλήσεις και 3 παρτίδες με φωνητική συνομιλία, και μία ακόμη από την καθεμία ανά διαφήμιση με ανταμοιβή (οι προεπιλογές· ο διαχειριστής μπορεί να τις αλλάξει).

Δοκιμασμένο σαν προϊόν, όχι σαν demo

  • Παραγωγή κινήσεων επαληθευμένη με perft σε γνωστές θέσεις
  • Μια αλλαγή στη μηχανή βγαίνει μόνο αν ένας αγώνας απέναντι στην προηγούμενη έκδοση πει ότι κερδίζει, και η δύναμη ελέγχεται απέναντι στο Stockfish σε σταθερά επίπεδα
  • Γρήγορος κώδικας μηχανής για τους επεξεργαστές του διακομιστή, ελεγμένος bit προς bit απέναντι στην απλή έκδοση
  • Δοκιμές ενοποίησης διακομιστή, δοκιμές μηχανής και του build WebAssembly
  • Δοκιμές φόρτου που προσομοιώνουν χιλιάδες ταυτόχρονες παρτίδες
  • Ο προπονητής μιλά σε 0,3–2 s για νέα πρόταση, αμέσως από cache, με 18 φωνές

Τεχνολογία

  • Go
  • SQLite
  • WebSocket
  • SvelteKit
  • TypeScript
  • NNUE
  • WebAssembly
  • WebRTC
  • Capacitor
  • sherpa-onnx
  • nginx
  • Cloudflare
  • systemd

Carrom: ένα επιτραπέζιο με φυσική που γράψαμε εμείς

Δείτε όλα τα έργα μας

Θέλετε ένα παιχνίδι ή μια εφαρμογή πραγματικού χρόνου φτιαγμένη έτσι;

Σχεδιάζουμε, φτιάχνουμε και λειτουργούμε παιχνίδια και πλατφόρμες πραγματικού χρόνου από άκρη σε άκρη: εφαρμογές, διακομιστές, καταστήματα και λειτουργία.