RecentPosts

C# 7.0 Yenilikleri

clock Ağustos 26, 2016 08:43 by author Deniz |

Merhaba,

24 Ağustos 2016 itibariyle Microsoft Visual Studio “15” Preview 4 içerisinde kullanabileceğimiz haliyle    C# 7'yi duyurdu. Hemen hemen artık duyurdukları özelliklerin çoğunun production versiyonunda olacağını varsayabiliriz. C# 5 ve C# 6 versiyonlarıyla karşılaştırdığımız zaman daha dolu bir versyion olmuş. Elbette diğer sürümlerde de önemli değişiklikler vardı örneğin C# 5'de ki async özellikleri development yaklaşımlarımızda önemli değişikliklere sebep oldu. Ama C# 7 yıllardır "Keşke şöyle olsa" dediğimiz bir sürü angaryadan bizi kurtarıyor.

Microsoft özellikle son senelerde çok güzel işler çıkartmaya başladı. Open source camiaya verdiği destek .Net Platformunu çok daha dinamik hale getirdi ve yeni özelliklerin, framework'lerin hayatımıza çok daha hızlı girmesini sağladı. Bu yazının kapsamında bakarsak buna verilebilecek en iyi örnek .Net'in Compiler Platform'u olan "Roslyn". Roslyn 3 Nisan 2014'de Microsoft'un San Francisco'daki bir konferansında sahnede open-source hale getirilmişti Smile. O zamana kadar compiler bizim için kapalı bir kutuydu ve kod analiz tool'ları ve ya kod odaklı uygulamaları geliştirmek daha çok deneme yanılma yöntemiyle yapılabiliyordu. Rosyln'le beraber aslında Compiler bir Platform haline geldi ve developer'lara bir api sağlanmış oldu. Bu sayede kod analiz, refactoring, meta-programming, code generation/transformation tool'larının yazılması çok daha kolaylaştı ve .Net Framework'un Windows harici işletim sistemlerinde de çalıştırılabilmesi çok daha kolay hale geldi. Bugün github üzerinde oldukça popüler olan ve çok fork'lanmış projelerden biri Roslyn. C# 7 ile ilgili geliştirmeler hala sürmekte gelişmeleri github'dan takip edebilirsiniz. Fazlası...



.Net Fiddle

clock Aralık 26, 2013 09:46 by author Deniz |

Merhaba,

Developer'lar olarak kod yazarken bazen takıldığımız durumlarda google'a başvurduğumuz, stackoverflow gibi kaynaklardan yararlandığımız oluyor. Benim en çok canımı sıkan durumlardan biri bu kaynaklardaki örnek kod parçacıklarını denemek için bazen Visual Studio açıp, proje oluşturmak gibi işlere girmek. Tabi alternatif olarak unit test tool'larından da yararlanılabiliyor ama o başka bir yazının konusu.

Web ile uğraşmış ve özellikle yoğun bir şekilde javascript yazanlar JsFiddle'dan haberdarlardır sanırım. Kısace online olarak yazdığınız javascript kodlarınızı denemenize, html çıktılarını görmenize ve hatta istediğiniz javascript library'sini de kullanmanıza olanak sağlayan bir site.

Yukarıda bahsettiğim sorunlardan müzdarip bir grup .Net Developer JsFiddle'daki fikri .net dünyasına uyarlamışlar. .Net Fiddle aynı JsFiddle gibi C# ve ya VB.Net dillerindeki kod parçacıklarını denemenize imkan sağlıyor. Ayrıca Nuget package desteği de koymuşlar. Bir göz atmanızda yarar var

Tekrardan görüşünceye dek hepinize iyilikler dilerim.



Aspect-Oriented Programming Kavramı

clock Ekim 7, 2013 16:15 by author Deniz |

Merhaba,

Tembellik çoğu alanda karşımıza negatif bir kavram olarak çıkar. Ama iş developer'lık konusuna geldiğinde önemli bir meziyettir Smile iyi developer aslında tembel developer'dır. Tabi burada kast ettiğim tembellik çalışmamak değil, kendini tekrar etmemek, aynı şeyi defalarca yazmamak. O yüzden reusability hayatımızın önemli bir parçasıdır, sık kullandığımız kodları, library'lere taşırız yeri geldimi yine bu library'lerimizi kullanarak belli bir işe özel framework'ler yazarız. Object Oriented diller de bize bu konuda oldukça yardımcı olurlar.

Peki anlatıklarımın Aspect-Oriented Programming'le alakası ne?

Yazılım projeleri her geçen gün büyüyorlar, elimizden geldiğince Object-Oriented prensiplerini uygulasak da reusability'yi arttırmaya çalışsak da bir süre sonra yazdığımız kodların anlaşılabilirliği ve maintainability(bakımyapılabilirlik)'si düşmekte. Aspect-Oriented Programming bu noktada bize yardımcı olmakta. Fazlası...



Güzel bir MVP-VM örneği

clock Aralık 11, 2012 11:10 by author Deniz |

Merhaba,

Baldur's Gate serisi benim gibi küçük yaşlardan itibaren FRP ile ilgilenen kişilerde önemli bir yere sahiptir. Oyununun oldukça doyurucu bir senaryosu vardır, zaten dönem olarakta Forgotten Realms evreninin en belalı zamanlarından biri olan "Time of Troubles" sonrasında geçer. Baldur's Gate ilk olarak 1998 de çıktığında oyun dünyası CRPG (Computer Role Playing Game) kavramına çok yabancı değildi ama ozaman kadar böyle bir oyun çıkmamıştı, öyle bir oyundan bahsediyoruz ki bugün çıkmasının üzerinden neredeyse 15 sene geçmesine rağmen hala oynanıyor, üzerine bir sürü mod geliştiriliyor, çok aktif bir community'si var. Tabiki ilk oyunun başarısından sonra seriyi 1999 da genişleme paketi Baldur's Gate: Tales of the Sword Coast, 2000 de Baldur's Gate II: Shadows of Amn (ki serinin en güzel oyunudur bence) ve son olarak 2001 de Baldur's Gate II: Throne of Bhaal izledi. Ama dediğim gibi 2001 yılından beri oyunun hayranları oyuna çeşitli mod'larla içerik eklemeye devam ediyorlar.

Sanırım oyun ile ilgili en güzel gelişme bu senenin başlarında oyunu yapan ekibin, bütün seriyi yeniden elden geçirmeye karar vermesi oldu. Ve bu ayın başında da Baldur's Gate: Enhanced Edition adıyla ilk oyuna yeni özellikler, karakterler, maceralar eklenmiş halini çıkardılar, ayrıca oyun çeşitli mobile platformlarda da release olmak üzere. Eğer bu güne kadar oynamamışsanız şimdi tam sırası. Smile Fazlası...



Yazılım Dillerinde Çoklu Kalıtım ve Tekli Kalıtım

clock Kasım 7, 2012 14:08 by author Deniz |

Merhaba,

.Net dünyasına ilk adım attığım günlerde bize hep C# dilinin C++'ın aksine Çoklu Kalıtımı (Multiple Inheritance) desteklemeyen bir dil olduğundan bahsederlerdi. Ozamanlardan şartlanmış olacam ki konu hakkında hiç birşey bilmememe rağmen, bu güne kadar Çoklu Kalıtım bana hep kötü ve zararlı birşeymiş gibi geliyordu. Kafamda böyle temelsiz bir düşünce oluşmasında, bugüne kadar C# haricinde başka dille ciddi bir uygulama geliştirmemem ve Tekli Kalıtımın'da gayet işimi görmesi gibi faktörler etkili olmuş olabilir.

Bir şekilde konuya merak sardım ve araştırmaya başladım. Aslında Çoklu Kalıtımın bazı avantajları olabildiğini öğrendim ama bu avantajlarının yanında sakıncaları var tabi, programcının daha dikkatli olması gerekiyor, litaratüre Diamond Problem olarak geçmiş duruma düşülebiliyor.

Yazılım dillerinin tarihine ve kavramların nasıl evrildiğine dair merakım var ve bu konular üzerine araştırma yapmak hoşuma gidiyor. Bu yazıda aslında kendi öğrendiklerimi paylaşmak istedim. Başlayalım ozaman :) Fazlası...



REST ve RESTful Web Servis Kavramı

clock Mayıs 28, 2012 13:43 by author Deniz |

Merhaba,

Bir süredir, RESTful Web Service olayına merak sarmış durumdayım. Modern Web mimarilerinde RESTful servisler çok yaygın bir şekilde kullanılıyor. Oldukça hafif, genişletilebilir, basit servisler. Artık SOA kullanılan projelerde de sıklıkla görülüyor. REST aslında uzun zamandır hayatımızda. Microsoft .Net Framework'e geliştirmeler yaparak istikrarlı bir şekilde REST'e yatarım yapıyor. Hatırlarsanız önce WCF'e REST mimarisi kullanan servisler geliştirmemize olanak sağlayan bir yapı geldi. Hatta en son WCF Web API isim değiştirerek ASP.NET Web API oldu, şuan beta sürecinde. Eski tarz servis uygulamaları giderek yerlerini REST tabanlı uygulamalara bırakıyorlar, bunun en büyük sebeplerinden biride gönümüz uygulamalarının artık çoğunlukla Browser tabanlı olması ve çoğu işin artık Client-Side'da yapılması, REST'in HTTP'i protokolü üzerine kurulmuş olması bu açıdan çok büyük nimet, hayatımızı oldukça kolaylaştırıyor. 

Aslında ASP.NET Web API üzerine birşeyler yazmak istiyordum ama araştırma yaparken yine konunun derinliklerinde kayboldum ve kendimi REST konusunu araştırırken buldum Smile Daha öncede bahsettiğim gibi blog yazmanın en güzel yanlarından biriside kendinizi geliştiriyor olmanız. Bende birçok farklı kaynaktan edindiğim bilgileri toparlayarak, REST hakkında fikir sahibi olmanız açısından böyle bir yazı hazırlamaya karar verdim. REST kavramını anlamanız açısından yararlı olacağını düşünüyorum.

REST (REpresentational State Transfer)
 

REST client-server iletişimiyle ilgili bir mimari. HTTP protokol'ü ile paralel olarak gelişmiş olmasının yani sıra bugün en çok hepimizin aşina olduğu World Wide Web sisteminde kullanılıyor. REST mimarisini kullanan servislere genel olarak RESTful servis deniyor. Ana fikir aslında client-server arasında ki veri alışverişini SOAP, RPC gibi kompleks mimarilerle sağlamak yerine, HTTP protokolü üzerinden sağlamak. Çünkü zaten World Wide Web dediğimiz yapı HTTP protokolü üzerine kurulu. RESTful servisler SOAP, RPC'nin aksine basit ve hafiftirler.

Basit olmalarının yanında oldukça da esnek ve yeteneklidirler. Aslında tipik Web Servislerle yapabileceğiniz herşeyi RESTful servislerle yapabilirsiniz. Ayrıca mimari olarak nasıl olması, ne gibi özelliklere sahip olması hakkında belli yönergeler olsa da, burada SOAP gibi keskin standartları olan bir mimariden bahsetmiyoruz. Üzerine çoğu platformda (C#,JAVA vs.), bir sürü Framework yazılılmış durumda, fakat birçok platformun standart library'leri kullanılarak kendimiz de hızlıca REstful Servisler geliştirebiliriz. REST Mimarisi ve LEGO arasında bir takım benzerlikler var aslında, birazdan açıklayacağım Smile Fazlası...



Uygulamanın Bağımlı Olduğu DLL'leri Tek Bir Exe'de Birleştirme

clock Mayıs 22, 2012 12:17 by author Deniz |

Merhaba,

Hepimiz yazdığımız library'lerde Packaging prensiplerine uyarak, mantıksal olarak farklı işler yapan kod parçalarını ayrı dll'lere (assembly) ayırırız, bu bize reusability açısından büyük avantaj sağlar. Fakat WPF ve ya Winforms uygulamalarında bazen kullandığımız external librarylerin sayısı çok fazla sayıda olabiliyor, sonuç itibariyle hayatımızı kolaylaştıracak, bize vakit kazandıracak yüzlerce library var. Ama çok fazla dll bazen uygulamamızın deployment, güncelleme gibi işlerini oldukça karmaşık hale getirebiliyor. O yüzden uygulamalarımızı tek bir exe haline getirmek isteyebiliriz, böylece uygulamamızı dağıtırken tek bir exe ile uğraşırız.

Bunun için zaten yıllardır ortada olan bir çözüm var. ILMerge'ü çoğunuz biliyordur zaten, çok fazla detaya girmeye gerek yok. ILMerge özetle, sizin seçtiğiniz mevcut assembly'leri birleştirerek, yeni bir assembly oluşturuyor. Bunun bazı dezavantajları var elbette ;

  • Yeni bir assembly oluşturduğundan dolayı orjinal assembly'lerdeki version, culture, public key gibi identityler kayboluyor.
  • WPF uygulamaların da problemlere sebep olabiliyor, çünkü WPF assemby'lerinin identitylerini binary olarak encode ediyor ve ILMerge bunları değiştiremiyebiliyor.
Alternatif yol ise, referans edilecek dll'leri AppDomain'e kendimiz eklemek. Fazlası...


MVP-VM Pattern'i

clock Şubat 23, 2012 12:26 by author Deniz |

Merhaba,

Bir önceki yazımda MVP, MVC ve MVVM ( Presentation Model ) konusuna değinmiştim. Aslında en baştaki amacım ilk gördüğümde benim çok hoşuma giden MVP-VM pattern'i hakkında bir yazı yazmaktı fakat sonrasında Presentation Patternlerin gelişimini ve diğer popüler Presentation Patternleri anlatmanın daha doğru olacağını düşündüm. Hem benim içinde yararlı bir süreç oldu, sanırım makele yazmanın en güzel yanı da yazarken aynı zamanda birçok şeyide öğrenebilmek.

Başlamadan önce bir önceki yazımı okumanızı tavsiye ederim.

Şimdi geçen yazımda Presentation Patternlerin başlıca amaçlarının Separation of Concerns prensibini uygulamak, reusability'i arttırmak ve Test Driven Development'ı desteklemek olduğundan bahsetmiştim. Ayrıca yeni gelen isteklere hızlı cevap veren mimariler oluşturmakta bunların arasında.

MVP-VM yani Model View Presenter - View Model aslında MVVM'den daha iyi ama MVVM'in popülerliğinin gölgesinde kalmış bir pattern. Amaç hem binding mekanizmasını efektif kullanmak hem de mümkün olduğu kadar Test edilebilir bir yapı kurmak. Daha önceki yazımda Presentation Model'den ve MVVM'in ondan evrildiğinden bahsetmiştim. PM kısaca hem domain model ile senkronizasyonu sağlıyor hem de UI ile ilgili stateleri tutup güncelliyordu, bence MVP-VM pattern'inin amacı PM'in üzerindeki bu yükü Presenter ve View Model'in üzerine dağıtmak ayrıca reusability'i daha da arttırıp, daha kolay ve efektif test edilebilir kodlar yazılmasını sağlamak. Zaten MVVM dikkatli incelinirse View Model'in aslında Single Responsibility prensibini biraz ihlal ettiğini fark edeceksiniz. Daha öncede bahsettiğim gibi PM'de View ile Model arasında ki senkronizasyonun nasıl yapılacağı belirtilmemiş, MVP-VM bu senkronizasyon konusunu netleştiriyor aslında. Şu haliyle baktığımız zaman bu pattern'i WPF ve Silverlight'da kullanabileceğiniz gibi Windows Form uygulamalarında da kullanabilirsiniz.

Ozaman başlayalım Smile Fazlası...



MVC, MVP ve MVVM Patternleri

clock Şubat 15, 2012 20:08 by author Deniz |

Merhaba,

Profesyonel anlamda bu işi yapmaya başladığımdan beri gözlemlediğim şeylerden biri de, bir projeye başlandığında herkesin bir heycanla "Abi ayıralım kodları, 3 katmanlı mimari olsun, Data Access Layer, Business Layer, Presentation Layer koyalım süper olsun" yaklaşımıyla başladığı, bunlardan Data ve Business'ın nispeten iyi kotarıldığı ama iş Prenstation'a geldiğinde kodların çöplüğe döndüğü. Genelde Presentation Layer küçümsenen ve "Yaparız hacı, button click değil mi?" tarzında yaklaşımlara maruz kalan bir katman. Aslında kazın ayağı öyle değil, UI'ında kendi ait bir business'ı, iş akışı var, ekrandaki kontrol sayısı arttıkça ve son kullanıcıdan gelen ipe sapa gelmez isteklerin sayısı arttıkça iş iyice karmaşıklaşıyor.

Her ne kadar Türkiye'de ki Developer Camiasında artık bir bilinçlenme başlamış olup, butonun altına kod yardırma geleneği etkisini kaybetip yavaş yavaş, yerini "OOP varmış, bunun presibleri varmış" yaklaşımına bıraksada UI konusu benim gözlemlediğim kadarıyla göz ardı ediliyor. Buton altı konusu açılmışken Oğuz Yağmur'un yıllarca önce yazdığı konuyla ilgili çok güzel bir makale var, buradan okuyabilirsiniz. 

Yinede ben Türkiye'de ki tablonun Oğuz Yağmur'un o yazıyı yazdığı günlerde ki kadar karanlık olduğunu düşünmüyorum. Böyle düşünmemin sebebi de bugün iş ilanlarına baktığım zaman, OOP bilen, Kurumsal Mimarilerde tecrübleri olan gibi özelliklerin artık daha ön plana çıkması. Hatta artık Back-End Developer ve Front-End Developer kavramları bile insanların kafasında netleşmiş olucak ki artık kimse superman developer aramıyor.

Nesne Yönelimli Programlama (Object-Oriented Programming) prensipleri, inanılanın aksine hayatımızı kolaylaştıran, değişikliklere ve geliştirmelere hızlı ayak uydurmamızı sağlayan prensipler. Bunlardan konumuzla en ilgili olan prenstip Separation of Concerns prensibi. Biraz uzun bir yazı olucak sanırım, yazmak istediğim çok şey var Smile Fazlası...



C# Expression ve MethodInfo, PropertyInfo sınıflarından Delegate yaratmak.

clock Şubat 8, 2012 16:59 by author Deniz |

Merhaba,

C# ile kod yazarken reflection kullanmamız gereken durumlarla çok sık karışılaşırız. Daha doğrusu gereken değil, kullansak hayatımızı kolaylaştıracak, kod tekrarını önleyecek durumlar olabiliyor. Reflection kullanarak bir çok şey yapabiliyoruz aslında, aklıma gelen bazı yararlı işlemler ;

  • Assemblyler içerisindeki tipleri, tipler içerisindeki memberları, memberların tiplerini, generic mi değil mi, public mi private mi vs... bilgileri elde edebiliyoruz, manipüle edebiliyoruz.
  • Attributelere göre memberları arayabiliyoruz
  • Runtime'da tip bilgisini kullanarak nesnelerimizin instance larını oluşturabiliyoruz.
  • MethodInfo ve PropertyInfo lardan yola çıkarak invoke işlemlerini gerçekleştirebiliyoruz.
Aslında ihtimaller sınırsız, elimizde herangi bir nesnenin Metadatası var. 
 
Elbette ki static yazılan koda göre daha yavaş çalışıyor, özellikle MethodInfo veya PropertyInfo (getter, setter) invoke işlemleri, invoke edilen nesne sayısı arttıkça performans olarak oldukça fark edebiliyor.
 
Aslında bu yazımın konusuda bu invoke işlemlerini hızlandırmak ile ilgili. Bildiğimiz üzere C# dilinde Delegeler belli bir signature'a sahip methodları işaret edebilen nesnelere deniyor. Delegeleri kullanarak hayatımızı oldukça kolaylaştırabiliyoruz. MethodInfo ve PropertyInfo larda aslında ihtiyaçımız olan signature bilgisini içeriyorlar, Fazlası...


IIS 7 Web sitelerini ve Application Poollarını durdurmak, başlatmak ve recycle etmek.

clock Ocak 24, 2012 01:23 by author Deniz |

Merhaba,

Web teknolojileriyle haşır neşir olan her developer, mesleki hayatının önemli bir bölümünde IIS ile uğraşır. Her ne kadar IIS 7 ile beraber bir siteyi hemen hemen default ayarlarıyla yayınlamak daha kolaylaşlasa da, IIS oldukça ince detayları olan bir konu. Farklı farklı durumlara göre farklı ayarlar yapılabiliyor.

Geçen yazdığım yazıda Microsoft.Web.Administration namespace'indeki sınıflar ve yapabildikleriyle ilgili birkaç örnek vermiştim. O süreci yaşarken IIS Sitelarını start, stop etmek, Application Poolları start, stop ve recycle etmek aralarında ki farkları öğrenmek durumda kaldım. Bu yazımda öğrendiklerimi paylaşmak istiyorum.

Hepimizin bildiği gibi, IIS bize Sitelarımızı durdurup, başlatmak, yeniden başlatmak gibi yetenekleri sağlıyor. Ama durdurmak veya başlatmak aslında arka planda her zaman beklediğimiz davranışları sergilemeyebiliyor (en azından ben bilmiyordum Smile). 

Hemen farklara geçelim ; Fazlası...



Microsoft.Web.Administration ve IIS 7

clock Ocak 21, 2012 15:01 by author Deniz |

Merhaba,

Kısa bir süre önce çalıştığım yerde, IIS Üzerinde ki Web Sitelerinin programatik olarak restart edilmesi ile ilgili bir ihtiyaç oluştu. Bu ihtiyacın sebebini, benden soğumamanız için anlatmayacağım Smile , gerçekten saçma bir probleme, saçma bir çözüm bulunması gerekti.

.Net Framework 3.0'dan itibaren Microsoft IIS'e API seviyesinde ulaşmamıza imkan tanıyor. Böylelikle IIS ile ilgili hemen hemen herşeyi programatik olarak yapabiliyoruz, Application Poolları yönetme, virtual directory ekleme, siteleri yönetme vs. Bunuda Microsoft.Web.Administration namespace'i altında ki sınıfları kullanarak yapabiliyoruz.

Microsoft.Web.Administration.dll'ni Windows klasörünüz içerisinde \System32\inetsrv pathinde bulabilirsiniz.

 

İsterseniz neler yapabileceğimizi bir göz gezdirelim. Fazlası...



Merhaba

clock Ocak 19, 2012 23:55 by author Deniz |

Bu benim ilk blogum. Nasıl bir giriş yazısı olmalı, neler yazmalıyım bilmiyorum. 2005 yılından beri .Net ile ilgileniyorum, 2007 yılından beride developer olarak çalışıyorum. Bu sektör hakkında öğrendiğim şeylerden biride öğrenilen teorik bilgilerin ,pratiğe uygulandığı çoğu zaman bir takım sorunlarla karşılaşıldığı. Aslında bu blogu açmamda ki amacımda bu zaten, projeler esnasından karşılaştığım problemleri başkalarıylada paylaşmak. Bilgiyi paylaşmaya inanıyorum. Yıllarca birçok developerın yaptığı gibi bir problemim olduğunda Google'da araştırıp, çözümlere ulaştım. Bazen kısa sürede, bazen uzun sürede. Bazende birçok kaynaktan okuduğum bilgileri harmanlayarak sorunumu çözdüm. Ama bugüne kadar konuya sadece yiyici olarak yaklaştım Laughing 

Dediğim gibi bu sektörde edinilen tecrübelerin çok önemli olduğunu düşünüyorum. Birde yeni teknolojiler, yaklaşımlar gördüğüm zaman çok hevesle yaklaşan bir insanım, butür şeyler hakkında da yazmak istiyorum. Bilgiyi paylaşmayı seviyorum.

Vakit buldukça buraya birşeyler yazacağım, umarım okuyan herkezin yararına olucak şeyler çıkar.

Bir sonraki yazımda görüşünceye dek herkese iyilikler dilerim.