Bluejean ve Level dergileri güçlerini birleştirdi ve ünlü sanatçılarla hayranlarını Playstation ortamında buluşturmak üzere kollarını sıvadı. Her ay sanatçılar çeşitli mekanlarda hayranlarıyla buluşacak ve karşılıklı Guitar Hero oynayacak.

Bu turnuvaların ilki 10 Temmuz Cuma akşamı 19:00-22:00 saatleri arasında Kadıköy Karga Bar’ın en üst katındaki Kargart’ta yapılacak.

Hayko Cepkin ve Malt grubunun konuk olarak bulunacağı turnuvaya katılmak için www.level.com.tr adresinden davetiyeye ulaşmanız gerekiyor.

Mekana sadece oyun oynamak amaçlı gelmeniz de gerekmiyor, seyirci olarak da katılabilirsiniz. Bu arada Aral, Billabong ve OverGame markaları da turnuvada derece elde edenlere çeşitli hediyeler dağıtacaklar.



Karga Bar: Kadife Sokak No:16 Kadıköy
Tel: 0216 449 17 25 – 26

LEVEL Sayfası : http://www.level.com.tr/index.php/haber/55-haber/3024-level-rock-band-guenleri-hakknda

Kaynak : http://muzik.ekolay.net/Haber.asp?PID=47&HID=1&HaberID=627725


24 Haziran 2009

Doğruyu Bulma Yolunda...

Aslında uzun zamandır aradığım ve başlıkta belirttiğim doğru kavramı, gerçek programcılık kavramının ta kendisidir, ilahi birşey beklemeyin =)


İlk program kodumu Commodore 64 'te, yanılmıyorsam orta okul 2.sınıfa giderken yazmıştım. Yani 98-99 yıllarıydı. Bu kodlar 10,20,30,40,50... gibi yuvarlak hesap, satır başı numaraları ile başlayan Basic kodlarıydı. Genelde sadece output işlevi gören kodlar yazıyordum. Oturup o dönemden bu günlere nasıl geldim diye sıkıcı hayat hikayemi anlatacak değilim, korkmanıza gerek yok :) Fakat bugün yazdığım kodlara şöyle bir bakınca, en basit haliyle şunu görüyorum ki o zamanlar sadece output işlevi gören kodlar yazarken, bugün buna ekstra olarak yaptığım tek şey input işlevlerinide kullanmak okadar. Daha basit anlamda bir veya birden fazla girdiye göre bir çıktı üretmek okadar. Bu durumu sadece kendimle kısıtlamak yerine şunu da söyleyebilirim ki, bir ar-ge projesi, kavramsal sorunlara çözüm arayan projeler veya bunlar gibi daha fazla fikirsel efor isteyen çalışmalarda bulunmuyorsanız eğer, aslında sizin yaptığınız şeyde pek farklı değil. Buda vahim bir durum bence...


Konuyu buradan nerereye bağlayacağım. Şöyleki bu zihniyet okadar geniş bir şekilde alt tabakaya yayılmış durumdaki, etkilerini seminerlerden iş görüşmelerine, arkadaş sohbetlerinden toplantılara kadar bir çok yerde görmek mümkün. Bu durum Türk programcılarının geleceği ve Türk yazılım geliştirme sektörünün geleceğin için hiçte parlak değil bence.


Bahsettiğim sorunları somutlaştırmak için bazı örnekler vermek istiyorum. Ülkemizde yapılan yazılım geliştirme temalı seminerlerin 2 ana teknoloji altında toplandığını görüyoruz. .NET ve JAVA. Ben .net tarafına daha yakın olduğum için örneklerimde bu tarafta olacaktır. Şunu söylemek gerekiyorki yapılan bu seminerlerde, ne seçilen konular, nede konuşmacıların anlattığı şeyler hiç bir şekilde, ne programcıları kişisel olarak, nede Türk yazılım geliştirme sektörünü genel olarak, olumlu etkileyecek etkinlikler değil. Objektif olmak gerekirse bu seminerlerin bir diğer amacıda çeşitli kurumlara reklam sağlamaktır ki bunuda açıkça söylemek gerekiyor bence. Özellikle INETA isimli kurum dolaylı yoldan Microsoft 'un pazarlama stratejisini programcılar üzerinden yürütmeye devam ediyor. Bu benim için bir sorun değil, bu durumuda eleştirmiyorum yanlış anlaşılmasın. Sonuçta Microsoft destekli bir firmanın felsefesi de MS faydasına olmalıdır ki aksinin olması veya bunu beklemek saçmadır. O yüzden INETA benim bu yazıdaki amacımı belirtmek icin kullandıgım bir araçtır sadece okadar... bunu x kurulusu yapsa ve bunu bilseydim onuda yazardım, o yüzden bir art niyet yok ;)


Seminerlerde anlatılan konular işe yaramıyor dedik, bu cümle çok iddalı bir cümle farkındayım. Bu yüzden bu cümlenin altını doldurmak gerekiyor diye düşünüyorum. Şöyleki verilen seminerlerin bir çoğunun bir teknolojinin lansmanı, ne oldugunun ve nasıl kullanılması gerektiğinin anlatıldığı etkinlikler olduğunu söylemek yeterli sanırım. Böyle etkinlikler olmalı tabiki. Özellikle konuşmacının o teknoloji üzerindeki tecrübelerini yüz yüze dialogların gerçekleşeceği ortamlarda paylaşması çok güzel birşey. Fakat gel gelelim bu bizi programcılık anlayışında bir adım bile ileriye götürmez. Bu sizin sadece bahsi geçen teknoloji hakkında fikir sahibi olmanızı sağlar okadar. Bu tarz etkinliklerin asıl sorunu aslında, anlatılan konular üzerinde, dinleyicinin kafasında neden ve nasıl sorularının oluşmasını sağlayacak bir zemin oluşturmamasıdır. Yani Silverlight küp böyle çizilir, bu böyledir ve bu şekilde yapılır gibi kalıplaşmış şeylerden bahsedilir ancak. Hatta Silverlight mimarisini bile anlatmak ne kadar teknik bilgi ve tecrübe istesede birşey ifade etmez. Böyle bir durumda da, sen dinleyici olarak bu neden böyle veya nasıl böyle oluyor yada bence böyle olmalı diye bir şey düşünemezsin. Çünkü bu teknolojinin adı Silverlight ve bunun desteklediği yöntem budur ve böyle kullanmak zorundasındır, bitmiştir. İleri sürebileceğin en farklı şey, hocam küp böyle dönüyorsa, küre nasıl döner sorusunu sormaktırki ozaman kişinin zekasından şüphe etmek gerekir =)
Bu alanda yapılması gereken şey ise, seminerin mümkün olduğu kadar fikirlerin anlatıldığı, paylaşıldığı ve tartışıldığı konulardan oluşması gerektiğidir. Böyle bir seminerde konuşmacının bir fikir konusunda, işte bu çok saçma çünkü bence böyle olmalı diyebileceği veya işte kavramsal olarak program geliştirme sürecinde şöyle bir şey eksikti ve bu fikir bunu yapabilmemizi sağlıyor diyebileceği bir ortam olur. Aynı zamanda izleyicilerin kafasında bazı fikirler oluşur ve salondan çıkarken neyin nasıl kullanılacağını yarım yamalak öğrenmiş biri olarak değilde, artık konuşulan konu üzerinde bir fikir öne sürebilecek kadar bilgilenmiş bir olacaktır. Asıl değerli olan şeyde budur. Biri size sabaha kadar asp.net anlatsa ve 2 ay sonra yeni ve daha iyi bir teknoloji çıksa ne olacak. Tüm bildikleriniz hiç bir anlam ifade etmeyecek. Fakat siz MVC denen mimari tasarımı öğrenirseniz eğer, ASP.net MVC Framework' ün veya Java'daki Struts Framework' ünün ne kadar yeterli veya yetersiz olduğuna dair fikir beyan edebilirsiniz. Eğer zamanında asp.net seminerlerinde sacma sapan web form mimarisi anlatılmasaydı(bende 2 tane video ders cektim bu konuda çünkü bunun doğru oldugunu sanıyorrdum, sanıyorduk...), bunun yerine gerçekte bir web uygulamasının nasıl olması gerektiği anlatılsaydı, bugün belki bu kadar zaman gereksiz yere asp.net web form mimarisini kullanmıyor olacaktık. Onun yerine kendi modelimizi geliştiriyor veya farklı frameworkler kullanıyor olacaktık...


Yukarda anlattığım fikirleri destekleyecek bir diğer örnek ise geçenlerde denk geldiğim bir soru. Yeni tanıştığım bir yönetici ile sohnbet ederken bana WCF biliyormusun diye bir soru sordu. Soru bir çoğunuza normal gelebilir. Çünkü çok kanıksanmış bir durum. Örneği şöyle bir genişletelim isterseniz, bu tarz teknolojileri hepimiz CV 'mize abarta abartma yazmaya bayılıyoruz dimi. WCF, C#, ASP.net, JAVA.... Sorun şu ki, aslında sorulması gereken soru WCF biliyormusun olmamalı, onun yerine SOA mimarisi hakkında bilginiz varmı olmalı. Bu bir detay olmakla birlikte aslında çok vahim bir durumdur ki, ne soruyu soran nede buna biliyorum diye cevap veren kişi yaptığı işten bi haberdir. Yani işin doğrusu şudur ki, SOA sizin amacınız, WCF veya remoting gibi teknolojilerde sizi bu amaca götüren araçlardır. Siz WCF biliyorum diyince araçları amaçlarınızdan daha önde tutmuş oluyorsunuz. Böyle bir mantıkta yeniliğe yer yoktur... Yine önceki örneğimize paralel bir örnek vermek gerekirse, tutunki Microsoft WCF teknolojisinin SOA yapısına uymadıgını farketti ve yeni bir tasarım geliştirdi ozaman ne yapacaksınız harıl harıl yeni teknolojiyi öğreneceğim diye kasacaksınız. Kiminiz kurslara gidecek eğitim alacak, hem zamandan hemde paradan zararda olacaksınız. Para kazanılır ama zamanı geri getiremezsiniz... Her şekilde bu durumdan hiç bir zaman siz karlı çıkmayacaksınız. Böyle durumlara düşmemek için yapılması gereken şey ise bu konular üzerine fikir sahibi olabilmekten geçiyor. O yüzden gerek yapılan seminerlerde bu konulardan bahsedilmeli, gerekse kişi kendini geliştirmek için bu tarz fikirsel akımları öğrenmeye yönelmeli. WCF 'te ne var allaşkına bugün 2 ay boyunca 2 tane kitap okuyan adam öğrenir bunu. Ama SOA üzerine fikir yürütemicekseniz ne anlamı var... Ben sorulan soruya cevap olarak, bugüne kadar hiç SOA teknolojilerine vakit ayırmadım, o yüzdende WCF hakkında bir fikrim yok dedim geçtim...


Yukarda da dediğim gibi sorun okadar çok tabana yayılmış durumdaki, örnekleri vermekle bitmiyor. Özellikle iş görüşmelerinde, Stored Procedure, Transaction, Trigger yazabiliyormusun diye sorulara denk gelenler olmuştur. Eğer bir yerlere gelmek istiyorsak bunlar, artık üzerinde tartışılması gereken konular olmamalı bence...


Eminim şöyle bir düşününce sizinde benzer durumlarla karşılaştığınız durumlar olmuştur. Peki çözüm nedir? Çözüm fikir olarak basit olmasının yanında uygulama olarak biraz zor tabi. Bugüne kadar gelen kalıplaşmış bir süreç var ve bunun yıkılması gerekiyor. Bunu da insanları teknolojilere yönlendirmek yerine, fikirlere yönlendirmek ile yapabilriz ancak. Kısaca Türk programcılık anlayışında bir devrim yapılması gerkiyor =)


Artık kimse birbirine, C# biliyormusun diye saçma sapan bir soru sormasın =) Ben Object Oriented Programlama kavramını biliyorum arkadaş. Bu bilgiye kim sahipse, canı ister C#, canı ister Java kodu yazar. Programlama dillerinde olduğu gibi diğer tüm teknolojilerde sizi amacınıza götüren basit araçlardan ibarattir okadar. Bunu algıladığımız, insanlara anlatabildiğimiz sürece Türk programcılığı bir yerlere gelecektir...


İşte uzun zamandır aradığım, fikirlere dayalı olması gereken programcılık anlayışı budur benim için...


Mehmet Aydın Ünlü
aydinunlu85@gmail.com
http://aydinunlu.blogspot.com


Bugüne kadar çok farklı konu ve teknoloji ile ilgili yaptığı ücretsiz etkinliklerle sektörünün gelişmesine katkıda bulunan CETURK etkinliklerine devam ediyor.

13 Haziran'da Ankara'da gerçekleştirilen
"CETURK Java Teknoloji Günü-2 – Ankara" etkinliği büyük bir ilgi ile karşılaştı. Gelen yoğun talep üzerine Bu etkinliğin tekrarı 4 Temmuz'da IBM de gerçekleştiriliyor. Etkinlikte Java Teknolojilerinde uzman konuşmacılar bilgilerini katılımcılarla paylaşacaklar. CETURK bu etkinlik ile beraber son bir yılda Java ile ilgili 7. etkinliğini gerçekleştiriyor olacak.

Bu etkinliği
IBM Gold Sponsor olarak, i-con Silver sponsor olarak desteklemektedir.

Etkinliğe katılım her zamanki gibi ücretsiz olacak. Ayrıca her zaman olduğu gibi etkinliğe katılan kişilere çekiliş ile kitap hediye edilecek .Etkinliğe katılamayanlar için video kaydı alınarak CETURK.TV 'de yayınlanacak. Java'ya gönül veren tüm yazılımcıları etkinliğimize bekliyoruz.



Geçtiğimiz hafta sonu (20-21 Haziran) Santralİstanbulda Efes Pilsen One Love Festivalin'deydim. 2 gün boyunca olmasada , 2.günün son 3 grubunu dinlemeye fırsatım oldu. Aslında çok şey kaçırmadım çünkü izlemeye fırsat buldugum grupların,
Portecho, Starsailor ve Royksopp oldugunu söylemem yeter sanırım. Diğer gruplara haksızlık etmek istemem ama olayda zaten bu üç grupta idi.

Porthecho' nun bir Türk grubu olduğunu yaklasık 2-3 ay önce öğrenen bir müzik cahili olarak o günden beri sürekli canlı performanslarını izlemek icin takip ediyordum fakat bir türlü fırsat olmuyordu. Takip etmek isteyen olursa Facebook gruplarına katılabilir, neredeyse her hafta bir etkinliğe katılıyorlar. Hatta bu hafta sonu Çeşme' de bir etkinlikteler.İzmir'liler kaçırmasın. Bence elektronik müzikte Türkiye' nin en iyi grubu olmasını bir kenara koyarsak, Dünya' nın sayılı gruplarından biri sanırım. Neyseki bu grubu dün canlı dinleme fırsatım oldu ve tek kelimeyle mükemmellerdi diyebilirim. Eğer fırsatınız olursa kesinlikle dinlemenizi tavsiye ederim. Portecho'dan konu açılmışken yeni albumlerinin çıkış şarkısı olan Studio Plastico' nun klibinin RTÜK tarafından sansürlenip yayın yasağı getirilmesinide kınıyorum. Kimse bu kadar cesaretli ve sanatsal anlamda güzel bir klip çekemezken, böyle cesur bir klip yaptıkları için tebrik etmek lazım bence. Klibi merak edenler buradan izleyebilirler.

Portecho'dan sonra Starsailor sahne aldı, ama gel gelelim konser alanı tıklım tıklım olunca, bira almaya gidip gelene kadar geçen zamanlar ve önümüzda bayılan kızlar yüzünden pek birşey anlamadım diyebilirim =) Ama yinede Four to the Floor ve Poor Misguided Fool' u canlı dinlemek yetti bana.

Starsailor 'ın da ardından asıl bomba 21:00 da çıkması gerekirken biraz geç çıkan Royksopp'tu. Sıra Royksopp 'a gelince bizde, her cümlenin başına bir "pardon" koyarak kalabalıgı yarıp en öne kadar gittik =) Sanırım mikrofonda olan bir sorun yüzünden ses biraz bulanık geliyordu ama bir süre sonra düzeldi sanırım. Buna rağmen yinede mükemmel bir performans gösterdiler diyebilirim. Tam 3 kere veda eden grubu her seferinde sahneye geri çağırdık ve onlarda bizi kırmadı, her seferinde tekrar sahneye çıktılar. Royksopp'la ilgili hatırladıklarım bunlar, malum biraz kopmuştuk =)


Festival alanı ise süperdi, biralar sulu değildi, standların kalabalığı normal düzeydeydi, tek sorun wc 'ler ana sahneye çooook uzaktaydı. Gidip gelene kadar garanti 1 şarkı kacırıyordunuz. Tek üzüldüğüm şey fotoğraf makinamı evde unutmak oldu. Festival sonunda ise bir dolmusa denk geldim ki içi ayrı bir festivaldi, daha fazla detaya girmeden bu yazıyı sonlandırıp, kısmet olursa yeni festivallerde görüşmek üzere =)



19 Haziran 2009

Twitter !!!

Twitter çılgınlığına biraz geçte olsa bende katılmış bulunmaktayım artık.
Takip etmek isteyen arkadaşlar,
http://twitter.com/maydinunlu buradan takip edebilirler...

21 Mayıs 2009

Visual Studio 2010 Beta 1

Merhaba sevgili arkadaşlar,

Bu yazımda sizlere projelerinizde
Valdation işlemlerinizi yapabilmek adına kullanabileceğiniz OpenSource bir uygulama olan FluentValidation'dan bahsedeceğim. Dilerseniz öncelikle validasyon kavramı nedir ve neden önemlidir kısaca bir bakalım...


Validation Nedir, Neden Gereklidir ?


Validation
işlemleri genellikle web uygulamalarında karşımıza çıksada aslında her türlü proje tipinde kullanılması gereken önemli tekniklerden biridir. Validation dediğimiz şey aslında sadece bir onaylama sistemidir. Onayladığımız şey ise, kullanıcının giriş yapabileceği hemen hemen her türlü input kontrolüne girilen bilgilerin tutarlılığıdır. Örnek vermek gerekirse, bir web sitesine üye olacağımızı düşünelim. Böyle bir durumda karşımıza, bizden kullanıcı adı, şifre ve mail gibi çeşitli bilgiler isteyen bir sayfa gelir. Veri tutarlılığı açısından bu girilen bilgiler öncelikli olarak mutlaka ama mutlaka girilmek zorundadır. (örneği daraltıp, kullanıcı adı, şifre ve mail üzerinden gidiyorum) Bunun dışında girilen mail adresinin formatıda, standart mail adresi formatı ile uyuşmalıdır. Yani girilen bilginin içinde birden fazla @ işareti olamaz gibi...

Yukardada bahsettiğim gibi bu tarz kontroller her türlü proje tipinde yapılması gereken işlemlerdir. Fakat projeniz bir web uygulaması ise bu validasyon işlemlerinin yapılması gerekliliği bir adım daha öne çıkan bir önceliğe sahip oluyor. Bunun başlıca sebeplerinden biride tabiki güvenliktir. Sayfanızda yer alan özellikle text inputları injectionlara yol acabilecek kontrollerdir.
JavaScriptInjection ve SQLInjection gibi saldırıların önüne geçmek için kullanabileceğiniz en etkili yöntemlerden biri etkili bir validasyon kontrolü yapmaktır. Bir diğeride girilen verilerden injectionlara neden olabilecek kodları ayrıştırmak için bu verileri bir RegEx filtresinden geçirmektir. Validasyon kontrolü güvenlik dışında ayrıca, veritabanına girilecek olan verilerin tutarlılığı açısından da önemli bir adımdır. Bu bağlamda yazımızın geri kalan kısmı web uygulamaları üzerine olacaktır. Fakat FluentValidation' ı , desktop veya console gibi farklı uygulama tiplerindede kullanabilirsiniz.


Validation Nerede ve Nasıl Yapılır ?

Validation işlemlerini, projelerimizde iki ana layer'a yayabiliriz. İlk olarak Client tarafında GUI katmanında JavaScript ile bir validation kontrolü yapıp ardından, Server tarafında daha etkili bir şekilde Validation veya Business katmanında bir kontrol yapabiliriz. Her iki katmandada yaptığımız işlemler özünde aynıdır, öyleyse neden iki kere yapma ihtiyacı duyuyoruz buna şimdi değineceğim...

Öncelikle neden
JavaScript ile GUI katmanında bir validasyon yaptığımızı açıklayalım. Şimdi, web uygulamalarında, kullanıcı bilgileri girdikten sonra sayfayı sunucuya gönderir. Biz sayfa sunucuya gitmeden önce bir kontrol yaparsak eğer, girilen bilgilerin tutarlılığını sayfayı sunucuya göndermeden önce yapabilmiş oluruz, böyle bir durumda tutarlılığı bozan birşeyler varsa sayfayı sunucuya göndermeden önce kullanıcıya bunu belirtme şansımız olur. Buda gereksiz yere kullanıcının zaman kaybetmesini önler ve gereksiz yere zaten tutmayan veriler ile server-side validasyon yapmamıza gerek kalmaz. Buna örnek olarak, mutlaka girilmesi gereken verilerin kontrolü ve mail adresi formatının tutarlılığı gibi şeyler verilebilir. Bunun yanında server-side validasyonda şu gibi durumlarda geçerlidir. Mesela kullanıcı adının daha önceden kullanılan bir isme eşit olup olmadıgı kontrolünü yapabilmek için mutlaka bunu server tarafında yapmak gerekir. Veya saat ve tarih değerleri üzerinde bir validasyon yapılıyorsa.

Server-Side validasyon için bir diğer önemli konuda, JavaScriptlerin browser'a olan bağımlılığıdır. Yani JavaScriptlerin çalışması bir şekilde browserdan iptal edilebilir. Bu durumda en son adım olarak, Client-Side validation yapmasak bile mutlaka Server-Side Validation yapmak zorundayız.
Yazımızın geri kalan bölümü, FluentValidation kullanarak Server Side Validation 'lar yazmak üzerine olacaktır. Client-Side Validationlar için internette bir çok hazır JavaScript framework' ü bulabilirsiniz...


Validator Sınıfı Oluşturmak

Fluent Validation projesinin bir open source uygulama olduğunu söylemiştik. Uygulamaya
CodePlex üzerinden erişip buradan download edebilirsiniz.

Şimdi Visual Studio'da
FluentValidationTest adında bir web projesi yaratalım. Ardından projemize en basit haliyle bir entity 'i temsil etmesi amacıyla Customer adında bir class ekleyelim. Customer sınıfımız aşağıdaki gibi olabilir.

Customer.cs


public class
Customer
{
public string FirstName { get; set; }
public string
LastName { get; set; }
public int
Age { get; set; }
}



Validation işlemlerini yaparken FluentValidation'dan yararlanabilmek içinde gerekli olan .ddl' i referans olarak eklememiz gerekiyor tabiki. Bunun için download ettiğiniz dosya içindeki FluentValidation klasörü içindeki,
FluentValidation.dll dosyasını referanslara eklemeniz yeterlidir.

Evet bu hazırlık işlemlerinden sonra asıl konumuz olan Validation işlemlerinin yapılacağı sınıfı yazabiliriz. Bunun için projemize
CustomerValidator adında bir class ekleyelim. Ardından namespace'imizi gösterelim;

using FluentValidation;



Burada önemli olan nokta bu sınıfımızın FluentValidation 'içinde bulunan
AbstractValidator<> isimli generic sınıftan türetilmesidir.

public class CustomerValidator : AbstractValidator<Customer> {}


Şimdi en basit hali ile bu Customer' bilgilerinden hepsinin girilmek zorunda olduğunu ve Age 'inde 18 den büyük veya 18'e eşit olması gerektiğinin zorunlu olduğunu düşünelim. Bunun için yazılacak kod gerçekten çok basit, aşağıdaki kodu Default Constructor' ımıza yazabiliriz;

public
CustomerValidator()
{
RuleFor(customer => customer.FirstName).NotNull();
RuleFor
(customer => customer.LastName).NotNull();
RuleFor
(customer => customer.Age).NotNull().And.GreaterThanOrEqualTo(18);
}

Kodu kısaca özetlemek gerekirse, RuleFor methodları yardımıyla kurallar belirliyoruz.
NotNull() methodu ile girilecek bilginin boş bırakılmaması kontrol ediliyor ve GreaterThanOrEqualTo(18) ilede 18 yaşından büyük veya 18'e eşit olması kontrol ediliyor. Bu kodlardaki bir diğer önemli noktada 3.satırda NotNull() ile GreaterThanOrEqualTo methodları arasındaki And bağlacıdır. And' in aslında sadece bir property olduğunu düşünürsek işlevsellik bakımından nekadar büyük bir iş yaptığını rahatlıkla görebiliriz.Çünkü bu şekilde zincirleme kod yazmamızı sağlayan bir yapı sunabiliyor bize.Aslında bu şekilde kod yazabilmenin altında FluentInterface mimarisi yatıyor. Bu konuda sevgili Cihat Altuntaş 'ın yazmış olduğu bir makale var. Buradan okumanızı tavsiye ederim. Bunun dışında FluentValidation içinde yer alan diğer bir çok methodada birazdan kısaca bakacağız. Ama dilerseniz önce bu Validator sınıfımızı nasıl kullanacağımıza bir bakalım...


Validator Sınıfını Kullanmak

Şimdi Default.aspx sayfamızı aşağıdaki gibi oluşturalım.

Şimdi buton' umuza tıkladıgımız zaman yapılması gereken işlemleri yazabiliriz artık. Buton' un Click olayına kodları yazmadan önce namespace'lerimizi belirtmeyi unutmayalım;


using FluentValidation;

using FluentValidation.Results;
// Validasyon sonuclarına erişebilmek için.

protected void btnSend_Click(object sender, EventArgs e)
{
Customer customer = new Customer();
customer.FirstName = txtFirstName.Text;
customer.LastName = txtLastName.Text;
customer.Age = Convert.ToInt32(txtAge.Text);

CustomerValidator customerVal = new CustomerValidator();

ValidationResult result = customerVal.Validate(customer);

if (!result.IsValid)
{
foreach (var failure in result.Errors)
{
lblResult.Text += "Property " + failure.PropertyName + " failed validation. Error was : " + failure.ErrorMessage;
}
}
else
{
lblResult.Text = "Bilgiler başarıyla gönderildi...";
}
}


Kodlarda önemli üç nokta var. Önce yeni bir CustomerValidator nesnesi yarattıgımız anda zaten otomatikman constructor' ında kontroller yapılıyor. Ardından ValidationResult ile bunlar bir sonuç kümesi olarak ele alınıyor ve biz bu sonucun geçerli olup olmadığını result' ın IsValid değeri ile kontrol ediyoruz. Eğer işlem onaylanmazsa neyin eksik veya yanlış yapıldığı kullanıcıya gösteriliyor böylece.
FluentValidation' ın kullanılması en basit hali ile işte bu şekilde.Sanırım gayette basit olsa gerek. Şimdi bu güzel framework' ün bize sunduğu diğer karşılaştırma ve kontrol methodlarını inceleyelim isterseniz...



Validatorler



NotNull Bilginin Null olmaması gerektiğini kontrol ediyor.

RuleFor(customer => customer.Surname).NotNull();


NotEmpty
Bilginin boş bırakılmaması gerektiğini kontrol ediyor.
RuleFor(customer => customer.Surname).NotEmpty();


NotEqual
Bilginin herhangi bir bilgiye eşit olmaması gerekliliğini kontrol ediyor. Örneğin var olan bir username adının yeni bir üye tarafından kullanılamaması sırasında yapılan kontrol gibi.
RuleFor(customer => customer.Surname).NotEqual("Foo");
RuleFor(customer => customer.Surname).NotEqual(customer => customer.Forename)


Equal Bilginin herhangi diğer bir bilgiye eşit olması gerektiğini kontrol ediyor. Örneğin password girilmesi iki kere istendiğinde bunların eşit olması gerektiğinin kontrolü gibi.
RuleFor(customer => customer.Surname).Equal("Foo");

RuleFor(customer => customer.Password).Equal(customer => customer.PasswordConfirmation);



Length Bilginin belli bir aralıkta olması gerektiğini kontrol ediyor.
RuleFor(customer => customer.Surname).Length(1, 250);


LessThan Bilginin, herhangi bir değerden küçük olması gerektiğini kontrol ediyor.
RuleFor(customer => customer.CreditLimit).LessThan(100);

RuleFor(customer => customer.CreditLimit).LessThan(customer => customer.MaxCreditLimit);



LessThanOrEqual Bilginin, herhangi bir değerden küçük veya ona eşit olması gerektiğini kontrol ediyor.
RuleFor(customer => customer.CreditLimit).LessThanOrEqual(100);

RuleFor(customer => customer.CreditLimit).LessThanOrEqual(customer => customer.MaxCreditLimit);



GreaterThan Bilginin, herhangi bir değerden büyük olması gerektiğini kontrol ediyor.
RuleFor(customer => customer.CreditLimit).GreaterThan(0);

RuleFor(customer => customer.CreditLimit).GreaterThan(customer => customer.MinimumCreditLimit);



GreaterThanOrEqual Bilginin, herhangi bir değerden büyük veya ona eşit olması gerektiğini kontrol ediyor.
RuleFor(customer => customer.CreditLimit).GreaterThanOrEqual(1);

RuleFor(customer => customer.CreditLimit).GreaterThanOrEqual(customer => customer.MinimumCreditLimit);



RegularExpression Bilginin verilen Regular Expression'a uyup uymadığını kontrol eder.
RuleFor(customer => customer.Surname).Matches("some regex here");


Email Bilginin, email formatına uyup uymadığını kontrol eder.
RuleFor(customer => customer.Email).EmailAddress();


Validatörleri Konfigure Etmek


Default Error' u Override Etmek


Bu işlemin amacı mesela bir alan boş bırakıldığında çıkacak olan uyarı mesajını istediğimiz gibi kişiselleştirebilmektir.
RuleFor(customer => customer.Surname).NotNull().WithMessage("Soyisim boş bırakılırmı hiç");
RuleFor(customer => customer.Surname).NotNull().WithMessage("Soyisim boş bırakılırmı hiç {0}");
// 0 yerine customer.Surname geliyor, sadece formatlı gösterim için.



Default Property Name' i Override Etmek

Siz class'larınızda
FirstName, LastName, UserName gibi property isimleri kullanabilirsiniz. Fakat kullanıcıya eksik veya hatalı bilgi girmesi sonucunda bir uyarı bilgisi vereceğimiz zaman FirstName yerine Adı, LastName yerine Soyadı, UserName yerinede Kullanıcı Adı boş bırakılamaz diyebilmek için bu propertyleri override edebiliyoruz.
RuleFor(customer => customer.Surname).NotNull().WithName("Last name");


WHEN / UNLESS (-dığı zaman / -olmadıkça) Bir kontrol, diğer bir kontol oldugu zaman yapılsın(when) veya olmadığı zaman yapılsın(unless) gibi durumlarda kullanılabilir.
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0).When(customer => customer.IsPreferredCustomer);


Örnek kodda müşterinin(customer)' in sahip olduğu indirim değerinin sıfırdan büyük olması gerekliliği kontrol ediliyor. Fakat bundan önce When ile müşterinin bir indirim hakkına sahip olup olmadığı kontrol ediliyor.Eğer bir indirim hakkına sahipse, ardından sahip olduğu bu hakkın değerinin sıfırdan büyük olması gerektiği kontrol ediliyor.
Unless'te bu işlemin mantıksal olarak tam tersi durumda geçerli oluyor.Mesela indirim hakkı yoksa indirim yapılsın gibi =)



ASP.NET MVC Entegrasyonu


FluentValidation' ı herhangi bir Asp.net MVC projesinde kullanmak istiyorsak eğer;
FluentValidation.Mvc.dll 'dosyasının projeye referans olarak eklenmesi gerekiyor.
public class CustomerController : Controller
{
public ActionResult Save(Customer customer)
{
var validator = new CustomerValidator();
var results = validator.Validate(customer);
results.AddToModelState(ModelState, "customer");
}
}


Buraya kadar anlattığım herşey ve daha fazlası zaten Fluent Validation' ın CodePlex'teki sayfasında mevcuttur. Benim anlattıklarım dışında ayrıca kendi validatörlerinizi nasıl yazarsınız ve TDD süreçte nasıl kullanırsınız gibi konularada değinilmektedir...

Örnek Uygulama

Bu yazımda sizlere FluentValidation yardımıyla Validasyon işlemlerini ve önemini anlatmaya çalıştım. Bir sonraki yazımda görüşmek üzere, iyi çalışmalar dilerim...

Mehmet Aydın Ünlü
aydinunlu85@gmail.com
http://www.aydinunlu.blogspot.com


F1 2009 sezonunun ilk yarışı için yapılan sıralama turlarında, sezonun yeni takımı BrawnGP ile Jenson Button' ı pole positon' da görüyoruz. İkinci sırada ise takım arkadaşı Rubens Barrichello var.

Geçen sezonki şampiyonluğun son saniyelere kadar sürdüğünü hatırlarsak eğer yeni sezona bu şekilde süpriz bir sıralama turuyla başlangıç yapılması insanı daha çok heyecanlandırıyor. Umarım güzel bir F1 sezonu olur =)

Canımı sıkan tek şey ise TRT' nin F1 yayınlarını devralmasından sonra yayını şifreli vermelisidir. Zaten sadece izleyici olarak katıldığımız bir spor dalına olan ilginin daha da azalmasına yardımcı oldukları için tebrik etmek lazım...

Sıralama Sonuçları

 1.  Button      Brawn-Mercedes       
2. Barrichello Brawn-Mercedes
3. Vettel Red Bull-Renault
4. Kubica BMW-Sauber
5. Rosberg Williams-Toyota
6. Glock Toyota
7. Massa Ferrari
8. Trulli Toyota
9. Raikkonen Ferrari
10. Webber Red Bull-Renault
11. Heidfeld BMW-Sauber
12. Alonso Renault
13. Nakajima Williams-Toyota
14. Kovalainen McLaren-Mercedes
15. Hamilton McLaren-Mercedes
16. Buemi Toro Rosso-Ferrari
17. Piquet Renault
18. Fisichella Force India-Mercedes
19. Sutil Force India-Mercedes
20. Bourdais Toro Rosso-Ferrari
Kaynak : http://www.turkiyef1.com/haber/16254


CETURK Java Teknoloji Günleri - Kıbrıs 11.04.2009

Bugüne kadar çok farklı konu ve teknoloji ile ilgili yaptığı ücretsiz etkinliklerle sektörünün gelişmesine katkıda bulunan CETURK etkinliklerine devam ediyor.

İstanbul'da IBM, Microsoft, Yıldız Teknik Üniversitesi, Bahçeşehir Üniversitesi ve özel bir çok kurumda ücretsiz etkinlikler düzenleyen CETURK, 2009 yılında "CETURK Anadolu Bilişim Turu" başlıklı organizasyonda ülkemizin 7 bölgesinde en az 1 kere bilişim etkinliği hedeflemektedir. CETURK Anadolu Bilişim Turu 3 Ocak 2009'da Ankara'da Çankaya Üniversitesi'nde yapılan Java Teknolojileri Etkinliği ile başladı. Elazığ'ta Fırat Üniversitesi Atatürk Kültür Merkazi'nde yapılan "CETURK Yazılım Mimarisi Tasarımı Günü" etkinliği ile devam etti.

CETURK Anadolu Bilişim Turu'nun 3. Durağı Kıbrıs...
Doğu Akdeniz Üniversitesi Yazılım Kulübü işbirliği ile 11 ve 12 Nisan'da "CETURK Java Teknoloji Günü – Kıbrıs" etkinliği gerçekleşiyor. Etkinliğe 1 Almanya'dan, 2 İstanbul'dan ve 2 Ankara olmak üzere toplam 5 konuşmacı katılıyor.

  • Altuğ B. Altuntaş - Yazılım testlerinin önemi ve sürekli bütünlük
  • Furkan Horasan - Volantis
  • Kenan Sevindik - Spring (Acegi) security framework
  • Mehmet Gursul - Zihin Haritası(Mind Map) yöntemi ile çalışmak
  • Özcan Acar - Java ile yüksek performanslı web platformlarının oluşturulması

Etkinliğe katılım her zamanki gibi ücretsiz olacak. Ayrıca her zaman olduğu gibi etkinliğe katılan kişilere çekiliş ile kitap hediye edilecek ve katılım sertifikası verilecek. Etkinliğe katılamayanlar için video kaydı yapılarak CETURK.TV 'de yayınlanacak.

ETKİNLİK DETAYLARI
Etkinlik Konusu : CETURK Java Teknoloji Günleri - Kıbrıs
Etkinlik Türü : Workshop
Kontenjan : 200
Etkinlik Tarihi - Saati : 11.04.2009 -- 11.04.2009 ( 13 - 16.30) ve 12.04.2009 ( 10:30- 16:00)
Süre : 2 Gün
Etkinlik Yeri : Doğu Akdeniz Üniversitesi - Mavi Salon - Kıbrıs
ETKINLIK IÇERİĞİ
11 Nisan : Cumartesi ( 13.00-16.30)
  • Mehmet ACA- CETURK Tanıtımı
  • Altuğ B. Altuntaş - Yazılım testlerinin önemi ve sürekli bütünlük
  • Furkan Horasan - Volantis
12 Nisan Pazar ( 10.30- 16.00)
  • Mehmet ACA- CETURK Tanıtımı
  • Kenan Sevindik - Spring (Acegi) security framework
  • Mehmet Gursul - Zihin Haritası(Mind Map) yöntemi ile çalışmak
  • Özcan Acar - Java ile yüksek performanslı web platformlarının oluşturulması
ETKİNLİK HEDİYEMİZ

Etkinliğe katılan 3 kişiye, ayrıca bu etkinlik haberini kişisel blogunda/sitesinde duyurup daha fazla kişinin faydalanması için bize destek olan 4 kişiye çekilişle Özcan Acar'ın aşağıdaki kitabından hediye edilecektir.
Özcan Acar'a kitap desteği için teşekkür ederiz.

24 Mart 2009

MIX 2009

17 Mart 'ta başlayan MIX 2009 etkinliğini izleyebilmek için illa orada olmanız gerekmiyor =) Aşağıdaki linkten de etkinlikleri izleyebilirsiniz...

http://live.visitmix.com

Video Çubuğu

Loading...