ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
İki kişilik, ortak kelime havuzlu ve düello modlu YÖKDİL Fen kelime çalışma uygulaması. Saf HTML/CSS/JS (build adımı yok), veri katmanı Supabase. Neden Supabase: kelime havuzu + düello + liderlik tablosu ilişkisel veri (kullanıcılar, kelimeler, düello sonuçları arasında join/aggregate gerekiyor), bu da SQL'e NoSQL'den daha uygun. Ücretsiz planı 2 kişilik kullanım için fazlasıyla yeterli, sunucu kurmaya gerek yok.檢視完整 README ↗
İki kişilik, ortak kelime havuzlu ve düello modlu YÖKDİL Fen kelime çalışma uygulaması. Saf HTML/CSS/JS (build adımı yok), veri katmanı Supabase.
index.html Sayfa iskeleti, tüm sekmeler
css/styles.css Tema (light/dark), tüm görsel stiller
js/config.js Supabase config sabitleri + localStorage okuma/yazma (kimlik, tema)
js/supabaseClient.js Supabase client oluşturma
js/identity.js Cihaz bazlı kullanıcı kimliği (auth yok)
js/api.js Tüm veritabanı sorguları (words, duels, leaderboard...)
js/wordUtils.js Kelime alanı normalizasyonu (küçük harf, virgüllü eş anlam eşleşmesi)
js/app.js Bootstrap, sekme yönlendirme
js/modules/*.js Her sekme için ayrı modül (home, addWord, pool, training, duel, leaderboard, connection)
supabase/schema.sql Supabase'de çalıştırılacak tablo şeması
Neden Supabase: kelime havuzu + düello + liderlik tablosu ilişkisel veri (kullanıcılar, kelimeler, düello sonuçları arasında join/aggregate gerekiyor), bu da SQL'e NoSQL'den daha uygun. Ücretsiz planı 2 kişilik kullanım için fazlasıyla yeterli, sunucu kurmaya gerek yok.
supabase/schema.sql dosyasının tamamını yapıştırıp çalıştır. Bu, gerekli tabloları (users, words, weak_words, duels, duel_participants, duel_answers) ve erişim izinlerini kurar.Project URL ve anon public key değerlerini kopyala.
schema.sqlidempotent yazıldı (if not exists/add column if not exists) — proje zaten kuruluysa dosyayı tekrar SQL Editor'de çalıştırmak güvenlidir, sadece eksik kolon/tabloları ekler. Canlı düello özelliği eklendiğinde bu dosya güncellendi; mevcut bir projeyi güncellemek için dosyayı tekrar çalıştırman yeterli.
Supabase URL + anon key, js/config.js içinde sabit değer olarak tutuluyor — kullanıcıdan istenmiyor. anon key herkese açık kullanılmak üzere tasarlanmıştır (erişim RLS politikalarıyla korunur), koda gömülü olması güvenlik açığı değildir. Gerçek gizli anahtar service_role key'i asla client koduna konmamalı — bu projede zaten kullanılmıyor.
İlk açılışta sadece görünen ad sorulur, bu da o cihazın tarayıcısında localStorage'da saklanır ve bir daha sorulmaz. "Bağlantı" sekmesinden bu kimlik cihazdan silinebilir (tekrar ad girmek gerekir).
Aynı ismi başka bir cihazda (örn. telefonda) da girersen yeni bir kullanıcı açılmaz — sistem users tablosunda aynı isimde kayıtlı biri olup olmadığına bakar, varsa o kimliği bu cihaza da bağlar. Böylece aynı kişi birden fazla cihazdan aynı hesapla (aynı istatistik/kelime geçmişiyle) girebilir. İsimler birbirinden ayırt edilsin diye iki farklı kişi aynı ismi kullanmamalı.
Kendi Supabase projeni kullanmak istersen (örn. farklı bir kopya kurarsan), js/config.js en üstündeki SUPABASE_URL ve SUPABASE_ANON_KEY sabitlerini kendi değerlerinle değiştirmen yeterli — build adımı yok, direkt dosyayı düzenleyip deploy edersin.
Node.js kurulu olmalı (npx için).
npm run dev
veya doğrudan:
npx serve . -l 3000
Sonra tarayıcıda http://localhost:3000 aç. İlk açılışta sadece adını gireceksin.
yokdilfen.vercel.app) her iki arkadaşta da açılır. Her push'ta otomatik güncellenir.Düelloyu oluşturan "bekleme odası"na girer (duels.live_status='waiting'). Rakip Savaş sekmesinde "Katılabileceğin Canlı Düellolar" listesinden katılınca (live_status='active', ortak bir current_question_started_at zaman damgası) ikisi de aynı anda aynı soruyu görür. Her cevap sunucu zaman damgasıyla duel_answers tablosuna yazılır (Supabase Realtime ile karşı tarafa anında yansır). Her sorunun sabit bir süresi vardır (8/12/20sn); biri doğru cevaplar cevaplamaz o an soru herkes için ilerler (rakip cevap veremeden geçilir, bu yüzden ceza almaz) — kimse doğru bilemezse tam süre dolunca ilerler. Sayfa yenilenirse (current_question_index, geçmiş duel_answers satırları üzerinden) kaldığı yerden devam eder.
"Karma" yönde her sorunun TR→EN mi EN→TR mi olacağı soru sırasına göre deterministiktir (index çift/tek), böylece iki oyuncu da aynı soruyu aynı yönde görür.
Uygulama başta hem "kendi zamanında" hem "canlı" iki ayrı düello modu ile kuruldu, ama "kendi zamanında" mod kullanışsız bulunup kaldırıldı — artık tek mod var: canlı.
HP/eleme yok, düz puan sistemi: doğru cevap +15, aktif olarak yanlış cevap gönderme -5, süre dolup hiç cevap verilmezse (ne kendisi ne rakip bilemezse) 0 puan, ceza yok. Hız bonusu ya da seri çarpanı uygulanmaz; "en uzun seri" istatistiği yine de ayrıca tutulur.
Tamamlanmış düello katılımları (duel_participants) üzerinden kullanıcı bazında toplanır: toplam puan (asıl sıralama kriteri), kazanılan düello sayısı (bir düello bitince skoru yüksek olan duels.winner_id olarak yazılır, eşitlikte kimse kazanmaz — eşit toplam puanda ikinci sıralama kriteri), doğru/yanlış toplamı, en uzun seri maksimumu, maç sayısı.
kötüleşmek, bozulmak). Düelloda bunlardan sadece birini doğru yazmak yeterlidir. Kelime/anlam alanları kaydedilirken otomatik küçük harfe çevrilir (örnek cümle etkilenmez), böylece büyük/küçük harf farkı eşleşmeyi bozmaz.-, :, | ya da tab (Excel/Sheets'ten kopyalayınca otomatik) ile ayrılır; aynı ayraçla üçüncü bir parça verilirse örnek cümle olarak alınır. Örnek: run - koşmak veya deteriorate - kötüleşmek, bozulmak - Their health deteriorated quickly.. Ayraç bulunamayan satırlar atlanır, kaç satırın eklenip kaçının atlandığı işlem sonunda gösterilir.