Kocaeli Üniversitesi Bilişim Günleri 2012
Merhabalar,
16 Mayıs tarihinde Kocaeli Üniversitesi’nin düzenlemiÅŸ olduÄŸu BiliÅŸim Günlerinin 2. gününde C# 5.0 isimli bir oturumum oluyor olacak. Yakınlarda bulunan herkesi 2 gün sürecek olan etkinliÄŸe beklerim.
Görüşmek Üzere
EBMT Yazılım Etkinliği ve Windows 8 Oturumum
Merhaba ArkadaÅŸlar,
Blogumun 100. postunda sizlere biraz geç de kalsam İzmir’de olanlar için mükemmel bir etkinlik haberini duyurmak istiyorum.
5-6 Mayıs tarihlerinde (yani bu haftasonu :) ) Ege Üniversitesi Bilgisayar MühendisliÄŸi TopluluÄŸunun davetlisi olarak Burak Selim Åženyurt ve Ercan Bozkurt ile beraber İzmir’deyiz. Benim de mezun olduÄŸum Ege Üniversitesi Bilgisayar MühendisliÄŸi Bölümüne 2 sene sonra böyle bir vesileyle tekrar gelmenin benim için de ayrı bir önemi var. Umarım bir diÄŸer süper etkinliÄŸi de kendi okulumda gerçekleÅŸtirmiÅŸ oluruz. Son olarak etkinlikte benim de Windows 8 Development oturumumun ve ikinci gün de workshopımın olduÄŸunu söylemek isterim.
Yarın İzmir’de görüşmek üzere ;)
İlk Windows 8 Metro Style Uygulamamız
Merhaba ArkadaÅŸlar,
Bir önceki yazımızda sizlerle Windows 8 uygulama geliştirme platformunu detaylı olarak incelemiştik. Bu yazımızda ise artık Windows 8 Metro Style Uygulama Geliştirme konusuna giriş yapıyor olacağız. Şimdi ilk olarak uygulama geliştirme ortamına bakalım.
Windows 8 Metro Style Apps Uygulama Geliştirme Ortamı
Şu anda Windows 8 üzerinde çalışacak olan bir Metro Style uygulama geliştirmek isterseniz geliştirme yapacağınız ortam Windows 8 olmalı. Yani Windows 7 üzerinde Windows 8 uygulama geliştirme desteği yok. İlerde olur mu bilemem ;) Uygulama geliştirme platformumuz da tabi Visual Studio 2011 olmalı.
Kısaca özetlemem gerekirse şu anda Windows 8 Metro Style uygulama geliştirmeye başlayacak iseniz bilgisayarınızda (veya sanal makinanızda) Windows 8 Consumer Preview ve Visual Studio 2011 Beta kurulu olmalı. Bunlar haricinde herhangi bir zorunluluğumuz yok.
Şimdi uygulamamızı geliştirme kısmına geçiş yapalım.
İlk XAML & C# Windows 8 Metro Style Uygulamamız
Bir önceki yazımızdan da hatırlayacağımız üzere Windows 8 Metro Style Uygulama geliştirmek isterseniz pek çok alternatifinizi bulunmakta. Biz bu yazımızda C#, XAML ikilisini kullanarak ilk Windows 8 uygulamamızı geliştiriyor olacağız.
Şimdi ilk olarak C# ve XAML kullanacağımız Windows 8 uygulamamızı yaratıyor olacağız. Bunun için izleyeceğimiz yol zaten tanıdık ;) File =>New Project
New Project ekranına geldiÄŸimizde Visual Studio 2011 ile beraber Visual C# kategorisi altında Windows Metro Style isimli yeni bir uygulama geliÅŸtirme seçeneÄŸinin geldiÄŸini görüyor oluyor olacağız. Bu  seçenek altında da daha önceki uygulama geliÅŸtirme modellerinden(MVC, Silverlight vb.) de alışkın olduÄŸumuz gibi developerların iÅŸlerini kolaylaÅŸtırmak adına pek çok template proje bulunmakta. Ancak biz bu yazımızda Blank Application’ı seçerek boÅŸ proje üzerinden ilerliyor olacağız. Şimdi uygulamamıza bir isim verelim ve solution’ı yaratalım.
Projemizi yarattık ve yukarıdaki gibi bir proje yapısı Visual Studio tarafından bizim için üretildi. Peki bu proje yapısı içerisindeki elemanlar ne işe yarıyorlar hemen kısaca inceleyelim.
Assets klasörü : Bu klasör içerisinde uygulamanızda kullanacağınız resourceları tutabilirsiniz. Uygulamanızın logo, splash screen, foto, icon vb.. gibi tüm kaynaklarını bu klasör içerisinde saklayabilirsiniz. Kaynakları bu klasör içerisinde tutma gibi bir zorunluluğunuz yok. Ancak Visual Studio bu gibi klasörleri yaratarak size yardımcı olmakta.
Common Klasörü : Bu klasör içerisinde uygulama geliştirmemiz sırasında bizim işimizi kolaylaştıracak olan bir takım yapılar hazır olarak gelmekte. Şimdi bunları kısaca inceleyelim.
Bindablebase tipi : Uygulamamız içerisinde bulunan tiplerimizin bindable olabilmesi için yani property içerisinde olacak bir deÄŸer deÄŸiÅŸikliÄŸinden ilgili kontrolün de haberinin olması için tipimizin INotifyPropertyChanged interface‘ini implemente etmesi gerekmekte. İşte bunun için BindableBase tipi bize yardımcı olmakta. Bu tip kendi içerisinde ilgili interface’i implemente ederek bize SetProperty isimli bir metot sunmakta.  Biz de tipimizi Bindable tipinden türeterek bu SetProperty metodunu kullanabilmekteyiz ve çok daha hızlı bir ÅŸekilde tiplerimizin bindable olmasını saÄŸlayabilmekteyiz.
BooleanNegationConverter : Bu tip de adından anlayacağımız üzere binding işlemi sırasında kullanabileceğimiz bir converter. Yaptığı ise boolean bir değerin tersini döndürmek. ;)
BooleanToVisibilityConverter : Bu tip de yine aynı şekilde binding işlemi sırasında kullanabileceğimiz bir converter. Görevi ise bool olarak aldığı değerin Visibility Enum değerini döndürmesi. True ise Visibility.Visible, False ise Visibility.Collapsed gibi ;)
LayoutAwarePage : LayoutAwarePage bizim bir Windows 8 uygulaması geliÅŸtirmemiz sırasında sayfalar içerisinde yapmış olduÄŸumuz ortak iÅŸlemlerin bir üst tipe alınmış hali. Biz de sayfalarımızı doÄŸrudan LayoutAwarePage tipinden türeterek içerisindeki özelliklere sahip olabilmekteyiz. Bu özellikler nedir diye baktığımızda navigasyon iÅŸlemleri, cihazın orientation’ı deÄŸiÅŸtiÄŸinde bunun otomatik olarak algılanması ve ilgili aksiyonların alınması gibi özelliklerden bahsedebiliriz.
RichTextColumns : Richtextbox kontrolü içerisinde yazıların kolonlar şeklinde görünebilmesi için kullanılabilecek bir base tip.
StandartStyles.xaml : Bu XAML dosyası ise uygulamamız içerisinde bulunan kontrollerin, sayfaların templatelarını tutmakta. Bunun yanında içerisinde Font ayarları, Metro Style ile ilgili stil tanımlamalarda bulunmakta.
App.xaml & App.cs : App tipi WPF,SL, WP gibi platformlardan da bildiğimiz üzere uygulamamız içerisinde genel olarak gerçekleşen eventleri(uygulama açıldı, kapandı vb..)  yakalayabileceğimiz yerdir. Uygulama genelinde yapacağımız işlemleri burada gerçekleştirebiliriz.
Package.appxManifest : Manifest dosyası bizim Windows 8 uygulamamız ile ilgili tüm metadatayı içerisinde barındıran dosyadır. Bu dosya içerisinde uygulamamızın logosundan tutun da nasıl özellikleri bulunduğuna, Windows 8 içerisinde bulunan özelliklerden hangilerine ihtiyacı olduğuna kadar tüm detaylı bilgiyi içerisinde barındıran dosyadır. Bu dosyayı daha doğrusu manifest kavramını bir sonraki yazımızda detaylı olarak inceliyor olacağız.
Åžimdi uygulamamızı yarattıktan ve içerisindeki bileÅŸenleri de inceledikten sonra sıra geldi “Hello World” kısmını yapmaya. Åžimdi öncelikle XAML tarafına geçelim ve bir TextBlock ve bir Button alıp sahneye ekleyelim.(Daha önceden WPF, WP, SL uygulaması geliÅŸtirmiÅŸ olanlar için kısacası XAML Developerlar için deneyim tamamen aynı ;) )
<button></button>
Şimdi ise butona tıklandığında ilgili TextBlock elementinin içeriğini değişterecek olan kodumuzu yazalım.
private void btnTikla_Click(object sender, RoutedEventArgs e)
{
tbHello.Text = "Hello Windows 8 World !!!";
}
Gördüğünüz gibi bildiÄŸimiz C# ve bildiÄŸimiz XAML :) Daha önceden bildiÄŸimiz ve kullandığımız programlama modeli doÄŸrudan Windows 8 Metro Style uygulaması geliÅŸtirme tarafına da aktarılmış. Tabi ki her yeni teknolojide olduÄŸu gibi API’ları öğrenmemiz gerekmekte :) Burdan kaçışımız yok. Ancak yeni bir programlama dili, yeni bir programlama mantığı vs.. öğrenmeden doÄŸrudan Windows 8 Metro uygulamaları geliÅŸtirmeye baÅŸlayabilmekteyiz.
Åžimdi isterseniz F5′e basarak uygulamamızı çalıştıralım.
Windows 8 Metro Style Uygulama geliştirmeye giriş yaptığımız bu yazımızda aslında temel amacım sizlere uygulama geliştirme deneyiminin çokta alışkın olduğumuzdan farklı olmadığını göstermekti. Tabi eğer daha önce WPF, Silverlight, Windows Phone taraflarına bulaşmadıysanız bu konsept size yabancı gelecektir. :) Bu noktada da eğer HTML & CSS & Javascript Developer değilseniz bu yolun dışında ilerleyeceğiniz maalesef başka bir yol bulunmuyor :)
Development deneyimi hemen hemen aynı demişken tabi ki Windows 8 ile beraber gelen pek çok farklı kavram da bulunmakta. Bu kavramları da bir sonraki yazımızdan itibaren inceliyor olacağız. Maalesef bu noktada kullandıklarımızı daha önce kullanmıştık diyemiyorum ;) Pek çok yeni API ve kavram bizleri bekliyor olacak ;)
Umarım başlangıç yazısı olarak faydalı bir yazı olmuştur.
Bir sonraki makalede görüşmek üzere,
Trakya Üniversitesi Yazılım Şenliği Ardından
Merhaba ArkadaÅŸlar,
Nisan ayında katıldığım bir baÅŸka etkinlik te Trakya Üniversitesi Yazılım ÅženliÄŸi’ydi. Isparta’dan sonra katıldığım 2. üniversite semineri olan bu seminerde açıkcası beklentilerim oldukça yüksekti ;) Neden mi ? detaylar birazdan…
İlk günü benim C# 5.0 sunumumla açtık. Açıkcası günün ilk ve tek Visual Studio açılan oturumuydu. Bu oturumda C# 5.0 ‘dan ve Project Roslyn’den bahsederek oturumu tamamladım. Gün içerisinde ise Burak Selim Åženyurt ve Ercan Bozkurt’ta sunumlarını tamamladılar ve ilk günü bu ÅŸekilde bitirdik demek isterdim ama Trakya Üniversitesin’deki arkadaÅŸlar o kadar güzel bir etkinlik hazırlamışlar ki hemen hemen her detayı düşünmüşler. :)  Önce tabi ki hazır Edirne’ye gitmiÅŸken ciÄŸerimizi yedik ve süper bir Edirne turu yaptık.
İkinci güne ise workshoplarla baÅŸlamak yerine Edirne kent ormanı içerisinde süper bir kahvaltı yaparak güne baÅŸladık :)  ve daha sonra workshopların yapılacağı yere doÄŸru yola çıktık. Workshoplar için ajanda biraz sarkarak ta olsa baÅŸladı ve saat akÅŸam 20:30′a kadar workshoplara devam ettik.
İkinci gün sonunda saat 20:30′da Edirne’den yola çıkarken yüzümüzde gülümseme aklımızda da güzel anılar vardı. Etkinlik içerisinde büyük bir arkadaÅŸ grubunun payı vardı. Tabi ki Trakya Üniversitesi Bilgisayar MühendisliÄŸi Bölüm BaÅŸkanı Doç. Dr. Yılmaz Kılıçarslan’a teÅŸekkür etmeden olmaz bizleri süper ağırladılar.
Bunun yanında baÅŸta MSP Fevzi Yılmaz’a sonrasında Sezer’e,Cem’e,Melis’e,Elif’e,Merve’ye, Hüseyin’e, Orkun’a ve adını ÅŸu an hatırlayamadığım tüm arkadaÅŸlara bizi ağırladıkları için teÅŸekkür ederim. Süperdiniz !
Nedirtv 6. Yıldönümü Etkinliği
Merhaba ArkadaÅŸlar,
6. yılını kutlayan nedirtv’nin bu sene düzenlemiÅŸ olduÄŸu etkinlikte daha önce de haberini verdiÄŸim gibi benim de bir oturumum vardı. Bu oturum içerisinde Windows 8 ile beraber gelecek olan WinRT(Windows Runtime) API’si ile ilgili bir sunumda bulundum ve kısa örnekler yaptık.
Etkinlik geneline baktığımızda SOA, Scrum gibi aslında oldukça güzel ve derin konulara inilen oturumlar da vardı. Umarım katılımcılar için faydalı bir etkinlik olmuştur.
İstanbul’da baÅŸka etkinliklerde görüşmek üzere ;)
Windows 8 Development’a GiriÅŸ ve Windows Runtime(WinRT)
Merhaba ArkadaÅŸlar,
Windows 8′ in Build konferansıyla beraber duyurulmasından sonra ortaya çıkan en önemli kafa karışıklıklarından biri de WinRT(Windows Runtime) ‘nin ne olduÄŸu konusu. Biz managed developerlar ÅŸu ana kadar uygulama geliÅŸtirirken .NET Framework‘ü kullanmaktaydık. Ancak Windows 8 ile beraber bir de WinRT(Windows Runtime) isimli bir API ile karşılaÅŸmaktayız. Peki bu API ne iÅŸe yarıyor nerelerde kullanılıyor gibi konuları Windows 8 developmenta giriÅŸ yaptığımız bu ilk yazımızda inceliyor olacağız. Åžimdi en baÅŸtan baÅŸlayalım ;)
Windows 8 Uygulama Geliştirme Platformları
Windows 8 development ile ilgili sanırım söylemem gereken ilk ÅŸey .NET Framework’ün hiç bir yere gitmediÄŸi. :)  .NET Framework yine managed development platformu olarak  daha önceki Windows sürümlerinde olduÄŸu gibi Windows 8 sürümünde de yer almaya devam ediyor olacak. Peki Windows Runtime hangi noktada devreye giriyor olacak ? Öncelikle aÅŸağıdaki resmi incelemekte fayda var ;)
Yukarıdaki tabloyu incelediÄŸimizde aslında 2 farklı uygulama tipi görmekteyiz. Bunlardan biri Metro Style Apps diÄŸeri de Desktop Apps. Desktop Apps tarafı bizim ÅŸu ana kadar geliÅŸtirmiÅŸ olduÄŸumuz yani .NET Framework kullanarak geliÅŸtirdiÄŸimiz klasik masaüstü uygulamaları. Metro Style Apps kısmı ise Windows 8′in daha çok tablet ve dokunmatik cihazlar üzerinde çalışırken kolaylık saÄŸlayacak olan arayüzünde çalışacak olan uygulamalar.
Windows 8′i indirip çalıştırdığımızda aslında karşımıza 2 farklı masaüstü çıkmakta. Bunlardan biri daha önceki Windows sürümlerinden de alışık olduÄŸumuz bir masaüstü. DiÄŸeri ise dokunmatik cihazlarda Windows’un kullanımını kolaylaÅŸtıracak ve kullanıcı deneyimini arttıracak olan Metro Style kullanılarak tasarlanmış start menüsü.
Kullanıcı arayüzüne baktığımızda aslında Windows Phone kullananlar için çok farklı bir arayüz olmadığı görüyor olacağız ;)  Konumuza dönersek iÅŸte bu Metro arayüzü tarafında çalışacak bir uygulama yazmak istiyorsak Windows Runtime API’larını kullanmamız gerekmekte. Ancak saÄŸ tarafta da gördüğünüz gibi .NET Framework yine developerları bekliyor olacak ;)
Windows Runtime – GeliÅŸtirme Ortamları
Windows 8 development resmini incelediÄŸimizde aslında WinRT API’larının üzerine oturan pek çok programlama seçeneÄŸini olduÄŸunu görüyoruz. İlk olarak bilinenlerden baÅŸlayalım :)
WinRT API’ları C# ve VB programlama dilleri ile kullanılabilmekte. Bunun yanında C ve C++ ‘ta yine alternatifler arasında. Kullanıcı arayüzü tasarlama tarafına baktığımızda C#,VB,C ve C++ dillerinin üzerine XAML‘ın oturduÄŸunu görüyoruz. Daha önce WPF, Silverlight ve  Windows Phone içerisinde bulunan XAML burada da yerini almış durumda. XAML’ın  aslında Microsoft tarafında artık bir standart olduÄŸunu söyleyebiliriz. ;)
Åžimdi gelelim esas süprize…
Windows 8 – HTML & Javascript Development  İmkanı
Resimde C, C++, C# ve VB’nin biraz yan tarafına kaydığımızda çok farlı bir platform ile karşılaşıyoruz. Bu da HTML ve Javascript kullanarak Metro Style Uygulamalar geliÅŸtirme olanağı. Evet yanlış duymadınız Windows 8 ile beraber artık bunu yapmanız mümkün. Arayüzü HTML ve CSS ile yaratırken arka planda da Javascript kullanabilirsiniz. Burda tabi amaçlanan HTML ve Javascript developerların da Windows 8 üzerinde development yapabilmesi. Zaten kullandıkları CSS ve Javascript kütüphaneleri de Windows 8′e özel. ;)  Ancak o alanda uygulama geliÅŸtirmeye alışkın olan developerlar için büyük bir fırsat bulunmakta. Tamamen alışkın oldukları ortamda sadece yeni kütüphaneleri öğrenerek Windows 8 üzerinde uygulama geliÅŸtirmeye baÅŸlayabilecekler. ;)
Peki bu kadar programlama dili nasıl desteklenebiliyor o da ilerleyen yazılarımızın konusu içerisinde olacak ;)
Åžimdi gelelim Windows Runtime’a :)
Windows Runtime Development
Windows 8 tarafına geçmeden aslında aslında biraz günümüzde karşılaÅŸtığımız senaryoları bir inceleyelim. Daha önce hiç Webcam’e baÄŸlanmaya çalıştınız mı bilmiyorum ama ÅŸu anda Windows 7 üzerinde WebCam’e baÄŸlanmak istersek ÅŸu ÅŸekilde bir kod parçası yazmamız gerekiyor.
C# ve VB kullanarak yazmamız gereken kod parçasının bir örneÄŸini yukarıda sizlerle paylaÅŸtım. Kodu incelersek COM Interop, P\Invoke gibi kavramların yer aldığını görüyoruz. Bunun yanında yazdığımız kodun object – oriented yapıda olmasının da imkanı yok. Peki neden böyle birÅŸey yapmak zorunda kalıyoruz ?
Windows’un Windows 8 sürümüne kadar içerisinde bulunan API’ları developerlara 2 farklı yolla açmaktaydı. Bunlardan biri COM tabanlı API’lar diÄŸeri ise C tabanlı API’lar ve bu API’ların hiç biri CLR tarafından doÄŸrudan kullanılabilecek yapıda deÄŸildi. Bu nedenle aÅŸağıda görmüş olduÄŸumuz durum oluÅŸmaktaydı.
Windows API’ları ile bizim yazmış olduÄŸumuz managed kod arasında bir boÅŸluk bulunmakta ve bu boÅŸlukta kimi zaman yukarı görmüş olduÄŸumuz gibi manuel olarak yazmış olduÄŸumuz kod ile kapatılmaktaydı. Kimi zaman yazılmış opensource wrapperlar olsa da esas senaryo genelde bu ÅŸekilde iÅŸlemekte.
Peki Windows 8 üzerinde WebCam’e eriÅŸip fotoÄŸraf çekecek bir kod yazmamız gerektiÄŸinde yazmamız gereken kod nasıl olacak dersiniz :)
Yazılan kodda muazzam bir değişiklik var :) Bir kere artık kod tamamen object oriented. Bunun yanında daha önce bizim yazmış olduğumuz kodlardan hiç bir farkı yok. İşte Windows Runtime farkını tam da burada gösteriyor.
Windows Runtime aslında Managed Kod ile Windows 8 API‘ları arasındaki boÅŸluÄŸu kendisi dolduruyor ve bizlere daha önceden de alışkın olduÄŸumuz uygulama geliÅŸtirme deneyimini yaÅŸatıyor.;)
Evet Windows 8 Development‘a giriÅŸ yaptığımız bu yazıda kısaca Windows 8 development ortamlarından ve alternatiflerden bahsettik ve ardından da Windows Runtime’a kısaca giriÅŸ yaptık ;)
Bir sonraki yazımızda görüşmek üzere,
Trakya Üniversitesi Yazılım Şenliği 2012 ve C# 5.0 Oturumum
Merhaba ArkadaÅŸlar,
20-21 Nisan tarihleri arasında Trakya Üniversitesi’nin düzenlediÄŸi Yazılım ÅženliÄŸinde olacağım. İlk günün açılışında C# 5.0 oturumunu yapıyor olacağım. İkinci gününde ise WinRT ve C# 5.0 konularına uygulamalı olarak workshop ortamında bakıyor olacağız. Yakınlarda bulunan herkesi etkinliÄŸe beklerim.
Bu arada İstanbul’da olanlar için bu hafta Microsoft Türkiye ofisinde Nedirtv seminerleri kapsamında “Bir C# Developerın Perspektifinden WinRT” isimli bir oturumum oluyor olacak.
Görüşmek Üzere,
Compile Time Constants(const) vs Runtime Constants(readonly)
Merhaba ArkadaÅŸlar,
Kimi zaman uygulamalarımız içerisinde gerçekleştirmiş olduğumuz uygulamanın domainine bağlı olarak ta bir takım sabit değerler kullanabilmekteyiz. (Her ne kadar bu şekilde değerlerin de ileride uygulamanın değişme ve gelişme olasılığını düşünerek parametrik olarak bir yerlerden değiştirilebilmesini yapmamız gerekse de şimdilik bu noktayı pas geçelim ;) )
C# tarafından baktığımızda da uygulama içerisinde sabit değer tanımlamak için kullanabileceğimiz 2 yöntem bulunmakta.
Bunlar,
- Compile – Time Constants (const)
- Runtime Constants (readonly)
Şimdi sırayla bu yöntemleri inceleyelim.
Compile – Time Constants (const)
Compile – time constants dediÄŸimizde aslında deÄŸeri derleme zamanında belli olan sabitlerden bahsetmekteyiz. C# içerisinde const keywordünü kullanarak uygulamamız içerisinde derleme zamanı sabitlerden tanımlayabilmekteyiz. Derleme zamanı sabitlerinin deÄŸerlerini de tanımlama yaptığımız anda vermek zorundayız !
public const double Pi=3.14;
Åžimdi isterseniz bu deÄŸeri Console’a yazdıran ufak bir uygulama yazalım ve sonrasında Reflector ile arka planda açalım.
private static void Main(string[] args)
{
Console.WriteLine((double)3.14);
}
Uppss ! Tanımlamamız nereye gitti :) Aslında baştan beri bahsetmiş olduğumuz compile time constant kavramının özeti bu. Bu sabitin değeri derleme sırasında belli olduğu için compiler bu sabitin kullanıldığı yerlerde değeri otomatik olarak kendisi yazmakta. Böylece bellekte de herhangi bir bölgeye erişme ve değeri oradan okuma gibi bir uygulama bulunmamakta.
Özetlememiz gerekirse compiler, const ile tanımladığımız compile – time constanların deÄŸerlerini derleme sırasında kullanıldığı yerlere doÄŸrudan eklemekte. Bunun ne gibi avantajları ve dezavantajları var birazdan inceleyeceÄŸiz.
Åžimdi bir de runtime – constanlara bakalım…
Runtime – Time Constants (readonly)
Yukarıda yapmış olduğumuz sabit değişken tanımlama işinin aynısını bu sefer de runtime constant kullanarak yapalım. Runtime constantları da C# içerisinde readonly keywordünü kullanarak tanımlayabiliriz.
public static readonly double Pi = 3.14;
Reflector ile uygulamamızı açtığımızda bu sefer aşağıdaki gibi bir durumla karşılaşmaktayız.
private static void Main(string[] args)
{
Console.WriteLine(Pi);
}
Bu durumda ise aslında uygulamamız beklediÄŸimiz ÅŸekilde merkezi bir deÄŸiÅŸkene eriÅŸip bu deÄŸiÅŸkenin deÄŸerini runtime’da alarak kullanıyor olacak. Bu nedenle bu deÄŸiÅŸkeni runtime içerisinde belirleyebilme imkanına sahibiz. Tabi bu belirleme iÅŸini en fazla constructora kadar erteleyebiliyoruz. :)
Compile Time Constants vs Runtime Constants
Şimdi gelelim bu sabit tanımlama yöntemlerinin karşılaştırmasına.
Compile time constantlara baktığımızda aslında compile zamanında belli olmaları nedeniyle kullanıldıkları yerlerde doğrudan kullanılmaktalar. Bu nedenle de performans açısından daha önde olduklarını söylememiz herhalde yanlış olmaz. Sonuçta bellek erişimi yapmıyoruz. Bunun yanında düşünmemiz gereken kritik bir senaryo bulunmakta.
Elimizde bir class library bulunduÄŸunu düşünelim ve bu class library içerisinde de compile time constant tanımlandığını varsayalım. Sonrasında ise console uygulamamıza da bu class library’i referans olarak ekleyelim ve uygulama içerisinde de bu class library içerisinde ki sabitin içeriÄŸini ekrana yazdırdığımızı düşünelim. Uygulamayı ilk geliÅŸtirdiÄŸimiz sırada bu ÅŸekilde tanımlamamızı yaptığımızı, uygulamayı da derleyip deploymentını yaptığımızı varsayalım :)
Ancak zaman ilerledikçe bu sabit deÄŸerimiz deÄŸiÅŸti ve biz de class library içerisindeki deÄŸeri güncelleyip, bu class library ‘i uygulamamızın çalıştığı dizine kopyaladık.(Sonuçta deÄŸiÅŸikliÄŸi sadece bu library içerisinde yaptık). Uygulamamız çalışmaya devam etti ancak baktığımızda ekranda deÄŸiÅŸkenin hala daha eski deÄŸerinin yazıldığını görüyor oluruz. Bunun nedeni de tabi compile time constant olduÄŸu için kullanıldığı yere derleme sırasındaki deÄŸerin yazılmasıdır. Yeniden bir derleme yapılmadığı sürece de bu deÄŸerin deÄŸiÅŸmesinin imkanı yok.
Bu nedenle compile time constantları kullanırken dikkat etmemiz gereken nokta ise ÅŸu olmalıdır : Uygulamamızın versiyonları arasında deÄŸiÅŸmeyecek olan sabitleri compile – time constant kullanarak tanımlamamız gerekir.ÖrneÄŸin Pi sayısı gibi.
Yazımızı bitirirken son bir özet yapmamız gerekirse compile time constantlar runtime constantlara nazaran daha hızlıdırlar. Ancak güncellenmeleri sırasında yukarıda bahsetmiş olduğumuz gibi durumlarla karşılaşma ihtimali oldukça yüksektir. Bu nedenle değeri hiçbir zaman değişmeyecek sabitlerin tanımında kullanılmalıdırlar ya da uygulamamız performans kritik bir uygulama ise ancak bu şekilde bir kullanım kabul edilebilir olabilir.
Runtime constantlar nispeten daha yavaş olsalar da bahsetmiş olduğumuz kullanım şekillerini düşündüğümüzde güncellemeler sırasında yukarıda bahsetmiş olduğumuz durumlarla karşılaşmıyoruz.
Çok performans kritik uygulamaları dışarıda bırakırsak sabit tanımlamaları sırasında runtime constantların kullanılmasını tavsiye etmekteyim. Sonuçta yavaş ama doğru çalışan bir uygulama , hızlı ama kararsız ve yanlış çalışan uygulamadan çok çok daha iyidir. ;)
Görüşmek Üzere,
Add Service Reference Ekranında Alınan Proxy Authentication Required Hatasının Çözümü
Merhaba ArkadaÅŸlar,
Kimi zamanlar ÅŸirket içerisinde geliÅŸtirdiÄŸimiz uygulamalarda 3rd party web servislerini kullanmak zorunda kalabiliyoruz. Bu servisleri Visual Studio içerisinde Add Service Reference ekranını kullanarak eklemeye çalıştığımızda ise “Proxy Authentication Required” hatası ile karşı karşıya kalabilmekteyiz. Bunun nedeni ise Visual Studio içerisinde bulunan Add Service Reference ekranının default olarak bizim ayarlamış olduÄŸumuz proxy ayarlarını kullanmaması.
Bu sorunun çözümü için ise yapmamız gereken tek şey aşağıdaki konfigürasyonu servis referansını eklemeden önce config dosyasına eklemek.
<system.net>
<defaultProxy useDefaultCredentials=”true” />
</system.net>
Kolay Gelsin,
Nedirtv Seminerleri – 6.Yıldönümü EtkinliÄŸi
Evet iÅŸte İstanbul’da bulunan yazılımcılara süprizimiz :)
Çektiğim görsel derslerle ve yer aldığım webinerlerle katıkıda bulunmaya çalıştığım Nedirtv kuruluşunun 6. yılını kutluyor. Her sene olduğu gibi bu sene de Microsoft Türkiye Ofisinde düzenlediği etkinlikle Nedirtv yıldönümünü kutluyor olacak.
EtkinliÄŸi benim için özel kılan neden ise etkinlikte benim de “Bir C# Developerın Perspektifinden WinRT” isimli bir oturumum olması :)
Etkinliğe katılmak için buradan kayıt olmanız gerekmekte.
14 Nisan’da görüşmek üzere



















