KabaLang örnekleri: konsol, masaüstü ve web için dokuz proje

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.
This commit is contained in:
2026-10-03 08:37:47 +03:00
commit e0e4a0d6c7
40 changed files with 2652 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
# Anket — canlı oylama
![Anket](../../medya/anket.png)
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.
```bash
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` |
![Oy ekranı](../../medya/anket-oy.png)
## Güvenlik
- **SQL enjeksiyonu:** seçenek kimliği ve istemci adresi sorguya `?` ile bağlanır.
`/oy/1 OR 1=1` var olmayan bir seçenektir → 404.
- **Çift oy:** `oy.adres` sütunu `UNIQUE`; 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çin `anket.db`'yi silin.)
Veritabanı yolu `ANKET_DB` ile değiştirilebilir (varsayılan `anket.db`).