Ders 13 / 16
Betikle Aygıt Yönetimi
Şablon hangi sınıfa göre yazılırsa yazılsın sapan aygıt her seferinde 6'dır; değişen tek şey raporda görünmeyenin 6, 3 ve 3 olmasıdır. Kuru çalışma altısını da uygulamadan önce bulur, rapor 0, 3 ve 3 bulur, ve bir şablonda kademeli yayma hiç durmaz.
İçindekiler
Önceki ders tek bir isteğin tek bir aygıtta ne bıraktığını ölçtü. İşletmede istek tek değildir: bir betik envanteri gezer, kırk aygıta sırayla bağlanır, her birine aynı şablonu uygular ve sonunda bir rapor yazar. Betik yazıldığı andan sonra kırk aygıtın kırkına aynı kararı taşır — kaldıraç tam olarak budur.
Bu dersin sorusu betiğin nasıl yazılacağı değil, betiğin ne göremediğidir. Şablon uygulandığında kaç aygıt şablonun dışında kalıyor, bu aygıtların kaçı yazılan raporda görünüyor, ve iki sayı arasındaki fark hangi kararla açılıyor.
Betiğin Yaptığı İş
Toplu değişiklik yedi adımdır ve adımların sırası ölçümün sonucunu belirler.
# ogretilen toplu degisiklik yordami , calistirilmamistir 1 envanteri oku -> 40 aygit 2 sablonu kuru calistir -> aygit basina fark listesi 3 farki gozden gecir -> sablonun disinda kalanlari isaretle 4 dilim 1 uygula -> ilk 10 aygit 5 raporu oku -> gorunen sapma var mi 6 yoksa dilim 2 , 3 , 4 -> yayma surer 7 varsa durdur ve geri al -> yalnizca uygulanmis olanlar
İkinci adım kuru çalışma, dördüncüden yedinciye kadarki döngü kademeli yayma, yedincinin ikinci yarısı geri alma. Üçü ayrı üç koruma değildir; aynı korumanın üç ayrı zamandaki hâlidir — uygulamadan önce, uygularken ve uyguladıktan sonra.
Kod olarak altyapı yordamının kendisi ve araç tartışması Kod Olarak Altyapı kursunun konusudur ve burada tekrarlanmaz. Burada nesne bir ağ aygıtıdır ve ölçülen şey yordamın verimi değil, şablonun dışında kalan azınlıktır.
Doğrulamanın İki Kaynağı
Betiğin değişikliğin doğru gittiğini anlamasının iki yolu vardır ve ikisi aynı şeyi ölçmez.
Kuru çalışma niyeti aygıtın durumuyla karşılaştırır. Şablonun ne yazacağını hesaplar, aygıttan mevcut yapılandırmayı okur, ikisinin farkını çıkarır ve hiçbir aygıta yazmaz. Kapsamı envanterin tamamıdır: kırk aygıdın kırkına bakar, çünkü bakmak için bir göstergeye ihtiyacı yoktur.
Rapor göstergelerden gelir. Uygulamadan sonra toplanan ölçütler okunur ve beklenenden sapan aygıtlar listelenir. Kapsamı ise göstergelerin kapsamıdır — ve gösterge kümesi hiçbir zaman kırk aygıdın kırkını eşit ayrıntıda görmez. Bu kurguda rapor etkileşim sınıfının göstergeleri üzerine kuruludur; öteki sınıflardaki bir sapma rapora hiç düşmez.
Bu, raporu yazanın bir kusuru değildir. Gösterge kümesi her zaman bir kapsam kararıdır: hangi sınıfın hangi ölçütü, hangi sıklıkla toplanacak. Karar verilirken sorulan soru “hangi aygıtlar önemli” olur; sorulmayan soru ise “hangi sapmayı görmez hâle geliyoruz” olur.
Ölçümün varsayımları:
- OT19 — Kırk aygıtlık özne kümesi kursun sabitidir ve bu derste değiştirilmez.
- OT20 — Şablon aygıtın sınıfına göre yazılır. Sınıfı şablonunkiyle uyuşmayan özel aygıt sapar; sapma şablonun kapsam kararından doğar, aygıtın kusurundan değil.
- OT21 — Kuru çalışma niyeti aygıdın gerçek durumuyla karşılaştırır ve hiçbir aygıta yazmaz. Kâhini kullanmaz; sapmayı aygıdın kendi durumundan okur.
- OT22 — Rapor etkileşim sınıfının göstergeleri üzerine kuruludur. Başka sınıftaki bir sapma rapora hiç düşmez.
- OT23 — Kademeli yayma aygıtları numara sırasıyla dilimler. Her dilimin sonunda rapor okunur; raporda görünen bir sapma varsa yayma durdurulur.
- OT24 — Yayma durdurulduğunda o ana kadar uygulanmış sapan aygıtlar geri alınır; sonraki dilimlerdeki sapan aygıtlara hiç dokunulmamıştır.
- OT25 — Dilim boyu 40 olduğunda yayma tek adımdır ve durdurma kararının verilebileceği bir ara yoktur.
Ölçüm
"""Toplu degisiklik: sapan aygit sabit, gorunen sapma degisken. Bolum 1 - sablon uygulanir: uyan, sapan, raporda gorunen ve gorunmeyen. Bolum 2 - kuru calisma ile raporun kapsami yan yana. Bolum 3 - kademeli yayma: durdurulana kadar degisen ve onlenen sapan. """ TOHUM = 20260812 SINIFLAR = ("etkilesim", "toplu", "yedek") def uretec(tohum): d = tohum % 2147483646 + 1 def r(n): nonlocal d d = (d * 48271) % 2147483647 return d % n return r def ozneler(sayi=40, tohum=TOHUM): r, liste = uretec(tohum), [] for i in range(sayi): liste.append({"no": i + 1, "kapasite": 20 + r(81), "gecikme": 5 + r(45), "sinif": ("etkilesim", "toplu", "yedek")[r(3)], "ozel": r(9) == 0}) return liste def uygula(oz, sablon_sinifi): """Tek sablon kirk aygita uygulanir; ozel aygitlar sapar.""" uyan = sapan = gizli = 0 for o in oz: if o["sinif"] == sablon_sinifi or not o["ozel"]: uyan += 1 else: sapan += 1 if o["sinif"] != "etkilesim": gizli += 1 return uyan, sapan, gizli def kuru_calisma(oz, sablon_sinifi): """Uygulamadan once niyet ile aygitin durumu karsilastirilir.""" return [o["no"] for o in oz if not (o["sinif"] == sablon_sinifi or not o["ozel"])] def raporda(oz, sablon_sinifi): """Rapor etkilesim sinifinin gostergeleri uzerine kuruludur.""" return [no for no in kuru_calisma(oz, sablon_sinifi) if oz[no - 1]["sinif"] == "etkilesim"] def kademeli(oz, sablon_sinifi, dilim): """Dilim dilim uygulanir; raporda gorunen ilk sapmada durulur.""" uygulanan = sapan_uygulanan = dalga = 0 for bas in range(0, len(oz), dilim): dalga += 1 gorunen = 0 for o in oz[bas:bas + dilim]: uygulanan += 1 if not (o["sinif"] == sablon_sinifi or not o["ozel"]): sapan_uygulanan += 1 if o["sinif"] == "etkilesim": gorunen += 1 if gorunen: return dalga, uygulanan, sapan_uygulanan return 0, uygulanan, sapan_uygulanan oz = ozneler() print(f"özne {len(oz)} | özel aygıt {sum(o['ozel'] for o in oz)} | " f"sınıf dağılımı " + " ".join(f"{s} {sum(1 for o in oz if o['sinif'] == s)}" for s in SINIFLAR)) print() print(f"{'şablon sınıfı':<14s} {'uyan':>5s} {'sapan':>6s} {'raporda görünen':>16s} " f"{'raporda görünmeyen':>19s} {'raporun kapsamı':>16s}") for s in SINIFLAR: u, sp, g = uygula(oz, s) print(f"{s:<14s} {u:5d} {sp:6d} {sp - g:16d} {g:19d} " f"{(sp - g) / sp:16.3f}") print() print(f"{'şablon sınıfı':<14s} {'kuru çalışma bulur':>19s} {'rapor bulur':>12s} " f"{'yalnız kuru çalışmanın bulduğu':>31s}") for s in SINIFLAR: k, r = kuru_calisma(oz, s), raporda(oz, s) print(f"{s:<14s} {len(k):19d} {len(r):12d} {len(k) - len(r):31d}") for s in SINIFLAR: print(f" {s:<12s} sapan aygıtlar {kuru_calisma(oz, s)} | " f"raporda {raporda(oz, s)}") print() print(f"{'şablon sınıfı':<14s} {'dilim':>6s} {'duran dalga':>12s} " f"{'değişen aygıt':>14s} {'geri alınacak':>14s} {'önlenen sapan':>14s}") for s in SINIFLAR: for dilim in (4, 10, 40): d, u, su = kademeli(oz, s, dilim) print(f"{s:<14s} {dilim:6d} {d if d else '-':>12} {u:14d} " f"{su:14d} {len(kuru_calisma(oz, s)) - su:14d}")
özne 40 | özel aygıt 9 | sınıf dağılımı etkilesim 11 toplu 20 yedek 9 şablon sınıfı uyan sapan raporda görünen raporda görünmeyen raporun kapsamı etkilesim 34 6 0 6 0.000 toplu 34 6 3 3 0.500 yedek 34 6 3 3 0.500 şablon sınıfı kuru çalışma bulur rapor bulur yalnız kuru çalışmanın bulduğu etkilesim 6 0 6 toplu 6 3 3 yedek 6 3 3 etkilesim sapan aygıtlar [7, 12, 20, 25, 26, 40] | raporda [] toplu sapan aygıtlar [4, 20, 25, 26, 31, 33] | raporda [4, 31, 33] yedek sapan aygıtlar [4, 7, 12, 31, 33, 40] | raporda [4, 31, 33] şablon sınıfı dilim duran dalga değişen aygıt geri alınacak önlenen sapan etkilesim 4 - 40 6 0 etkilesim 10 - 40 6 0 etkilesim 40 - 40 6 0 toplu 4 1 4 1 5 toplu 10 1 10 1 5 toplu 40 1 40 6 0 yedek 4 1 4 1 5 yedek 10 1 10 2 4 yedek 40 1 40 6 0
Sapan Sabit, Görünen Değişken
Üst tablo bu konunun ana sonucunu veriyor. Şablon hangi sınıfa göre yazılırsa yazılsın uyan aygıt 34, sapan aygıt 6. Üç satırın üçünde de aynı sayı. Sapan sayısı şablonun niteliğine bağlı değildir çünkü sapmanın kaynağı şablonun yanlış yazılması değil, tek bir şablonun kırk farklı aygıtı temsil etme iddiasıdır. Daha iyi bir şablon yazmak bu altıyı beşe indirmez; ancak kapsamı daraltmak ya da ikinci bir şablon yazmak indirir, ki o da kaldıracın tekliğinden vazgeçmektir.
Sağdaki üç sütun ise değişiyor. Etkileşim sınıfına göre yazılan şablonda raporda görünen sapan 0, görünmeyen 6; raporun kapsamı 0,000. Öteki iki şablonda görünen 3, görünmeyen 3, kapsam 0,500. Aynı altı aygıt, üç ayrı görünürlük.
Bu, kursun üçüncü iddiasının ikinci ödemesidir ve burada en çıplak hâliyle duruyor: otomasyon sapmayı azaltmaz, görünürlüğünü değiştirir. Sapan altı aygıt her üç şablonda da oradadır; değişen tek şey kaçının rapora düştüğüdür. Bir işletmede bu iki sayıdan yalnız ikincisi gösterge tablosuna yazılır, ve gösterge tablosu iyileştikçe sapmanın azaldığı sanılır.
Aygıt numaraları bunu doğruluyor. Etkileşim şablonunda sapanlar [7, 12, 20, 25, 26, 40],
raporda görünen liste ise boş. Toplu şablonunda sapanlar [4, 20, 25, 26, 31, 33], raporda
[4, 31, 33] — üçü görünüyor, üçü görünmüyor. Yedek şablonunda sapanlar başka aygıtlar ama
raporda görünenler yine [4, 31, 33], çünkü rapor sapmaya değil sınıfa bakıyor.
Kırk öznelik bir kümede ölçülebilen en küçük fark 1/40 = 0,025’tir. Altı ile üç arasındaki fark 0,075’tir ve bandın rahatça içindedir.
Kuru Çalışmanın Bulduğu
Orta tablo iki doğrulama kaynağını yan yana koyuyor. Kuru çalışma üç şablonun üçünde de 6 sapan aygıdı buluyor. Rapor 0, 3 ve 3 buluyor. Yalnız kuru çalışmanın bulduğu aygıt sayısı sırasıyla 6, 3 ve 3.
Farkın nedeni yöntemin kendisidir. Kuru çalışma göstergeye bakmaz; envanterdeki her aygıda tek tek sorar ve niyetle karşılaştırır. Kapsamı gösterge kümesinin değil, envanterin kapsamıdır — ve envanter kırk aygıdın kırkını içerir. Bu yüzden kuru çalışma, gösterge tasarımının bütün kör noktalarından bağımsızdır.
İkinci fark zamandadır ve daha önemlidir. Kuru çalışma sapmayı hiçbir aygıt değişmeden önce bulur; rapor ise değişiklik uygulandıktan sonra bulur. Birinci durumda geri alınacak aygıt sayısı sıfırdır, çünkü geri alınacak bir şey yoktur. Kuru çalışmanın kazandırdığı asıl şey bulduğu altı aygıt değil, o altısını bulduğu andır.
Kademeli Yaymanın Ödettiği
Alt tablo yaymanın dilim boyuna göre ne değiştirdiğini veriyor ve ilk üç satır konunun en sert sonucunu taşıyor.
Etkileşim şablonunda yayma hiçbir dilim boyunda durmuyor. Duran dalga sütununda üç satır da boş; değişen aygıt her üçünde de 40, geri alınacak 6, önlenen sapan 0. Neden açık: yayma raporda görünen bir sapmada durur ve bu şablonda raporda görünen sapma yoktur. Dilimi dörde indirmek bir şey değiştirmiyor, çünkü sorun dilimin büyüklüğü değil, durdurma kararının okuduğu sinyalin boş olması. Kademeli yayma, sinyali olmayan bir kör noktada kademesiz yaymayla aynı şeydir.
Öteki iki şablonda yayma birinci dalgada duruyor. Toplu şablonunda dilim 4 iken değişen aygıt 4, geri alınacak 1, önlenen sapan 5; dilim 10 iken değişen 10, geri alınacak yine 1, önlenen 5. Yedek şablonunda dilim 4 iken geri alınacak 1, dilim 10 iken 2 — dilim büyüdüğü için ilk dalgaya bir sapan aygıt daha giriyor.
Dilim 40 satırları karşılaştırma için duruyor: tek adımda uygulandığında üç şablonda da değişen 40, geri alınacak 6, önlenen 0. Kademeli yaymanın bütün kazancı buradan okunur — doğru sinyal varken 5 sapmayı önlüyor, sinyal yokken 0.
Geri Alma ve Yıkıcı Değişiklik
Geri alma bir işlem değil, değişiklikten önce verilmiş bir karardır. Uygulanmadan önce aygıdın yürürlükteki yapılandırması saklanmamışsa geri alınacak bir hedef yoktur ve tablodaki “geri alınacak” sütunu bir istek listesi olarak kalır.
Toplu değişiklik geri alınamaz bir işlemdir: kırk aygıta uygulanan şablon, uygulandığı anda kırk aygıttaki önceki durumu siler. Bir aygıdın yapılandırmasını boşaltan, arayüzünü kapatan, yönetim erişimini kesen ya da ağı ikiye bölen bir değişiklik bu kursta çalıştırılabilir biçimde yazılmaz. Söylenecek olan ne yaptığı ve geri alınamaz olduğudur: ağı bölen bir değişiklikten sonra bölünmüş ağın öteki yarısındaki aygıtlara ulaşıp düzeltme yapmak mümkün olmayabilir, ve o aygıtlar tam olarak geri almanın çalıştırılması gereken aygıtlardır.
Sayılan yüzeyler ve daraltmaları şunlardır.
Birinci yüzey — kapsamın kendisi. Betik envanterin tamamına dokunabiliyorsa bir yazım hatası kırk aygıda birden gider. Daraltma: betiğin kapsamı her koşumda açıkça verilir ve varsayılan kapsam boş olur; kapsam bir dilim listesiyle sınırlanır; kuru çalışmanın çıktısı gözden geçirilmeden uygulama adımı çalışmaz.
İkinci yüzey — raporun kör noktası. Ölçümde bir şablonda sapmanın 6’sı da rapora düşmüyor. Daraltma: durdurma kararı yalnız rapora bağlanmaz; her dilimin sonunda o dilime giren aygıtlar için kuru çalışma yeniden koşturulur ve niyetle karşılaştırılır. Bu, raporun göremediği üç aygıdı da durdurma kararının kapsamına sokar.
Üçüncü yüzey — kimlik bilgisi. Betik kırk aygıda bağlanır ve bunun için bir kimlik kullanır. Kimlik bilgisi, anahtar ve erişim belirteci bu kursun hiçbir örneğinde yazılmaz; betik yalnız bir başvuru taşır ve değeri çalıştığı ortamdan alır, şablonun ya da yapılandırma deposunun içinden değil.
Dördüncü yüzey — geri alınamaz adımın kendisi. Daraltma: yıkıcı olabilecek adım bir geri alma zamanlayıcısıyla uygulanır — belirli bir süre içinde operatör onaylamazsa aygıt kendiliğinden eski yapılandırmaya döner. Erişimini kaybetmiş bir operatörün elindeki tek araç budur ve zamanlayıcı, uygulamadan önce kurulmuş olmak zorundadır.
Özet
- Toplu değişiklik yedi adımdır; kuru çalışma, kademeli yayma ve geri alma aynı korumanın uygulamadan önceki, uygularkenki ve sonraki hâlleridir.
- Şablon hangi sınıfa göre yazılırsa yazılsın uyan 34, sapan 6; sapmanın kaynağı şablonun yanlışlığı değil, tek şablonun kırk farklı aygıtı temsil etme iddiasıdır.
- Raporda görünen sapan 0 / 3 / 3, görünmeyen 6 / 3 / 3, raporun kapsamı 0,000 / 0,500 / 0,500. Aynı altı aygıt, üç ayrı görünürlük: otomasyon sapmayı azaltmaz, görünürlüğünü değiştirir.
- Kuru çalışma üç şablonda da 6 sapanı bulur çünkü kapsamı göstergenin değil envanterin kapsamıdır; ve onları hiçbir aygıt değişmeden önce bulur.
- Etkileşim şablonunda kademeli yayma hiçbir dilim boyunda durmaz — değişen 40, önlenen 0. Öteki iki şablonda birinci dalgada durur ve 5 sapmayı önler; sinyali olmayan bir kör noktada kademeli yayma, kademesiz yaymayla aynı şeydir.
Sonraki Adım
Bu konuda sayılan her sapan aygıt, envanterinde adı yazan, yapılandırmasını okuyabildiğimiz ve gerektiğinde geri alabildiğimiz bir aygıttı. Kuru çalışmanın altı sapanı bulabilmesi de buna dayanıyordu: aygıda sorabiliyorduk ve verdiği yanıt bizimdi. Peki özne kendi sahip olmadığımız bir nesne olursa? Sonraki ders kaldıracın altındaki nesneyi değiştirir ve aynı ölçüyü — tek karar, kırk özne, kalan kuyruk — bize ait olmayan bir yapılandırma düzleminde yeniden sorar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.