İçeriğe atla
← Tüm projeler
Vaka çalışması

GeometryCalculator

PythonDepoyu aç ↗

Problem

Basit bir ihtiyaçtan çıktı: 2D ve 3D temel şekiller için alan, çevre, yüzey alanı ve hacim hesaplarını tek yerden yapmak, sonuçları kaybetmemek ve aynı hesap mantığını hem komut satırından hem tarayıcıdan kullanabilmek. Çözmek istediğim asıl mesele hesabın kendisi değil — formüller zaten basit — hesabın çıktısını tek bir yapıya oturtup üç farklı tüketiciye (konsol, JSON dosyası, web isteği) aynı biçimde servis etmekti.

Yaklaşım

Tek dosyada bir GeometryCalculator sınıfı var; şekil başına bir metot (kare, dikdörtgen, daire, üçgen, küp, küre) ve hepsi aynı sözlük şeklini döndürüyor: shape, inputs, calculations, units ve timestamp. Her sonuç ayrıca örnek üzerindeki calculations_history listesine ekleniyor, bu liste JSON'a yazılıp geri okunabiliyor. Web katmanı bu sözlüğün üstüne binen ince bir Flask kabuğu: /api/calculate, /api/history ve /api/save uçları aynı yapıyı JSON olarak veriyor. Flask try/except ImportError içine sarılmış, yani kurulu değilse program çökmüyor. Giriş noktası argümana bakıyor: `web` argümanıyla sunucu (127.0.0.1:5000), argümansız çağrıda konsol menüsü.

Kararlar ve takaslar

  • Her hesabın aynı tip sözlüğü döndürmesini şart koştum (shape / inputs / calculations / units / timestamp), çünkü konsola yazdırma, JSON'a kaydetme ve web API'si aynı yapıyı tüketsin istedim; alternatif her şekle özel bir dönüş tipiydi, o zaman yazdırma ve serileştirme kodu şekil sayısı kadar dallanıyordu. Sonuçların içine birimlerin (cm², cm) gömülmesi de bilinçliydi — sayı, biriminden ayrı dolaşmasın.
  • Flask'ı zorunlu değil opsiyonel bağımlılık yaptım: import try/except ImportError içinde, kurulu değilse aynı isimli bir run_web_server fonksiyonu tanımlanıp kullanıcıya kurulum komutu basılıyor. Çünkü yalnızca hesap yapmak isteyen birinin web bağımlılığı kurmasını istemedim; alternatif Flask'ı gereksinim yapmaktı ve o, aracın çekirdek kullanımını gereksiz yere ağırlaştırıyordu.
  • Girdi doğrulamayı yapıcı yerine her metodun içine koydum (side <= 0 ise ValueError), çünkü hatanın hangi ölçü için verildiği belli olsun istedim — ama şekil adını içermiyor: kare ile küp aynı "Kenar uzunluğu pozitif olmalıdır" mesajını veriyor, geriye dönüp bakınca şekil adını mesaja koymam gerekirdi; alternatif tek bir genel doğrulayıcıydı, o da "pozitif olmalı" gibi bağlamsız mesaj üretiyordu.
  • Geçmişi veritabanı yerine JSON dosyasına yazdım (hesaplama_gecmisi.json), çünkü tek kullanıcılı bir hesap makinesi için kalıcılık ihtiyacı bir dosyayla karşılanıyor ve sonuç sözlüğü zaten JSON'a birebir serileşiyor; alternatif SQLite'dı, bu ölçekte gereksiz bir katman olurdu.

Sonuç

ÖLÇÜM YOK — depoda test, benchmark ya da koşum kaydı bulunmuyor, bu yüzden hiçbir sayı iddia etmiyorum. Çıktı: tek dosyada altı şekil için (kare, dikdörtgen, daire, üçgen, küp, küre) alan/çevre/yüzey alanı/hacim hesabı, birim etiketli tek tip sonuç yapısı, oturum içi hesap geçmişi, JSON kaydet/yükle ve `geometry_calculator web` çağrısıyla açılan opsiyonel Flask arayüzü (127.0.0.1:5000, /api/calculate + /api/history + /api/save). BU SAYFANIN DÜZELTMESİ GEREKEN BİR ŞEY VAR: proje Streamlit tabanlı DEĞİL. Kaynak dosyada streamlit kelimesi hiç geçmiyor (sıfır eşleşme); içe aktarılanlar math, json, datetime, os, sys ve opsiyonel Flask. Web katmanı Flask'tır. Depo en son 2025-06-21'de güncellenmiş; bu, envanterdeki en eski aktif projelerden biri ve mevcut haliyle bir vitrin projesi değil, öğrenme dönemi işi olarak sunulmalı.

Teknolojiler

Python 3math (stdlib)json (stdlib)datetime (stdlib)Flask (opsiyonel)flask-cors (opsiyonel)CLI

Kaynaklar

Bu sayfadaki teknik iddialar aşağıdaki kaynaklardan çıkarıldı.

  • https://github.com/msgxr/GeometryCalculator
  • https://github.com/msgxr/GeometryCalculator/blob/main/README.md
  • https://github.com/msgxr/GeometryCalculator/blob/main/geometry_calculator

Doğrulayamadıklarım

Metni yazarken teyit edemediğim noktalar. Görünür tutuyorum — teyitsizi sessizce iddia etmektense.

  • KAYNAK ÇELİŞKİSİ — DÜZELTİLMESİ GEREKİYOR: lib/projects.ts hem açıklamada ("Python/Streamlit tabanlı interaktif web uygulaması") hem stack'te ('Streamlit') Streamlit diyor; GitHub depo açıklaması ve README de aynı iddiayı taşıyor. KOD BUNU DESTEKLEMİYOR: dosyada streamlit hiç geçmiyor, web katmanı Flask. Yani yanlış olan depo README'si/açıklaması ve site envanteri; kod doğru kaynak. Hem kart metni hem stack düzeltilmeli (Streamlit → Flask, opsiyonel).
  • Kodda doğrulanmış yapısal not: ana dosyanın adı uzantısız — 'geometry_calculator', .py değil. Bu yüzden modül olarak import edilemez, yalnızca doğrudan çalıştırılabilir. Depoda requirements.txt de yok, yani opsiyonel Flask bağımlılığı hiçbir yerde bildirilmemiş.
  • DOGRULANAMADI: Dosya başlığındaki 'Author: Python Geometri Hesaplayıcı' alanı bir kişi adı değil, doldurulmamış şablon değeri; 'Version: 1.0' ibaresi de bir sürüm etiketi/yayın kaydına dayanmıyor. Bunlardan yazarlık veya sürüm iddiası çıkarılmamalı.
  • Canlı demo YOK (GitHub Pages API 404). Flask modu yalnızca 127.0.0.1:5000'de yerel çalışıyor ve app.run(debug=True) ile başlatılıyor — barındırılmış bir örnek yok, debug modu da barındırmaya uygun değil.
  • lib/projects.ts bu projeyi featured: false olarak işaretliyor. Görevde "mümkünse" incelenmesi istendiği için içerik hazırladım, ancak depo durumu (2025-06-21, test yok, uzantısız dosya, hatalı README) bir vaka sayfasını taşımaya zayıf; öne çıkarılmaması mevcut haliyle doğru karar.