İşletme yazılımlarının lisans sürelerini takip etmek için yıllık yüzlerce euro ödüyor musunuz? Birçok şirket, basit bir tablo ve e-posta bildiriminden oluşan bu ihtiyacı karşılamak için aylık abonelikler ödüyor. Oysa aynı işi sadece 100 satırlık bir Python uygulamasıyla da halledebilirsiniz. LiMa adlı açık kaynaklı proje, bunu nasıl yapabileceğinizi gösteriyor: tamamen yerel çalışan, veritabanı gerektirmeyen ve sadece gerekli fonksiyonları içeren bir lisans yönetim aracı.
Yerel veritabanında lisans verilerini saklama: SQLite basitliği
LiMa projesi, lisans bilgilerini saklamak için SQLite veritabanını tercih ediyor. Tüm yapı, sadece iki kolonlu bir tabloyla sınırlı: yazılım adı ve son kullanma tarihi. Diğer tüm hesaplamalar, uygulamayı her yenilediğinde gerçek zamanlı olarak yapılıyor. Bu yaklaşım, veritabanında gereksiz verilerin birikmesini ve eskiyen bilgilerin oluşmasını engelliyor.
self.cursor.execute('''
CREATE TABLE IF NOT EXISTS licenses (
software_name TEXT,
expiration_date TEXT
)
''')Uygulama, her dakika tablonun yenilenmesini sağlayan bir zamanlayıcı kullanıyor. Bu sayede, lisans süreleri saniyelik hassasiyetle değil, dakikalık aralıklarla güncelleniyor. Geliştiricinin deneyiminden bir not: İlk versiyonda zamanlayıcı 1 saniyede çalıştırılıyordu. Ancak bu gereksiz kaynak tüketimine yol açıyordu. 60 saniyelik aralıklar, lisans takibi için yeterli olmanın yanı sıra, sistem kaynaklarını da koruyor.
Çapraz platform bildirimleri: plyer ile yerel uyarılar
Çoğu bulut tabanlı çözüm, "akıllı uyarı sistemleri" adı altında karmaşık API'ler sunuyor. Oysa LiMa, basitçe işletim sisteminin yerel bildirim sistemini kullanıyor. Python kütüphanesi `plyer`, Windows, macOS ve Linux için aynı API arayüzünü sağlıyor. Bu sayede, uygulama arka planda çalışırken bile kullanıcıya anında bildirimler gönderilebiliyor.
Uygulama, lisans süresine göre altı farklı uyarı seviyesi sunuyor:
- 30 günden az kaldığında: "1 ay içinde sona erecek"
- 14 günden az kaldığında: "2 hafta içinde sona erecek"
- 7 günden az kaldığında: "1 hafta içinde sona erecek"
- 3 günden az kaldığında: "3 günden az kaldı"
- 1 gün kaldığında: "Yarın sona erecek"
- Sona erdiğinde: "X gündür geçerli değil"
Bu sistem, Tkinter gibi kütüphanelerin gerektirdiği karmaşık pencere hilelerine gerek kalmadan, yerel bildirimlerin doğal görünümünü koruyor.
E-posta raporları: Matplotlib ile grafikli raporlama
LiMa’nın en etkileyici özelliği, lisans durumunu özetleyen otomatik e-posta raporları sunması. Her uyarı döngüsünde, uygulama:
- Yaygın grafik oluşturuyor: "Sona eren lisanslar" ve "geçerli lisanslar" arasındaki dağılımı gösteren pasta grafiği.
- Grafiği PNG olarak kaydediyor.
- HTML formatında e-posta gönderiyor ve grafiği ek olarak ekliyor.
Python’un standart kütüphaneleri olan smtplib ve email.mime kullanılarak gerçekleştirilen bu süreç, üçüncü parti API’lere veya token yenilemelerine gerek bırakmıyor. Kullanıcı, SMTP sunucusu aracılığıyla gönderilen temiz bir e-posta alır. Kurum içi SMTP sunucunuz yoksa, Gmail gibi servisler de bu görevi yerine getirebilir.
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
def send_email(subject, html_body, attachment_path):
msg = MIMEMultipart()
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
msg['Subject'] = subject
msg.attach(MIMEText(html_body, 'html'))
with open(attachment_path, 'rb') as f:
part = MIMEBase('application', 'octet-stream')
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f'attachment; filename={attachment_path}')
msg.attach(part)
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login('user@example.com', 'password')
server.send_message(msg)Kullanıcı arayüzü: Tamamlanmış bir uygulama, sadece bir prototip değil
LiMa’nın sunduğu özellikler, basit bir komut satırı aracından çok daha fazlasını içeriyor. Uygulamanın menü seçeneklerinde şunlar bulunuyor:
- CSV dosyalarından veri aktarımı ve dışa aktarımı
- Yazdırma işlevi (
QPrinterile) - Sıralama seçenekleri (A-Z, Z-A)
- Bildirimlerin açıp kapatılması
- Görsel istatistikler (Matplotlib grafikleri)
- SMTP ayarları
- Açık/koyu tema geçişi
- "Hakkında" bilgileri
Tüm bu özellikler, sadece tek bir Python dosyası (lima.py) içinde yer alıyor. Bu, projenin bir prototip değil, gerçek bir işletme aracı olduğunu gösteriyor.
Açık/koyu tema geçişi: CSS stilleriyle PyQt5’e modern dokunuş
PyQt5, stillerini CSS benzeri bir syntax ile yönetmeyi destekliyor. Bu sayede, uygulamanın tema geçişi sadece birkaç satır kodla gerçekleştirilebiliyor. Koyu tema için şu stil uygulanıyor:
def toggle_dark_mode(self):
self.setStyleSheet("""
QMainWindow {
background: qlineargradient(
x1: 0, y1: 0, x2: 1, y2: 1,
stop: 0 #323232, stop: 1 #1e1e1e
);
}
QTableWidget {
background-color: #2d2d2d;
color: #ffffff;
}
""")Bu basit yaklaşım, uygulamanın kullanıcı dostu ve modern bir görünüm kazanmasını sağlıyor.
Sonuç: Kendi aracınızı oluşturun, aboneliklerden kurtulun
LiMa projesi, basit bir ihtiyacı karşılamak için ne kadar az kodun yeterli olduğunu gösteriyor. Bu yaklaşım, şirketlerin yıllık binlerce euro tasarruf etmesine ve verilerini üçüncü parti sunuculara emanet etmek zorunda kalmamasına olanak tanıyor. Tabii ki, her durumda bulut tabanlı çözümler daha uygun olabilir — ancak basit bir lisans takip aracı için, kendi uygulamanızı geliştirmek hem ekonomik hem de teknolojik açıdan cazip bir seçenek.
Günümüzde, birçok şirket halihazırda karmaşık SaaS çözümlerini kullanıyor. Oysa basit bir masaüstü uygulamasıyla aynı işi yapmanın mümkün olduğunu unutmamak gerekiyor. Kendi aracınızı geliştirmek, sadece maliyetleri düşürmekle kalmıyor, aynı zamanda veri gizliliğini ve yerel kontrolü de artırıyor.
Yapay zeka özeti
Yıllık yüzlerce euro ödemek yerine kendi lisans takip uygulamanızı PyQt5 ve Python ile sadece 100 satır kodla geliştirin. Veriler yerelde, abonelik yok.