Ders 02 / 22
Gelişmiş Sürekli Tehdit
Uzun soluklu kampanyanın süre ekseninde ölçülmesi: 330 günlük sekiz adımlık bir dizide 261 günün (%79,1) hiçbir denetimin görmediği günler olması, beş denetimden yalnız ikisinin kayıt eşiğine varması, en uzun iki adımın sürenin %65,5'ini ve kalem artışının tamamını taşıması, ilk tespitin 92. günde 7 kalemle gelmesi, tek bir kayıt eşiğinin 180'den 300'e çıkmasının tespiti 325. güne taşıyıp yerleşik kalma süresini 47 günden 280 güne ve kalem sayısını 7'den 45'e çıkarması ve keşif adımına konan bir denetimin tutunmayı hiç doğurmadan 48 kalem kurtarması.
İçindekiler
Önceki dersin bütün ölçümlerinde süre bağlayıcı olmadı: zincirin toplam maliyeti 52 gün yazıldı, en sabırlı düzeyin bütçesi 400 gündü ve hiçbir aktör gün bütçesi yüzünden durmadı. Sabır bir kısıt olarak hiç devreye girmedi.
Uzun soluklu bir kampanyada ölçünün kendisi süredir. Bir adım günlerce değil aylarca sürebilir ve o ay boyunca savunma tarafında her gün bir kayıt doğar. Her kayıt bir fırsat penceresidir: denetimin uyarabileceği bir an. Bu ders zinciri süre eksenine oturtur ve üç sayı verir — kaç gün sürüyor, kaç gün hiçbir denetimin bakmadığı gün, ve tespit gecikmesi kalem sayısını ne kadar büyütüyor.
Kampanya Bir Süre Dizisidir
Aşağıdaki yapı bir modeldir: gerçek bir kampanya, aktör ya da olay adı yoktur; adımlar yalnız süre, günlük iz ve kalem sayısıyla anılır. Kurgu ölçüm ağı üzerinde çalışılır.
TM4: her adımın bir süresi, günde ürettiği kurgu kayıt sayısı (iz), o kaydı gören bir denetim
ve denetimin uyarı için beklediği kayıt eşiği vardır. TM5: bir denetim ancak kendi adımında
eşik kadar kayıt birikince uyarır; adım o kadar kayıt üretmeden biterse denetim var olsa da hiç
uyarmaz. TM6: kalem sayısı adım içinde doğrusal birikir.
// tehdit/kampanya.mjs — uzun soluklu kampanyanin sure modeli: burada calisan bir saldiri adimi // yoktur, yalnizca gun, iz ve kalem sayilarindan olusan bir veri yapisi vardir. Gercek bir // kampanya, aktor ya da olay adi gecmez. Rastgelelik yok. // TM4: her adimin bir suresi (gun), gunde urettigi kurgu kayit sayisi (iz), o kaydi goren bir // denetim (ya da yok) ve denetimin uyari icin bekledigi kayit esigi vardir. `kalem`, adim // bittiginde erisilmis olan birikimli kurgu kalem sayisidir. export const ADIM = [ { ad: "kesif", gun: 45, iz: 1, denetim: null, esik: 0, kalem: 0 }, { ad: "ilk-erisim", gun: 12, iz: 4, denetim: "kimlik-gunlugu", esik: 60, kalem: 1 }, { ad: "yurutme", gun: 2, iz: 9, denetim: "surec-kaydi", esik: 30, kalem: 2 }, { ad: "kalicilik", gun: 3, iz: 2, denetim: "baslatma-envanteri", esik: 10, kalem: 3 }, { ad: "yetki-yukseltme", gun: 38, iz: 6, denetim: "yetki-degisikligi", esik: 180, kalem: 9 }, { ad: "yanal-gecis", gun: 96, iz: 3, denetim: null, esik: 0, kalem: 26 }, { ad: "toplama", gun: 120, iz: 2, denetim: null, esik: 0, kalem: 41 }, { ad: "sizdirma", gun: 14, iz: 12, denetim: "cikis-hacmi", esik: 100, kalem: 48 }, ]; export const BASLANGIC = ADIM.map((_, i) => ADIM.slice(0, i).reduce((t, s) => t + s.gun, 0)); export const SURE = ADIM.reduce((t, s) => t + s.gun, 0); export const TUTUNMA = BASLANGIC[1]; // ilk erisim adiminin basladigi gun // TM5: bir denetim ancak kendi adiminda esik kadar kayit birikince uyarir; adim o kadar kayit // uretmeden biterse denetim var olsa da hic uyarmaz. export function uyariGunu(i, ayar = {}) { const s = { ...ADIM[i], ...(ayar[ADIM[i].ad] || {}) }; if (!s.denetim || s.gun * s.iz < s.esik) return null; return BASLANGIC[i] + Math.ceil(s.esik / s.iz); } export const ilkTespit = (ayar = {}) => ADIM .map((_, i) => uyariGunu(i, ayar)).filter((g) => g !== null).sort((a, b) => a - b)[0] ?? null; // TM6: kalem sayisi adim icinde dogrusal birikir; gun d'de erisilmis kalem asagidaki gibidir. export function kalemGun(d) { let onceki = 0; for (let i = 0; i < ADIM.length; i++) { const bas = BASLANGIC[i], son = bas + ADIM[i].gun; if (d < son) return Math.floor(onceki + ((d - bas) / ADIM[i].gun) * (ADIM[i].kalem - onceki)); onceki = ADIM[i].kalem; } return ADIM.at(-1).kalem; }
// tehdit/sure.mjs — sure ekseni: hangi adim aylarca suruyor, kac firsat penceresi doguyor, // yerlesik kalinan her gun kac kalem buyutuyor. import { ADIM, BASLANGIC, SURE, TUTUNMA, uyariGunu, ilkTespit, kalemGun } from "./kampanya.mjs"; const yaz = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join("")); const gorulen = ADIM.filter((s) => s.denetim); const pencereGun = gorulen.reduce((t, s) => t + s.gun, 0); const pencereKayit = gorulen.reduce((t, s) => t + s.gun * s.iz, 0); console.log(`${ADIM.length} adim, ${SURE} gun; ${gorulen.length} adimda denetim var, ` + `${ADIM.length - gorulen.length} adim hicbir denetimin gormedigi adim; ` + `denetimli gun ${pencereGun} (%${((pencereGun / SURE) * 100).toFixed(1)}), ` + `denetimli kayit ${pencereKayit}`); const A = [-18, 6, 5, 22, 7, 10, 12, 8]; console.log("\n1. adim adim sure ve firsat penceresi"); yaz(A, "adim", "gun", "iz", "denetim", "esik", "uretilen", "uyari gunu", "kalem"); for (let i = 0; i < ADIM.length; i++) { const s = ADIM[i], u = uyariGunu(i); yaz(A, s.ad, s.gun, s.iz, s.denetim || "-", s.esik || "-", s.gun * s.iz, u === null ? (s.denetim ? "esik yok" : "-") : u, s.kalem); } console.log(`esige varan denetim: ${ADIM.filter((_, i) => uyariGunu(i) !== null).length}/` + `${gorulen.length}; ilk tespit gunu ${ilkTespit()}`); const B = [-30, 8, 13, 9, 15]; console.log("\n2. surenin nerede toplandigi"); yaz(B, "kume", "gun", "sure payi %", "kayit", "kalem artisi"); for (const [ad, k] of [["denetimi olan adimlar", gorulen], ["hicbir denetimin gormedigi", ADIM.filter((s) => !s.denetim)], ["en uzun iki adim", [...ADIM].sort((x, y) => y.gun - x.gun).slice(0, 2)]]) { const g = k.reduce((t, s) => t + s.gun, 0); const art = k.reduce((t, s) => { const i = ADIM.indexOf(s); return t + s.kalem - (i === 0 ? 0 : ADIM[i - 1].kalem); }, 0); yaz(B, ad, g, ((g / SURE) * 100).toFixed(1), k.reduce((t, s) => t + s.gun * s.iz, 0), art); } const C = [-40, 12, 14, 8, 12]; console.log("\n3. tespit gunu ne zaman, o gune kadar kac kalem"); yaz(C, "ayar", "tespit gunu", "yerlesik gun", "kalem", "kurtarilan"); const SENARYO = [ ["esikler oldugu gibi", {}], ["yetki esigi 180 -> 300", { "yetki-yukseltme": { esik: 300 } }], ["yetki esigi 300 + yanal gecise denetim", { "yetki-yukseltme": { esik: 300 }, "yanal-gecis": { denetim: "oturum-sicramasi", esik: 60 } }], ["kesife denetim (esik 30)", { kesif: { denetim: "dis-sorgu-hacmi", esik: 30 } }], ["hicbir denetim uyarmaz", { "yetki-yukseltme": { esik: 300 }, sizdirma: { esik: 300 } }], ]; for (const [ad, ayar] of SENARYO) { const g = ilkTespit(ayar) ?? SURE; yaz(C, ad, ilkTespit(ayar) ?? "-", g < TUTUNMA ? "tutunma yok" : g - TUTUNMA, kalemGun(g), ADIM.at(-1).kalem - kalemGun(g)); } const D = [-18, 6, 14, 12, 16]; console.log("\n4. gecikmenin kalem hizi"); yaz(D, "adim", "gun", "kalem artisi", "kalem/gun", "30 gun gecikme"); for (let i = 0; i < ADIM.length; i++) { const onceki = i === 0 ? 0 : ADIM[i - 1].kalem, art = ADIM[i].kalem - onceki; yaz(D, ADIM[i].ad, ADIM[i].gun, art, (art / ADIM[i].gun).toFixed(3), Math.min(art, Math.floor((art / ADIM[i].gun) * 30))); } const t0 = ilkTespit(), t1 = ilkTespit({ "yetki-yukseltme": { esik: 300 } }); console.log(`tek bir esigin 180'den 300'e cikmasi tespiti ${t0}. gunden ${t1}. gune tasir: ` + `yerlesik gun ${t0 - TUTUNMA} -> ${t1 - TUTUNMA}, kalem ${kalemGun(t0)} -> ${kalemGun(t1)}`);
8 adim, 330 gun; 5 adimda denetim var, 3 adim hicbir denetimin gormedigi adim; denetimli gun 69 (%20.9), denetimli kayit 468 1. adim adim sure ve firsat penceresi adim gun iz denetim esik uretilen uyari gunu kalem kesif 45 1 - - 45 - 0 ilk-erisim 12 4 kimlik-gunlugu 60 48 esik yok 1 yurutme 2 9 surec-kaydi 30 18 esik yok 2 kalicilik 3 2 baslatma-envanteri 10 6 esik yok 3 yetki-yukseltme 38 6 yetki-degisikligi 180 228 92 9 yanal-gecis 96 3 - - 288 - 26 toplama 120 2 - - 240 - 41 sizdirma 14 12 cikis-hacmi 100 168 325 48 esige varan denetim: 2/5; ilk tespit gunu 92 2. surenin nerede toplandigi kume gun sure payi % kayit kalem artisi denetimi olan adimlar 69 20.9 468 16 hicbir denetimin gormedigi 261 79.1 573 32 en uzun iki adim 216 65.5 528 32 3. tespit gunu ne zaman, o gune kadar kac kalem ayar tespit gunu yerlesik gun kalem kurtarilan esikler oldugu gibi 92 47 7 41 yetki esigi 180 -> 300 325 280 45 3 yetki esigi 300 + yanal gecise denetim 120 75 12 36 kesife denetim (esik 30) 30 tutunma yok 0 48 hicbir denetim uyarmaz - 285 48 0 4. gecikmenin kalem hizi adim gun kalem artisi kalem/gun 30 gun gecikme kesif 45 0 0.000 0 ilk-erisim 12 1 0.083 1 yurutme 2 1 0.500 1 kalicilik 3 1 0.333 1 yetki-yukseltme 38 6 0.158 4 yanal-gecis 96 17 0.177 5 toplama 120 15 0.125 3 sizdirma 14 7 0.500 7 tek bir esigin 180'den 300'e cikmasi tespiti 92. gunden 325. gune tasir: yerlesik gun 47 -> 280, kalem 7 -> 45
Sayılar ölçüm sınıfındadır; girdileri TM4–TM6’dır.
Üç Yüz Otuz Günün Yüzde Yetmiş Dokuzu Karanlıkta
Zincirin toplam süresi 330 gündür ve bu sürenin adımlara dağılımı düz değildir. Yürütme iki gün, kalıcılık üç gün sürer; yanal geçiş 96, toplama 120 gündür. İki adım tek başına sürenin %65,5’ini taşır.
Denetim dağılımı sürenin tersidir. Sekiz adımın beşinde bir denetim vardır, üçünde yoktur — ve denetimsiz üç adım, en uzun ikisini içerir. Denetimi olan adımlar toplam 69 gün sürer, yani sürenin %20,9’u; hiçbir denetimin görmediği adımlar 261 gün, yani %79,1. Bir kampanyanın uzunluğu tek başına savunmaya zaman kazandırmaz: kazanılan zaman yalnız denetimli günlerdir.
İkinci tablonun son sütunu bunu keskinleştirir. Denetimli 69 gün boyunca erişilen kalem artışı 16, denetimsiz 261 gün boyunca 32’dir. Kalemlerin üçte ikisi, hiç bakılmayan zaman diliminde toplanır. Kayıt sayısı da aynı yöndedir: denetimsiz adımlar 573 kayıt üretir ve bu kayıtların hiçbiri bir denetime düşmez.
Var Olan Denetim Uyarmayan Denetim Olabilir
Birinci tablonun uyarı günü sütunu, denetimin varlığı ile işleyişi arasındaki farkı yazar. Beş denetimden üçü “eşik yok” satırıdır: denetim tanımlıdır, adımın kayıtlarını görür, ama adım eşiğe varacak kadar kayıt üretmeden biter. İlk erişim 12 günde 48 kayıt üretir, eşiği 60’tır. Yürütme iki günde 18 kayıt üretir, eşiği 30’dur. Kalıcılık üç günde 6 kayıt üretir, eşiği 10’dur.
Bu üç satır aynı kusurun üç örneğidir: eşik, adımın süresine göre değil kayıt hacmine göre konmuştur. Kısa adımlar yüksek eşiğe hiç varamaz. Denetim envanterinde beş kalem görünür, işleyen iki kalem vardır. Kapsama sayımı adım sayısıyla yapılırsa 5/8 yazılır; eşiğe varmayı da sayan bir kapsama ölçüsü 2/8 yazar.
İlk uyarı 92. gündedir ve yetki yükseltme adımındaki denetimden gelir: adım 62. günde başlar, günde 6 kayıt üretir, 180 kayıtlık eşiğe 30 günde varır. O gün erişilmiş kalem sayısı 7’dir ve kampanya 47 gündür yerleşiktir. Yerleşik kalma süresi, ilk erişim adımının başladığı gün ile tespit günü arasındaki farktır.
Bir Eşiğin İki Yüz Otuz Üç Günlük Bedeli
Üçüncü tablo tek bir ayarı değiştirir. Yetki değişikliği denetiminin eşiği 180’den 300’e çıkarılırsa — uyarı sayısını azaltmak için yapılan sıradan bir ayar — o adım 228 kayıt ürettiği için eşiğe hiç varmaz. Uyarma görevi zincirin son adımına düşer: çıkış hacmi denetimi 325. günde uyarır.
Sonuç üç sayıda birden görünür. Tespit günü 92’den 325’e çıkar, yerleşik kalma süresi 47 günden 280 güne, erişilen kalem 7’den 45’e. Kurtarılan kalem 41’den 3’e iner. Tek bir eşik değeri, tek bir denetimde, 38 kalem ve 233 gün fark eder. Eşik ayarı bir uyarı hacmi kararı gibi görünür; ölçüldüğünde bir kalem kararıdır.
Üçüncü satır telafiyi dener: eşik 300’de kalır ama yanal geçiş adımına bir denetim eklenir. O adım günde 3 kayıt üretir, 60 kayıtlık eşiğe 20 günde varır ve tespit 120. güne çeker — 12 kalem, 36 kurtarılan. Kaybedilen 38 kalemin 33’ü geri alınır, hepsi değil. Hiç bakılmayan bir adıma denetim koymak, bozulan bir eşiği tam olarak telafi etmez.
Dördüncü satır zincirin başına gider. Keşif adımına 30 kayıtlık eşikli bir denetim konursa uyarı 30. günde gelir — ilk erişim adımı 45. günde başladığı için tutunma hiç doğmaz ve 48 kalemin tamamı kurtulur. Keşif adımı 45 gün sürer ve günde yalnız 1 kayıt üretir; bu adımı izlemenin bedeli, dışarıdan gelen sorgu hacmini ayrıştıracak bir ölçüm kurmaktır. Beşinci satır ters uçtur: hiçbir denetim uyarmazsa kampanya 285 gün yerleşik kalır ve 48 kalemin tamamına erişir.
Yerleşik Kalınan Her Gün
Dördüncü tablo gecikmeyi bir hıza çevirir. En yüksek kalem hızı yürütme ve sızdırma adımlarındadır: günde 0,500 kalem. En düşük hız 0,125 ile toplamadadır. Ama hız tek başına bedeli vermez, çünkü hızın çarpıldığı süre adımdan adıma otuz kat değişir.
Son sütun bunu birleştirir: her adımda otuz günlük bir gecikmenin kalem karşılığı. Yürütmede 1, kalıcılıkta 1, yetki yükseltmede 4, yanal geçişte 5, toplamada 3 kalemdir. Kısa adımlarda otuz gün beklemek mümkün değildir — adım zaten iki gün sürer ve artışı 1 kalemle sınırlıdır. Uzun adımlarda ise otuz gün, adımın küçük bir dilimidir ve o dilim bile birkaç kalem taşır.
Buradan çıkan sıra, denetim yerleştirmenin süre ekseninden okunuşudur. Bir denetimi kısa bir adıma koymak, uyarma penceresini o adımın süresiyle sınırlar: iki günde eşiğe varmayan bir denetim hiç uyarmaz. Uzun bir adıma koymak ise pencereyi genişletir ama gecikmenin bedelini de büyütür. Süre ekseninde en değerli denetim, uzun bir adımın başında eşiğe varabilen denetimdir — yanal geçiş satırındaki 20 günlük uyarı süresi buna örnektir.
Özet
- 330 günlük sekiz adımlık dizide denetimi olan adımlar 69 gün (%20,9), hiçbir denetimin görmediği adımlar 261 gün (%79,1) sürer; en uzun iki adım sürenin %65,5’ini taşır ve ikisi de denetimsizdir.
- Kalem artışının üçte ikisi denetimsiz günlerde toplanır: denetimli 69 günde 16, denetimsiz 261 günde 32 kalem.
- Denetimin varlığı uyarması demek değildir: beş denetimden üçü, adım eşiğe varacak kadar kayıt üretmeden bittiği için hiç uyarmaz. Adım sayısıyla kapsama 5/8, eşiğe varmayla 2/8’dir.
- İlk tespit 92. gündedir; o gün 7 kaleme erişilmiş ve yerleşik kalma süresi 47 gün olmuştur.
- Tek bir denetimin eşiği 180’den 300’e çıkarsa tespit 325. güne kayar: yerleşik gün 47’den 280’e, kalem 7’den 45’e çıkar. Aynı ayar geri alınmadan yanal geçişe denetim eklemek 33 kalem kurtarır.
- Otuz günlük gecikmenin bedeli adıma göre 1 ile 5 kalem arasındadır; keşif adımına konan bir denetim tutunmayı hiç doğurmadan 48 kalemin tamamını kurtarır.
Sonraki Adım
İki ders zinciri iki ayrı eksenden ölçtü: aktörün yeteneği kaç adım geçtiğini, adımın süresi kaç fırsat penceresi doğduğunu belirledi. Her ikisinde de zincirin kendisi verili kabul edildi — sekiz adım, sabit sıra, her adım bir öncekinin ardından.
Oysa zincirin asıl yapısı sıralamada değil önkoşullardadır. Bir adım neyi gerektirir, o gereklilik sağlanmadan sonraki adım neden olmaz, hangi adım atlanabilir ve hangisi atlanamaz. Önkoşullar yazıldığında her adımın karşısına bir denetim noktası konabilir ve o zaman asıl soru sorulabilir: zincir hangi adımda kırılıyor, kırılmadığında ne oluyor, ve bir adım erken kırmanın kazancı kaç kalem. Sonraki ders bu kursun ölçü birimini kurar ve erken kırma kazancını hesaplar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.