Nintendo Switch için resmi olmayan, bağımsız bir Ekşi Sözlük istemcisi. Homebrew olarak çalışır; arayüz baştan sona native (nanovg + OpenGL ES 2), tam Türkçe metin, kontrolcü ve dokunmatik desteğiyle.
Resmi değildir. Bu proje Ekşi Sözlük ile ilişkili değildir, onlar tarafından desteklenmez. Kişisel ve eğitim amaçlı bir çalışmadır.
- Native arayüz — nanovg + GLFW/GLES2, Switch'in sistem fontuyla eksiksiz Türkçe karakter desteği (ı ğ ş İ Ğ Ş), kelime sarma, yumuşak kaydırma.
- Gündem, bugün (debe), arama, başlık okuma — sayfalı entry listeleri.
- Kontrolcü + dokunmatik — çubuk/tuşlarla gezinme veya parmakla sürükle-kaydır ve dokunarak-aç.
- Canlı veri — gerçek API'den okur; kimlik bilgisi gerektirmeden anonim oturumla çalışır.
- Çevrimdışı demo modu — yapılandırma boşsa örnek verilerle tüm arayüz gezilebilir.
Hacklenmiş (Atmosphère/CFW) bir Switch gerekir.
- Releases sayfasından en güncel
.zip'i indir. - İçindeki
switchklasörünü SD kartın köküne kopyala:sdmc:/switch/eksi-switch/eksi-switch.nro - SD kartı tak, CFW'yi başlat.
- hbmenu'yü bir oyunun üzerinde
Rtuşunu basılı tutarak aç (Album'den değil — tam bellek için gereklidir). - Listeden Eksi Sozluk'ü seç.
Liste ekranı
| Giriş | İşlev |
|---|---|
| ↑ / ↓ · sürükle | gezin / kaydır |
| A · dokun | başlığı aç |
| Y | ara |
| X | giriş yap / çıkış |
| L / R | sekme (gündem · bugün · takip) |
| ZL / ZR | önceki / sonraki sayfa |
| + | çıkış |
Başlık ekranı
| Giriş | İşlev |
|---|---|
| ↑ / ↓ · sürükle | entry seç / kaydır |
| B | geri |
| Y | entry yaz |
| X | favori |
| L / R | artı / eksi oy |
| ZL / ZR | önceki / sonraki sayfa |
devkitPro toolchain'i ve switch-dev paket grubu
gerekir. Kullanılan portlib'ler: glfw3, EGL, GLESv2, curl, mbedtls, z.
export DEVKITPRO=/opt/devkitpro
make # -> eksi-switch.nro
bash package.sh # temiz derleme + SD kart düzeni + dağıtım .zipromfs/cacert.pem HTTPS için gereklidir — Switch'te curl'ün mbedtls backend'inin
okuyabileceği bir sistem güven deposu olmadığından CA paketi uygulamayla birlikte
gider.
source/
app.{hpp,cpp} ana döngü, ekran yığını, ortak çerçeve (header/footer/toast)
model/types.hpp Entry, Topic, TopicRef, TopicList, Session
net/
http.{hpp,cpp} libcurl + arka plan worker; callback'ler render thread'inde
eksi_api.* tipli API cephesi, tolerant JSON parse, markup temizleme
api_secret.* istek imzasının (Api-Secret) mbedtls ile üretimi
api_config.hpp endpoint'ler, sabitler, anahtarlar
demo_data.* çevrimdışı fixture'lar
ui/
render.* GLFW + GLES2 + nanovg + shared font
input.* libnx HID sarmalayıcı (kontrolcü + dokunmatik)
text.* scroll.* theme.* metin, kaydırma, palet
screens/ gündem/başlık ekranları
third_party/ nanovg, nlohmann/json (vendor)
tools/capture/ API yapılandırmasını üreten yardımcı araçlar
Öne çıkan iki tasarım kararı:
- HTTP arka planda tek worker thread'de döner, ama callback'ler render
thread'inde (
Http::pump) çalışır — ekranlar kendi durumlarına kilitsiz dokunur. - Yazma işlemleri iyimserdir — favori/oy anında yerel olarak uygulanır, sunucu reddederse geri alınır; arayüz 60fps'te tepkisel kalır.
Uygulama, mobil istemcinin özel API'siyle konuşur. Host, endpoint'ler ve istek
imzalama şeması tools/capture/ altındaki araçlarla, kişinin
kendi trafiğini yakalayarak çıkarılır ve source/net/api_config.hpp
içine yazılır. Ayrıntılar için tools/capture/README.md.
api_config.hpp içindeki kBaseUrl boş bırakılırsa uygulama çevrimdışı demo
modunda çalışır.
Bu resmi olmayan, bağımsız bir istemcidir; Ekşi Sözlük ile hiçbir bağı yoktur ve onların markası, içeriği ya da hizmetleri üzerinde hak iddia etmez. Yalnızca kişisel ve eğitim amaçlıdır. Kullanmadan önce ilgili hizmet koşullarını ve yürürlükteki mevzuatı kendin değerlendir. Yazar, kullanımından doğacak sonuçlardan sorumlu değildir.
MIT — bkz. LICENSE.