Kendi ürünümüz · Satranç Oyna ve Öğren

İlk hamleden itibaren kurulmuş bir satranç platformu.

chessGM ücretsiz bir satranç uygulaması: canlı çevrimiçi oyunlar, insan gibi oynayan botlar, sesli koçlu tam oyun analizleri, puanlı bulmacalar ve kurslar; İngilizce, Bangla ve Hintçe. Satranç motorunu, sunucuyu, uygulamaları ve ses servisini kendimiz yazdık ve kendi altyapımızda işletiyoruz.

Web'de ve Google Play'de (Android) yayında. iOS uygulaması App Review aşamasında: yakında App Store'da.

  • Web (PWA)
  • Android
  • iOS
  • iPadOS
motor tarafından doğrulanmış puanlı bulmaca
15.200
kurs ve sıfırdan başlayan bir parkur
60
3000'e sınırlanmış Stockfish 19'a karşı Elo (200 oyun; Stockfish'in kendi ölçeği)
+164
2.500 eşzamanlı oyunluk yük testinde p99 hamle yazma süresi
3 ms

Uygulamanın içi

Mağaza sayfalarında göründükleri gibi, yayındaki uygulamadan gerçek ekranlar.

Oyuncular neler alıyor

  • Canlı çevrimiçi oyun

    Bullet, blitz, rapid ve klasik modlarda hızlı eşleşme; puanlı ya da dostane; sunucu saatleri, Glicko-2 puanları, arkadaşlar, meydan okumalar, mesajlar ve izleyicilik.

  • İnsan gibi oynayan botlar

    13 özgün karakter ve ünlü oyuncuların herkese açık oyunlarından esinlenen botlar (bağlantısız). Her biri, puanındaki bir insanın yapacağı hataları yapar.

  • Koçlu oyun analizi

    Tahtada hata okları, sesli adımlarla “Varyantı gör”, hamle etiketi rozetleri ve nedenini açıklayan bir koç paneli. Doğruluk, 739 herkese açık chess.com oyununa göre kalibre edilmiştir (tipik fark yaklaşık 4 puan) ve hamle etiketleri chess.com'un Game Review'una göre ayarlanmıştır. Chess.com ile bağlantısı yoktur.

  • Bulmacalar ve Bulmaca Koşusu

    Temalı, ipuçlu yaklaşık 15.200 puanlı bulmaca ve günün bulmacası. 3 dk, 5 dk ve Hayatta Kalma modlarında Bulmaca Koşusu ve kendi puanı olan çevrimiçi Koşu Savaşı.

  • Aralıklı tekrarlı kurslar

    Her biri yaklaşık 50 hatlı 30 açılış kursu, 30 taktik, orta oyun ve oyun sonu kursu ve 200 puandan başlayan bir yeni başlayan parkuru. Her hat motor tarafından doğrulanmış ve FSRS ile tekrar ettirilir.

  • Açıklayan ve konuşan bir koç

    Bulunanı, kaçırılanı ve bir hamlenin neden kötü olduğunu İngilizce, Bangla ve Hintçe yazan, sohbet botu değil, satranç motorumuz ve açıklama kurallarıdır. Açık kaynaklı ses modelleriyle çalışan bir ses servisi bunu seslendirir; sesler makine tarafından üretilir. Hiçbir dış yapay zekâ servisi çağrılmaz.

  • Çevrimdışı çalışır, bildirim de gönderebilir

    Bulmacalar, botlar, iki kişilik oyunlar ve analiz tahtası web sitesinde ve Android uygulamasında çevrimdışı çalışır. Web sitesi bildirimleri masaüstü ve Android tarayıcılarında çalışır; iPhone'da siteyi Ana Ekran'a ekledikten sonra.

  • Ücretsiz, günlük sınırlarla ve onayla

    Uygulama içi satın alma yoktur. Bazı özelliklerin ücretsiz günlük sınırları vardır (10 ipucu, 3 derin analiz, 3 arama, 3 sesli sohbet oyunu) ve uygulamalarda ödüllü bir reklam her birinden bir tane daha ekler. Yeni oyuncular reklamsız başlar ve reklamlar oyuncunun onay tercihlerini izler (kişiselleştirilmiş reklamlar yalnızca onayla). Google, Apple veya e-posta ile giriş yapın ve hesabınızı uygulamadan silin.

  • Botları yenin, basamak basamak

    En kolaydan en zora 13 alıştırma botundan oluşan bir merdiven; her biri için kendi rehberimiz, alıştırma ortakları, metin olarak yapıştırdığınız oyunların analizi, hatalarınızdan üretilen bulmacalar ve kayıtlı ilerleme. Başkalarının botlarına asla bağlanmaz.

  • Rakibinizi nasıl yeneceğinizi öğrenin

    Bir chess.com kullanıcı adı yazın: tarayıcınız bu oyuncunun son herkese açık oyunlarını chess.com'un herkese açık veri API'sinden okur ve chessGM bunları adımlar ve hatırlatıcılarla bir plana dönüştürür. Chess.com ile bağlantısı yoktur.

  • Sesli sohbet ve aramalar

    Yalnızca ses, görüntü yok. Ses doğrudan iki cihaz arasında akar (yalnızca doğrudan bağlantı mümkün değilse bir aktarıcı üzerinden); sunucumuz yalnızca kurulum mesajlarını iletir, hiçbir şey kaydedilmez veya saklanmaz. Her gün ücretsiz: 3 sesli sohbet oyunu ve 3 yanıtlanan arama.

  • Tahtalar ve taşlar

    Kendi chessGM taş setlerimiz ve tahtalarımız, ayrıca özgün çizimli dört premium set: Abanoz ve Şimşir, Kraliyet Altını, Mermer ve Kristal. Hepsi ücretsiz; “Premium” yalnızca bir etikettir.

Sıfırdan yapıldı

Her katman bize ait; oyunun kurallarından üzerinde çalıştığı sunucuya kadar.

  1. Tek bir Go sunucusu

    Tek bir Go ikili dosyası HTTP API'sini ve WebSocket merkezini sunar; oyun saatlerini, eşleştirmeyi, 1.200 ev botu hesabından oluşan bir filoyu (her zaman bot olarak etiketli) ve bulmaca ile kurs motorlarını çalıştırır.

    • Go
    • WebSocket
    • SQLite (WAL)
    • Glicko-2
  2. Kendi satranç motorumuz

    Perft ile doğrulanmış bitboard hamle üretimi ve alfa-beta araması; hepsi Go ile yazıldı. Tam güçte, çoğunlukla lichess'in açık değerlendirmeleri üzerinde, bazı pozisyonlar öğretmen olarak Stockfish ile puanlanarak kendimizin eğittiği küçük bir sinir ağı (NNUE) eklenir; başka hiçbir motorun ağ ağırlıkları kullanılmaz. Stockfish 19'un UCI_Elo ölçeğinde yaklaşık 3160 ölçülür (10+0.1 sürede, tek iş parçacığıyla 200 oyunluk maçlar; önceki motor 2840 ölçülmüştü); bu ölçek FIDE ya da web sitesi Elo'su değildir. Daha yeni sürümler daha da güçlüdür. Aynı motor sunucuda daha büyük bir ağla, tarayıcıda ve uygulamalarda ise WebAssembly'ye derlenmiş daha küçük bir ağla çalışır. Oyun Analizi, koç ve alt seviye botlar önceki, dondurulmuş motoru kullanır; bu yüzden sayıları sabit kalır.

    • Go
    • Bitboards
    • NNUE
    • WebAssembly
  3. Web uygulaması

    TypeScript ile yazılmış statik bir SvelteKit uygulaması; çevrimdışı oyun için bir service worker ve yalnızca gerektiğinde yüklenen diller.

    • SvelteKit
    • TypeScript
    • Service worker
    • PWA
  4. iOS ve Android uygulamaları

    Yerel giriş, onaylı reklamlar, anlık bildirimler, yerel konuşma ve iOS sürümüne gömülü çevrimdışı uygulama kopyası içeren Capacitor uygulamaları.

    • Capacitor
    • AdMob
    • Firebase Cloud Messaging
    • APNs
  5. Ses servisi

    sherpa-onnx üzerinde küçük bir C yardımcısıyla Go'da yazılmış, açık sinir ağı ses modellerini çalıştıran ve söylediklerini önbelleğe alan bir metinden konuşmaya servisi. Aynı modeller tarayıcıda da çalışır.

    • Go
    • C
    • sherpa-onnx
    • onnxruntime-web
  6. Sesli sohbet ve aramalar

    İki cihaz arasında eşler arası WebRTC sesi; doğrudan yol engellendiğinde bir aktarıcıyla. Sunucu yalnızca kurulum mesajlarını iletir ve ücretsiz günlük sınırları sayar.

    • WebRTC
    • TURN

Operasyon

Sunucuları kendimiz işletiyoruz

Arada oyun arka uç servisi yok: kendi sunucumuz, kendi dağıtımlarımız, kendi izlememiz.

  • nginx ve Cloudflare arkasında, baştan sona TLS ile tek bir kendi yönettiğimiz Linux sunucusu
  • Oyun sunucusu bir systemd servisi olarak çalışır; WebSocket'ler nginx'ten geçer
  • Tek komutla dağıtım: derle, zaman damgalı bir sürüm yükle, geç, sağlık kontrolü yap, anında geri alma için eski sürümleri sakla
  • Günde birçok dağıtım; her biri saniyeler içinde geçiş yapar, yeniden başlatma sırasında bir bekleme sayfasıyla
  • WAL modunda SQLite ve gece yedekleri
  • İçerik Güvenliği Politikası, yalnızca Cloudflare'den gelen istemci IP'lerine güven, çapraz kaynaklı yazmaların reddi, WebSocket hız sınırları

Çözdüğümüz zor sorunlar

Oyuncuların hiç görmediği kısımlar, ölçtüğümüz sayılarla.

  1. Oyunu yavaşlatmadan her hamleyi kaydetmek

    Sorun
    Yük altında her hamleyi doğrudan veritabanına yazmak en yavaş yazmaları yaklaşık 100 ms'ye çıkardı.
    Ne yaptık
    Hamleler gruplanır ve oyunun arkasında her 250 ms'de SQLite'a WAL modunda yazılır; saatler ise sunucuda kalır.

    Sonuç Yük testinde 2.500 eşzamanlı oyunla p99 hamle yazma süresi yaklaşık 100 ms → 3 ms. Profil sorgusu 17 ms → 1,1 ms.

  2. Oyuncuların güvenebileceği doğruluk

    Sorun
    Oyuncular doğruluk puanlarını büyük satranç sitelerinden bildikleri sayılarla karşılaştırır.
    Ne yaptık
    Doğruluk modelimizi 739 gerçek oyun üzerinde chess.com'un yayımladığı puanlara göre kalibre ettik (bağlantımız yok) ve daha önce görmediği oyunlarda test ettik.

    Sonuç Ayrılmış oyunlarda doğrulukta tipik olarak yaklaşık 4 puan fark ve 0,9 korelasyon. Hamle etiketleri chess.com'unkilerle yaklaşık yarı yarıya birebir uyuşuyor, sayılar ise birbirine yakın.

  3. Tam olarak tek yanıtı olan bulmacalar

    Sorun
    İki iyi yanıtı olan ya da daha önce ayna görüntüsüyle görülmüş bir bulmaca oyuncuya bozuk gelir.
    Ne yaptık
    Bulmacaları motorun kendi kendine oynadığı ve insan modeli oyunlardan şirket içinde üretiyoruz. Derin bir motor araması her çözücü hamlenin tek hamle olduğunu kanıtlar; renk ve tahta aynaları dahil kopyalar kaldırılır.

    Sonuç Yaklaşık 15.200 puanlı bulmaca; bunların yaklaşık 4.900'ü son çalıştırmadan gelen yenilerdir.

  4. iPhone'da çevrimdışı, reklamlar da çalışırken

    Sorun
    Apple'ın web görünümü çevrimdışı service worker'lara yalnızca uygulamaya bağlı alan adlarıyla izin verir ve uygulamaya bağlı alan adları AdMob'u bozar.
    Ne yaptık
    Bir sonraki iOS sürümü, bağlantı geri geldiğinde eşitlenen yerel paylaşımlı depolamayla web uygulamasının kendi çevrimdışı kopyasını taşır.

    Sonuç Bir sonraki mağaza sürümünde iOS'ta tam çevrimdışı oyun, uygulama boyutunda yalnızca +0,06 MB'a mal olarak.

  5. Yavaş ağlarda hızlı

    Sorun
    Oyuncularımızın çoğu mobil veri kullanıyor ve analiz sayfası yüklenirken zıplıyordu.
    Ne yaptık
    Statik bir derleme, istek üzerine yüklenen diller, her tahta ve panel için ayrılmış alan ve bir service worker önbelleği.

    Sonuç Yavaş 4G'de ilk anlamlı boyama 2,8 sn → 1,0 sn. Analiz sayfasında yerleşim kayması 0,81 → 0.

  6. Kimsenin taklit edemeyeceği puanlar

    Sorun
    Neyin doğru yanıt sayıldığına ve ne kadar sürdüğüne telefon karar verdiğinde liderlik tabloları hileye davetiye çıkarır.
    Ne yaptık
    Bulmaca Koşusu yanıtları sunucuda denetlenir ve sunucu saatiyle zamanlanır. 5 saniye içinde insan bulunamazsa, puanına göre modellenmiş bir hız ve doğrulukla çözen bir ev botu Koşu Savaşı'na katılır.

    Sonuç Adil liderlik tabloları ve neredeyse hiç CPU harcamayan botlar: Koşu botları motoru çalıştırmak yerine çözümlerini simüle eder ve bir oyun botunun hamlesi birkaç milisaniye sürer.

  7. GPU çiftliği olmadan sinir ağı motoru

    Sorun
    Daha güçlü bir motorun bir tarayıcıda ve tek bir küçük sunucuda çalışması gerekiyordu; eğitim için de bir Mac vardı, GPU kümesi yoktu.
    Ne yaptık
    Küçük bir NNUE ağını lichess'in açık değerlendirmeleri üzerinde eğittik (en büyük kaldıraç daha fazla veriydi: 10M, 20M ve 94M pozisyon sırasıyla +111 ve ardından +99 Elo getirdi), yeniden hesaplamak yerine hamle hamle güncelledik ve sunucu işlemcileri için sade sürümle bit bit karşılaştırılarak denetlenen hızlı kod yazdık. Bir değişiklik yalnızca önceki sürüme karşı yapılan maç kazandığını söylerse yayına çıkar.

    Sonuç 600 kendi kendine oyunda önceki motora göre +349 ± 37 Elo; 3000'e sınırlanmış Stockfish 19'un 164 Elo üzerinde ve 3190'a sınırlanmışıyla yaklaşık aynı seviyede (her biri 200 oyun, 10+0.1; Stockfish'in sınırlayıcısı kendi ölçeğidir, bir puan listesi değildir).

  8. Taklit edilemeyen bir reklamla uzatılan ücretsiz günlük sınırlar

    Sorun
    Oyuncu bir ipucu, derin analiz, arama veya sesli sohbet oyunu daha kazanmak için reklam izleyebilir ve tek başına telefondaki hiçbir şey bu ödülü kendi kendine verememelidir.
    Ne yaptık
    Sunucu, ödülü Google AdMob'un reklam görüntülemesine ilişkin imzalı sunucu tarafı doğrulamasını aldığında verir (uygulamanın onayladığı sınırlı bir yedekle) ve ödülleri ile günlük sınırları kendisi doğrular, sınırlar ve sayar.

    Sonuç Her gün ücretsiz: 10 ipucu, 3 derin analiz, 3 arama ve 3 sesli sohbet oyunu; ödüllü her reklam için her birinden bir tane daha (varsayılanlar; işletmeci değiştirebilir).

Demo değil, ürün gibi test edildi

  • Hamle üretimi bilinen pozisyonlara karşı perft ile doğrulanır
  • Bir motor değişikliği yalnızca önceki sürüme karşı yapılan maç kazandığını söylerse yayına çıkar ve güç, sabit seviyelerde Stockfish'e karşı denetlenir
  • Sunucu işlemcileri için hızlı motor kodu, sade sürümle bit bit karşılaştırılarak denetlenir
  • Sunucu entegrasyon testleri, motor testleri ve WebAssembly derleme testleri
  • Binlerce eşzamanlı oyunu simüle eden yük testleri
  • Sesli koç yanıtları yeni bir cümle için 0,3–2 sn, önbellekteyse anında; 18 sesle

Teknoloji

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

Carrom: fiziğini kendimiz yazdığımız bir tahta oyunu

Tüm çalışmalarımız

Bir oyunu ya da gerçek zamanlı bir uygulamayı bu şekilde kurdurmak ister misiniz?

Oyunları ve gerçek zamanlı platformları baştan sona tasarlıyor, geliştiriyor ve işletiyoruz: uygulamalar, sunucular, mağazalar ve operasyon.