SOA Nedir Hoca?
Ülkemizde henüz rağbet görmese de hizmet temelli mimari yani SOA, önümüzdeki 5 senenin popüler temayülü olma yolunda. Tamam bu cümle güzel, akıcı, yasal. Ama SOA veya "hizmet"in ne olduğuna yabancı bir kişi için ne ifade eder?
İşbu söyleşide, soğuk yazılım geliştirme makalelerinde gördüğünüz SOA tasvirinden uzak şeyler bulacaksınız. En azından fakir öyle umud ediyor. Tevfik Allah'tan.
Derdimiz Nedir?
Efendim derdin tarifi biraz geniş.
Artık bilgisayar gani. Elinizdeki cep telefonu bile bilgisayar özellikleri taşıyor. Ve malesef "iletişim çağındayız." Kopuk bir çağ bu. (Bir sonraki çağı bekliyorum ben heyecanla.) Bu kadar nimet, yeni ihtiyaçlar doğuruyor ademoğlu için.
Bu iletişim imkanı bu kadar yaygınlaşmamışken, programcılar bileşen temelli mimariyle tekrar kullanılabilir kod parçaları meselesini çözmüşlerdi. Bir kere yazıp, elli yerde kullanabileceğiniz küçük birimler oluşturuyordunuz. (MS Örneği: COM)
İletişim çağı, bileşen temelli mimariyi de bozdu. Mühendisler, ya madem bileşenlerimiz var elimizde, bunları neden uzak makinelerde çalıştırmıyoruz, diye sorunca... Dağıtık bileşen mimarileri doğdu. Yine bir kere yazdınız ama bu sefer elli yere değil, tek yere koydunuz. Yine elli uygulama, sizin bileşeninizi kullandı. "Application Server" denen şeyler icat oldu. (MS Örneği: DCOM, COM+)
Sandınız ki dert bitti, herkes mutlu oldu. Hayır efendim. Biter mi? Bu sefer de platform çeşitliliği, evrensellik kaygısını ortaya çıkardı. Yazdığımız bileşen aynı cins platformlarda çalışıyor ama farklı bir cinsle karşılaştığımızde elimiz ayağımıza dolaşıyordu. Şu dağıtık bileşen midir nedir o mimarinin tekrar ele alınması gerekliydi.
İşte dert buydu. Dert budur. SOA denen felsefe de bu derdin çözümünü adreslemektedir.
Peki nasıl?
SOA Teorisi
SOA'dan bahsederken felsefe dedik az önce. Maksatlıydı o. Zira, SOA denen şey, bir ürün veya teknoloji olmamakla birlikte bir firmanın tasarrufu altında da değil.
SOA diyor ki, yapacağımız işler sınırları sârih (açık), (explicit boundary) bir hizmet paketi içerisinde dursun. Bu paketler akıllı (autonomus) olsun. Mukavelelerle (contract) haberleşsin, işlesin.
SOA sadece konsepti belirliyor, geri çekiliyor aslında.
Günümüzde SOA ile uyuşan bir çok uygulama görmekteyiz. Meselâ ülkemizde çılgın atan "Web 2.0" paradigması, o özündeki birlikteliği sağlamak için çevrim-içi hizmetlere dayanıyor. Nerede bir hizmet var ise orada SOA izi bulmak mümkündür.
Bildiğimiz Web Servisleri (XML Web Services) de SOA mimarisini uygulamanın ana yöntemlerinden birisi.
Çıkaracağımız ders şudur ki; SOA büyük büyük adamların kafa yorup ürettiği bir ilkeler topluluğu. Ne kadarını uygulayacağınız size kalmış. Hesap soran yok.
Teorisine daha detaylı inmek isteyenler için adres: http://www.oasis-open.org/committees/download.php/19679/soa-rm-cs.pdf.
Kendi Kendine SOA
Eğer SOA'yı uyguladım diyorsanız ürününüzün aşağıdaki ilkeleri taşıyor olması lâzım:
- Tekrar tekrar kullanılabilirlik.
- Tanecikli yapı. (Hâni çikolata tanecikleri gibi. Ayrıştırılabilir.)
- Modülerlik. (Tak-çalıştır.)
- Bileşenli olma.
- Birbiriyle çalışabilirlik. (Interoperability.)
- Endüstriyel standartlara uygunluk.
Ayrıca sunduğunuz "hizmet"in:
- Kapsüllenmiş. (Salça gibi bir kapsülü olmalı yani.)
- Gevşek bağlı. (Bu çok önemli. X kişisi olmadan restorana gidememek kabul edilmiyor.)
- Kendi kendini tarifi etmiş. Kendini soyutlamış, izale etmiş. (Gülüyorum ama içim kan ağlıyor ilkesi.)
- Akıllı. (Kendi kararlarını kendi veren, aklı başında, özgür bir birey gibi.)
- Kaliteli. (Ucuz etin yahnisi de servisi de ucuz olur.)
- Keşfedilebilir, bulunabilir. (Sarı çizmeli Mehmet Ağa olmamalı yani.)
olması da gerekiyor.
Kolay SOA
Yukarıdaki ilkeleri uygulamaktan acizim diyorsanız hâzır SOA iskeletleri aramaya başlıyorsunuz. Microsoft da sesinizin yankısını dinleyenlerden. .NET 3.0'a koyduğu Windows Communication Foundation (WCF) iskeleti, yukarıdaki ilkelerle bir uygulama hizmeti oluşturmayı epey kolaylaştırıyor.
WCF, Web Servisleri'nin adını değişmişi diyebilirsiniz. Haksız da sayılmazsınız. Çünkü SOA'ya da aynı eleştiriler yöneltiliyor.
.NET perspektifinden bakıldığında, web servislerinin durduğu noktadan sıyrılmak gerekiyordu zaten. Hem Remoting, hem Web Servisleri, vs. WCF tüm dağıtık işleri birleştirip SOA ilkelerini dayatıyor bize. İyi de yapıyor hani. Artık uygulamanızın iş yapan kısımlarını bir "hizmet" olarak fikretmeye başlıyorsunuz. Ön yüz, yani kullanıcı son noktası, "hizmet"leri kullanan bir müşteri hükmünde kalıyor.
İlerisi...
SOA 2.0 veya Advanced SOA kavramları ortaya atılmış durumda. Mâlum SOA'nın şu hâlinde "olay" denen programlama yapısına yer verilmiyor. Bu gelişmiş sürümde SOA'ya olay güdümlü mimariyi de sokuyorlar. Bunu yapan Oracle aslında. Henüz yaygın kabul görmüş bir girişim değil.
SOA öksüz çocuk değil. Hızla ilerliyor ve kamu oyunda gördüğü kabul düzeyi artıyor. Lider yazılım firmaları da samimi olarak destekliyor. Microsoft desteklediği gibi Sun da destekliyor demek istiyoruz. Ortada kalmazsınız.
Bir müesseseye bağımlı olmaktansa evrensel ve açık standartlar düzleminde hareket etmek her zaman yeğdir. Bunu ActiveX bilgileri çöpe gidenler çok daha iyi anlarlar efendim.
Kalemin ucu bitmiş. Yeni bir kalemle, yeni bir söyleşide buluşmak üzere.
SOA ile.
Seyreyle Gönül .NET Framework Kodunu
"Debug etme" keyfini duydunuz mu hiç?
Bir yan bilgi:
Yazılımcılar, kullandıkları araçlar tamamen teknik terimler içerdiğinden, Türkçe eylemler ile birbirine girmiş lafları çok kullanırlar ve hatta kullanmayı da severler.
"Brawzır'ını aç" veya "prapırti kullan" gibi laflar çok döner dolaşır. "Dibag etmek" de öyle bir kavramdır.
Bir yazılımcının "dibag'ta kodu var"ken aklı başka bir şey almaz.
Keyifli iştir "debug". Yazılan kodun sicim gibi akmasıdır, perde önünde. "Code Review" denen toplu ayinlerde müridler hep beraber "debug" eylerler ki tadına doyulmazdır.
Debug Keyfine Limon Sıkmak
"Debug" esnasında .NET nesnelerinin üzerinde eğleşmeden geçerdik. O oturumlarda sadece kaynak kodu elimizde olan şeylerin içine dalabiliyorduk.
Şimdi Microsoft, güzel bir adım attı gönlümüze doğru. Debug keyfimiz, .NET kodunun içinde de devam edecek bundan böyle.
Kod Okur-Yazarlığı
.NET koduna müracat amaçlı bakmanın mümkün hâle gelmesi, kod okur-yazarlığı meselesini de gündemimize taşımış olacak.
Usta kodcular bilirler ki, kod okumak, yazmak kadar önemlidir. İyi bir kodcunun hem okuması hem de yazması güçlüdür. Okuması zayıf bir kodcunun, aylar sonra kendi yazdığı kodu bile kavrayamaması meselenin ehemmiyetini fehimlerimize çakmaktadır.
.NET kodunu seyretmek, yetişmekte olan kodcu adaylarına kod nasıl okunur-yorumlanır ve düzgün kod nasıl yazılır konularında güzel bir ders olacaktır.
.NET kodu çok mu düzgündür diye muhalif bir ses hep çıkacaktır. Düzgündür. En azından yetişmekte olan kodcu için tertipli, açıklamaları yazılmış, "self-documented" ve "best-practise"ler ihtiva eden bir kod kümesine "debug" vesilesiyle göz atmak mükemmel bir fırsattır.
Yetişmiş kodcu için de, daha önce Reflector mucizesi ile baktığı kodları, ona gerek kalmadan ("debug" amaçlı yorumlarıyla) canlı takip etmek mükemmel bir fırsattır.
Sonuçta bu olay, fırsat oğlu fırsattır; fazla uzatmayalım.
Nasıl ve Nerede?
Bu soruyu, ingilizce kaynakları Türkçe'ye birebir aktaran muhtelif kaynaklara sorsanız ya da doğrudan gidip işin mühendislerinden okusanız daha iyi olur efendim.
Nasıl kurulacağını Shwan Burke, güzel güzel anlatmış.
Kayda değer birkaç not:
- Şimdilik kütüphanelerin tüm kodlarını indirmek mümkün değil, yakında mümkün olacak.
- Kodların lisansı "Microsoft Reference License"; sadece okuma amaçlı, kurcalamaya müsade yok.
- Bu olay Microsoft'un "Open Source" rüzgarında bir orta yol bulmaya çalıştığını gösteriyor.
Teşekkürler tüm "Open Source" .NET kodcuları.
Haydi, başlasın "debug"lar!
YENİ - Paket Yapalım mı?
http://www.codeplex.com/NetMassDownloader adresinden tüm kaynak kodları indirebileceğimiz uygulamayı Kerem Küsmezer iletti. Ellerine sağlık.
WordPress – Graffiti Kavgası
WordPress artık bir blog devi. Açık kod oluşu, peşindeki gönüllü PHP insanları, geliştirdikleri binlerce eklenti ve kullanıp içerik yayımlayan milyonlarca site ile kişisel yayıncılıkta lider pozisyonda. Yapımcısı Automattic, Google hilelerini pek seven bir şirketken -ki o zaman küçüktü- şimdi kıskanılan, takip edilen, taklit edilen bir ürünün sahibi.
Rekabet lâzım.
WordPress'in bu denli hüküm sürmesine tahammül edemeyenlerden birisi de Microsoft.
Windows Live ailesi ile çevrim-içi hizmetlere soyunan Microsoft, Windows Live Writer adlı nitelikli bonus ürünüyle blog yazarlarının kalbine doğru bir adım atmış oldu. Artık er kişi ister WordPress kullansın, ister Blogger, yahut uygun API'leri sağlayan herhangi bir şey; WLW ile girmeye bayılıyor yazılarını.
Graffiti
Birkaç ay evvel Microsoft, blog dünyasına doğru yeni bir hamlede bulundu: Graffiti. Graffiti, agresif bir üslupta WordPress'i hedef alıyor. Hatta bir elemanın belirttiğine göre Google içerisinde "WordPress" kelimesine reklam veriyor. Reklamın metni ise hayli ilginç: "WordPress CMS değildir." (CMS: İçerik Yönetim Sistemi)
Graffiti, WordPress'in tam anlamıyla CMS olmadığını öne sürerek söze başlıyor. E benim anlamadığım, ya WordPress kullananlar CMS kullanmak istemiyor ise? Sadece blog istiyorsa? Bu damardan verilen coşkunun tamamen yanıltıcı olduğunu Microsoft da biliyordur.
Bir diğer argüman: "Graffiti, WordPress'ten daha kolay kuruluyor." Matthew Mullenweg, güncel bir beyanında, bu argümana 200 dolar üzerinden ayar vermiş. Graffiti'nin sorumlusu Rob Howard ise bu ayardan dolayı pek gerilmiş ve şu tespiti savurmuş: "WordPress camiası, Microsoft'tan nefret ediyor". Fenalar yani.
Zurnanın Son Deliği
Laf dönüyor dolaşıyor Open Source - Commercial çekişmesine geliyor.
Bense taraf tutmuyorum. Bu kavgayı güzel, sağlıklı buluyorum. İnanıyorum ki WordPress ve onun gibi bir çok açık kodlu proje hayallerin gerçeğe dönüşmesine öncülük ediyor. Kendilerine "özgür" demeleri daha çok bu yüzden. Çünkü kodcuları bağlayan bir ticaret davası yok(?). Hayal ediyorlar ve kodluyorlar. Belki de kodluyorlar, hayalleri şekilleniyor. Ve görüyoruz ki ticari projeleri de onlar sürüklüyor peşinden.
Bu demek olmuyor ki ticari projeler fikir üretemez. Elbette üretiyor ve yeri geldiğinde o da serbest kodculara ilham veriyor. Nefes kesen yazılımlar da bu sinerjiden, bu ilham alışverişinden doğuyor.
Microsoft'tan hazzetmeyen WordPress'e de, onu çekemeyen Microsoft'a da ihtiyacımız var. Ama Rob, laf aramızda şu Graffiti işi hakikaten abartı be.
IIS 7 ile Fazlalıkları Aldırabiliyoruz
Son zamanlarda parlayan bir iş kolu var: SEO uzmanlığı ve danışmanlığı. SEO arama motoru optimizasyonu manasına gelip teknik bir kavram görüntüsü verse de esas olarak sanal ortamın arama motoru odaklı pazarlama faaliyetlerine işaret ediyor. Arama motorları - özellikle Google - devlerin ve cücelerin güreş meydanına dönmüş durumda.
Size bu olimpik atmosferde koçluk tavsiye edenler de çok olacaktır. Kapınızı SEO SEO diye çok aşındıranlar bulacaksınız. Web ile ilgili bir şeylere gözünüz takıldığında SEO-Friendly denen şeyin ne de çok tekrar ettiğine şahit olacaksınız.
Bu tavsiye dizilerinde en çok geçen başlıklardan birisi, temiz ve manalı URL meselesidir. Eskiden karışık kuruşuk, şifrelenmiş URL'ler prestij meselesi iken SEO ilkeleri durumu tersine çevirmiştir. Yâni Hotmail'in hâlâ devam ettirdiği şu URL yapısına mukabil:
şunun gibi URL'ler:
https://secure.del.icio.us/login
daha evlâ denilmektedir.
Haklıdır diyen. Çünkü arama motorları, web sayfaların içeriklerini değerlendirdiği kadar onu tarif eden bilgilerin de aydınlatıcı olmasına dikkat ediyor. Ve kaynağın adresini (URL) içeriği tarif eden bir parametre olarak ele alıyorlar.
Bu vaziyet, web mimarlarını ürettikleri sayfaların URL'lerine de dikkat etmeye zorluyor. Ne yapıyorlar? URL'deki tüm fazlalıkları atmaya ve URL'i sadece sayfayı anlaşılır biçimde tarif eden ifadelerle sınırlandırmaya çalışıyorlar. Böylece meselâ, "Yine Bir Gülnihâl" başlıklı bir yazının bulunduğu sayfaya URL'i ile ulaşabiliyoruz. Veya arşivin belirli bir tarihe ait kısmına http://siteadresi.com/arsiv/2007/05/01 diyerek ulaşabiliyoruz. Arınmış URL kullanan sitelere örnek olarak www.dobisko.com'u gösterebiliriz. Dobişko'da tüm mekan adları, iller, semtler URL'den anlaşılabilir şekilde adreslenmiş. Siteyi gezerken adres çubuğu adeta dile geliyor, konuşuyor: http://www.dobisko.com/eniyi10/balikci.
Konuşkan URL'ler Nasıl Yapılır?
Konuşkan URL'lerdeki en önemli iş, dosya uzantılarını kaldırmak. "Logon.php" veya "logon.asp" gibi dosya adlarından sondaki php ve asp'yi silmekten bahsediyoruz.
Apache sunucularda bu çok rahat yapılabiliyor. O nedenle PHP-Apache ikilisini kullanan yazılımlar genelde bunu uyguluyor.
Ya Microsoft'un IIS yazılımına mahkum olanlar ne yapsın? Yok mu ellerinden tutan, yok mu bir yol gösteren?
IIS 6 ve Öncesi İçin Çözümler
Uzantısız adresler kullanmak için iki yöntem var. Birisi paylaşımlı "hosting" ortamlarında da uygulanabilen 404 yakalama metodu; diğeri de "wildcard mapping" denen uygulama alanı dar ama nispeten daha yapısal olan bir çözüm.
404 Avı
Hep moral bozacak değil ya şu 404 "Sayfa Bulunamadı" hatası. İşte doğru kullanıldığı yerde kurtarıcı bile olabiliyor. Paylaşımlı "hosting" ortamlarında neyse ki kontrol panelleri hata dokumanlarını kontrol etmeye müsade ediyor. Hata dokumanlarından 404'ü kendi özel adresiyle değiştiren web mimarını çok güzel şeyler bekliyor! Çünkü IIS, bulunamayan sayfa için hata adresini çağırıyor ama peşine de istenen sayfanın adresini parametre olarak ekliyor. Dileyen kişi, bu hata sayfasında istediği kod kümesini çalıştırıp kullanıcıyı beklediği sayfaya yönlendirebilir. Az evvel örnek verdiğimiz Dobişko, ASP-IIS kullanmasından mütevellit, konuşkan URL standardına böyle ulaşıyor. Basit, iş gören ama "amele" kategorisinde bir çözüm.
Wildcard Mapping; Vahşi ama Yapısal
Basit. ISAPI filtrelerine bir yenisini ekleyip gelen her isteği (wildcard'dan kasıt bu: *) ASP.NET ISAPI bekçisine vermek demek. Her istekte sizin gerekli denetimleri yapıp "URL Rewrite" mi yapacaksınız artık ne yapacaksanız, yapın demek oluyor. ISAPI filtresi çözümü, web sunucu elinizde ise gayet hoş bir çözüm. Hatta bu işi daha detaylı yapan özel üçüncü taraf ISAPI filtreleri de var, satılıyor. Çözüm çok ama sunucu sizin elinizdeyse. Eğer bir "hosting" firmasının sıradan bir müşterisiyseniz bu iş için 404 avına talim edeceksiniz demektir.
Ya da durun, IIS 7'den bir şeyler diyelim size.
IIS 7'den Sonrası
IIS 7'de beklenen bir şey gerçekleşti ve ASP.NET, IIS ile kaynaştı. Ön tanımlı olarak kaynaşmış kipte çalışıyorlar. Bu kaynaşmanın doğal semeresini web.config fermanında bulabilirsiniz. Yapılandırma dosyamız artık adlı bir unsur içeriyor. Web sunucudaki bir çok ayarı web.config dosyasından yapabileceğiz demektir bu.
Yapabileceğimiz ayarlar içerisine "wildcard" sembolleriyle "handler" eşleme de giriyor, her istekte patır patır çalışan modülleri belirlemek de.
IIS 7'de uzantısız ASP.NET sayfaları kullanmak için en pratik yöntem HttpModule kullanmak. Yazacağınız özel bir modülü her istekte çalışacak şekilde ayarladıktan sonra kodunuz bayram edecek.
Ancak kod yazma zahmetinden biraz kurtulmak isteyenlere açık kodlu bir tavsiyemiz var: UrlRewriter. Gayet efendi, işini düzgün yapan bir uygulama. Avantajı şu ki sadece web.config dosyasına yazacağınız laflarla URL gölgeleme işlerini hallediyorsunuz. Uygulama kodunuza eklemeler yapmanıza hiç lüzum yok.
Hâsılı...
IIS 7, Vista ve Windows 2008'in parçası. ASP.NET ile bütünleşmesi gayet güzel. Konuşkan URL'ler yapmak da epey kolaylaştı. Deneyin.
SEO ile.
