Günlükler, Tanılama, Telemetri ve Güvenlik
Bu bölüm, Mikrofab yarıiletken/TFT/PV ölçüm ve analiz yazılımının operasyonel omurgasını oluşturan dört birbiriyle ilişkili sistemi kapsar: günlük (log) altyapısı, tanılama (diagnostics) araçları, kullanım raporu (telemetri) ve donanım güvenliği. Bu sistemlerin tamamı, "bir sorun olduğunda ne oldu?" sorusuna güvenilir biçimde yanıt vermek, gizliliği korumak ve her durumda cihazı güvenli bir duruma getirmek üzere tasarlanmıştır.
Tasarımın ortak ilkesi şudur: sırlar asla diske yazılmaz veya ağ üzerinden gönderilmez; kişisel veri (PII) maskelenir; donanım her hata, iptal ve kapanışta güvenli duruma alınır. Aşağıdaki alt bölümler her sistemi ayrı ayrı, koddaki gerçek davranışa sadık kalarak açıklar.
Bu bölüm, ölçüm yaparken arka planda sessizce çalışan ama bir sorun çıktığında hayat kurtaran dört sistemi anlatır: ne olduğunu kaydeden günlükler, neyin bozulduğunu bulan tanılama, yazılımı geliştirmeye yarayan anonim kullanım raporu (telemetri) ve cihazı her durumda güvene alan güvenlik katmanı. Bir uçağın kara kutusu, bakım kontrol listesi ve acil iniş prosedürü gibi düşünebilirsiniz: çoğu zaman fark etmezsiniz, ama bir aksilikte ilk başvuracağınız yer burasıdır.
- Neden yapilir: "Bir şey ters gitti — ne oldu ve neden?" sorusuna güvenilir yanıt vermek, gizliliği korumak ve cihaza zarar vermeden durabilmek için.
- Ne ogretir / ne olcer: Olayların izini (ne, ne zaman, hangi önemde), cihazın sağlığını, anonim kullanım eğilimlerini ve donanımın güvenli sınırlarını.
- Nerede kullanilir: Sorun giderme, destek talebi, gizlilik uyumu (KVKK/GDPR) ve laboratuvar güvenliği.
1. Günlük (Log) Sistemi
Yazılım iki tamamen ayrı günlük akışına sahiptir ve bunların karıştırılmaması kritik öneme sahiptir:
- Yerel tanılama günlüğü — diske yazılır, makinede kalır, ağ üzerinden hiçbir yere gönderilmez. Sorun giderme ve destek için kullanılır.
- Çıktı günlüğü konsolu (Output Log) — arayüzdeki, operatöre dönük, renk kodlu canlı akış. Ölçüm sırasında ne olduğunu insan-okunur biçimde gösterir.
Bu ikisi farklı amaçlara hizmet eder; her ikisi de telemetri/kullanım raporundan (Bölüm 3) tamamen bağımsızdır.
1.1. Yerel günlük dosyası ve dönüşümlü saklama (rotation)
Yerel günlük, yazılımın yaptığı her önemli işi makinede tutulan bir metin dosyasına tarih-saatle yazan bir "olay defteridir". Dönüşümlü (rotating) saklama ise bu defterin sonsuza dek büyüyüp diski doldurmasını engeller: dosya belli bir boyuta gelince yenisine geçilir ve en eski yedek silinir. Tıpkı sınırlı sayıda sayfası olan ve dolunca en eski sayfayı yırtıp atan bir not defteri gibi.
- Neden yapilir: Sorun çıktığında geriye dönüp "tam o anda ne olmuştu?" diye bakabilmek; bunu yaparken diski taşırmamak için.
- Ne ogretir / ne olcer: Her satırda zaman damgası, önem seviyesi ve mesaj; toplam disk kullanımı sabit bir üst sınırda (≈12 MB) kalır.
- Nerede kullanilir: Sorun giderme ve destek — bir hatayı bildirirken ilk istenen şey genelde bu dosyadır.
Yerel günlük, adı tft_measurement_app olan tek bir logger tarafından üretilir ve hem bir dosyaya hem de standart konsola (stderr) yazılır. Dosya, sınırsız büyümeyi önlemek için dönüşümlü (rotating) olarak tutulur.
| Parametre | Birim | Açıklama | Varsayılan |
|---|---|---|---|
| Logger adı | — | Uygulama genelinde kullanılan adlandırılmış logger | tft_measurement_app |
| Dosya adı | — | Etkin günlük dosyası | tft_measurement_app.log |
maxBytes | bayt | Dosya bu boyuta ulaşınca yeni dosyaya geçilir | 2.000.000 (≈2 MB) |
backupCount | adet | Saklanan yedek (eski) dosya sayısı | 5 |
| Toplam azami | MB | Etkin + 5 yedek dosya | ≈12 MB |
| Kodlama | — | Dosya karakter kodlaması | utf-8 |
log_level | — | En düşük yazılan seviye | INFO |
log_directory | — | Günlük klasörü adı (kök altında) | logs |
Dönüşüm mantığı: etkin dosya 2 MB'ye ulaştığında ...log → ...log.1 olarak yeniden adlandırılır, en eski yedek (...log.5) silinir. Böylece toplam disk kullanımı her zaman üst sınırda kalır.
Günlük satırı biçimi sabittir ve makinece ayrıştırılabilir:
2026-06-29T14:32:07 | INFO | tft_measurement_app | Keithley 2612A baglandi
<zaman damgası (UTC)> | <SEVİYE> | <logger adı> | <mesaj>
time.gmtime). Bunun nedeni, yerel günlük zaman damgalarının telemetri/rapor created_at alanlarıyla (onlar da UTC) doğrudan karşılaştırılabilmesidir. Arayüzdeki Çıktı Günlüğü ise yerel saati gösterir (bkz. 1.4) — ikisini kıyaslarken bu farkı göz önünde bulundurun.1.2. Günlük dosyasının konumu
Günlük dosyası, kullanıcıya özgü veri kökü altındaki logs klasöründe tutulur. Veri kökü, ilk yazılabilir olanı seçilerek aşağıdaki sırayla belirlenir:
MIKROFAB_APPDATAortam değişkeni (ayarlıysa) — taşınabilir/özel kurulumlar için.%APPDATA%\<Üretici>\<Uygulama>\(Windows'ta tipik yol).%LOCALAPPDATA%\<Üretici>\<Uygulama>\(yedek).~/.mikrofab/tft_measurement_app/(ev dizini yedeği).<çalışma dizini>/user_data/(son çare).
Yani Windows'ta tipik tam yol:
%APPDATA%\Mikrofab\TFT Measurement App\logs\tft_measurement_app.log
%APPDATA% yazıp ilgili üretici klasörüne inebilirsiniz. Daha pratik bir yol, doğrudan Tanılama Paketi Dışa Aktar özelliğini kullanmaktır (Bölüm 2.1); bu özellik tüm günlükleri tek bir zip içinde toplar.1.3. PII maskeleme ve sır koruması (yerel günlükte)
Bu özellik, günlüğe bir satır yazılmadan hemen önce satırı bir süzgeçten geçirir: içinde parola, jeton veya API anahtarı gibi bir "sır" geçiyorsa o satırı tümüyle gizler; geçmiyorsa yalnızca dosya yolundaki kullanıcı adını maskeler. Böylece günlük dosyası başkasıyla paylaşıldığında hassas bilgi sızmaz. Bir belgeyi fotokopiye vermeden önce gizli yerlerini siyah kalemle karartmak gibi.
- Neden yapilir: Günlükler destek/teşhis için paylaşılır; sırların ve kişisel verinin (PII) yanlışlıkla dışarı çıkmasını önlemek için.
- Ne ogretir / ne olcer: Hangi anahtar sözcüklerin "sır" sayıldığını ve şüpheli satırın tamamen, kullanıcı adının ise kısmen gizlendiğini.
- Nerede kullanilir: Gizlilik uyumu ve güvenli destek paylaşımı — özellikle Tanılama Paketi'ni dışarıya gönderirken.
Yerel günlüğe yazılan her satır, dosyaya/konsola düşmeden önce bir PII filtresi (PiiFilter) üzerinden geçer. Bu filtre iki kuralı uygular:
Kural A — Olası sır içeren satır tamamen redakte edilir
Mesaj metni küçük harfe çevrilip aşağıdaki anahtarlardan herhangi biri aranır; biri bulunursa satırın tamamı <redacted: possible secret> ile değiştirilir (içerik asla yazılmaz):
| Anahtar grubu | Aranan ifadeler |
|---|---|
| API anahtarı | api_key, x-api-key, apikey |
| Lisans | license_key, license-key |
| Parola | password, passwd |
| Jeton/yetki | token, secret, authorization, bearer |
| Özel anahtar | private_key, private-key |
Kural B — Dosya yolundaki kullanıcı adı maskelenir
Satır sır içermiyorsa, yol içindeki kullanıcı-adı bileşeni <user> ile değiştirilir:
| Girdi örneği | Çıktı |
|---|---|
C:\Users\ahmet\data\out.csv | <user>\data\out.csv |
/home/ahmet/measurements | <user>/measurements |
Ayrıca yakalanmamış istisnalar (uncaught exception), tam traceback ile birlikte CRITICAL seviyesinde günlüğe düşürülür. Bu mekanizma, hem GUI çalışırken hem de başsız (headless) çalıştırmada devrede olduğu için, çökme nedeni her zaman dosyaya kaydedilir.
1.4. Çıktı Günlüğü konsol paneli (Output Log)
Çıktı Günlüğü, ölçüm sürerken ekranın altında akan, renk kodlu, insan-okunur canlı bir mesaj akışıdır. Yerel günlük dosyası "sonradan incelemek" için, bu panel ise "şu an ne oluyor?" sorusuna anlık yanıt vermek içindir. Bir koşu bandının ekranındaki canlı hız/nabız göstergesi gibi — olup biteni anında gözünüzün önüne serer.
- Neden yapilir: Operatörün ölçüm sırasında durumu (bağlantı, adım, hata) anında görebilmesi için.
- Ne ogretir / ne olcer: Renk koduyla mesajın türünü — amber uyarı/hata, camgöbeği bağlantı, mavi ölçüm, gri nötr bilgi.
- Nerede kullanilir: Canlı ölçüm takibi; özellikle bir amber satır gördüğünüzde durup nedenini incelemek için.
Arayüzün alt kısmında yer alan Çıktı Günlüğü (başlık: "ÇIKTI GÜNLÜĞÜ"), operatöre dönük, salt-okunur, renk kodlu canlı bir akıştır. Bir yan/alt panel (dock) içinde "Çıktı Günlüğü" başlığıyla yerleştirilir ve Reading Values (okuma değerleri) paneliyle aynı alanda sekmelenir.

Panel özellikleri:
- Konum: Pencerenin alt kenarına yerleşik, ayrılabilir/yüzdürülebilir dock.
- Görünürlük:
Görünüm > Günlük / Konsolmenüsü ile açılıp kapatılabilir. - İçerik: Her satır
[SS:DD:ss]biçiminde yerel saat damgası + mesaj. - Eş zamanlı yerel günlük: Konsola yazılan her mesaj, aynı anda
logger.info(...)ile yerel günlük dosyasına da düşer (tek çağrı, çift hedef).
Renk kodlaması. Konsol, mesaj içeriğine göre satırı otomatik dört renge ayırır (içerikteki anahtar sözcüklere bakılır):
| Kategori | Renk | Tetikleyen anahtar sözcükler (içerik) |
|---|---|---|
| Uyarı / Hata | Amber (#f0a23c) | hata, error, uyari, compliance, abort, durdu, timeout |
| Bağlantı | Camgöbeği (#56c2e6) | bagland, bagli, connected, port, visa, keithley, switch, smu |
| Ölçüm | Mavi (#54b4ee) | olcum, adim, nokta, step, ids, kaydedildi, sweep |
| Bilgi (nötr) | Gri (#9aa9b8) | (yukarıdakilerden hiçbiri eşleşmezse) |
2. Tanılama (Diagnostics)
Tanılama araçları, bir sorunu uzaktan destek almadan ya da geliştiriciye gönderilebilecek temiz bir paket hazırlayarak teşhis etmenizi sağlar. Üç katman vardır: tanılama paketi dışa aktarımı, donanım öz-testi (self-test) ve adım-adım sorun giderme (troubleshoot) ile tek-tık düzeltmeler.

2.1. Tanılama paketi dışa aktarma
Tanılama paketi, bir sorunu çözmek için gereken günlükleri ve sistem bilgisini tek bir zip dosyasında toplayan "tek tuşla destek dosyası" üreticisidir. Siz tek tek dosya aramak zorunda kalmazsınız ve sırlar otomatik karartılır. Doktora giderken bütün tahlil sonuçlarınızı tek bir dosyada toplayıp götürmek gibi.
- Neden yapilir: Destek ekibine veya geliştiriciye temiz, eksiksiz ve sır içermeyen bir teşhis paketi göndermek için.
- Ne ogretir / ne olcer: Sürüm, işletim sistemi, Python ve sim/gerçek durumu (
system_info.json) artı tüm günlükler. - Nerede kullanilir: Hata bildirimi ve uzaktan destek — bir sorunu paylaşmanın en hızlı ve güvenli yolu.
Tanılama paketi, destek/hata-ayıklama için gereken her şeyi tek bir zip dosyasında toplar. İşlem GUI'den bağımsız (saf), best-effort (en iyi çaba) ve asla uygulamayı çökertmeyecek biçimde tasarlanmıştır.
Pakete dahil edilenler:
| Dosya | İçerik |
|---|---|
logs/* | logs klasöründeki tüm günlük dosyaları (boyut sınırına kadar) |
system_info.json | Sürüm + işletim sistemi + Python + sim/gerçek durumu |
settings.json | Uygulama ayarları — sırlar redakte edilmiş |
manifest.json | Dahil edilen günlük listesi + toplam bayt |
system_info.json içeriği:
| Alan | Açıklama |
|---|---|
exported_at | Dışa aktarım zamanı (UTC, ISO 8601, Z ekli) |
app_id | tft-measurement |
app_version | Uygulama sürümü |
simulated | Mock/simülasyon modunda mı çalışıyordu (true/false) |
python_version | Python sürümü |
platform, machine, os, os_release | İşletim sistemi ve mimari bilgisi |
Sır redaksiyonu (ayarlarda). settings.json yazılmadan önce, adı aşağıdaki ipuçlarından birini içeren her ayar alanı <redacted> ile değiştirilir (iç içe sözlükler özyinelemeli taranır):
api_key · api-key · apikey · token · secret · password · passwd
license_key · license-key · private · signing · authorization · bearer
| Parametre | Birim | Açıklama | Varsayılan |
|---|---|---|---|
max_log_bytes | bayt | Pakete alınacak günlüklerin toplam üst sınırı | 20.000.000 (≈20 MB) |
Bu sınır aşılırsa en büyük günlük dosyaları atlanır (paket yine üretilir); böylece zip dosyası makul boyutta kalır.
2.2. Donanım öz-testi (Self-test)
Öz-test, bir cihazın "yaşıyor ve konuşabiliyor mu?" sorusunu yalnızca okuma yaparak (hiç akım/gerilim uygulamadan) yanıtlayan hızlı bir sağlık yoklamasıdır. Bağlantıyı, kimliği ve hata kuyruğunu sırayla denetler. Doktorun nabzınızı ölçüp "nefes alın-verin" demesi gibi — sizi riske atmadan temel işlevleri kontrol eder.
- Neden yapilir: Ölçüme başlamadan önce cihazla iletişimin sağlam olduğundan emin olmak için.
- Ne ogretir / ne olcer: Genel bir PASS/WARN/FAIL sonucu ve hangi denetimin takıldığı; salt-okunur olduğu için DUT bağlıyken bile güvenlidir.
- Nerede kullanilir: Kurulum doğrulama ve arıza analizi — "cihaz mı bozuk, kablo mu?" ayrımını yapmak için.
Öz-test, bir cihazın "yaşıyor ve iletişim kurulabilir" olduğunu salt-okunur denetimlerle doğrular. Hiçbir çıkış (output) veya akım uygulanmaz — bu nedenle bağlı bir DUT (test edilen cihaz) varken bile güvenle çalıştırılabilir.
Öz-test, Donanım sayfasındaki cihaz kartının eylem menüsünden tetiklenir. Test arka planda (engellemeyen bir iş parçacığında) koşar; panel modeless'tir (başka işlerinizi engellemez) ve test bitince sinyalle güncellenir.
Çalıştırılan denetimler (sırayla):
| # | Denetim | Ne yapar | Başarısızlık sonucu |
|---|---|---|---|
| 1 | Bağlantı (Connection) | Sürücü oturumunun açık olduğunu doğrular (yazma/akım yok) | FAIL |
| 2 | Kimlik (Identity) | *IDN? sorgular; boş olmayan kimlik yanıtı bekler | FAIL |
| 3 | Hata kuyruğu (Error queue) | SYST:ERR? ile cihaz hata kuyruğunu okur; boş olmasını bekler | WARN (boş değilse) |
| 4 | Temel okuma (Basic read) | İletişimin kararlılığını doğrulamak için ikinci *IDN? tur-gidişi yapar | FAIL |
| 5 | *TST? öz-test (opsiyonel) | Desteklenirse IEEE-488.2 dahili öz-testini çalıştırır (yalnızca QCoDeS sürücüsü) | FAIL |
Genel sonuç (roll-up) hesabı en kötü tekil denetime göre belirlenir:
girdi : her denetimin durumu {OK, WARN, FAIL, SKIP}
formül : herhangi FAIL -> genel = FAIL
(FAIL yok) herhangi WARN -> genel = WARN
(yalnız OK) -> genel = PASS
çıktı : PASS / WARN / FAIL (SKIP roll-up'ta yok sayılır)
dayanak: IEEE-488.2 öz-test (*TST?) + cihaz hata kuyruğu (SYST:ERR?) sözleşmesi
Panel görünümü ve durum bandı:
| Genel durum | Etiket (TR) | Renk |
|---|---|---|
| PASS | "Öz-test geçti" | Yeşil |
| WARN | "Öz-test uyarıyla geçti" | Amber |
| FAIL | "Öz-test başarısız" | Kırmızı |
Panel öğeleri:
- Durum bandı: Büyük, renk kodlu PASS/WARN/FAIL etiketi.
- Meşgul çubuğu (busy bar): Test sürerken belirsiz (marquee) animasyon; yavaş bir gerçek denetim (
*TST?,SYST:ERR?döngüsü) sırasında panelin donmuş görünmesini engeller. Sonuç gelince gizlenir. - Tanıtım satırı: "Bu öz-test cihaz üzerinde aşağıdaki salt-okunur denetimleri çalıştırır:" — testten önce ne yapılacağını açıklar.
- Denetim satırları: Her denetim için simge + ad + mesaj. Simgeler:
✓(OK),⚠(WARN),✗(FAIL),–(SKIP / yapılmadı). - Ham hata bölümü: Cihaz hata kuyruğundan dönen ham metin (tek-aralıklı/monospace); kuyruk boşsa gizlenir.
2.3. Tanılama bandı, sorun giderme ve tek-tık düzeltmeler
Bir cihaz bağlanamadığında bu özellik, kuru bir hata kodu yerine olası nedeni sade bir dille açıklar ve "Yeniden bağlan", "Sorun gider" gibi tek-tık çözümler sunar. Sorun Giderme penceresi ise en sık nedenleri (güç → kablo → sürücü → port → başka program) sırayla denetlemenizi sağlar. Bir tamir ustasının "önce şunu, sonra bunu dene" diyen kontrol listesi gibi.
- Neden yapilir: Bağlantı sorunlarını uzman gerektirmeden, mantıklı bir sırayla çözebilmek için.
- Ne ogretir / ne olcer: Sorunun olası kök nedenini ve onu gidermek için atılacak somut adımları.
- Nerede kullanilir: Günlük arıza analizi — cihaz görünmediğinde veya
*IDN?yanıtı alınamadığında.
Bir cihaz bağlanamadığında ya da yanıt vermediğinde, Donanım sayfası bir tanılama bandı gösterir. Bant, soruna olası nedeni insan-okunur biçimde açıklar ve tek-tık düzeltme eylemleri sunar. Örnek neden ve eylemler:
| Durum (neden) | Açıklama | Tek-tık eylemler |
|---|---|---|
*IDN? yanıtı yok | "Bu adreste *IDN? yanıtı yok. Cihaz numaralandı ama oturum zaman aşımına uğradı — genellikle güç, USB kablosu veya cihazı tutan başka bir program." | Yeniden bağlan · *IDN? Gönder · Sorun gider |
| Seri kurulum gerek | "Seri cihazlar otomatik keşfedilmez. ASRLxx portunu doğrulayın ve baud/eşlik ayarlarını yapıp *IDN? ile tanımlayın." | Seri portu yapılandır · Baud'u otomatik algıla |
Adım-adım Sorun Giderme penceresi (Troubleshoot). "Sorun gider" eylemi, cihaza özel modeless bir kontrol listesi açar. Pencerede beş adım, her birinin yanında bir Yeniden dene düğmesiyle listelenir; "Yeniden dene", ilgili *IDN? yoklamasını GUI iş parçacığı dışında yeniden çalıştırır:
| Adım | Simge | Kontrol |
|---|---|---|
| 1 | ⚡ | Güç bağlantısını kontrol edin |
| 2 | 🔌 | Kabloyu kontrol edin |
| 3 | 💾 | Sürücüyü kontrol edin |
| 4 | ⚠ | Port çakışmasını kontrol edin |
| 5 | 🔒 | Başka bir program cihazı tutuyor olabilir |
Pencerenin altında, son hatanın ham hata metni (tek-aralıklı) gösterilir ve çevrimiçi sorun giderme kılavuzuna giden bir Yardım bağlantısı (https://mikrofab.com/docs/troubleshoot) bulunur.
3. Telemetri / Kullanım Raporu
Kullanım raporu (telemetri), yazılımın hangi koşullarda nasıl davrandığını anlamak ve hataları proaktif gidermek için anonim, PII'siz olay sinyalleri toplar. Sistem çevrimdışı-öncelikli (offline-first) çalışır ve rıza modeli ile sıkıca sınırlandırılmıştır.
3.1. Çevrimdışı-öncelikli kuyruk
Telemetri kuyruğu, gönderilecek anonim olay sinyallerini önce yerel bir dosyaya yazıp, internet uygun olduğunda arka planda toplu hâlde gönderen bir "bekleme listesidir". İnternet yoksa veri kaybolmaz, sıraya alınır; bu sırada ölçüm yazılımı hiç beklemez. Çekim olmayan yerde yazdığınız mesajların, telefon şebekeye girince kendiliğinden gönderilmesi gibi.
- Neden yapilir: Telemetrinin ölçümü asla yavaşlatmaması veya çökertmemesi ve çevrimdışıyken veri kaybetmemesi için.
- Ne ogretir / ne olcer: Kuyruğun nasıl sınırlandığını (boyut/olay üst sınırı) ve başarısız gönderimlerin tekrar denendiğini.
- Nerede kullanilir: Sahada/çevrimdışı laboratuvarlarda bile güvenilir, arka planda kullanım raporlaması.
Telemetri çağrıları asla uygulamayı bekletmez veya çökertmez. Gönderilemeyen (internet/uç nokta yoksa) olaylar bir kuyruk dosyasına yazılır ve sonraki denemede toplu (batch) gönderilir.
| Parametre | Birim | Açıklama | Varsayılan |
|---|---|---|---|
| Kuyruk dosyası | — | Bekleyen olaylar (her satır bir JSON olay) | telemetry_queue.jsonl |
flush_interval | saniye | Arka plan işçisinin gönderim deneme aralığı | 15 |
_BATCH | adet | Tek POST'ta gönderilen azami olay (sunucu >1000'i 413 ile reddeder) | 500 |
max_queue_events | adet | Kuyrukta tutulan azami olay (aşınca en eskiler atılır) | 5000 |
max_queue_bytes | bayt | Kuyruk dosyası azami boyutu | 5.242.880 (5 MB) |
timeout | saniye | Tek POST için ağ zaman aşımı | 8 |
endpoint | — | Olay uç noktası | https://telemetry.mikrofab.com/api/events |
Çalışma akışı:
- Bir olay üretilince
telemetry_queue.jsonldosyasına eklenir (append). - Arka plandaki bir işçi (daemon thread) periyodik olarak kuyruğu anlık görüntü (
.sendingdosyası) alarak gönderir; bu sırada yeni olaylar engellenmez. - Gönderim başarılıysa olaylar kuyruktan düşer; başarısızsa kuyrukta kalır (veri kaybı yok).
- Önceki çalışmadan kalan bir
.sendingdosyası açılışta kuyruğa geri kazanılır (çökme dayanıklılığı). - Çıkışta (
shutdown) kuyruk son bir kez boşaltılmaya çalışılır.
X-API-Key gönderilir; gövde {"events": [...]} biçiminde JSON'dur. HTTP 2xx dışındaki yanıtlar başarısız sayılır ve olaylar tekrar denenmek üzere saklanır.3.2. Ne gönderilir, ne gönderilmez
Bu bölüm, telemetrinin gizlilik sözünü somutlaştırır: makineden yalnızca bayraklar, sayılar ve geniş "kovalar" çıkar; ham ölçüm verisi, kişisel bilgi ve sırlar asla çıkmaz. Adres/IP gibi tanımlayıcı alanlar yalnızca "bus tipine" indirgenir. Bir ankette tam doğum tarihiniz yerine yalnızca yaş aralığınızı işaretlemeniz gibi — bilgi yararlı kalır ama sizi tek tek tanımlamaz.
- Neden yapilir: Yazılımı iyileştirecek kadar bilgi toplarken kullanıcıyı ve verisini tanımlanamaz kılmak için.
- Ne ogretir / ne olcer: Hangi alanların anonim gönderildiğini, hangilerinin hiç gönderilmediğini ve maskeleme/kovalama mantığını.
- Nerede kullanilir: Gizlilik değerlendirmesi ve uyum — "verim nereye gidiyor?" sorusunun net yanıtı.
Telemetrinin temel ilkesi: ham bilimsel veri, kişisel veri ve sırlar asla gönderilmez. Gönderilen her şey ya bir bayrak, ya bir sayı, ya bir düşük-kardinaliteli sınıf/kovadır. Adres/IP gibi alanlar yalnızca bus tipine indirgenir.
| Gönderilir (anonim) | Gönderilmez (asla) |
|---|---|
| Olay adları (app_started, measurement_finished, software_error …) | Ham ölçüm dizileri / V-I eğrileri / ölçülen büyüklükler |
| Mod, nokta-sayısı kovası, süre kovası | Numune adı, operatör adı, e-posta, serbest notlar |
| Cihaz modeli/markası/ailesi, bus tipi (GPIB/TCPIP/USB…) | Ham VISA adresi / IP / hostname |
| Compliance vuruş sayısı, ilk-vuruş adımı (agrega) | Enstrüman seri numarası |
| OS sınıfı (Windows 11/10/macOS/Linux), CPU/RAM kovası | Tam OS build, locale, timezone, tam ekran çözünürlüğü |
| Ayar anahtarı (setting.changed) | Ayar değeri |
| Reçete kaynağı (builtin/custom) + ölçüm türü | Reçete/şablon adı (müşteri IP'si) |
| Lisans hunisi aşama + sonuç kodu | Lisans token/anahtar/abonelik detayı |
Firmware sürümü (yalnızca device_firmware rızası açıksa) | — |
Maskeli tam traceback (yalnızca error_trace rızası açıksa) | Maskelenmemiş yol/kullanıcı adı |
Maskeleme yardımcıları. Gönderim öncesi iki katman uygulanır:
mask_pii: Metindeki yol-içi kullanıcı adlarını (C:\Users\X,/home/X→<user>) ve çıplak geçen oturum-kullanıcı adını maskeler.sanitize_params: Parametre sözlüğünden PII anahtarlarını (ad, operatör, e-posta, not, başlık vb.) sözcük-parçası eşleşmesiyle ayıklar. Önemli incelik: eşleşme tam sözcük parçası üzerindendir; bu yüzdensample_rateveyaaddressgibi PII olmayan ayarlar yanlışlıkla atılmaz, amasample_name/operator_name/numune_adiatılır.
Parmak-izi (fingerprint) azaltma — kovalama. Ham donanım/ekran değerleri, makineyi benzersizleştirmemek için kovalara indirgenir:
| Büyüklük | Kovalar |
|---|---|
| CPU çekirdeği | 1-2, 3-4, 5-8, 9-16, 17-32, 32+ |
| RAM (GB) | <4, 4-8, 8-16, 16-32, 32-64, 64+ |
| Nokta sayısı | <=10, 11-100, 101-1000, 1001-10000, 10001-100000, 100000+ |
| Süre (sn) | <1m, 1-5m, 5-30m, 30m-2h, >2h |
| Ekran çözünürlüğü | <=720p, 1080p, 1440p, 4K, 4K+ |
3.3. Rıza (consent) modeli ve coğrafi-kapı
Rıza modeli, hangi telemetri kategorilerinin açık olacağına son sözü kullanıcıya bırakır; coğrafi-kapı ise bulunduğunuz bölgeye göre güvenli bir başlangıç varsayılanı belirler. Türkiye gibi rıza-zorunlu bölgelerde her şey kapalı başlar ve kullanıcı açıkça onaylamadan hiçbir veri gitmez. Bir web sitesindeki çerez izni penceresi gibi — ama kararı, bölgenizin yasasına saygıyla, kapalı tarafta başlatır.
- Neden yapilir: KVKK/GDPR gibi yasal gereklere uymak ve gizlilik tercihinin kontrolünü kullanıcıya vermek için.
- Ne ogretir / ne olcer: Altı kategoriyi, "notice/consent" ayrımını ve bölgeye göre ilk varsayılanları.
- Nerede kullanilir: İlk kurulum (onboarding) ve sonradan Ayarlar > Gizlilik'ten dilediğiniz an değiştirme.
Hangi telemetri kategorilerinin etkin olduğu, kullanıcının bölgesine göre verilen bir coğrafi-kapı ile başlar; nihai söz her zaman kullanıcınındır.

Kategoriler ve hukuki sınıfları:
| Kategori | Açıklama | Sınıf |
|---|---|---|
crash | Çökme/hata kategorisi + kod + konum (maskeli) | notice (P) |
usage | Anonim özellik/kullanım sayımları, oturum | notice (P) |
device | Enstrüman model/marka/bus/range (statik) | notice (P) |
performance | Faz zamanlamaları, compliance agregası | notice (P) |
device_firmware | Firmware sürümü (model ile cihazı tanımlar) | consent (R) |
error_trace | Maskeli tam stack trace | consent (R) |
- notice (P): Bildirimle paketlenebilir; AB-dışı bölgelerde bildirimli varsayılan-açık önerilir.
- consent (R): Her yerde açık irade (opt-in) gerektirir; varsayılan kapalı.
Coğrafi-kapı (ilk varsayılanı belirler):
| Bölge | İlk varsayılan |
|---|---|
| Rıza-zorunlu (AB-27 + AEA: IS/LI/NO + İsviçre + Birleşik Krallık + Türkiye) | Tüm kategoriler KAPALI — kullanıcı onboarding'de açıkça açar (GDPR/KVKK/ePrivacy) |
| Diğer bölgeler | notice kategorileri AÇIK (bildirimli), consent kategorileri KAPALI |
| Bölge belirsiz | Güvenli taraf → rıza-zorunlu gibi (hepsi kapalı) |
Olay → kategori eşlemesi (gate). Her olay, gönderilmeden önce eşlendiği kategorinin etkin olup olmadığı kontrol edilerek kapıdan geçirilir. Kategori kapalıysa olay hiç üretilmez. Listede olmayan bir olay, en kısıtlayıcı usage kategorisine düşer (sessiz sızıntı yerine güvenli varsayılan). Kullanıcının bilerek gönderdiği geri bildirim (feedback) bu kapıdan muaftır.
telemetry_enabled bayrağı, kategori durumlarından türetilir (herhangi bir kategori açıksa true). Bu, gönderim katmanının yalnızca tek bir bayrağa bakmasını sağlarken, asıl gizlilik kararının çok kategorili rıza modelinde kalmasını sağlar. Ayarlar > Gizlilik ekranından her kategori tek tek açılıp kapatılabilir veya tümü tek seferde geri çekilebilir (revoke).3.4. Geri bildirim (feedback)
Geri bildirim, sizin bilerek yazıp gönderdiğiniz bir mesajdır — bir öneri, hata bildirimi veya soru. Otomatik telemetriden farklı olarak içeriğini siz yazarsınız, bu yüzden rıza kapılarından bağımsızdır. Bir ürünün kutusundaki "görüşlerinizi bize yazın" kartı gibi — söz sizde, gönderip göndermemek de.
- Neden yapilir: Kullanıcının doğrudan geliştiricilere ulaşıp yazılımı şekillendirebilmesi için.
- Ne ogretir / ne olcer: Mesaj, kategori, 1–5 puan ve opsiyonel iletişim bilgisi gönderebildiğinizi.
- Nerede kullanilir: Öneri/hata/soru iletme —
Yardım > Geri Bildirim / Hata Gönder...menüsünden.
Geri bildirim, kullanıcının kasıtlı olarak gönderdiği bir mesajdır ve telemetri rıza kapılarından bağımsız değerlendirilir.
| Parametre | Birim | Açıklama | Varsayılan / sınır |
|---|---|---|---|
message | metin | Kullanıcının yazdığı mesaj | ≤ 5000 karakter |
category | — | Kategori (beyaz liste) | suggestion, bug, question, other |
rating | tamsayı | Memnuniyet puanı | 1–5 veya yok |
contact | metin | Geri dönüş için iletişim (opsiyonel) | — |
message ve contact kullanıcı tarafından bilerek girildiği için PII ayıklama (deny-list) uygulanmaz — aksi hâlde kullanıcının kendi yazdığı ad/e-posta atılırdı. Yine de yol/kullanıcı-adı sızıntısına karşı mask_pii uygulanır. Geri bildirim menüsü: Yardım > Geri Bildirim / Hata Gönder....4. Güvenlik (Donanım Güvenli-Durumu)
Bu sistem, cihazla konuşan her yolda en yüksek önceliğin donanımı güvenli duruma getirmek olduğunu garanti eder. Üç sütun vardır: ölçüm-öncesi doğrulama + akım compliance, güvenli-durum sırası ve E-STOP (acil durdurma).
4.1. Ölçüm-öncesi doğrulama ve akım compliance
Bu mekanizma, hiçbir ölçüm başlamadan önce tüm parametrelerin güvenlik sınırları içinde olduğunu denetler; ayrıca "compliance" (akım tavanı) cihazın uygulayacağı akıma bir üst sınır koyarak numuneyi ve cihazı korur. Sınırı aşan bir ayar varsa ölçüm hiç başlamaz. Bir sigortanın aşırı akımda devreyi kesmesi gibi — zarar oluşmadan önce durdurur.
- Neden yapilir: Yanlış bir parametrenin numuneyi yakmasını veya cihazı zorlamasını önlemek için.
- Ne ogretir / ne olcer: Gerilim/akım/güç sınırlarını ve bir noktada akım tavanına dayanıldığında (
compliance_hit) ölçümün güvenle sonlandığını. - Nerede kullanilir: Gerçek tezgâhta her ölçüm öncesi — limitleri numunenizin gerçek sınırlarına çekmek hayatidir.
Hiçbir sweep, parametreleri doğrulanmadan başlamaz. Doğrulama (validate_common_limits) şu kuralları uygular:
| Kontrol | Kural | Hata |
|---|---|---|
| Adım sayısı | step_count > 0 | "Step sayısı sıfır veya negatif olamaz." |
| Ortalama | averages >= 1 | "Ortalama alma sayısı en az 1 olmalıdır." |
| Compliance işareti | drain ve gate compliance > 0 | "Current compliance pozitif olmalıdır." |
| Compliance tavanı | compliance <= max_current_compliance | "Current compliance güvenlik limitinin üzerinde: … A" |
| Gerilim limiti | |voltage_limit| <= max_abs_voltage | "Voltage limit güvenlik limitinin üzerinde: … V" |
| Güç limiti | power_limit > 0 | "Power limit pozitif olmalıdır." |
Ayrıca uygulanacak her gerilim değeri tek tek max_abs_voltage'a karşı denetlenir (ensure_voltage_values_safe): herhangi bir değer aşarsa ölçüm başlamadan reddedilir.
Güvenlik limitleri config/default_config.json içindeki safety_limits bloğundan gelir:
| Parametre | Birim | Açıklama | Varsayılan |
|---|---|---|---|
max_abs_voltage | V | İzin verilen azami mutlak gerilim | 1.000.000 |
max_current_compliance | A | İzin verilen azami akım compliance | 1.000.000 |
max_power | W | İzin verilen azami güç | 1.000.000 |
max_abs_voltage=60, max_current_compliance=0.01, max_power=0.5 mertebesinde olabilir.Compliance vuruşu (compliance hit). Bir ölçüm noktasında cihaz ayarlı akım compliance'ına dayanırsa, bu bir compliance_hit olarak işaretlenir, veriye yazılır ve ölçüm güvenli biçimde sonlandırılır. Telemetri tarafında bu vuruşlar sweep sonunda agrega olarak (toplam vuruş sayısı + ilk vuruş adımı) raporlanır — sıcak döngüye (hot-loop) dokunulmaz.
4.2. Güvenli-durum sırası
Güvenli-durum sırası, bir hata, iptal veya kapanış anında donanımı belirli ve değişmez bir sırayla etkisiz hâle getirir: önce kaynağı (SMU çıkışını) kapatır, sonra röleyi açar. Bu sıra önemlidir, çünkü önce enerjiyi kesip sonra hattı ayırmak en güvenli yoldur. Bir cihazı duvardan çekmeden önce düğmesinden kapatmak gibi — ters sıra kıvılcıma yol açabilir.
- Neden yapilir: Her sonlanmada (normal ya da çökme) donanımın kesinlikle güvenli kalmasını garanti etmek için.
- Ne ogretir / ne olcer: "Önce de-enerjize et, sonra anahtarla" ilkesini ve bu kancanın çökme/çıkışta da çalıştığını.
- Nerede kullanilir: Her ölçüm bitişi, iptali ve beklenmedik çökme — kullanıcı hiç fark etmeden arka planda.
Hata, iptal (abort) veya uygulama kapanışında donanım kesin bir sırayla güvenli duruma alınır. Bu sıra, kaynağın önce kesilip ardından anahtarlamanın yapılması ilkesine dayanır (önce de-enerjize et, sonra rölesini aç).
1. SMU çıkışı KAPALI (Keithley/Keysight/R&S SMU output OFF)
2. Switch Matrix rölesi KAPALI (relay OFF — örn. switch matrix komutu `a`)
3. Bağlantıların güvenli kapatılması
Kod düzeyinde bu, safe_shutdown ile sağlanır:
- Önce
smu.output_all_off()çağrılır (trybloğunda). - Ardından (
finally), bağlam (context)Noneise ya darelay_enableddoğruysarelay.all_off()çağrılır. Yani çıkış her durumda kapatılır; röle ise yalnızca ilgili olduğunda açılır.
Çökme/çıkış kapsaması. Yorumlayıcı çıkışında (atexit) ve yakalanmamış istisnada da aynı güvenli-durum geri çağrımı çalışır (device_safety). Sıra: önce donanım güvenli, sonra mevcut hook zinciri (telemetri/log). Bu, Qt closeEvent yolunu tamamlar: Qt-dışı, başsız (headless) veya anormal sonlanmalar da kapsanır. Güvenli-durum kancası kendi hatasını yutar ve asla çıkış/raporlama zincirini çökertmez.
safe_off doğrulaması ayrı bir tezgâh (BENCH) adımıdır.4.3. E-STOP (Acil Durdurma)
E-STOP, tek tıkla tüm kayıtlı donanımı anında güvenli duruma alan büyük "acil durdur" düğmesidir. Önce çalışan ölçüm işçilerini durdurur, sonra cihaz çıkışlarını kapatır; bir cihazda hata olsa bile diğerlerini güvene almayı sürdürür. Bir makinenin üzerindeki kırmızı acil-durdurma mantarı gibi — düşünmeden basarsınız, her şey durur.
- Neden yapilir: Bir şeyler ters gittiğinde insanı ve donanımı korumak üzere her şeyi anında durdurmak için.
- Ne ogretir / ne olcer: Hangi cihazların güvene alındığını/alınamadığını (EStopResult) ve işlem tekrarlansa bile yalnızca bir kez çalıştığını (idempotent).
- Nerede kullanilir: Acil durumlar — ancak yazılım dışı kaynaklar için her zaman ayrı bir fiziksel acil-durdurma da bulundurun.
E-STOP düğmesi ("ACİL DURDUR" / EMERGENCY STOP), tüm donanımı anında güvenli duruma alan öne çıkan bir kontroldür. Diğer donanım widget'larının aksine, E-STOP niyet yayıp sahibinin işlem yapmasını beklemez; tıklandığı an doğrudan güvenli-all işlemini çalıştırır, ancak ondan sonra sonucu (hedef başına çıktı) yayar.
Tetiklenme sırası (H3 garantisi): trigger() iki fazda çalışır ve hiçbir fazda kısa devre yapmaz (bir hedefin hatası diğerlerini durdurmaz):
Faz 1: Tüm worker-stopper'lar (QThread işçileri önce durdurulup join edilir)
Faz 2: Tüm cihaz güvenli-fonksiyonları (donanım çıkış-kapatma ikinci sırada)
Bu sıra, GUI iş parçacığı ile geride kalmış bir işçinin aynı SMU'ya eşzamanlı erişmesini önler (önce işçiyi durdur, sonra donanımda output-off uygula).
Güvenli-durum metodu seçimi. Denetleyici, her cihazın ilk bulunan güvenli-durum metodunu öncelik sırasıyla çağırır:
output_all_off > all_off > safe_state > safe_offBir RoleBinding (rol bağlaması) kaydedilirken sıra önemlidir: smu → relay → thermometer. Yani kaynak (SMU) röleden önce güvenceye alınır. Bilinen güvenli metotlardan hiçbirini sunmayan bir cihaz (örneğin henüz safe_off kazanmamış bir sıcaklık denetleyicisi) atlanır ve adı çağırana döndürülür; böylece eksiklik tezgâhta sürpriz olmak yerine önceden yüzeye çıkar.
Sonuç (EStopResult):
| Alan | Açıklama |
|---|---|
safed | Hatasız güvenceye alınan cihaz hedeflerinin adları |
failed | (ad, hata mesajı) — başarısız her hedef için |
stopped_workers | Hatasız çalışan worker-stopper adları |
ok | failed boşsa True (tüm hedefler tamam) |
Arayüz, sonuca göre mesaj gösterir: tümü güvenliyse "Acil durdurma: tüm cihazlar güvenli."; bir kısmı alınamadıysa "Acil durdurma: bazı cihazlar güvenceye alınamadı."
Diğer önemli davranışlar:
- Idempotent: E-STOP bir kez ateşlendikten sonra tekrarlanan tetiklemeler (örn. üst-çubuk tıklaması ardından
closeEvent'in acil-durdurma çağrısı) işlemsizdir; worker-stopper'lar/güvenli-fonksiyonlar iki kez koşmaz. Yeni bir ölçüm içinreset()ile yeniden kurulur. - Erişilebilirlik (a11y): Düğmenin erişilebilir adı, durumuna göre güncellenir: "ACİL DURDUR — hazır (çıkışlar durdurmaya hazır)" (armed) veya "ACİL DURDUR — aktif (durdurma işlemi sürüyor)" (live). Ekran okuyucular bu durumu seslendirir.
- Görsel nabız (pulse): Düğme, dikkat çekmek için opaklık nabzıyla yanıp söner — hazır durumda yavaş (1800 ms, 1.0→0.70), aktif/ölçüm sürerken hızlı (600 ms, 1.0→0.45). Kullanıcı azaltılmış hareket (reduced motion) tercih ediyorsa (Windows erişilebilirlik ayarı / Qt) animasyon hiç oluşturulmaz.
- Çökme kapsaması: Aynı güvenli-all, başlangıçta
device_safety'ye bağlanır; böylece bir çökme / yakalanmamış istisna / çıkışta da çalışır.
4.4. Kalibrasyon hatırlatıcısı
Kalibrasyon hatırlatıcısı, son kalibrasyon tarihinden bu yana geçen süreyi izleyip, ayarladığınız aralık (tipik olarak 365 gün) dolduğunda açılışta bir uyarı kaydeder. Ölçümü engellemez; yalnızca "cihazını yeniden kalibrasyona götürme zamanı geldi" diye hatırlatır. Arabanızın "bakım zamanı" ikaz ışığı gibi.
- Neden yapilir: Ölçüm doğruluğunun izlenebilirliğini (traceability) korumak ve süresi geçmiş kalibrasyonu gözden kaçırmamak için.
- Ne ogretir / ne olcer: Kalibrasyona kalan gün sayısını; negatifse "süresi geçmiş" (overdue) uyarısını.
- Nerede kullanilir: Kalite kontrol ve akredite ölçüm — düzenli kalibrasyon gerektiren laboratuvarlar için.
Yazılım, tezgâh araçlarındaki (ör. BenchVue) hatırlatma özelliğini örnek alarak, yeniden kalibrasyonun zamanı geçtiğinde açılışta bir uyarı kaydeder. Hesap, saf tarih aritmetiğidir (G/Ç yok, açılışı bloklamaz).

| Parametre | Birim | Açıklama | Varsayılan |
|---|---|---|---|
calibration_reminder_enabled | — | Hatırlatıcı etkin mi | false |
calibration_last_date | ISO tarih | Son kalibrasyon tarihi (YYYY-AA-GG) | "" |
calibration_interval_days | gün | Kalibrasyon aralığı | 365 |
Kalan gün hesabı (days_until_calibration_due):
girdi : last_date (ISO), interval_days, today (bugün)
formül : kalan = (last_date.gün_sırası + interval_days) - today.gün_sırası
çıktı : kalan (gün) — negatif değer = süresi geçmiş (overdue)
özel : last_date boş/geçersiz VEYA interval_days <= 0 -> None (hatırlatma yok)
Açılışta, hatırlatıcı etkinse ve kalan < 0 ise yerel günlüğe şu uyarı düşer:
WARNING | Calibration overdue by <N> day(s)
Ayar konumu: Ayarlar > Donanım > Kalibrasyon.
Özet: Hızlı Başvuru
| Sistem | Konum / Erişim | Anahtar dosya/uç nokta |
|---|---|---|
| Yerel günlük | %APPDATA%\…\logs\tft_measurement_app.log (5 yedek, ≈2 MB/dosya, UTC) | — |
| Çıktı Günlüğü konsolu | Alt dock; Görünüm > Günlük / Konsol | renk kodlu, yerel saat |
| Tanılama paketi | Zip dışa aktarım (sırlar redakte) | system_info.json + logs/* |
| Öz-test | Donanım sayfası > cihaz kartı eylem menüsü | salt-okunur, PASS/WARN/FAIL |
| Sorun giderme | Tanılama bandı > "Sorun gider" | 5 adım + tek-tık düzeltme |
| Telemetri kuyruğu | Veri kökü | telemetry_queue.jsonl (offline-first) |
| Gizlilik/rıza | Yardım > Gizlilik ve Telemetri... | 6 kategori, coğrafi-kapı |
| E-STOP | Üst çubuk "ACİL DURDUR" | worker→SMU→röle, idempotent |
| Kalibrasyon | Ayarlar > Donanım > Kalibrasyon | açılış uyarısı |