Files
semih e0e4a0d6c7 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.
2026-10-03 08:37:47 +03:00

156 lines
6.6 KiB
Plaintext

# ╔══════════════════════════════════════════════════════════════╗
# ║ Odak — KabaLang ile yazılmış Pomodoro zamanlayıcısı ║
# ║ Odaklan, mola ver, günün oturumlarını kaydet. ║
# ╚══════════════════════════════════════════════════════════════╝
#
# Çalıştır: kabalang calistir odak.kbl
# Deneme kipi: ODAK_DENEME=1 kabalang calistir odak.kbl
# (1 dakika 1 saniye sürer — sunum ve sınama için)
kullan kaba.arayuz
kullan kaba.sistem
izinler:
ag_erisim = yanlis
# ── Oturum türleri ────────────────────────────────────────────────
sayilabilir Kip:
ODAK
MOLA
fonksiyon dakika_coz(secim: metin) -> sayi:
# "Odak · 25 dk" → 25
parca = secim.bol(" · ")[1]
don sayi(parca.degistir(" dk", ""))
fonksiyon kip_coz(secim: metin) -> Kip:
eger secim.icerir("mola"):
don Kip.MOLA
don Kip.ODAK
# 1500 → "25:00"
fonksiyon saat_metni(saniye: sayi) -> metin:
dk = saniye // 60
sn = saniye % 60
don f"{dk:02d}:{sn:02d}"
fonksiyon durum_metni(k: Kip, calisiyor: mantik) -> metin:
eger degil calisiyor:
don "Hazır olduğunda başlat"
eger k == Kip.MOLA:
don "☕ Mola — biraz nefes al"
don "● Odaklanılıyor"
# ── Durum ─────────────────────────────────────────────────────────
saniye_carpani = 1
eger cevre.al("ODAK_DENEME") == "1":
saniye_carpani = 60
toplam = 25 * 60
kalan = toplam
kip = Kip.ODAK
calisiyor = yanlis
oturum_sayisi = 0
odak_dakikasi = 0
pencere Odak:
baslik = "Odak — Pomodoro"
genislik = 900
yukseklik = 620
tema = "koyu"
yatay_kutu Govde:
dikey_kutu Zamanlayici:
girdi GorevGirdisi:
metin = "KabaLang örnekleri"
ipucu = "Ne üzerinde çalışıyorsun?"
stil = "font-size: 17px; padding: 10px 12px; border-radius: 10px; border: 1px solid #1c2336; background: #0d1220; color: #e6e9f2;"
# Canlı bağlama: yukarıdaki girdiye yazdıkça bu satır kendiliğinden değişir.
etiket Baslik:
metin = "Şu an: " + GorevGirdisi.metin
stil = "font-size: 20px; font-weight: 700; color: #22d3ee; padding: 2px 4px 6px 4px;"
acilir_liste Secim:
secenekler = ["Odak · 25 dk", "Derin çalışma · 50 dk", "Kısa mola · 5 dk", "Uzun mola · 15 dk"]
stil = "font-size: 17px; padding: 8px 12px; border-radius: 10px; background: #121829; color: #e6e9f2;"
degistiginde:
eger degil calisiyor:
kip = kip_coz(Secim.secili_metin)
toplam = dakika_coz(Secim.secili_metin) * 60
kalan = toplam
Sayac.metin = saat_metni(kalan)
Ilerleme.deger = 0
etiket Sayac:
metin = "25:00"
stil = "font-size: 112px; font-weight: 800; color: #ffffff; padding: 10px 0px 0px 6px;"
etiket Durum:
metin = "Hazır olduğunda başlat"
stil = "font-size: 18px; color: #9ece6a; padding: 0px 8px 10px 8px;"
ilerleme_cubugu Ilerleme:
deger = 0
stil = "font-size: 14px; min-height: 22px; border-radius: 11px; background: #121829; color: #e6e9f2;"
yatay_kutu Dugmeler:
dugme Baslat:
metin = "Başlat"
stil = "font-size: 19px; font-weight: 700; min-height: 54px; border-radius: 14px; border: none; background: #377ef4; color: #ffffff;"
tiklandiginda:
calisiyor = degil calisiyor
eger calisiyor:
Baslat.metin = "Duraklat"
degilse:
Baslat.metin = "Sürdür"
Durum.metin = durum_metni(kip, calisiyor)
dugme Sifirla:
metin = "Sıfırla"
stil = "font-size: 19px; font-weight: 600; min-height: 54px; border-radius: 14px; border: 1px solid #1c2336; background: #121829; color: #c9d1e6;"
tiklandiginda:
calisiyor = yanlis
kalan = toplam
Sayac.metin = saat_metni(kalan)
Ilerleme.deger = 0
Baslat.metin = "Başlat"
Durum.metin = durum_metni(kip, calisiyor)
dikey_kutu Gunluk:
etiket GunlukBasligi:
metin = "Bugün"
stil = "font-size: 20px; font-weight: 700; color: #22d3ee; padding: 6px 4px;"
etiket Ozet:
metin = "0 oturum · 0 dk odak"
stil = "font-size: 26px; font-weight: 800; color: #ffffff; padding: 2px 4px 10px 4px;"
liste Oturumlar:
stil = "font-size: 17px; color: #c9d1e6; background: #0d1220; border: 1px solid #1c2336; border-radius: 12px; padding: 8px; min-width: 330px;"
# Saniyede bir: geri say, çubuğu ilerlet, bitince kaydet ve haber ver.
zamanlayici 1000ms:
eger calisiyor:
kalan = kalan - saniye_carpani
eger kalan < 0:
kalan = 0
Sayac.metin = saat_metni(kalan)
Ilerleme.deger = (toplam - kalan) * 100 // toplam
eger kalan == 0:
calisiyor = yanlis
dakika = toplam // 60
eger kip == Kip.ODAK:
oturum_sayisi = oturum_sayisi + 1
odak_dakikasi = odak_dakikasi + dakika
Oturumlar.ekle(f"✓ {zaman.saat().parca(0, 5)} {GorevGirdisi.metin} · {dakika} dk")
sistem.bildirim("Odak", "Oturum bitti! Kısa bir mola hak ettin.")
degilse:
Oturumlar.ekle(f"☕ {zaman.saat().parca(0, 5)} Mola · {dakika} dk")
sistem.bildirim("Odak", "Mola bitti, kaldığın yerden devam.")
Ozet.metin = f"{oturum_sayisi} oturum · {odak_dakikasi} dk odak"
kalan = toplam
Sayac.metin = saat_metni(kalan)
Baslat.metin = "Başlat"
Durum.metin = "Tamamlandı — yenisine hazır"