3 Kasım 2020 Salı

Chief Product Owner

Merhaba Arkadaşlar,

Chief Product Owner nedir, ne değildir'i kısaca sizinle de paylaşmak istiyorum. Önce bir adım geri gidelim. Agile mantalitesinde, biliyorsunuz, bir product owner-scrum master-development team yer alır. 

Normalde product owner'lar, kitabi terimle anlatmak gerekirse, ürünün değerini arttıran ve bunu da dev team ile çalışarak yapan kişidir. 

Buraya kadar sorun yok. Soru tam olarak şu: " Tek bir Product Owner'ın başa çıkabileceğinden daha büyük bir ürün varsa ne olacak? ( what happens when the product ise too large for a single product owner?)

Bir diğer soru da şu: Tek bir ürün üzerinde çalışan birçok takım varsa ne olacak? ( what happens when you have dozens of teams working on a single project?)

Tam da böyle durumlara karşı, agile organizasyonel yapılanmasında bir kavram karşımıza çıkıyor: Chief Product Owner. 

Chief Product Owner, daha üst seviyeden kararlar alabilen, takım product ownerlarının kendisine bağlı olduğu ve bu takım product owner'larına yön veren kişidir.

Bu yapılanmadaki anahtar kelime HİYERARŞİ'dir (hierarchical organization). Burada ast-üst olayı var yani.  İnternetten yine hazır bir resme kondum; kendim çizmedim, onu paylaşayım sizlerle.


Yani daha üst seviye olaylara bakan, stratejik kararları veren, ürünün nereye gideceğini belirleyen ve hatta bunun için karar verici paydaşlarla görüşen kişidir. Takım PO'su gibi detaylarla ilgilenmez.

Sonra görüşürüz.

7 Ağustos 2020 Cuma

Çocuğumu Hangi Okula Göndermeliyim?

Merhaba Herkese,

Her zaman bilişim ile ilgili yazı yazamayabilirim. :) Benim gibi çocuğunu okula gönderme konusunda başlangıç noktasında olan, yön almak isteyen veya neler yaşandığını duymak isteyen arkadaşlarımız vardır diye yazmak istedim. Zira ben her yazılanı tek tek okudum. :)

Öncelikle ben ilkokul aradım. Aklınıza gelebilecek her şeyi okudum; size de tavsiye ederim: "okul seçerken nelere dikkat etmeliyim", "okul seçimindeki kriterler nelerdir", "doğru okulu nasıl bulmalıyım" vs vs. :)

Her şeyi dinleseniz de mutlaka potansiyel okullarınıza gidin sevgili arkadaşlarım. Bir defa okulu görün. Yerini, muhitini görmeniz iyi olacaktır. Herkesten duyacaksınız, ilkokul seçimi aslında öğretmen seçimidir. Yüzde yüz haklıdır da. Ancak kişisel görüşüm bununla sınırlandırmamak yönünde. Birçok okul gezdim. Hepsinde müdür ve müdür yardımcılarıyla görüştüm. Evet belki haddim değil, belki yanlış bir bakış açısıdır ama konuştuğum idarecilerden dolayı elediğim okullar oldu. İletişime açık olmamaları veyahut konuşmaları benim o okulları direkt elememe yol açtı. Bunun yanında bahçesi bile olmayan okullar türemiş; örneğin bu bile bir kriter olabilir. Salgın süreci olmasa, okul aile birlikleri aslında tek adresiniz olmalı. Okul aile birliğindekiler size okul nasıldır, hangi öğretmenler sevecen, hangileri çocuklar üstünde otorite deniyor vs her şeyi anlatıyorlar. Şanssızlıktır ki, bu süreçte bulmanız kolay değil. 

Okulların yan aktiviteleri/dersleri de önemli. İsteyene satranç isteyene halk oyunları gibi birçok ilave ders olması da önemli. Bunun için küçük bir maddi destek gerekebilir. Bunun dışında güvenlik, hemşire, temizlik gibi konular da kriterlerden sayılabilir. 

Yaşadıklarımı yazmak istedim; benim durumumdaki arkadaşlarımın işine yaraması dileğiyle. :)

İyi Geceler

2 Ağustos 2020 Pazar

Linux'ta Ortak Disk Sorunu ve Yama Çözüm

Merhaba Arkadaşlar,

Windows ya da Linux fark etmeksizin, uygulama makinalarınız ortak diskleri görüyordur. NFS ya da CIFS kullanıyor olabilirsiniz. Buradaki amaç, uygulamalarınızın ortak dosyaları görebilmesidir. Örneğin, sözleşme gibi önemli bir dosyayı bir uygulama sunucusundan ekrana bağlandığınızda görüp, diğerindeyken görememeniz kabul edilemez. Veyahut bir web siteniz vardır; bir kullanıcı arayüzden girip, siteye resim yüklemiştir. Bir başka kullanıcı başka bir makinaya düştüğünde o resimi göremezse, takdir edersiniz ki çok saçma olur. Ortak diskler bunun için vardır. Bunun da çok detayı vardır. IP bazlı, kablolu vs diye ama ona girmeyeceğim, asıl konum bu diskler değil zira.

Diyelim ki ortak diskte bir sorun var. Tabi ki storage ekibiniz hızlıca müdahale edecektir. :) Ancak storage ile uygulama farklı networktedir ve network sorunu vardır vs vs. Böyle durumlarda kısmet deyip beklemek kabul edilemez takdir edersiniz ki. =) Böyle durumlarda, uygulama üstünde ortak diski, herhangi bir uygulama sunucusu ile değiştirmeniz gerekiyor. Akabinde sunucuları sync etmelisiniz. Yani hangi sunucudan döküman, nesne yüklenirse yüklensin, hızlıca sizin belirlediğiniz, ortak disk olarak hizmet verecek uygulama sunucusuna bunları göndermeniz gerekecektir. Bunu da linux'taki rsync komutu ile yaparız. 

Örnek komut satırı:
rsync -avhz /gurkan/wsadmin/WS-Docs/gurkanalkan.blogspot.com/wp-content/uploads makina2:/gurkan/wsadmin/WS-Docs/gurkanalkan.blogspot.com/wp-content/

Uploads altında ne varsa, ikinci makina altına atmış olacaksınız. Tüm uygulama sunucularınızda bu scripti çalıştırıp, shell olarak kurarsanız, düzenli olarak atmış olursunuz. 

Yazıyı bitirmeden de çok kısa rsync komutuna değineyim, daha önce kullanmamış arkadaşlarım için. Rsync komutu bu şekilde, dosya transferi, günlük delta backuplar, incremental backuplar gibi, farkları bulup, onları kopyalayan bir komuttur. 
rsync -parametreler kaynak hedef  şeklinde bir notasyonu vardır.

Yukarıdaki örneğimde kaynak: /gurkan/wsadmin/WS-Docs/gurkanalkan.blogspot.com/wp-content/uploads 
hedef: makina2:/gurkan/wsadmin/WS-Docs/gurkanalkan.blogspot.com/wp-content/

Burada iki farklı makina yerine, aynı makina içinde yapsaydım, hedefte makina2'yi ayrıca belirtmeye gerek kalmazdı. Bu durumda hedef: /gurkan/wsadmin/WS-Docs/gurkanalkan.blogspot.com/wp-content/ olurdu.

Kullandığım parametreleri ise şöyle:
-a dosya veya diizne ait her şeyi arşivleyerek taşır(rol-izin-mtime gibi)
-v yaptığımız işlemin detayını ekranda, konsolda görmemizi sağlar.
-h bizim okuyabileceğmiz bir çıktı oluşturur(Human readable)
-z dosya ya da dizini sıkıştırarak alır.

Sonra görüşürüz.

1 Ağustos 2020 Cumartesi

Web Sitenizde Otomatik Restart Shell Scripti

Merhaba Arkadaşlar,

Web sitesi işlerinde çok temel seviye dedim ama sonuçta shell işlerinde o kadar da yeni değiliz. :)))
Başıma gelen bir olay ve nasıl bir ara çözüm uyguladığımı paylaşacağım. Elimdeki web sitesi çok temel seviyede olan, caching'i zayıf denebilecek, yüksek trafikleri kaldıramayacak basit bir mini site idi. Ancak bir şekilde web siteme aşırı yük geldi. :)

Eğer sizin de web sitelerinize fazladna yük geldiyse ve/veya web sitenize restart atmak isterseniz aşağıdaki gibi ilerleyebilirsiniz.

Öncelikle apache altında, executables'larınız her nerdeyse, altında bir sh dosyası oluşturmalısınız. Örneğin apache/exec altında olsun.

1. oto_restart.sh oluşturun.
2. İçine şunları yazın:
./stop-apache-WS    (sizin apacheyi kurarken apache stop scriptiniz her neyse, onu yazarsınız)
sleep 3                      (3 saniye bekle dedik, ki tüm processler kill olsun)
./start-apache-WS    (sizin apacheyi kurarken apache stop scriptiniz her neyse, onu yazarsınız)

3. chmod +x oto_restart.sh    (yetkilendirmenizi yaparsınız)

4. while [[ 0 -ne 1 ]]; do ./oto_restart.sh;   sleep 300; done  yazıp çalıştırabilirsiniz.

Bu sayede 300 saniyede bir oto_restart.sh çalışmış olacak. Yani 5 dakikada bir restart etmiş olacaksınız. Böylece site down olmayacaktır. Tabi bu işlemi yaparken db'nin durumunu da gözlemlemeniz iyi olacaktır.

Bu mantıkla web sitenizi de auto restart atabilirsiniz; herhangi bir apache platformunuzu da otomatik olarak restart edebilirsiniz. Genel mantık bu şekilde.

Sonra görüşürüz.
     

31 Temmuz 2020 Cuma

Web Sitenizin Internet Explorer Uyumluluğu

Selam Arkadaşlar,

Web sitelerinde benim gibi çok temel seviye bilgi sahibi olan arkadaşlarım ve ileride unutursam diye kendim için paylaşım yapmak istedim. :)

Şayet web sitenizin internet explorer ile açıldığında, bozuk olduğunu, kaydığını vs gördüyseniz, bu IE Uyumluluk için ufak bir ilave yapmanız gerektiğini söyler. Örneğin bazen çalıştığınız firmalar, kurumsal olarak eski Internet Explorer'ı policy üstünden makinalara yüklemiş olabilir. Bunu aşmak ve web sitenizin düzgün çalışması için:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

IE=edge ile, en son IE versiyonuyla uyumlu hale getiriyormuşuz. Bu satırı benim sitem php olduğundan, header.php altına attım. <head> etiketleri arasına koymanız gerekiyor.

İyi Akşamlar herkese.

30 Temmuz 2020 Perşembe

Performance Monitor (PerfMon)

Merhaba Arkadaşlar

Geçen yazımda performance monitor ile ilgili yazıma gelen soruya istinadeni perfmon'un mantığına kısaca değineceğim. PerfMon özetle sunucunun perfomans verilerini toplayabildiğimiz, izleyebildiğimiz, loglatabildiğimiz bir uygulamadır. 

Performance Monitoring'te 3 seviye vardır:
1.Object
2.Counter
3.Instance



Örnekle açıklayalım: Processor bizim objectimiz(nesne) oluyor. İçinde bir sürü counter(sayaç) var. Örneğin ben Interrupt Time'ı seçtim. Counterımız Interrupt Time oldu yani. Altında da instance olarak herhangi bir processor'ı seçebiliriz. Bunlar da instance oluyor. 



Hep bu 3 seviye olmak zorunda değil. Örneğin memory objectimizi seçersek, altında available bytes counter'ını seçebiliriz. Göreceğiniz üzere, altında instance yok. 



Önceki yazımda Data Collector'u anlattığım için ona burada değinmiyorum. En temel anlatımı bu şekildedir. Bundan sonrasını kullanabilmek için tek tek objectleri ve counterları bilmek lazım ki, o da biraz tecrübeyle olacak iş. Ben de kendi kullandıklarımı ara ara paylaşmaya çalışacağım.

Şimdiden herkese iyi bayramlar.

Word'de İçindekiler Sayfası Oluşturmak

Merhaba Arkadaşlar,

Bu yazıda Microsoft Word'de İçindekiler sayfasının nasıl yapılacağına değineceğim. Eskiden manuel yapılırdı bu fihrist ya da sayfa indeksleri. Ancak uzunca bir süredir Word'de bu işlemi otomatik olarak yaptırabiliyoruz.

Öncelikle deneme için uzunca bir yazı gerekiyordu. Lorem Ipsum'dan ödünç aldım tabi ki. :)
30 paragraflık bir yazıyı word'ün içine koydum. Aralara Başlık 1 - Başlık 1.1 gibi başlıklar uydurdum.

Word'de içindekiler sayfası oluşturma1

Bu işteki en kritik bilgi, kendi başlıklarınızı Microsoft Word'e, başlık olarak tanıtmanız. Bunu yapmanın en kolay yolu da, Word'de Home dizinindeyken, Heading kullanmak. Başlıklarınızı Heading1 yapmalısınız. Örneğin başlığınızın da alt başlığı olacaksa, alt başlıklara da Heading2 diyeceksiniz. Alt başlığın da kendi alt başlıkları varsa, onlara da Heading3 diyeceksiniz; bu böyle gider.
Word'de İçindekiler indeksi oluşturmak

Şimdi İçindekiler Sayfamızı yapalım. Boş bir sayfaya gidip: References (Başvurular) --> Table of Contents (İçindekiler Tablosu) seçilir. Ve oradan Automatic Table (otomatik tablo) 'dan birini seçersiniz. 


İçindekiler Sayfamız hazır. Burada atlanmaması gereken nokta, diyelim ki sayfalar değişti. Başka başlık geldi veya sayfada kaydırma oldu. İşlem çok basit. Ben şimdi sayfa 8in alt maddeleri ile 9'u biraz öteleyeceğim.(enter ile aşağıya atacağım).
Yapmanız gereken İçindekiler kısmına bir defa tıklayıp, Update Table demeniz. Tüm değişimi direkt tabloya yansıtır. Update table deyince, bir de soru sorar, sadece sayfa numaraları mı, tüm tablo mu diye. Sırf tablodaki sayfanın yeri değiştiyse, sadece sayfa numarası demeniz yeterlidir ama ben genelde tüm tabloyu seçmenizi öneririm. Ne değiştiyse, otomatik olarak gider bulur ve yansıtır.

Sonra görüşürüz.


29 Temmuz 2020 Çarşamba

IIS CPU Settings

Merhaba Arkadaşlar,

Bu yazımızda, IIS üzerindeki istediğiniz uygulamamız için Advanced Settings altındaki CPU sekmesini açıklayacağım. Burası önemli alanlardan birisi. O nedenle ayrı başlıkta paylaşmak istedim.

IIS'i açın. Application Pool'lara girip, hangi uygulamanın app pool'unu isterseniz onu seçin.
Sağ panelden Advanced Settings'e tıklayın. Artık birçok ayarı yapabileceğimiz panele geldiniz. Biz bu yazıda CPU kısmına değineceğiz.


Limit: Uygulamanız kendisine tahsis edilen CPU'nun ne kadarını kullansın demektir bu. Genelde 0 yazar. 0 yazdığınizda, cpu'yu limitleme demiş oluyorsunuz; yani tahsis edilenin tüm CPU'yu(%100) kullan diyorsunuz. Şimdi burayı her yerde okumuşsunuzdur ama bu alanın nasıl kullanabileceğini konuşalım. Diyelim ki, bir uygulamanız var ve cpu'su IISi aşağı indiriyor ve sürekli IISi ayağa kaldırmakla uğraşıyorsunuz. Eğer uygulamanıza cpu limiti koyarsanız, nispeten daha kontrol altında tutabilirsiniz. Ki normal şartlarda hiçbir uygulama %100e vurdurmamalıdır. Eğer böyle bir durum varsa, ya leak vardır ya da debug modda log açılmıştır veyahut farklı kod defecti vardır. 
Varsayalım ki %70 koymak istiyorsunuz. Bu limit aşıldığında ne yapılacağını belirleyebilirsiniz. Bunun için de sizi ikinci alana davet ediyorum(Limit Action)

Limit Action: Yukarıda bahsettiğim gibi, limiti koydunuz. Ve o limite gelindi. Bu durumda hangi aksiyonun alınmasının karar verilmesi gerekiyor.

a)No Action: En masumudur. Limit aşıldığında, hiçbir şey yapma demektir. :)
b)KillW3wp: Eski versiyon IISlerin vazgeçilmezidir. :) Diyelim cpu %70e geldi. App pool'u kill eder. Limit interval da kontrol ediyor o an. Bir sonraki limit interval kontrolüne kadar app pool öyle kalır.
c)Throttle: CPU limite geldi mi, peşinden gelen istekleri bekletir. Daha fazla cpu kullanamaz uygulamanız, cpu boş da olsa dolu da olsa.
d)ThrottleUnderLoad: Throotle gibi CPU'ya herhangi bir kısıt getirmez. Eğer CPU boş ve kullanabilir duurmdaysa, rahat bir şekilde CPU kullanırsınız. Ancak cpu limitine ulaşılırsa, CPUyu limitle kısıtlar. Yani adı gibi, sadece load altında throttle. :)

Limit Interval: İlk resimde 5 yazıyordu örneğin. 5 dakikada bir IIS'te cpu kontrolü yapılacak demektir. KillW3wp ile genelde kullanılır. Throttle ve ThrottleUnderLoad ile kullanılmaz. Kill edilen uygulamayı manuel start vermeniz iyi olacaktır. Yoksa 5 dakika dolana kadar IIS worker processi kill edilmiş şekilde durur. 

Processor Affinity Enabled: Diyelim ki 32 core cpu'unuz var. İlk 6 tanesini kullan, gerisini kullanma diyebilirsin, server sağlığını düşünüp. False derseniz, tüm cpunuzu kullanıma açarsınız. Bu durumda diğer iki değerin önemi yoktur. True derseniz, sizi aşağıya alalım. :)

Processor Affinity Mask: Hem bu arkadaşın hem de bir altındaki "64-bit option" olanın default(varsayılan) değeri 4294967295 'tir. İlk resimde bu nedenle o değeri görüyorsunuz. (2^32 -1 değeridir) Uygulama hangi processora bağlanıp çalışsın onu belirliyoruz. 1 dersek, ilgili IIS workerprocess'i birinci cpu'da çalışacaktır. Binary gösterimi: 00000000000000001  (2 üzeri 0)
2 dersek, ikinci processor'da çalışacaktır. Binary gösterimi: 00000000000000010 (2 üzeri1)
3 dersek, hem 1 hem de 2nci processorda çalıaşcaktır. Binary gösterimi: 00000000000000011 (2 üzeri 0 ve 2 üzeri 1'in toplamı)

Sonra görüşürüz.

27 Temmuz 2020 Pazartesi

SQL Server'daki Authentication Seçimi

Selam Arkadaşlar,

Bildiğiniz üzere SQL Server'da iki tip authentication yöntemi var:

1. Windows Authentication
2. SQL Authentication

Şimdi envai çeşit kaynakta bunların ne olduğunu okumuşsunuzdur. Kısaca Windows Authentication kullanılması için Active Directory üzerinde bir user oluşturulmalı ve bu user üzerinden yetkilendirme yapılmalıdır. SQL Authentication için ise, db üzerinde, sql master database'inde user oluşturulmalı ve bunun üzerinden bir yetkilendirme yapılmalıdır. 

Değinmek istediğim nokta şu: eğer seçim aşamasına gelirseniz, şunu göz önünde bulundurun her zaman, Windows Authentication seçtiğiniz zaman Active Directory'e gideceğinizden, araya bir network katmanı koyuyorsunuz demektir. Uygulamanızı AD Server'a bağımlı yapıyorsunuz aslında. Bu nedenle SQL Authenticationı tercih ediyorum ben genelde. SQL Authentication'daki sıkıntıya da genelde dba'ler çıkartabilir. :) Buradaki olay da, hala fixlenmediyse, OS user bilgisini çekemiyordu SQL Server. Bu durum hala yaşanıyorsa, hala os userı çekemiyorsa, bu sorunu kod seviyesinde çözüp, yine sql authentication ile devam etmenizi öneririm.

Sonra görüşürüz.

26 Temmuz 2020 Pazar

İpucu: Dynamic Teaming Sorunu

Merhaba Arkadaşlar,

Başıma gelen bir problemden ve çözümünden kısaca bahsedeyim. Bir load balancerım ve arkasında sunucularım vardı. Aradan loadbalancerı çıakrttığımda 10 milisaniyede cevap veren servislerim, loadbalancer koyduğumda 30-40 saniye bandına çıkıyordu. Loadbalancer'ın tüm configleri düzgün ve best practice'e uygundur. 

Sonunda sorunu tespit ettik. Sunucularımız Hyper-v platformundan hizmet alan sanal sunuculardı. Loadbalancer'ımız ise Netscaler idi(F5 değil). Meğer Netscaler ile Hyper-v platformu arasında bonding ya da teaming denilen bir problem varmış. Özetle sorun şu: LoadBalancer arkasındaki sunuculara giderken, aynı sunucu için farklı MAC adresleri görüyorduk. Yani bir LB, bir MAC ile bir sunucuma gidiyor. Sunucum başka bir MAC üstünden cevap veriyor. Sonra LB yeni gelen MAC üstünden tekrar sunucuma geliyor, Sunucumun da kafası karışıyor, bekletme sürecinden sonra cevap veriyor. Hyper-v fiziksel sunucusunun MACi oluyor bu aslında. Bu iki MAC'i tek bir MACmiş gibi davranmasını sağlamalıyız. 

Konfigürasyonu aşağıdaki gibi aktif-pasif yapıp, loadbalancing mode: hyper-v port balancing seçilmeli.

Sonrasında uygulamalara restart atıp denediğinizde, webservisinizin loadbalancer ile de birkaç milisaniyede cevap verdiğiin göreceksiniz.

Sonra görüşürüz.