Tek Fotoluk İpucu 149 - SecureString ile Caydırıcılık

Elimizde veritabanı bağlantı bilgisi, kullanıcı şifresi, uygulamamıza özel port numaraları, finansal oranlar gibi hassas olabilecek içerikleri tutan bir sınıf olduğunu düşünelim. Bu sınıfı kullanmak için doğal olarak bir şekilde örneklenmesi gerekir. Nesnenin kullanılabilir olması içeriği ile birlikte belleğe açılması anlamına da gelir. Uygulama, .Net'in çalışma zamanı ortamında kendisi için oluşturulan Application Domain içerisinde yaşar. [Daha fazla]

Tek Fotoluk İpucu 134 - Powershell'den XML Web Service Çağırmak

Olmaz olmaz demeyin, gün gelir ihtiyacınız olur :) Ortada bir XML Web Service olduğunu düşünelim ve onu çağırmak istediğimiz bir sunucunun başında oturduğumuzu. Sunucu üzerinde SOAP-UI gibi yardımcı araçların olmadığını ve bunları kurma yetkinizin de bulunmadığını düşünün. Öyle bir sunucu ki komut satırı en etkili araç. İşte böyle bir durumda Windows PowerShell gibi araçlar web servislerini çağırma noktasında işimize yarayabilir. Nasıl mı? Gelin bakalım. [Daha fazla]

Specification Tasarım Kalıbına Gitmeye Çalışırken Ben

Şu sıralar üzerinde çalışmakta olduğumuz bir projede karşılaştığımız bir sorun var. Belli bir Domain içerisinde yer alan bazı varlıkların(Entity türleri diyelim) çeşitli kriterlere uyanlarının liste olarak çekilmesi gerekiyor. Senaryonun ilginçleştiği kısım ise farklı Entity tipleri için zaman içerisinde farklı kriterlerin de sisteme dahil edilmek istenebileceği. Bu sayede veri kümesi üzerinde çeşitli araştırma senaryolarını denemek de mümkün hale geliyor. Bir başka deyişle aklımıza geldikçe yeni bir kriteri(örneğin bir filtreleme ölçütünü) tanımlayıp istediğimiz Entity kümeleri üzerinde kullanmak istiyoruz. [Daha fazla]

Tek Fotoluk İpucu 133 - Yüklü OLEDB Provider Listesinin Bulunması

Malumunuz büyük çaplı sistemler kolay kolay yenilenmiyorlar. Ancak teknolojik gereklilikler ve değişen ihtiyaçlar ister istemez bu yaşayan organizmaların yeni sunucular üzerinde hayata devam etmelerini gerektirebiliyor. Yeniden yazma maliyetlerinin yüksek olduğu durumlarda var olan sistemin kullandığı pek çok bileşenin de bu sunucular ile uyumlu olması gerekiyor(bekleniyor). Uyumlu olmayanların yerine geçici çözümler uygulanıyor. Tabii mümkün mertebede. Bazen yeni sunuculara taşınan sistem üzerinde yıllardır yaşamını sürdüren C,C++ gibi derlendikten sonra pek de geri çevrilip içeriği görülemeyeccek kodlar da söz konusu oluyor. Böyle bir durumla karşı karşıya kalırsanız vay halinize. Ben ve değerli ekip arkadaşım bu durumdam çok çektik. [Daha fazla]

Tek Fotoluk İpucu 132 - Bir Tipin Özelliklerine Varsayılan Değerlerini Set Etmek

Nesneler kodlarımızın olmazsa olmaz enstrümanları. Özellikle Domain odaklı çözümlerimizde POCO(Plain Old CLR Objects) tiplerini sıklıkla kullanıyoruz. Bu tipler(genellikle class olarak tasarlanıyorlar) içlerinde sayısız özellik(Property) de barındırabiliyorlar. Nesneler örneklendiklerinde ve sonrasındaki yaşam süreleri boyunca çeşitli değerler ile nitelendiriliyorlar. [Daha fazla]

IIS RESTful API Hello World

Öğrendiğime göre Microsoft IIS(Internet Information Services) takımı yönetimsel işlemler için Asp.Net Core teknolojisini kullanan RESTFul tipinden bir servis üzerinde çalışmalar yapmakta. Micro Service mimarisi benimsenerek geliştirilen alt yapı, kullanıcılarına IIS Administration ile ilgili gerekli fonksiyonellikleri modern bir API olarak sunuyor. API, Self-Hosted Window Service olarak yayınlanmakta. In-Proc çalışmalar için Hostable Web Core yapısına da sahip. Aşağıdaki şekil teknik mimarisi hakkında biraz daha fikir verecektir. (Takımın çizdiği mimari resim kadar başarılı değil ama bakmadan çizmeye çalışırsanız konuyu güzelce pekiştirebilirsiniz) [Daha fazla]

Tek Fotoluk İpucu 131 - Servisim Yaşıyor mu?

Böyle yeni bir şeyler öğrenmek için enerji bulamadığım vakitler oluyor zaman zaman. Ya çevremdekilerin ya da işlerin etkisi ile azalır enerjim. Bir şeyler öğrenmeyince de kendimi kötü hissettiğimden en azından genişletme metodu(Extension Method) yazmaya çalışayım da pas tutmayım derim. Tabii önce konu seçmek gerekir. Bu kez aklıma "bir servisin yaşayıp yaşamadığını nasıl anlarım?" sorusu takıldı. Mesela bir Uri için Http durum kodu bilgisinin 200 olmasını kontrol eden bir genişletme metodu yazabilirdim. Örneğin aşağıdaki fotoğrafta görüldüğü gibi. [Daha fazla]

Instagram REST Servislerinin .Net Tarafında Basit Kullanımı

Neredeyse hepimizin sosyal ağ üzerinde hesapları bulunuyor. Facebook, Twitter, Instagram, Youtube, Flickr ve benzerlerini bunlara örnek olarak verebiliriz. Bu ağlar pek tabii kendi hizmetlerini geliştiricilerin kullanımına da uzun zamandır açmış durumdalar. Geliştirici olarak bizleri bu kısım daha çok ilgilendiriyor. Peki bu tip ağlar geliştiricilere kendi hizmetlerini nasıl sunuyorlar? Bunun en bilinen ve ortak yanı pek tabii ki servisler şeklinde yayınlanmaları. Burada kullanılacak olan servislerin istemci uygulamaların ne tipte olduğuna bakılmaksızın ortak bir standartta çalışması önemli. İşte bu noktada devreye REST(Representational State Transfer) yaklaşımını benimseyen servisler geliyor. [Daha fazla]

Business Delegate Pattern

Epey zamandır tasarım kalıpları tarafına bakmadığımı fark ettim. Hem kalıpları tekrar etmek hem de yeni bir şeyler var mı diye internette gezinirken JEE tarafında sıklıkla başvurulan Business Delegate isimli bir desene rastladım. Aslında delegate dediğimiz zaman bir işi başkasına devrettiğimizi düşünebiliriz (Delegasyon ile ilgili olarak internette resim ararken de işte yandaki gibi eğlenceli bir tanesine rastladım) Business Delegate kalıbı temel olarak sunum katmanı(presentation layer) ile iş katmanını(Business Layer) arasındaki iletişimde aynı isimli fonksiyonların ele alınmasında değerlendiriliyor. Zaten adından da anlaşılacağı üzere sunum katmanındaki bir fonksiyonelliğin asıl iş katmanındaki karşılığına devredilmesi söz konusu. Burada önemli noktalardan birisi talebi olan nesnenin talep ile ilgili içeriği(Context diyebiliriz) aynen ikinci bir nesneye delege etmesidir. [Daha fazla]

Floyd-Warshall Algoritması ile En Kısa Yolu Bulmak

Uzun zamandır algoritmalar üzerinde çalışmadığımı fark ettim. İşlerin biraz olsun hafiflediği şu vakitlerde de bir tanesini inceleyeyim dedim. Derken kendimi Floyd-Warshall algoritmasını anlamaya çalışırken buldum. Söz konusu algoritma Graph yapılarında boğumlar arasındaki en kısa yolların bulunmasında kullanılmaktadır. [Daha fazla]

Asp.Net Web API ile OData Kullanımı

İşlerin epeyce hafiflediği bir haftaydı diyebilirim. Dolayısıyla kırda parkta bayırda oturup dinlenmek için epeyce vaktim vardı. Ya da bir şeyler araştırmayı da tercih edebilirdim ki ben de öyle yaptım. Uzun zamandır Asp.Net Web API tarafında bir şeyler yapmıyordum. Araştırmalarım sırasında OData'nın Web API tarafındaki kullanımına denk geldim. Her zaman ki gibi konuyu olabildiğince basit bir halde öğrenmenin iyi olacağını düşündüm. Sonunda konuyu kaleme almayı başardım. Haydi başlayalım. [Daha fazla]

XML Web Service Paketlerini Yakalamak

Yine karşımıza çıkan bir problem çözümü ile birlikteyiz. Öncelikle senaryomuzu anlatarak işe başlayalım. Şirket içerisinde kullanılan bir XML Web Service'in Oracle tarafındaki bir Stored Procedure içerisinden çağırılması gerekiyordu. Burada kullanılacak teknikten ziyade XML Web Service' e gidecek olan SOAP mesajının içeriği daha önemliydi. Nitekim giden örnek bir mesaj elimizde olduğu takdirde Stored Procedure tarafındaki string içeriğin(SOAP XML yapısını ifade eden) oluşturulması daha kolay olacaktı. Haliyle bizim XML Web Service'e istemci tarafından gönderilen mesaj içeriklerine ait örneklere ihtiyacımız vardı. Bunun için Fiddler gibi araçları da kullanabilirdik. Ama bilin bakalım ne var? Şirketteki bilgisayarlara bu tip araçları indirip kurmamız mümkün değil. Dolayısıyla kendi kodumuzu yazarak servise giden paketlerin içeriğini görmemiz gerekiyor. [Daha fazla]

Tek Fotoluk İpucu 128 - DataTable içeriğini Generic List'e İndirmek

Diyelim ki kullandığınız harici bir metod size DataTable tipinden bir nesne örneği döndürmekte. Ne var ki kendi sisteminizde bu nesne içeriğini List tipinden koleksiyon örnekleri ile dolaştırmanız gerekiyor. Hatta DataTable içeriğinin doldurulduğu tablonun kolon adları da sizin programınızdaki standartlar ile uyumlu değil. Bu durumda karşımıza şöyle bir soru çıkıyor. Herhangi bir DataTable içeriğini bir List tipine nasıl dönüştürebiliriz? [Daha fazla]

Oracle View' ları için Otomatik DataTable' lar Üretmek

Üzerinde çalıştığımız ve uzun süredir canlı ortamda yaşamakta olan eski bir ürünümüz geçtiğimiz günlerde kod kalite taramalarından birisine girdi. Vaktinde her zaman olduğu gibi alel acele yazılmak zorunda olan kodlar bir kaç ana kategori altında çeşitli tipte ihlallere yakalandı. Bunlardan birisi de Strongly Typed DataSet kullanımına ilişkindi. [Daha fazla]

ServiceStack ile REST Servis Geliştirmek

ServiceStack, WCF ve Asp.Net Web API' ye alternatif olarak kullanılabilecek bir Web Service Framework'ü. Standart SOAP tabanlı servisler dışında REST tabanlı servislerin geliştirilmesine de izin veren bir çatı. Host uygulamalar IIS, Windows Service ya da Self-Hosted teknikleri ile yayınlanabiliyor. Hatta mono üzerinden de servisleri host etmek mümkün ki bu da farklı platformlar üzerinden servis yayınlanmasına imkan sağlıyor. Çok fazla konfigurasyon gerektirmeden kolayca geliştirme yapılması mümkün. [Daha fazla]

Hamming Distance Algoritmasının Basit Kullanımı

Hamming Distance, Amerikalı Matematikçi Richard Hamming tarafından bulunmuş olan ve kodlama teorisinde geçen vektör bazlı bir karşılaştırma algoritmasıdır(Bu adresten teori hakkında biraz bilgi alabiliriz) Programlama tarafından baktığımızda çoğunlukla eşit uzunluktaki içeriklerin benzerliklerine ilişkin bir mesafe ölçüsünün bulunmasında kullanılır. Bu sayede bir metnin diğerine dönüştürülebilmesi için kaç adımlık değişime ihitiyaç duyulduğu da hesaplanabilir. Ya da benzerliğin ne kadarlık bir değere denk geldiği anlaşılabilir. Hata tespiti ve düzeltilmesi, grafik dosyaları üzerinden şekil eşleştirmelerinin(Shape Recognation) yapılması gibi hesaplamalarda kullanılmaktadır. Aslında örnekler ile konuyu daha iyi anlayabiliriz. Basit düşünmeye çalışalım ve aşağıdaki gibi bir kaç kelime çiftini ele alalım. [Daha fazla]

Tek Fotoluk İpucu 126 - XML Tabanlı Metinsel İçerikleri Nesneleştirme

Malumunuz nesne yönelimli(Object Oriented) dünyanın en önemli unsurlarından birisi de varlıklar(Entity). Uygulamaların çalıştığı alanlarda(Domains) bu varlıklar dolaşmakta. Birer sınıf olarak tasarlanan bu varklıklar çalışma zamanlarında örneklenmekte ve belirli içerikleri taşımakta. Varlığı niteleyen verinin kaynağı çeşitli enstrümanlar olabiliyor. Veritabanı üzerindeki bir tablo, fiziki bir dosya, bir servis uç noktası, başka bir donanım, bir ara motorunun ürettiği çıktı vb [Daha fazla]

Tek Fotoluk İpucu 125 - Single Instance Application

Bazı uygulamaların çalışma zamanında sadece tek bir örneğinin yaşaması istenebilir(Single Instance Applications) Bilindiği üzere uygulamaların T anında birden fazla örneği olabilir(Multiple Instance Applications) Uygulamanın herhangi T anında tekil olması için ele alınabilecek bir kaç teknik vardır. Bunlardan birisi de Mutex tipinden yararlanmaktır. Aynen aşağıdaki fotoğrafta olduğu gibi. [Daha fazla]

Tek Fotoluk İpucu 124 - Pratik Bir Deep Clone Senaryosu

Nesnelerin çalışma zamanında klonlanması ile ilişkili olarak bahsi geçen iki kavram vardır. Shallow(Yüzeysel) ve Deep(Derinsel diyelim) klonlama. Shallow türüne göre, kopyalanan nesnenin alanları orjinal nesnedeki aynı referans adreslerini işaret edecektir(Yani nesne içerisindeki referans türleri kopyalanacak ama aynı bellek adreslerini gösterecektir) Deep Copy tekniğine göreyse kopyalanan nesne alanları orjinal nesne alanlarının yeni kopyalarını referans etmektdir. Bir başka deyişle Deep Copy tekniğini uyguladığımızda, orjinal nesne içeriği ile aynı veri yapısına sahip yeni bir referans(bellekte farklı bir adreste konuşlandırılmış şekilde) üretmiş oluruz. [Daha fazla]

Bir Tip Ağacındaki Aynı İsimli Özelliklere Değer Atamak

Çalışmakta olduğumuz projelerde zaman zaman bizi zorlayan vakalar ile karşılaşıyoruz. Bu gibi durumlarda Google abimiz en büyük yardımcımız olabiliyor. Hatta pek çoğumuz sorunların çözümünde Stackoverflow gibi kaynaklardan yararlanıyor ya da daha deneyimli birisinden yardım istiyor. Ne var ki bazı vakaları kendimiz çözmeye çalışsak çok daha yararlı olabilir. [Daha fazla]

Tek Fotoluk İpucu 122 - Regex ile MatchEvaluator Kullanımı

Vaktiyle zamanında üyelerine çeşitli finansal verilerden harmanlanmış metinsel içerik sağlayan bir kurum varmış. Bu kurum geliştirme döneminde bakmış ki verinin boyutu epeyce büyük. Ne yapalım ne edelim derken, üretilen metinsel içerikte çok sık tekrar eden bazı karakterler olduğunu fark etmişler. "Nasıl yapsak da bu çok sayıda tekrar eden karakteri metin içerisinden kırpsak ama bütünün anlamını bozmasak" demişler. Bunu üzerine tekrar eden kısımların yerine geçecek ve orada bunlardan kaç tane olduğunu ifade edecek basit söz dizimleri kullanmaya karar vermişler. Demişler ki, örneğin @9@ geçen bir aslında 9 tane 0 karakterini ifade etsin. [Daha fazla]

Tek Fotoluk İpucu 121 - Code Contracts ve Immutable Type

Bazı durumlarda tanımladığımız tiplerin Immutable olmasını isteriz. Bildiğiniz üzere bir nesne örneğinin özellikleri ile nitelenen durumunun(State) çalışma zamanı boyunca değişmesini istemiyorsak Immutable hale getirebiliriz.Bir tipin Immutable olması için yapılacaklar bellidir. Nesne durumunu taşıyan özellikler(Property) dışarıdan erişime kapatılır ve değerleri sadece yapıcı metod(Constructor) tarafından belirlenir. Eğer çalışma zamanında bu nesne örneğinin durumunun değişmesi gerekiyorsa(Örneğin belirli özelliklerinin değerlerinin değişmesi), kendisine ait yeni nesne örneği üretip döndüren fonksiyonlardan yararlanılır. [Daha fazla]

Tek Fotoluk İpucu 120 - Bir Listeden N Sayıda Benzersiz Nesne Çekmek

Vaktiyle zamanında(bugün aslında) çalışmakta olduğumuz projede şöyle bir ihtiyacımız oldu; "Bir Oracle tablosundan Entity Framework aracılığı ile çektiğimiz nesne koleksiyonundan benzersiz olan n sayıdakini elde etmek" Elbette bu işi önce SQL tarafında halledip, sonrasında EF tarafına aktarmayı da tercih edebilirdik. Ancak değerli çalışma arkadaşım ile konuyu tartışırken fikir fikri doğurdu ve ortaya şöyle bir ihtiyaç daha çıktı. "Ya bunu T tipinde elemanlardan oluşan herhangi bir koleksiyon üzerinde, herhangi bir kritere göre yaptırmak istesek..." [Daha fazla]