Ahmet Oğuz Koca

Sosyal olaylar.

Linq aracılılığıyla basit bir DRY (don't repeat yourself) yöntemi

Programlama dünyasında aynı veya benzer amacı taşıyan kod bloklarının uygulamanızın farklı yerlerinde defalarca yer alması istenen bir durum değildir (don't repeat yourself). Özellikle çok katmanlı uygulamalarda bu problemden kaçınmak malesef oldukça zor olabilmekte. Bugün bir projenin kaynak kodları üzerinde araştırma yaparken programcının bu sorunun üstünden gelmek için güzel bir yöntem izlediğini gördüm ve sizlerle de paylaşmak istedim. Ben burada konuyu mümkün olduğu kadar basit tutmak amacıyla çok küçük bir örnek ile konuyu anlatmaya çalışacağım. 

Şekildeki gibi bir Member Class'imiz olsun

 

Öncelikle DB üzerinde işlem yaptığımız bir Reposiyory class'imiz olsun (örnekte MemberRepository) Class'imiz ile site üyelerimiz arasında isim ve email adreslerini kullanarak arama yapıyoruz.

İlk iki fonksiyonumuzda klasik yöntemle iki ayrı fonksiyon oluşturuyoruz. Bunlardan birincisi ile Nick üzerinden ikincisinde ise email adresi üzerinden ilgili kullanıcının veritabanımızda yer alıp yer almadığını kontrol ediyoruz. Üçüncü fonksiyonumuzda ise Linq expression'lar arayıcılığıyla daha esnek bir GetMember fonksiyonu oluşturuyoruz ve hangi parametre üzerinden arama yapılacağını sınıf örneğini oluşturan client kodumuza bırakıyoruz. Bu sınıf üzerinden işlem yapan istemci kodlarımız ise şöyle

Görüldüğü üzere linq expression ile oluşturduğumuz GetMember fonksiyonumuz sayesinde kod tekrarından kurtulmuş olduk ve uygulamamıza müthiş bir esneklik kattık. Nick ve EMail Adresinin yanında aynı fonksiyon sayesinde Member Class'imizin bir çok fieldi üzerinde arama işlemi yapabileceğimizi de unutmayalım. Ben burda sadece where fonksiyonu üzerinden örnek yaptım ancak tahmin edebileceğiniz üzere order sorgularından group'lama işlemelerine kadar bir çok yerde bu esnekliği siz de kullanabilirsiniz. Görüş ve önerilerinizi yorum olarak bırakabilirsiniz. Kolay kodlamalar...

Asp.Net MVC3'te Recaptcha (güvenlik kodu) kullanımı

Asp.net MVC3 projelerinizde form alanlarınız için güvenlik kodu uygulamasına ihtiyaç duyarsanız, NuGet üzerinden Microsoft-Web-Helpers dağıtımıyla dağıtılan google'ın recaptcha uygulamasını kullanabilirsiniz.

Projenize Recaptcha eklemek için öncelikle Nuget'ten "microsoft-web" araması yapıp resimdeki paketi projemize dahil ediyoruz.

Daha sonra captcha uygulamamıza sayfalarımızdan direkt olarak ulaşabilmek için web.config dosyamıza Microsoft.Web.Helpers namespace'imizi ekliyoruz.


Sadece bir tek formda ihtiyaç duyorsanız ilgili sayfada using ile de referans da verebilirsiniz.

Daha sonra kendimize http://www.google.com/recaptcha üzerinden bir hesap açıyor ve Domain alanına ilgili alanadını girdikten sonra bize sağlanan private ve public key değerlerini projemizde kullanmak üzere saklıyoruz. Formumuzda captcha alanını göstermek için form taglarımızda istediğimiz alana bu kodları giriyoruz.

Form verilerimizi aldığımız Controller'imizde bu kodlarla girilen değeri kontrol ediyoruz

Asp.net MVC ile GooglePlus Api kullanımı

Google bu hafta içinde Google+ (google plus) için API desteğini kısıtlı özelliklerle de olsa açınca bende .net developerlar için basit bir client yazma gereği duydum.  Google'ın API'ye ek özellikler eklemesiyle birlikte paylaştığım kodları geliştirmeyi planlıyorum. Görüş ve önerilerinizi benimle paylaşırsanız kodların geliştirilmesine katkıda bulunabilirsiniz.

Şu an paylaştığım kodlarda Oauth2 ile yetki alıp bu yetkiyi kullanarak basit bir get sorgusu yapıyoruz. Bir çok arkadaşın konuya yabancı olduğunu düşünerek adım adım ilerleyeceğimiz bir yazı hazırladım.

Adım 1. API Başvurusu

Öncelikle Google'ın kendi uygulamaları için sağladığı API'lere erişim için Google Console aracılığıyla bir API projesi başlatıyoruz Link => https://code.google.com/apis/console

 Fazlası...

BlogEngine 2.5 kurulumunda .cshtml hatası.

Bugün dotnetblogengine blog'umu 1.6 'dan 2.5'e taşıdıktan sonra yeni versiyondaki .cshtml uzantılı dosyalara erişmeye çalıştığımda IIS,  "HTTP Error 404.7 - Not Found" hatası veriyordu. Hatanın detayını iyi okumayıp bir çok mime ve isapi numarası denedikten sonra sorunun IIS 7.5'te varsayılan olarak .cshtml uzantılı dosyalara erişimin kapalı olduğunun aklıma gelmesi ve IIS'te gerekli ayarı yapmamın ardından problemim çözüldü. Benzer durumda olan arkadaşlar için yapılması gerekenleri paylaşayım istedim.

 

 

IIS'te ilgili sitenin detay bölümünden Request Filtering'i seçiyioruz

 

.cshtml dosyalarına getirilen kısıtlamayı "Remove ile kaldırıyoruz"

 

 

Not: MVC projelerinizde cshtml dosyalarını direkt erişime açmanız güvenlik sorunlarına sebep olabilir bundan dolayı bunu sunucu bazında değil sadece blogengine kurduğunuz websitesi için yapmalısınız.

Asp.net MVC projelerinde ViewModel kullanımı.

 

Asp.net MVC'de Controller sınıflarınızdan view sayfalarınıza istediğiniz nesneleri geçebilmeniz için bir çok yöntem olsada (viewbag, viewdata, entity classları v.s.) kanımca bu imkanların efektif olarak kullanımı neredeyse mümkün değil. Özellikle çalışma zamanı sırasında tip dönüşümü hatalarından ve controller'da bu bilgileri doldurma sırasından oluşan problemlerden (null değer v.s.) dolayı dynamic viewbag yapısı zamanla sadece çile kaynağı haline gelebiliyor. Özellikle unit testing kullanmıyorsanız view tarafında oluşan hataları gidermek proje geliştirme sürecinizin büyük bir bölümünü oluşturabiliyor.

Bütün bu problemlerin üzerinden gelebilmek amacıyla çeşitli tasarım desenlerinden kotarımlar yaparak bir yapı geliştirdim ve bu yapı sayesinde proje geliştirme sürecimi hayli kısaltabildim. Aslen bu yapı endüstri standartlarına çok uygun olmasada özellikle hızlı projeler geliştirmek adına size de bir çok avantaj sağlayabileceğinden sizlerle paylaşmak istedim. Açıklamamı fazla uzatmadan direkt ilgili kodları paylaşıyorum.

 

Öncelikle bütün ViewModel'lerimizi türeteceğimiz bir ViewModel classi oluşturuyoruz. 

http://pastebin.com/ehdsFwtT

 

Bir eticaret sitesi anasayfası yaptığımızı varsayaraktan basit bir AnasayfaViewModel Class'i oluşturuyoruz. 

Class'in içinde view tarafınfa ihtiyaç duyacağımız çeşitli classların liste tipinde örnekleri bulunuyor

http://pastebin.com/vPNFpv1M

 

Controller da ViewModel içinde tanımladığımız listelerimizi dolduruyoruz. 

http://pastebin.com/wD8QXxBT

 

View'imize geçtiğimiz ViewModel class'imiz üzerinden ihtiyaç duyduğumuz işlemleri gerçekleştiriyoruz.

http://pastebin.com/zrp8Jdkk

 

Pastebin üzerinden verdiğim kodlara gerekli açıklama satırlarını ekledim ancak sorularınız olursa bana sosyal medya kanalıyla ulaşabilirsiniz.

twitter.com/aokocax ,friendfeed.com/aokocax

 

 

 

İyi Unit Testlerinin sahip olduğu özellikler

 

Fransız yazılım mühendisi bir arkadaş iyi 'unit test'leri yazmak için izlediği yöntemleri listelemiş, ben de faydalı olacağını düşünerekten paylaşmak istedim

  • Test classları sadece bir tek class'i test eder.
  • Test metodları sadece bir tek metodu test eder.
  • Değişken ve method isimleri açıktır.
  • Test durumlarının okunabilirliği yüksektir.
  • Testler beklenen exceptionları test eder.
  • Testler direkt veritabanı erişimi yapmazlar.
  • Testler direkt network erişimi yapmazlar.
  • Test için kullanılan kodlar kod standartlarına uyar temiz, okunabilir ve anlaşılabilirdir.
  • Testler olası etkileri (side effect), limit değerleri ve null değerleri kontrol eder (bir exception oluşoyor olsa bile)
  • Herhangi bir konfigürasyon yapmadan testler her an çalşabilir durumdadır.
  • Testler compleks yapı ve metodları simüle etme için 'mock' (taklit etme) kullanır.

 

Sql Server LocalDB tanıtımı

 

 
Microsoft bir kaç hafta kadar önce SQL Server Denali CTP3’ün duyurusunu yaptı ve yeni sürümle birlikte Sql Server Express’e developer ihtiyaçları gözetilerek yeni bir ekleme yapıldığını duyurdu. LocalDB olarak adlandırılan bu ekleme ile developerlar geliştirme yaptıkları makinalara bütün bir sql server örneği (instance) yükleme zahmetinden kurtulabilecekler.

Bilindiği gibi Sql Server Express, ücretli Sql Server versiyonlarının çeşitli limitlerle sınırlandırılmış bir versiyonu ancak bu sürüm diğer ücretli versiyonlar ile tamamen uyumlu çalışmakta. Öyleki gerekli lisans anahtarlarıyla bile Sql Server’inizi daha üst versiyonlara taşıyabiliyor ve limitleri kaldırabiliyorsunuz. Bu imkan aynı zamanda developerların geliştirme yaptıkları makinaların sistem kaynaklarını sql server’a ayırma problemi ile birlikte geliyordu. LocalDB ile Microsoft, Sql Server'a API seviyesinde uyumluluk getirerek bu kaynak problemini ortadan kaldırmak adına yeni bir yaklaşım getirmiş oldu.

LocalDB hakkında bazı bilgiler.

1) LocalDB, diğer Sql Server versiyonları gibi sqlsevr.exe’yi kullanmaya devam ediyor. Uygulama Sql Server’da olduğu gibi bütün client side provider’ları ile çalışabilmekte (ado.net,odbc v.s.).

2) Windows Servisi olarak değil Proses(Process) olarak çalışmakta (servis olarakta çalıştırılabiliyor), bağlantının kopması ile birlikte bir kaç dakika içinde kendi kendini kapatmakta.

3) AttachDbFileName Property’si ile veritabanı dosyanızı spesifik bir konuma koyma imkanı sağlıyor.

4) Veritabanı servisleri bulunmamakta.

5) Şu an için LocalDb kurmak için Sql Serrver Expres kurup LocalDb özelliğini seçmelisiniz ancak daha sonra bu zorunluluk daha sonra ortadan kaldırılacak.

Kaynaklar

 

Alan adı türetmek için güzel bir servis

Daha önce bir çok kez ihtiyaç duyduğum ancak adını hatırlamadığımdan dolayı kullanamadığım bir servis olan domai.nr'a bugünkü gezinimim sırasında tekrar rastladım ve burdan sizlerle de paylaşmak istedim. Bundan sonra bu servisi bulmak için domainzr, domainer, domain name creator araması yapmak zorunda kalmayacağım :), Siz de sık sık alan adı türetmek durumunda kalıyorsanız bir yerlere kaydetmenizde fayda var.

 

Girişimcilere öneriler -"Do more faster" kitabından

Üzerinde çalıştığım son birkaç projenin istediğim başarıyı sağlamaması üzerine Ar-Ge çalışmalarımı tekrar girişimcilik üzerine yoğunlaştırmaya karar vermiş bulunuyorum :). Bugün girişimcilik konusunda yeni çıkan kitapları ararken geçen yıl okuduğum "do more faster" kitabına gözüm ilişti, girişimcilik adına okuduğum kitap sayısı fazla olmasa da bu kitap okuduğum en güzel kitaplardan biriydi. Okuduğum sırada kitaptan öğrendiklerimi niçin birebir paylaşmadığımı düşünerekten kitabı okuduğum dönem aldığım notları aramaya koyuldum ve nihayet eski bir e-mail ekinde notlarımı bulabildim (çok şükür). Liste halinde sizlerle paylaşacağım bu notlar kitabın içindeki örnek girişimlerden çıkarılan derslerden alınmakta.  Aslında arkalarında yatan hikayeler de paylaşılsa daha faydalı olabilir ancak bunun için ayrılması gereken zamanın çok fazla olmasından dolayı ben sadece cümle cümle aldığım notlarımı paylaşacağım. Kitabı online olarak okumak isteyen arkadaşlar "kobobooks.com" üzerinden satın alabilirler.

 

Özel olarak sormak istediğiniz bir şey olursa lütfen yorum olarak bırakın.

  • Fikirleriniz çalınabilir ama tutkunuz ve uygulama beceriniz asla.
  • Herkes mükemmel fikirlere sahip olabilir ama sadece tecrübeli girişimciler bunları başarıya çevirebilir.
  • Fikirlerinizi paylaşmakta cesur olun.
  • Tutkunuza odaklanın ve ufak bir sıkıntıyı veya ihtiyacı ele alın ki bu 'ihtiyaç' dünyada hiç kimsenin sizden daha iyi çözemeyeceği bir şey olsun.
  • Tutkunuz geceleri onun için uyanık kalmak isteyeceğiniz daha doğrusu uyumak istemeyeceğiniz bir şey olmalı. Kalbinizin sesini dinleyin.
  • "Değerli bir şeyler üretin ve müşterilerinizi dinleyip başa dönün" Mantra.
  • Kullanıcılarınızın alışkanlıkları hakkında "kanıtlanmış datalar" toplamaya odaklanın, sürekli onlar hakkında bilgi toplayın.
  • Mümkün oldukça küçük kalmaya çalışın kaybetmeniz zor olur.
  • İşinizin çıkış noktasına odaklanın (projenizin çıkış fikrine) gelen cazip teklifler sizi büyüme ivmemizi sağlayan hedeften koparmasın.
  • Make users happy, make money.
  • Kendi tutkularınızı tatmin etmeye çalışırsanız (kendi ihtiyaç duyduğunuz proje) ürününüzü iyi tanımlayabilir ve başarılı olabilirsiniz.
  • Çok ilkel özelliklerede sahip olsa da mümkün olan en kısa sürede prototip çıkarmaya çalışın.  İlk ipod'un(apple) wireless özelliği bile olmadığını aklınızda bulundurun.
  • Bir fikrin doğruluğunu test etmenin en kolay yolu onu gerçekleştirip feedback almaktır.
  • Kullanıcı datası oksijen gibidir. Ürününüzü feedback’siz geliştirdiğiniz her saniye, aslında ürününüzün havasızlıktan giderek daha kötüye gittiği anlardır. Hiçbir şey sizi ürününüz kullanılmaya başladığında topladığınız kullanım bilgilerinden daha iyi yönlendiremez.
  • Prototype ne bilmediğinizi bilmenizi sağlar.
  • Yapabiliyorsanız ilk andan itibaren müşterilerle çalışmaya çalışın onların para ödemeye razı olacaları özellikleri geliştirmeye çalışın.
  • Ulaşmaya çalıştığınız marketin büyüklüğünü doğru hesaplayın, küçük ve maddi durumu kötü marketlere girmeyin.
  • Her girişimcinin izlemesi gereken yol şudur; "kesin bir planınız olsun ama her zaman müşterilerinizi, çalışanlarınızı, akıl verenleri ve kalbinizi dinleyin". Gittiğiniz yolun sizi gitmek istediğiniz yöne doğru götürmeyeceğine dair sinyaller aldığınızda değiştirmekten çekinmeyin.
  • Tecrübeli mentorların verecekleri önerilere dikkat edin, sizin yapmanız muhtemel hataları onlar daha önceden yapmışlardır. Tekerleği tekrar keşfetmeyin.
  • Hatalarınızın sizi tanımlasına izin vermeyin. Onların size bir şeyler öğretmesini sağlamalısınız. Bir sonraki sefer neyi değişik yapmanız gerektiğinin göstermelerini sağlayın.
  • ABD harici bir ülkede başarısız olursanız insanlar size 3 metreden fazla yaklaşmazlar ama burda bu böyle değildir, başarısızlıklar onur madalyalarıdır. Başarısız olmaktan korkmayın.
  • Kaliteye özen gösterin rakamsal büyüklüğe değil, sizi gururlandıracak bir şeye sahip olursunuz. Sırtınızda taşımanız gereken bir şeye değil.
  • Mark Twain şöyle diyor; Yapmak isteyip yapmadığımız şeyler yapıp pişman olduğumuz şeylerden çok daha fazla acı verir. Harekete geçmekte yavaşlık göstermeyin.
  • Yaptıklarınız tutkuyla yapmaya çalışın, yapın ya da yapmayın ama denemeye kalkmayın. Bir firma kurmak denenmez, bir iş kurmakta denemez. Bir startup denenmez bir hedefi gerçekleştirmek için iş yapın.
  • Gerçek bir iş tek bir şeyle açıklanabilir. "İnsanların önemli bir ihtiyacını karşılayın ve onlardan gelir elde edebileceğiniz oranda ücret alın. Bunun en kolay yolu müşterilerinizi dinlemektir."
  • İnsanların neye ihtiyacı olduğunu öğrenmeye odaklanın ve onlara yardımcı olun sonra tekrar ve tekrar ve tekrar bunu yapın.
  • Hayatınızdaki dengelere önem verin nerede bırakmanız gerektiğini bilmeye çalışın, sınırlarınızı bilin. 
  • Kendi dengenizi bulmaya çalışın. Daha güçlü olursunuz.
  • Dengeniz doğru olmazsa er ya da geç düşersiniz.
  • Eğer tukularınıza yatırım yaparsanız inanılmaz olaylar yaşayabilirsiniz.
  • Ortaklıklarda başta çözemediğiniz problemler giderek daha da zorlaşır.
  • Mümkün olan en iyi kişiyi işe almaya çalışın başarı ve başarısız firmalar arasındaki fark budur.
  • Başarılı bir lider takımının önündeki yol bloklarını kaldırabilendir.
  • Müşteri odaklılık, tek satır kod yazmadan önce müşterilerin ödemeye razı olacağı işlere odaklanın.
  • Hayatınızda bugüne kadar yaptığınız güzel şeyleri düşünün üniversiteye nasıl başladınız, nasıl iyi bir iş teklifi aldınız, en sevdeiğin müzik parçasını nasıl buldunuz. Rastgelelik önemlidir açık olun, farklı şeyler yapın.
  • Ara sıra bilgisayarın başından kalkın çevre yapın.
  • Yatırımcı bulursanız daha önce hangi şirketlere yatırım yaptığını ve kaç yıldır bu işi yaptığını sorun "mutlaka teyit ettirin", çekingen olmayın. Cevap vermiyorsa/veremiyorsa direkt kaçın. Size faydadan çok zarar getirir.
  • Bazen kendinize 1 hafta ayırın ve etrafınızda olan biteni göremeye çalışın.