Tek Fotoluk İpucu 129 - Override Edemediğimiz ToString Metodunu Genişletmek

Geçtiğimiz günlerde çalışma arkadaşımın oldukça enteresan bir sorusu ile karşılaştım. Projesinde referans ettiği bir kütüphane içerisinde yer alan POCO(Plain Old CLR Objects) tiplerine ait ToString metodlarını ezmesi(Override) gerekiyordu. Ne yazık ki ilgili kütüphane dll olarak referans edildiğinden, içerisindeki sınıflara girip ToString metodunu ezmek mümkün değildi. Bir şekilde ToString metodunu genişletebilir miyiz diye düşünmeye başladık. [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]

Klasik ASP Sayfasından REST Servis Çağırmak

Özellikle kurumsal çözümler üreten/kullanan firmalarda görev alanların sıklıkla dahil olduğu vakalardan birisi de, eski ve yeni teknolojilerin iç içe kullanıldığı senaryolardır. Bazen geliştirilen ürünler yıllara varan yaşam döngüleri boyunca çalışmaya devam eder. Yenileme maliyetlerinin yüksek olması nedeniyle de tekrardan yazılmak yerine var olan yeni teknolojiler ile entegre edilmeye çalışılırlar. [Daha fazla]

Ruby Kod Parçacıkları 21 - Basit Web Server Geliştirmek

Web tabanlı çalışan uygulamalar genellikle IIS(Internet Information Services) ve benzeri ortamlar üzerinde barındırılırlar. Aslında IIS basitçe TCP soket haberleşmesi gerçekleştiren bir ürün olarak düşünülebilir. Üzerinde konuşlandırılan kaynaklara olan erişimde ise genellikle HTTP protokolü ve Get, Post vb metodları kullanılır. Gelen taleplere göre uygun servislerin devreye girmesi söz konusudur. [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]

Ruby Kod Parçacıkları 19 - SQLite ile Basit Veritabanı İşlemleri

Sanıyorum bir programlama dilini öğrenirken en çok merak edilen konulardan birisi de veritabanı işlemleridir. "Hani bir uygulama yazabilsem de bilgileri veritabanına kayıt edebilsem ve oradan okuyabilsem süper olur" benzeri bir cümleyi eminim hepimiz kurmuşuzdur. Günümüzde geliştirilen uygulamalar mutlak suretle verileri kalıcı olarak saklamaya ihtiyaç duyar. [Daha fazla]

Replay Attack Saldırısını Nonce Token ile Engellemek

Bir zamanlar WCF servisleri ile ilişkili epeyce çalışma yapmış ve öğrendiklerimi kaleme almaya çalışmıştım. En çok zorlandığım konulardan birisi ise servislerin güvenliğini sağlamaktı. (Mesaj içeriklerinin korunmasından tutun, uç noktalar arası haberleşmenin güvenilik olmasına kadar dikkat edilmesi gereken pek çok nokta var) Ne yazık ki internet ortamında sürüsüne bereket saldırı biçimi var. Bunların önüne geçmek için WCF tarafında WS-* standartlarına uygun kanal yapıları kullanmak tercih edilen yöntemlerden birisi. Örneğin popüler saldırı çeşitlerinden olan Replay Attack etkisini hafifletmek için Custom Binding'ler kullanılıp, Reliable oturumlar açılması ve iletişimin SSL üzerinden gerçekleştirilmesi uygulanan teknikler arasında. (Şu an okudukça sıkıldığım 2007 menşeeli o uzun makalede bu konuya değinmişim) [Daha fazla]

Tek Fotoluk İpucu 128 - IFormattable ile Sihir

Bildiğiniz üzere .Net Framework çatısı altında bir çok arayüz(Interface) vardır. Özellikle plug-in tabanlı geliştirmelerde sıklıkla başvurduğumuz bu arayüzleri zaman zaman inceliyor ve nerelerde kullanılabileceğine bakıyorum. Yine bu araştırmaları yaptığım bir gün IFormattable arayüzünün kullanımına ilişkin örnekler ile karşılaştım. Senaryomuz şu; bir nesne örneğini String sınıfının Format metodu ile kullanırken {0:JSON} gibi bir ifade kullanabilmek ve çalışma zamanı içeriğini JSON(JavaScript Object Notation) formatında elde etmek istiyoruz. Hatta {0:ALL} , {0:ID,Title} gibi ifadelere de yer vermek istiyoruz. [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 127 – Fluent Class Yazmak (Ruby versiyonu)

Geçtiğimiz günlerde her zamanki gibi Google Chrome’ un RSS Feed Reader’ ındaki blog yazılarında geziniyordum. Derken Fatih Boy hocanın bu adresteki yazısına denk geldim. Aslında buradaki gibi Fluent geliştirilen tipler kod tarafındaki işlerimizi oldukça kolaylaştırmakta. Felsefesi oldukça basit olan bu yaklaşımda anahtar nokta, tipin kendisine ait çalışma zamanı örneklerini döndüren fonksiyonelliklere başvurulması. Böylece bir metod zinciri ile bir tipe davranışlar yüklemek son derece kolaylaşıyor. [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]

Tek Fotoluk İpucu 123 - LDAP Üzerinden Kullanıcı Doğrulama

Bu aralar iş yerindeki projeler beni yeni bir şeyler araştırmaya ve öğrenmeye itiyor. Yeni bir şeyler olmasa bile daha önceden kullandığım ama unuttuğum konulara tekrardan bakmama vesile oluyor. Dün buna benzer bir durum gelişti. Bir projemizde kullanıcıların Active Directory üzerinden kod yoluyla doğrulanmasına ve belirli bir gruba dahil olup olmadıklarının öğrenilmesine ihtiyacımız oldu. (Pek tabi bu konuda yazılmış bazı NuGet paketleri bulunuyor ancak iş öğrenmeye gelince biraz kurcalamanın da yararı var elbette) Çok uzun zaman önce(tahminen 2006 yılı idi) eğitim verdiğim bir firmanın bu tip bir ihtiyacı olmuştu. Ama o günden bu yana hiç kullanmadığım için bilgiler de unutulmuştu. Tek hatırladığım System.DirectoryServices assembly' ında yer alan DirectoryEnrty ve DirectorySearcher sınıflarıydı. Biraz araştırma yapınca denemeler için basit bir kod parçası da ortaya çıkıverdi. Aynen aşağıdaki fotoğrafta olduğu gibi. [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 @[email protected] 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]

TCP Bazlı Soket Haberleşmesinde Sertifika Kullanımı

Günümüzde geliştirilen yazılım ürünleri çoğunlukla farklı uygulamalar ile de konuşmak durumunda. Sistemler sürekli birbirleri ile konuşan parçalar bütünü halinde genişlemeye devam ediyor. Akıllı cihazlar büyük ölçekli sistemlerin birer parçası olup çeşitli iş süreçlerinin işletilmesinde rol alıyor. Bu iletişimde servislerin de yeri var. [Daha fazla]

Ruby Kod Parçacıkları 18 - Çeşitli Kırıntılar

Takip edenlerin bildiği üzere bir süredir Ruby programlama dili üzerinde çalışmaktayım. İlerledikçe öğrendiklerimi kod parçacıkları halinde paylaşmaya çalışıyorum. Ne kadar faydalı oluyor bilemiyorum ama arada sırada takip ettiğim kaynaklardan geriye dönerek acaba atladığım bir şeyler var mıdır diye de bakıyorum. İşte bu düşünceler ışığında çıktım yola ve gerçekten de atladığım bir çok şey fark ettim. Bu kod parçacığında kısaca bu konulara değinmeye çalışacağım. Önce kod parçamızı ele alalım. [Daha fazla]

NoSQL Maceraları - Couchbase İle Hello World

Uzun süredir NoSQL ürünleri ile ilgilenmediğimi fark ettim ve bu haftanın araştırma konusu olarak kendime bir NoSQL sistemi seçmeye karar verdim. Aslında aklımda bir alan vardı. Özellikle Nancy Framework' ü incelediğim sırada karşıma çıkan IoT(Internet of Things) ve NoSQL ilişkisi dikkat çekiciydi. Burada geçerli olan ve kullanılan veritabanı sistemlerinden bağzılarına baktım. [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]

Nancy Framework ile Bir MicroService Macerası

Son yılların popüler trendleri arasında MicroService ve IoT(Internet of Things) nin yer aldığını ifade edebiliriz. Akıllı cihazlar ile micro servislerin yan yana gelmesi size biraz şaşırtıcı gelmiş olabilir. Aslında birbirleri ile oldukça ilişkililer. Sonuç olarak IoT dünyasına dahil olan cihazlar birbirleri ile haberleşmek için hafif donatılmış servislerden yararlanabilirler. [Daha fazla]