Yazılım lisanslarını takip etmek için yıllık binlerce dolar ödüyor musunuz? Aslında bu işi birkaç yüz satır kodla ve ücretsiz olarak yapabilirsiniz. Bir geliştiricinin, ödenen ücretli abonelikleri iptal edip yerini kendi yaptığı basit bir masaüstü uygulamasına bıraktığı hikayesini inceleyin.
İşte LiMa adındaki Python tabanlı uygulamanın arkasındaki teknik detaylar ve bu basit projenin nasıl yıllık yüzlerce dolarlık tasarruf sağladığını öğrenin.
Basit bir SQLite veritabanı ve otomatik kalan gün hesaplaması
LiMa projesi, iki kolonlu son derece basit bir SQLite tablosundan oluşuyor:
self.c.execute('''CREATE TABLE licences (nom_logiciel TEXT, date_expiration TEXT)''')Uygulama, her satır yenilendiğinde anında kalan gün sayısını hesaplıyor. Bu değerleri veritabanında saklamak yerine her seferinde dinamik olarak hesaplamak, veri tutarlılığı açısından kritik önem taşıyor. Örneğin, kalan gün sayısını saklamak gelecekteki bir hata kaynağı olabilir.
Kalan gün hesaplaması şu şekilde gerçekleşiyor:
date_expiration = datetime.strptime(date_expiration_str, "%Y-%m-%d")
jours_restants = (date_expiration - datetime.now()).daysVeri tablosu her 60 saniyede bir otomatik olarak yenileniyor:
self.timer = QTimer(self)
self.timer.timeout.connect(self.actualiser_tableau)
self.timer.start(60_000) # 1 dakikaBu yaklaşım, hem performans hem de gerçek zamanlı güncelleme açısından ideal. Başlangıçta yapılan 1 saniyelik yenileme (1 Hz) gereksiz yere kaynak tüketimine neden olmuş, ancak daha sonra optimize edilmiştir.
Çok katmanlı bildirim sistemini yerel OS ile entegre etmek
Piyasadaki birçok SaaS aracı "akıllı bildirim" adı altında oldukça basit bir mantık kullanıyor. LiMa ise bunu yerel işletim sistemi bildirimleriyle çok daha zarif bir şekilde çözüyor. Uygulama, lisansın kapanmasına kalan süreye göre farklı kategorilerde bildirim gönderiyor:
- 14-30 gün kalanlar: "1 aydan az kalan lisans"
- 7-14 gün kalanlar: "2 haftadan az kalan lisans"
- 3-7 gün kalanlar: "1 haftadan az kalan lisans"
- 1-3 gün kalanlar: "3 günden az kalan lisans"
- 1 gün kalanlar: "Yarın sona eren lisans"
- Süresi geçenler: "X gün önce süresi dolmuş lisans"
Bu bildirimler, plyer kütüphanesi sayesinde Windows, macOS ve Linux işletim sistemlerinde yerel bildirim merkezleriyle uyumlu şekilde çalışıyor. Kullanıcılar uygulama kapalıyken bile bildirimleri alabiliyor — ki bu da SaaS araçlarında genellikle bulunmayan bir özellik.
Otomatik HTML e-posta ve grafik ekleri
LiMa projesi, her uyarı döngüsünde lisans durumunu özetleyen bir e-posta gönderiyor. Bu e-posta şu özelliklere sahip:
- Matplotlib ile oluşturulan "Süresi dolmuş / Süresi dolmayan" lisansları gösteren pasta grafiği
- Grafigin PNG olarak kaydedilmesi
- HTML formatında biçimlendirilmiş e-posta gövdesi
- Grafiğin e-postaya eklenmesi
Pasta grafiği oluşturma kodu oldukça basit:
expirations1 = 0
non_expirations1 = 0
for row in range(self.tableau_licences.rowCount()):
jours_restants = int(self.tableau_licences.item(row, 2).text())
if jours_restants < 0:
expirations1 += 1
else:
non_expirations1 += 1
plt.pie([expirations1, non_expirations1],
labels=["Süresi dolmuş", "Süresi dolmamış"],
colors=["red", "green"],
autopct='%1.1f%%')
plt.savefig("graphique_pie.png")E-posta gönderimi içinse standart Python kütüphaneleri kullanılıyor:
email = MIMEMultipart()
email["From"] = smtp_user
email["To"] = destinataire
email["Subject"] = subject
email.attach(MIMEText(html_body, "html"))
with open(attachment_path, "rb") as attachment:
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header("Content-Disposition", f"attachment; filename={attachment_path}")
email.attach(part)
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(smtp_user, smtp_password)
server.sendmail(smtp_user, [destinataire] + copy_mail.split(','), email.as_string())
server.quit()Bu yaklaşım, üçüncü parti API'lerine bağımlı kalmadan tamamen yerel SMTP sunucusu üzerinden çalışıyor. Gerekirse Gmail gibi hizmetler de kullanılabilir.
Tamamlanmış bir masaüstü aracının özellikleri: Prototip değil, ürün
LiMa sadece basit bir tablo görüntüleyici değil. Tam bir kullanıcı arayüzüne sahip, kullanıma hazır bir araç olarak tasarlandı. Öne çıkan özellikleri arasında:
- CSV içe/dışa aktarma
- QPrinter ile doğrudan yazdırma
- Alfabetik sıralama (A-Z ve Z-A)
- Uyarı açma/kapama düğmesi
- Matplotlib ile görsel istatistikler
- SMTP yapılandırması
- Açık/koyu tema geçişi
- Hakkında bilgisi
Tüm bu özellikler, sadece lima.py adlı tek bir Python dosyasında toplandı. Bu da projenin ne kadar minimal ve yönetilebilir olduğunu gösteriyor.
PyQt5 ile yerleşik karanlık tema: Dış bağımlılık yok
Piyasadaki birçok uygulama karanlık tema için ek kütüphanelere ihtiyaç duyuyor. Oysa PyQt5, CSS stilleriyle tamamen yerleşik karanlık tema desteği sunuyor. Uygulama içinde basit bir stil sayfası değiştirmeyle tema geçişi yapılabiliyor:
def toggle_dark_mode(self):
self.setStyleSheet("""
QMainWindow {
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #323232, stop:1 #1a1a1a);
color: #FFFFFF;
}
QTableWidget {
background-color: #2b2b2b;
}
""")Bu yaklaşım hem performans hem de bakım kolaylığı açısından oldukça avantajlı. Ek kütüphanelere ihtiyaç duymadan tamamen yerel çözümlerle çalışmak, projelerin uzun vadeli sürdürülebilirliğini de artırıyor.
Bu basit proje, yıllık abonelik ödemelerinin gerçekten gerekli olup olmadığını sorgulamaya itiyor. Bazı durumlarda bulut hizmetleri kullanmak mantıklı olabilir, ancak birçok basit ihtiyacı yerel olarak kodlamak mümkün — ve çoğunlukla daha verimli.
Yapay zeka özeti
Yıllık binlerce dolar ödenen SaaS abonelikleri yerine kendi Python uygulamanızı geliştirin. LiMa projesiyle nasıl 100 dolarlık abonelikleri iptal ettiğimizi keşfedin.