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:
@@ -0,0 +1,155 @@
|
||||
# ╔══════════════════════════════════════════════════════════════╗
|
||||
# ║ 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"
|
||||
Reference in New Issue
Block a user