14 Haziran 2014 Cumartesi

DELEGATE VE EVENT...

Merhaba, bu yazımda kısaca C# delegate ve event yapısından bahsedeceğim. Delegate'ler Türkçe karşılığı olarak elçi, temsilci anlamına gelirler. Programlama alanında metotlara referanslık ederler. Delegate'lere anlam katan özelliği ise yalnızca bir metoda değil birden fazla metoda referanslık edebilmeleridir. Bu, bir delegate kullanımı ile aynı zamanda birden fazla metodu delegate'e eklemiş olduğunuz sırayla (burada içine uygun tipte metot alan bir liste gibi düşünebiliriz) çalıştırabiliriz anlamına gelir. Yalnızca parametre tipi, sayısı gibi kısıtlamaları göz önünde bulundurmamız gerekir. Bu bağlamda delegate'in class, enum gibi referans tipi olduğunu unutmamamız gerekir. Çalışma zamanında da delegate'in hangi metotlara referanslık etmesi ya da referans listesinden silinmesi mümkündür. Bunu kısa bir örnekle açıklarsam daha açıklayıcı olacağına inanıyorum:



Event(olay) yapısından biraz bahsedersek, eventler delegate tipinde olup genelde button, checkbox, textbox gibi kontrol yapılarında karşılaşacağımız bir işlem gerçekleştirdiğimizde veya gerçekleştirmediğimizde de dilersek otomatik olarak çalıştırılacak olan metotlardır. Bir işlem gerçekleştirmeden çalıştırılmasından kasıt çalar saat gibi düşünebiliriz, biz ona bir ayar yapıyoruz ve zamanı gelince o da kendi başına bu ayara uygun işlemini gerçekleştiriyor. Bu deleagate ve event yapısını biraz öğrendikten sonra aslında delegate'in event yapısından pek farklı bir yapı olup olmama konusunda kafanız karışması muhtemeldir. Şu anki durumumuzda bunu bir sonraki plana bırakıp birlikte nasıl çalıştıklarına bakalım:


Gördüğünüz üzere event'imiz delegate tipinde oldu ve onun parametrelerine geri dönüş tipine uygun metotları içeriyor. Burada dikkat edilmesi gereken bir diğer husus event'imize bir metot ekleyecek isek += ya da event'imizden bir metot silecek isek -= operatörlerini kullanmamız gerektiğidir. Örneğimizde event'imizin metotlarının çalışma zamanında belirlenmesini sağladık ve event ve delegate'in getirmiş olduğu özelliklerden yararlandık. Çalıştıracağımız metotlara referans verip toplama ve çıkarma işlemi metotlarının sırasıyla çalışmasını sağladık. Ben örnekte iki metodu event'e ekledim fakat dilersek çok daha fazla sayıda metot ekleyebiliriz. Böylelikle delegate ve event yapılarını kısaca görmüş olduk. Bu yapılardan gerektiği zamanlarda yararlanmayı bilmemiz bize birçok yönden avantaj sağlayacaktır.
Bu konuya da böylece kısa bir giriş yapmış bulunduk. Bir başka yazıda görüşmek üzere, iyi günler.  




4 Haziran 2014 Çarşamba

.NET Resource dosyaları...

          Merhaba, bu yazımda .NET'in bünyesinde barındırdığı resource dosyalarından bahsedeceğim. Resource dosyaları resim, müzik, video dosyalarını projelerimizi haricen eklemek amacıyla kullanılır. Resource dosyaları içine iki şekilde dosya ekleyebiliriz. Birinci yöntem local resource olarak eklemektir.
Form içinde picturebox gibi resim kontrolüne resim yüklemek istediğimizde karşımıza Select Resource penceresi gelir ve buradan local resource'u seçip resim yüklersek proje içerisindeki resim dosyaları proje ile birlikte yalnızca o bilgisayarda çalışır. Ya da o resim dosyalarını projeyi çalıştıracağımız bilgisayara yüklemeliyiz. İkinci yöntem ise size birazdan anlatacağım yöntem olan bir resource dosyası oluşturup resim, müzik veya videolarımızı onun içinde saklamaktır. Bu dosyalar .rsx uzantılı olarak proje içinde tutulurlar. Bunu bir örnek ile açıklayayım:


          Gördüğünüz üzere yeni bir Windows Forms Aplication oluşturup Toolbox'tan form içine picturebox, numericupdown, button ve timer konrollerini ekledim. Dilersek bunların tüm özelliklerini bileşen üstüne tıklayıp sağ altta beliren Properties bölümünden değiştirebiliriz. Bu projede ben eklediğim resimlerden oluşan bir slayt gösterisi yapmayı amaçladım. Mesela ben timer'in interval özelliğini 1000 milisaniye(1 saniyey tekabül ediyor), numeric up down'un minimum özelliğini 1 maximum özelliğini 100 olarak değiştireceğim. Çünkü projem istediğim doğrultuda ilerlesin ve hata vermesin istiyorum. Bu konuda bizi ilgilendiren asıl işlemlere gelirsek;


Solution Explorer bölümünden proje ismimize sağ tılayıp Add seçeniğinden New Item sekmesine tıklıyoruz.


Burada Resource File dosyasını işaretleyip dilersek yeni bir isimde verebiliriz Add butonuna tıklıyoruz.


Projemizde Resource dosyamızın oluştuğunu Solution Explorer alanında görüyoruz. Şimdi Strings seçeneğinden Images seçeniğine tıklıyoruz.


Karşımıza böyle bir arayüz gelicek. Bu arayüzde bulunan bileşenlerle dilersek kendimiz bir resim oluşturabiliriz. Mesela ben yukarıdaki gibi bir resim oluşturdum. Önceden paint programını kullanmış olanlar bu arayüze yabancı kalmayacaklardır. Ben slayt gösterimde bu resmede yer vereceğim fakat var olan resimleri nasıl ekleyeceğiz? Onun için şimdi,

                                                                          
Dilersek yukarıda gösterdiğim gibi dosyaya sağ click yapıp Add ve Existing Item seçeneğini tıklayarak dilersekte .rsx uzantılı dosyamızı tıklayarak boş alana sürükleyip ekleyebiliriz. Gördüğünüz gibi ben resimleri ekledim. Sıra geldi kodumuzu yazmaya:


                                                
Kodu tekbir resme küçük bir farkla sığdıramadım iki resim koyduğum için uzun bir kod olduğu zannedilmesin. Şimdi ilk olarak amaçtan bahsedersek butona ilk basımla slayt gösterisi başlasın ve numericupdown kontrolünün değerine göre gösteri hızlansın ve yavaşlasın istiyoruz. Numericupdown değerlerini saniye değeri olarak düşünüyoruz. Numericupdown un her değer değişiminde saniye ayarını numericUpDown_ValueChanged eventi içine yazdım. Butona her tıklamada yazısının değişimi ve timer'ın aktif edilip edilmeyeceğini kontrollerle belirledim. timer_Tick eventi içinde de değişken olan i değerine göre resimler ekrana sırayla getiriliyor. Projenin çalışmasından da bir görüntü verirsek eğer:


Picturebox kontrolü içinde resmin boyutunun otomatik olarak ayarlanması için properties bölümünden Size Mode özelliğini StrectchImage yapmak gerekir.
Resource dosyaları konusunda anlatacaklarım bu kadar, herkese iyi günler dilerim.

3 Haziran 2014 Salı

VERİ MADENCİLİĞİ VE VERİ AMBARI...

Veri Madenciliği nedir?

        Büyük miktardaki veriler içerisinden önemli olanlarını bulup çıkarmaya denir. Veri madenciliği uygulamalarında alt yapı gereksinimi veri ambarı ile sağlanır.

Veri Ambarı Nedir?

        İlişkili verilerin sorgulandığı ve analizlerinin yapılabildiği bir depodur. Veri ambarı veri tabanını yormamak için oluşturulmuştur. İlgili veriyi kolay, hızlı ve doğru biçimde analiz etmek için gerekli işlemleri yerine getirir.

Veri Ambarının Kullanım Amacı Nedir?

       Gizli ilişkiye ait olan verilerin gün yüzüne çıkartılıp işlenebilmesiyle verim arttırmayı amaçlar. Buna bir örnek gösterirsek;
       Bir alış-veriş merkezinde kahve alan müşterilerin %40'nın mutlaka çikolata türünden de alış veriş yaptığı saptansın. Bu bulguyu göz önünde bulunduran yönetici çikolata reyonu ile kahve reyonunu birbirlerine yakın olacak şekilde yeniden düzenleterek çikolata türü satım oranında belli bir yüzdeye varan artım sağlayabilir. İşte bu imkanı sağlayacak olan sistemin büyük bir parçası veri ambarı dediğimiz depodur. Bize bir stratejik analiz imkanı sunar.

Veri Ambarlarında Şema ve Tablo Yapıları

1. Yıldız Şema (Star Schema)

      En çok bilinen modelleme örneğidir. Modelin ortasında olgu tablosu (fact table) olarak adlandırılan ve içerisinde veri ambarının içerdiği en önemli veri kısmını gereksiz fazlalık bulundurmadan tutan merkezi bir tablo bulunur. Bu tablo boyut tablosu (dimension table) olarak adlandırılan keylerini tutuğu küçük tablolarla ilişkilidir. Bu yapı yıldıza benzetildiğinden bu şemaya Yıldız Şema (Star Shema) adı veerilmiştir.





2. Kar Tanesi Şema (Snowflake Schema)

      Dimension (boyut) tablolarının normalize (Normalization) edildiği, bundan dolayı verinin ek tablolara bölündüğü, yıldız şema modelinin değişik bir biçimidir.Yıldız şemada bulunan olgu tablosu (fact table) aynı şekilde burada da bulunur. Yalnız ilişkili olduğu boyut (dimension) tablolarının da normalize olup ilişkili olduğu boyut (dimension) tabloları bulunur. Bu şemanın yapısı da kar tanesine benzetilir.



3. Olgu Takımyıldızı Şema (Galaxy Schema)

      Karmaşık uygulamalar boyut tablolarını paylaşmak için çoklu olgu tabloları gerektirebilir. Bu çeşit bir şema yıldızların toplamı olarak görülebilir.



2 Haziran 2014 Pazartesi

LINQ...

LINQ kelime olarak Language Integrated Query(Türkçe'si 'dil ile bütünleşmiş sorgu') açılımına sahiptir. LINQ ile veritabanı işlemleri için sorgu yapmak mümkündür ve kimine göre çok daha yarar sağlar nitelikte olabilir. Bu yapıda kullanılan anahtar kelimelerin bazıları SQL'e yabancı olmayanlar için çok tanıdık gelecek. LINQ ile de ayrıca dizileri, kolleksiyon yapılarını da kolayca sorgulayabiliriz. Aşağıda bir kaç örnekle bunu açıklayacağım;


Yukarıdaki örnek görüldüğü gibi LINQ nun from, where ve select anahtar kelimelerini kullanarak bir dizi içindeki elemanların bizim belirlediğimiz kritere göre çekmeyi başardık. Başka bir örnek daha gösterirsek;



Bu örnekte ise iki adet aynı tipteki dizilerin elemanları arasında bir karşılaştırma yaptım ve eşit değerli olanların görüntülenmesini istedim.
Aslında LINQ'nun en büyük avantajı veritabanı sorgularında çekilen güçlüklerin hafifletilmesi ve bazı zamanlarda esnekliği arttırmasıdır. Bunun yanında bazı LINQ sorgularının SQL tarafında karşılılık bulamaması da unutulmamalıdır. Örneğin örnekte kullanmış olduğum Reverse (ters etme) fonksiyonumuz LINQ nun veritabanı sorgularında karşılık bulamaz. Yani veritabanındaki bir tabloyu bu fonksiyonla tersleyemeyiz.
Bu konuda anlatacaklarım şimdilik bu kadar, ilerleyen zamanlarda LINQ'nun veritabanı sorgulamadaki kullanımlarından bahsedeceğim, kendinize iyi bakın.