Konsol: fraktal (paralel şeritli 24-bit Mandelbrot/Julia + yakınlaşma), sudoku (geri izlemeli, canlı animasyon), fatura (JSON → terminal tablosu, PDF ve Excel). Masaüstü: hesap makinesi (işlem önceliği, canlı bağlama), odak (Pomodoro), parola atölyesi (entropi ölçer, SHA-256). Web: pano (Kanban REST API + SQLite), kisalt (302 yönlendirme, SVG istatistik), anket (adres başına tek oy, sunucuda çizilen grafik). Hepsi `kabalang calistir` ile derlenip çalışır; web uygulamaları yalnız 127.0.0.1'i dinler, SQL parametre bağlamalı, HTML çıktısı kaçırılır.
Anket — canlı oylama
Tek soruluk canlı anket. Oylar SQLite'ta tutulur, aynı adresten ikinci oy veritabanı kısıtıyla engellenir, sonuç grafiği her istekte sunucuda KabaLang ile SVG olarak çizilir.
kabalang calistir web/anket/anket.kbl
# → http://127.0.0.1:8473
Neyi gösteriyor
| Konu | Nerede |
|---|---|
yapi Secenek + tipli alanlar, yapı listesi döndüren fonksiyon (-> liste<Secenek>) |
secenekler |
Gövdesiz form: oy kimliği yolda (POST /oy/{id}) |
oy_ver |
| POST → 303 → GET deseni (sayfa yenilenince oy tekrar gitmez) | oy_ver |
| Aynı grafiği iki genişlikte üretmek (masaüstü / telefon) | grafik_svg(liste, isaretli, gen) |
Doğru içerik tipiyle tek başına SVG: .tip("image/svg+xml") |
/sonuc.svg |
JSON'u SQLite'ın json_object işlevine kurdurmak |
/api/sonuclar |
Güvenlik
- SQL enjeksiyonu: seçenek kimliği ve istemci adresi sorguya
?ile bağlanır./oy/1 OR 1=1var olmayan bir seçenektir → 404. - Çift oy:
oy.adressütunuUNIQUE; denetim ile kayıt tek iş parçacıklı sunucuda sırayla koşar, yarış koşulu yoktur. - Sunucu yalnız
127.0.0.1'i dinler. (Yerelde her istemci aynı adres olduğu için tarayıcı bir kez oy verebilir — anketi sıfırlamak içinanket.db'yi silin.)
Veritabanı yolu ANKET_DB ile değiştirilebilir (varsayılan anket.db).

