Ana Sayfa | English Blog | Seminer TV | Dil Cookie Sil  Blog'u Mail ile takip et!       
Daron Yöndem - October, 2009
bir yazılımcının tasarıları...
 Saturday, October 31, 2009

Organik Yazılım günümüzü sonunda hakkını vererek bugün gerçekleştirdik :) Herhangi bir elektrik vs kesintisi olmadan yağmura karşın güzel bir katılım ile zevkli bir gün geçirdiğimizi tahmin ediyorum. Bugüne kadarki tüm INETA etkinliklerine kıyasla biraz farklı bir etkinlikti. Her oturum yaklaşık yarım saat sürdüğü için bir günde çok sayıda farklı konuya göz atma şansımız oldu. Bu bağlamda sizlerin bu yeni etkinlik tipi/şekli ile ilgili yorumları da benim için çok önemli.

Ne yapıyor bu insanlar?
Ne yapıyor bu insanlar?

Organik Yazılım günlerimiz biliyorsunuz her seferinde ilginç besin öğeleri ile de dikkati çekiyor :) Geçen sefer Burak Selim'in getirdiği Fuji Elma'ları hayatımızı değiştirmişken bu sefer de bir yazılım seminerinde Türkiye'deki İLK LOKUM dağıtımını gerçekleştirdik :D Yukarıdaki fotoğraftan da görebileceğiniz üzere saldırganları garip bir gülümseme ile izlemekteyim :)

Şaka bir yana, tam gün süren yağmura rağmen hiç ayrılmadan bizlerle beraber olan herkese çok teşekkürler. Tekrar görüşmek üzere...

Saturday, October 31, 2009 1:14:01 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   Seminer  | 
 Friday, October 30, 2009

Windows 7 ile beraber gelen taskbar özelliklerinden biri olan JumpList'ler günlük hayatta son kullanıcının işini ciddi şekilde kolaylaştırıyor. Bu görsel dersimizde kendi uygulamalarımıza JumpList implemente etmenin yolunu inceliyoruz.

Yukarıdaki videoyu bilgisayarına indirmek isteyenler blogumun SeminerTV bölümünden faydalanabilirler.

İyi seyirler...

Friday, October 30, 2009 6:32:25 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Windows 7  | 
 Thursday, October 29, 2009

Windows 7 ile beraber gelen taskbar özelliklerinden biri olan Taskbar'da Progress gösterimi çok akıllıca düşünülmüş pratik çözümlerden biri. Siz de uygulamalarınızda bu özellikten faydalanmak istiyorsanız görsel dersimizde konunun detaylarına göz atıyoruz.

Yukarıdaki videoyu bilgisayarına indirmek isteyenler blogumun SeminerTV bölümünden faydalanabilirler.

İyi seyirler...

Thursday, October 29, 2009 6:34:18 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Windows 7  | 
 Wednesday, October 28, 2009

Windows 7 ile beraber gelen taskbar özelliklerinden biri olan Taskbar Toolbar'lar ilginç bir kullanıcı deneyimi sağlıyor. Uygulama arayüzüne geçmeden daha preview ekranında komut gönderebilmenizi sağlayan bu işlevselliği incelediğimiz görsel dersi aşağıda izleyebilirsiniz.

Yukarıdaki videoyu bilgisayarına indirmek isteyenler blogumun SeminerTV bölümünden faydalanabilirler.

İyi seyirler...

Wednesday, October 28, 2009 6:38:32 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Windows 7  | 
 Tuesday, October 27, 2009

Bugün ÇOK yoğun bir gündü :) hem benim için hem de İzmir için :) Sabah 9'da Ege Üniversitesi Bilgisayar Mühendisliğin'de Silverlight Workshop ile maratona başladık. Hemen genel Silverlight konseptine baktıktan sonra veri erişiminden tutun animasyonlara kadar geniş bir alanda gezdik diyebilirim. Workshop'a öğlen arası verdiğimizde ise ben Windows 7 Akademik Lansman'da konuşmak üzere başka bir binaya doğru koşmak durumunda kaldım :) Tamam itiraf ediyorum, arabayla gittik.

Silverlight Workshop, Ege Üniversitesi
Silverlight Workshop, Ege Üniversitesi

Windows 7 Akademik Lansmanların üçüncü ayağı olan İzmir ayağını yine Ege Üniversitesi'nde gerçekleştirdik. Lansman 500 kişiye yakın katılım ile bence muhteşemdi. Özellikle çekilişte hediye bir arkadaşına çıkmasına rağmen arkadaşından çok sevinen :) kardeşimiz beni gerçekten çok güldür. Bir an kazanan kendisi sandım.

Windows 7 Akademik Lansman, İzmir, Ege Üniversitesi
Windows 7 Akademik Lansman, İzmir, Ege Üniversitesi

Buradan özellikle Ege'deki tüm MSP'lerimize çok çok teşekkür ediyorum. Farklı üniversitelerden katılım ile lansmanın başarılı olmasında büyük faydaları var. Hepinize çok teşekkürler!

Tam akşam oluyor, hem Workshop hem Lansman bitti derken :) son bir mini seminer daha yapmak üzere İzmir Ekonomi Üniversitesi'ni ziyaret ettim. Bana bir ders saatini ayırıp beni misafir eden sevgili Çoşkun Atay hocama buradan çok teşekkür ediyorum. Hızlı bir akşam oturumu ile öğrencilerle Windows 7, Multitouch, WPF, Silverlight gibi konularda sohbet etme şansım oldu. Umarım ileride daha teknik ağırlıklı etkinlikler de yapma şansımız olacak.

Gün yoğun olduğu kadar da eğlenceliydi benim için. Gün boyunca bana gülümseyen ;) selamını esirgemeyen herkese ÇOK teşekkürler. Tekrar görüşmek üzere İzmir ;)

Tuesday, October 27, 2009 9:51:44 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 3.0 | Windows 7  | 
 Monday, October 26, 2009

Windows 7 ile beraber gelen taskbar özelliklerinden biri olan Taskbar Thumbnail yapıları özellikle navigasyon adına çok önemli bir yapı taşı niteliği taşıyorlar. Bu görsel dersimizde kendi uygulamalarınızda farklı Taskbar Thumbnail'leri nasıl yaratacağımıza ve kontrolüne değiniyoruz.

Yukarıdaki videoyu bilgisayarına indirmek isteyenler blogumun SeminerTV bölümünden faydalanabilirler.

İyi seyirler...

Monday, October 26, 2009 6:40:42 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Windows 7  | 

Bugün Windows 7 Akademik Lansmanları'nın Ankara ayağını gerçekleştirdik. İstanbulda olduğu gibi Ankara'da da salon doldu taştı :) Ama ayrı bir heyecan vardı sanki bugün Bilkent Üniversitesi'nde. Özellikle netbook çekilişini hiç unutamayacağım. 150 kişilik salonu 300 kişi sığmak büyük bir başarı değil midir?

Salona sığmayanlar bina dışından etkinliği izliyor :)
Salona sığmayanlar bina dışından etkinliği izliyor :)

Yukarıdaki fotoğraf sanırım manzarayı ve heyecanı doğru olarak yansıtıyor. Windows 7'nin birçok son kullanıcı bazlı yeni özelliğine göz attığımız oturum benim için de bir o kadar keyifliydi. Özellikle BTS'e ve tüm Bilkent MSP'lerinin yanı sıra Ankara MSP'lerine etkinliğe katkılarından dolayı çok teşekkür ediyorum.

Windows 7 Akademik Lansman, Ankara, Bilkent Üniversitesi
Windows 7 Akademik Lansman, Ankara, Bilkent Üniversitesi

Monday, October 26, 2009 2:04:34 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Windows 7  | 
 Sunday, October 25, 2009

Knowledge Base Articles olarak geçen Microsoft Support / Destek sitesindeki makaleler ile bugüne kadar kesin karşılaşmışsınızdır. İster genel Windows arayüzünde olsun ister kullandığınız farklı Microsoft uygulamalarında çoğu zaman ekrandaki "Yardım" yordamlarını izlediğinizde bir KB Article ile karşılaşırsınız. İşte Türkiye'den de MVP'ler olarak artık bu sisteme katkıda bulunacağız. İlk iki makale benden geldi :) Internet Explorer 8 Web Slice ve Accelerator yapılarına dair genel kullanım bilgisi içeren KB Article'lara aşağıdaki adreslerden ulaşabilirsiniz.

http://support.microsoft.com/kb/976980/tr
http://support.microsoft.com/kb/976896/tr

Bu gelişme özellikle son kullanıcı deneyimi adına çok değerli. Yakın zamanda birçok MVP'den makaleler ile Destek altyapısı çok daha zengin bir hal alacak. Hatta sistemin navigasyonu ile ilgili de çalışmalarımız var :) Özellikle Türkiye Destek sayfalarında çok ilginç şeyler görebilirsiniz yakında.

KB Article olarak destek sisteminde görmek istediğiniz konuları veya olması gerektiğini düşündüklerinizi benimle paylaşmaktan çekinmeyin ;) Yorumlarınızın doğru yerlere ulaşmasını sağlayabilirim.

Sunday, October 25, 2009 11:45:28 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   IE 8.0  | 
 Saturday, October 24, 2009

Windows 7 ile beraber gelen ilginç özelliklerden biri de "Sensor and Location API". Bu özellik ile beraber yazılım geliştiriciler donanımdan bağımsız olarak kod yazabiliyor ve kodları ile sisteme bağlı sensörleri uygulamalarında rahatlıkla kullanabiliyorlar. Bu görsel dersimizde örnek bir sensörün Windows 7 tarafında kod ile algılanmasını ve sonrasında da sensörden gelen verinin ve değişikliklerin algılanmasını göreceğiz.

Yukarıdaki videoyu bilgisayarına indirmek isteyenler blogumun SeminerTV bölümünden faydalanabilirler.

İyi seyirler...

Saturday, October 24, 2009 6:50:19 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Windows 7  | 
 Friday, October 23, 2009

Bugün Windows 7'nin ilk Akademik Lansmanı'nı İstanbul 7Tepe Üniversitesi'nde yaptık. İlgi gerçekten muhteşemdi! Windows 7'nin ciddi anlamda başarılı bir ürün olması pek de anlatılmasına gerek kalmadan gerekli ilginin toplanmasını sağlıyor. Eh ürün iyi olunca lansmanın da başarılı olamaması düşünülemez sanırım.

Yeditepe Üniversitesi, Windows 7 Akademik Lansmanı
Yeditepe Üniversitesi, Windows 7 Akademik Lansmanı

Windows 7'nin hem bireysel hem kurumsal özelliklerden hızlıca bahsettiğimiz lansmanda ayrıca Multitouch demolarının da büyük ilgi gördüğünü itiraf etmem gerek. Tabi şimdilik bu demolarla ilgili spoiler vermeyeceğim çünkü daha Akademik Lansmanlar başka illerde de devam edecek :)

Günün sonunda çekilişle verilen üzerinde Windows 7 yüklü bir netbook'un da verdiği tebessüm ile :) etkinliği bitirdik. Evet doğru tahmin ediyorsunuz, her akademik lansmanda bir netbook ve ayrıca 200$ değerinde de MSP Press kitabı verililiyor. Herkese verilen ayrı bir süpriz hediye daha var ;) sürpriz!

Friday, October 23, 2009 10:06:00 AM (GTB Standard Time, UTC+02:00)  #    Comments [8]   Windows 7  | 

İTÜ'ye gitmeyeli epey olmuş :) En son iki sene önce gitmişim. Bugün IEEE organizasyonu ile İTÜ'yü tekrar ziyaret etme şansım oldu. Elektrik-Elektronik fakültesinde yaptığımız iki seminerde kullanıcı deneyiminin önemine değindikten sonra bir de işin teknik tarafına geçip WPF ve Silverlight'a göz attık. Oturumların süreleri toplam üç saat olunca süre bana az geldi ve biraz hızlı anlatmaya başladım. Umarım :) dinleyici arkadaşlar ne anlattığımı anlayabilmiştir.

İTÜ, IEEE, Silverlight ve WPF Seminerlerim
İTÜ, IEEE, Silverlight ve WPF Seminerlerim

Organizasyonda emeğinden dolayı özellikle Hüseyin Armağan Güler'e çok teşekkürler. Bu kadar ilgili bir kitleye ulaşabilmiş olmak konsept olarak kısmen uzak bir fakültede bence büyük bir başarı. Katılan herkese de ayrıca teşekkür ediyorum. Akşamın sekizine kadar benle kaldınız ve hatta çıkışta bile zor ayrıldık :) Umarım hepinize için faydalı bir seminer olmuştur.

Thursday, October 22, 2009 11:23:59 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 3.0 | WPF  | 
 Thursday, October 22, 2009

Silverlight ile RSS kullanımı konusunda bolca soru alıyorum. Bu görsel dersimizde Silverlight ile bir RSS kaynağının kullanımını ayrıca sunucu taraflı RSS kaynağı üretmenin de kolay bir yolunu beraber inceliyoruz.

Yukarıdaki videoyu bilgisayarına indirmek blogumun SeminerTV bölümünden faydalanabilirler.

İyi seyirler...

Thursday, October 22, 2009 4:29:06 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Görsel Ders | Silverlight 3.0  | 
 Wednesday, October 21, 2009

C# 4.0 ile beraber gelen yeni özelliklerden biri de Opsiyonel Parametreler. Hali hazırda VB'de yer alan bu özelliğin eksikliğini hissetmiyordum desem yalan olur. Görsel ders içerisinde Opsiyonel Parametrelerin kullanımına dair ufak bir örnek görebilirsiniz.

Yukarıdaki videoyu bilgisayarına indirmek blogumun SeminerTV bölümünden faydalanabilirler.

İyi seyirler...

Wednesday, October 21, 2009 4:26:29 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   C# | Visual Studio 2010  | 

Bugün Samsun 19 Mayıs Üniversitesi'ndeydim. Bilişim günleri etkinliğinin ikinci gününde Silverligjt, WPF ve LINQ üzerine oturumlarım oldu. Uzun süredir Samsun'da bu gibi bir aktivitenin yapılmamış olduğu bilgisini öğrencilerden alırken aslında ben de çaktırmadan ilk Samsun ziyaretimi yapmış oldum. Kimse üstüne alınmazım ama :) deniz kenarı sevdam doğduğum şehir İstanbul'dan kaynaklanıyor olsa gerek.

19 Mayıs Üniversitesi Bilişim Kulübü ile hatıra fotoğrafı.
19 Mayıs Üniversitesi Bilişim Kulübü ile hatıra fotoğrafı.

Etkinliğe tahmin ettiğimin üzerinde bir katılım oldu. Sonrasında tam günlük seminer serisine dayanamayanlar da olmadı değil :) Hatta aldığım duyumlara göre ben varmadan önce "O kadar saat nasıl anlatacak" şeklinde sorular geziyormuş kulaktan kulağa :) Belli ki beni tanımıyorlar :) Şaka bir yana özellikle etkinlikte organizason için tüm Bilişim Kulübü'ne, hocalarımıza ve sevgili MSP Hacer Kübra Köse'ye çok teşekkür ediyorum. Benim için büyük bir zevkti. Umarım herkes için faydalı bir gün olmuştur.

Tuesday, October 20, 2009 11:16:07 PM (GTB Standard Time, UTC+02:00)  #    Comments [10]   LINQ | Silverlight 3.0 | WPF  | 
 Tuesday, October 20, 2009

Code Snipper'lar her zaman bir programcının hayatını kolaylaştıran araçlar olmuştur. Bu konuda Visual Studio 2010 ile gelen yeniliklerle beraber nasıl kendi özel Code Snippet'larımızı geliştirebiliriz noktasına da göz atacağımız bu görsel dersi kaçırmayın ;)

Yukarıdaki videoyu bilgisayarına indirmek blogumun SeminerTV bölümünden faydalanabilirler. SeminerTV sayfasını biraz değiştirdim. Sanırım artık herşeyi bulmak daha rahat olacaktır. Zaman içerisinde eski görsel dersleri de oraya ekleyeceğim.

İyi seyirler...

Tuesday, October 20, 2009 4:23:11 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Visual Studio 2010  | 

İşte uzun bir aradan sonra yeniden açık kaynak etkinliğinde buluşma fırsatına ne dersiniz? İlk etkinliğimizde yaşadıklarımız ve açıklığa getirdiğimiz ilginç bakış açısı sonrasında :) şimdilik 1.5 sürümü olarak nitelendirdiğim bu etkinliğe hepinizi bekliyorum! Güzel ve hızlı bir açık kaynak günü olacak!

Kayıt olmayı unutmayın!
Kayıt olmayı unutmayın!

Tuesday, October 20, 2009 12:07:10 AM (GTB Standard Time, UTC+02:00)  #    Comments [9]    | 
 Saturday, October 10, 2009

Bir hayallim daha kısmen gerçek oldu :) Şimdi bu da ne demek? değil mi :) Hayallerimden biri de bir gün İngilizce bir kitap yazmaktı. Kitap olmasa da şimdilik bir kitapçık ile hayallerimi gerçekleştirdim diyebilirim. Hatırlarsanız bundan bir süre önce Internet Explorer 8 ile ilgili yazılımcılar ve tasarımcılar için Türkçe bir kitapçık yazmıştım.

Internet Explorer 8 hepsiburada.com'da en çok satan kitap.
Internet Explorer 8 hepsiburada.com'da en çok satan kitap.

Internet Explorer kitabımla ilgili çevremdeki developerlardan çok ilginç yorumlar aldım. Bazıları "Bu adam da cılkını çıkardı. Ne yazdı ki?" diyip salt uyuzluk olsun diye okumuşlar :) Bunu "yahu okuyunca cidden içeriği dolu doluydu" yorumları ile beraber itiraf ettiler. Nitekim ben bu tepkiyi öngörmüş ve kitabımın önsözüne bile eklemiştim :) İlk bakışta IE8 ile ilgili teknik ne kitap yazılabilir ki diye düşünülse de emin olun içeriğinde hem yazılımcılar hem de tasarımcılar için çok önemli bilgiler var. Kesinlikle bir son kullanıcı kitabı değil :)

Konuyu çok uzattığımın farkına vardım :) Konunun özüne dönersek kısa bir süre önce Internet Explorer 8 kitabımın İngilizcesi de basıldı. İngilizce blogumda söz konusu duyuryu geçenlerde çıktım.

Internet Explorer 8 İngilizce Kitabım
Internet Explorer 8 İngilizce Kitabım

Kitap tüm Ortadoğu Afrika bölgesinde şimdiden 10'a yakın ülkede dağıtıldı. Hatta iki ülkeden de ikinci baskı talebi geldi. Kitapla beraber bu sefer bir de mini-CD geliyor. Mini-CD içerisinde Silverlight ile hazırladığım bir arayüzde IE8 için WebSlice, Accelerator ve Search Suggestion development anlatıyorum. Kitap Türkçe'sinde olduğu gibi PDF'i ve tüm CD içeriği ile beraber internetten de ücretsiz dağıtılıyor.

Bu benim için sevinçli haberi sizlerle de paylaşmak istedim :)

Not: Türkçe kitap ücretsizse hepsiburada.com'da nasıl en çok satan olur? Bilmiyorum cidden :) Basılı olanı orada satılıyor bir şekilde :) Ben yine telif almıyorum :) Kitabın İngilizcesi için İngilizce bloguma uğrayabilirsiniz veya Türkçe'si için hemen buraya tıklayabilirsiniz.

Saturday, October 10, 2009 10:37:17 AM (GTB Standard Time, UTC+02:00)  #    Comments [9]   IE 8.0  | 
 Friday, October 09, 2009

Bilirsiniz pek kitap tanıtımı yazmam. Bundan herhalde bir yıl kadar önceydi kendi kütüphanemdeki kitapları kısaca tanıtmıştım. Bugün size tanıtmak istediğim iki kitap var. Bunlardan ilki sevgili Yaşar Gözüdeli'nin SQL 2008 kitabı. Tabi tanıtıma başlamadan önce Yaşar Gözüdeli'ye de buradan teşekkür etmem gerekiyor. Bana kitabın bir kopyasını sağolsun imzalayarak gönderdi. Ayrıca bir kopya da INETA aktivitelerinde hediye vermek üzere göndermiş :) ilk aktivitede kullanacağım :) "Neden birden çok göndermemiş?" demeyin sakın çünkü yazarlara öyle bolca kitap vermiyorlar zaten. Ben de aynı durumu yaşadığım için çok net biliyorum.

SQL Server 2008, Yaşar Gözüdeli
SQL Server 2008, Yaşar Gözüdeli

Kitap SQL Server'ı baştan alıp 2008 tarafına da değinerek hem giriş seviyesi hem de ileri seviye için benim şu ana kadar gördüğüm Türkiye'de en iyi yerli malı kaynak. Hadi "en iyi kaynaklardan biri" diyelim de bilmediğim kitaplara haksızlık olmasın. 700 sayfalık bu kitabı giriş seviyesinde olanlara kesinlikle alın derim. Hali hazırda "yahu zaten bana yetiyor bildiklerim" diyenlere ise eğer şöyle fazladan bir 6-7 saat ayırabilirseniz bu kitabı alın diyebilirim. Tabi ki kitapta bildiğiniz birçok şey olacak fakat bilmedikleriniz olduğundan da eminim. Bazı kitaplar vardır benim de aldığım ve okuduktan sonra "puff" dediğim. Bu kitap benim için öyle olmadı. Sonuçta içinden 1 sayfası bile faydalı olsa haktır ama emin olun daha fazlası faydalı olacaktır. Takriben üç yılda bir SQL çıkıyor üç yılda bir kitap almakta sorun yok bence :)

Programlama ve Veritabanı Mantığı, Kadir Çamoğlu
Programlama ve Veritabanı Mantığı, Kadir Çamoğlu

İkinci kitabımız Kadir Çamoğlu'nun "Programlama ve Veritabanı Mantığı" kitabı. Kitabın içerisinde programlamaya sıfırdan başlamak isteyenler için "ortaya karışık" mantığında herşey var. Kesinlikle muhteşem bir kaynak. Neyin ne olduğunu anlamak için parçaları birleştirmekte zorlananlar için yazılmış bir kitap! Genel resmi bu kadar başarılı bir şekilde verebilmek zor iş, ama başarılmış. Bu kitaptan tabi ki dikey uzmanlık beklememek gerek. Yatay perspektifte yazılmış bir kitap ve bence Türkiye'deki BÜYÜK bir açık kapatılmış durumda. KODLAB sağolsun bana her bastıkları kitabı gönderiyor ama bu ilk blogumda duyurduğum kitap oldu. Bu arada aklınıza soru olarak gelirse bana her gelen kitabı blogumda yayınlamıyorum. Reklam yapmayı sevmediğimi zaten blogu takip ediyorsanız bilirsiniz. Yukarıdaki iki kitabı gerçekten yazma ihtiyacı hissettim.

Bu arada benim de kitapları bitirmem lazım artık off off uzadı da uzadı :) Neyse kalın sağlıcakla :)

Friday, October 09, 2009 8:17:02 PM (GTB Standard Time, UTC+02:00)  #    Comments [8]   SQL Server 2008  | 
 Thursday, October 08, 2009

Günümüzde artık tarayıcı içi iş uygulamalarında uygulama geliştirme platformu olarak Silverlight dışında pek birşey düşünülemiyor. Fakat bu manzara içerisinde de tabi ki daha üçüncü sürümünde bir ürün olarak Silverlight'ın eksikleri var. Bu eksiklerin bazıları maalesef Silverlight yapısı gereği içerisine oturduğu mimari rolle de alakalı olabiliyor. Çok basit bir örnek olarak veri erişim modelini ele alabiliriz. Bugün Silverlight ile bir uygulama geliştirmek isteyen herhangi bir iş uygulaması geliştirme ekibinin alışması gereken ilk şey servis yönelimli mimari. Buraya kadar herşey aslında çok güzel fakat en basit CRUD (Create, Read, Update; Delete) operasyonları için bile birer servis hazırlayıp, bu servislerin referanslarını alıp SL tarafında tek tek kullanıyor olmak bazı durumlarda rahatsız edici şekilde uygulama geliştirme sürecini uzatabiliyor da.

.NET RIA Services!

İş uygulamalarınızın çapına/büyüklüğüne göre .NET RIA Services dertlerinize çare olabilir. Peki nasıl? Aslında yapmak istediğimiz şey bir şekilde http:80 üzerinden CRUD operasyonlarını yapabilmek. Hemen belki de aklınıza ADO.NET Data Services gelecektir. Kesinlikle doğru yoldasınız. Aslında ADO.NET Data Services ile sunucu tarafında ciddi bir gelişme olmuştu ve artık URL üzerinden sorgularımızı atabiliyor, sonrasında da XML olarak cevabı alabiliyorduk. Fakat hala bazı sorunlar vardı, çünkü ADO.NET Data Services'ın kullanımı Silverlight tarafında pek de kolay değildi. Bu gelişmeleri takiben .NET RIA Services aslında ADO.NET Data Services üzerine oturarak bu altyapının Silverlight ile rahatlıkla konuşabilmesini sağladı. Validasyon kodlarının hem sunucu hem istemci tarafında iki defa yazılması gibi sorunları belirli senaryolarda gidererek .NET RIA Services şu anda July Preview sürümü ile indirilebilir durumda. Daha Release olmamış (yayınlanmamış) bir ürün olduğunun altını çizerek devam edelim.

RIA Services'ın development sürecinde bir çok avantajı var. Bunlardan ilki artık sunucu tarafındaki uygulamanız ile istemci tarafındaki uygulamanızın tek bir uygulama gibi gözükmesi. İlk bakışta çok garip geleceğinin farkındayım fakat artık istemci tarafındaki Silverlight uygulamanızdan sunucuya anında ulaşabiliyorsunuz, herhangi bir şekilde service reference eklemeniz vs gerekmiyor. Tabi tüm bu işlemleri biz yapmıyorsak bizim yerimize birileri yapıyor demektir ki bu durumda Visual Studio yardımımıza koşuyor ve otomatik olarak sunucu ile istemci taraflarını birbiri ile konuşturacak ek kodları yaratıyor. Ayrıca RIA Services tarafında da bulunan bazı sınıflar tabi ki kullanılıyor. Validasyonla ilgili tüm sunucu taraflı tanımlamalar otomatik olarak istemci tarafına da derleme zamanında ekleniyor. Tüm bu kolaylıkları görmek için gelin yeni bir Silverlight projesi yaratalım.

RIA Services kullanacağız.
RIA Services kullanacağız.

Yeni bir Silverlight projesi yaratırken karşınıza çıkan ilk ekranda projeye bir ASP.NET Web Sitesi eklediğimiz gibi bir de "Enable .NET RIA Services" checkbox'ını işaretlememiz gerekiyor. Böylece gerekli referanslar alınacak ve ayarlar yapılacaktır. Yapılan ayarlardan ve altyapının çalışma şeklinden detaylı olarak bahsedeceğiz. Yeni projeyi yarattıktan sonra hızlı bir şekilde projenize bir "LINQ2SQL" dosyası ekleyip veritabanından da istediğiniz bir tabloyu kullanabilirsiniz. Tabi tüm bunları ASP.NET tarafında yapıyoruz. Sunucu tarafında DAL (Data Access Layer) olarak LINQ2SQL'imiz hazır olduğuna göre bir sonraki adımda servis katmanını hazırlamamız gerekecek. Yani bir şekilde bu veritabanındaki tabloları Silverlight tarafına aktaracak olan katmanı yaratmalıyız. Bunun için ASP.NET tarafında projenize "Domain Service Class" türünde yeni bir dosya ekleyebilirsiniz.

DomainServiceClass ile sunucudan istemciye bağlantı sağlıyoruz.
DomainServiceClass ile sunucudan istemciye bağlantı sağlıyoruz.

Domain Service Class eklediğiniz anda karşınıza yukarıdaki ekran gelecektir. Burada "Enable Client Access" zaten seçili olacaktır. Eğer bu seçenecek seçili olmaz ise tabi ki Silverlight'ın bu servise ulaşması mümkün olmaz. Sonrasında hemen alt basamakta kullanacağınız DAL'ı seçiyorsunuz. Bizim projemizde bir LINQ2SQL dosyası bulunduğuna göre onu seçebiliriz. Seçtiğiniz veri kaynağına göre Entity'lerin listesi alt tarafa gelecektir. Buradan da hangi Entity'leri istemciye açmak istiyorsanız onu seçebilirsiniz. Eğer bu Entity'ler aracılığı ile veri üzerinde değişiklik yapılacaksa "Enable Editin" checkbox'ını işaretlemeyi de unutmamanızda fayda var. Son olarak en altta yer alan "Generate associated classes for metadata" kısmı ise her sınıfın propertylerine metadata tanımlanabilmesini sağlayacak ek sınıfları yaratacak kodun otomatik olarak yaratılıp yaratılmaması ile ilgili. Bu konuya ileride detaylıca değineceğiz fakat şimdilik bilmemiz gereken şey şu; eğer sunucu taraflı validasyon kodları yaazacaksan ve bu kodların otomatik olarak istemciye de taşınmasını istiyorsak kesinlikle bu seçenek işaretli kalmalı.

[VB]

<EnableClientAccess()>  _

Public Class DomainService1

    Inherits LinqToSqlDomainService(Of DataClasses1DataContext)

 

    Public Function GetInsans() As IQueryable(Of Insan)

        Return Me.Context.Insans

    End Function

 

    Public Sub InsertInsan(ByVal insan As Insan)

        Me.Context.Insans.InsertOnSubmit(insan)

    End Sub

 

    Public Sub UpdateInsan(ByVal currentInsan As Insan)

        Me.Context.Insans.Attach(currentInsan, Me.ChangeSet.GetOriginal(currentInsan))

    End Sub

 

    Public Sub DeleteInsan(ByVal insan As Insan)

        Me.Context.Insans.Attach(insan)

        Me.Context.Insans.DeleteOnSubmit(insan)

    End Sub

End Class

Domain Service Class'ı eklediğiniz gibi projenizde DomainService1.vb/cs adında bir dosya göreceksiniz. Bu dosya içerisinde kodlar yukarıdaki gibi olacaktır. Görüldüğü üzere yaratılan DomainService doğrudan LinqToSqlDomainService'den türetilmiş hatta türetilirken de DAL olarak LINQ2SQL sınıfımızın gösterilmiş. DomainService içerisinde Insert, Update, Delete işlemlerini yapan metodlar ve bu metodlar içerisinde de aslında LINQ2SQL Context'i kullanan kodlar var. GetInsans adındaki metod ise doğrudan SQL'deki tüm insanları döndürüyor.

Bu noktaya kadar yaptığımız şey iki tıklama ile DAL kısmını çözmek sonrasında da servis katmanı için de bir DomainService eklemek oldu. Daha bir satır kod bile yazmadık. Şimdi ilginç bir sürpriz ile karşılaşmak için Silverlight tarafına geçip Page.XAML arkasındaki VB/CS dosyasını açıyoruz.

Sunucu ve istemci arası iletişim.
Sunucu ve istemci arası iletişim.

Yukarıda gördüğünüz manzaradan da anlaşılabileceği üzere bir anda sunucu tarafındaki ASP.NET projemizin namespace'ine istemcide ulaşır hale geldik. Bunun çalışabilmesi için herhangi bir şekilde web servisi eklememiz vs gerekmedi. Aynı şekilde bu namespace altından sunucu tarafındaki DomainService'e de rahatlıkla ulaşabileceğiz hatta sunucu tarafında yapılan değişiklikler de istemci tarafında development zamanında Visual Studio tarafından yansıtılacak. Peki basit bir şekilde sunucudan tüm insanların bilgilerini çekmek istersek ne yapabiliriz? Deneme amaçlı olarak XAML tarafında sayfanıza adı myGrid olan bir Grid yerleştirdikten sonra aşağıdaki kod örneğinden faydalanabiliriz.

[C#]

        void MainPage_Loaded(object sender, RoutedEventArgs e)

        {

            DomainService1 Servis = new DomainService1();

            System.Windows.Ria.Data.LoadOperation Yukleme = Servis.Load(Servis.GetInsansQuery());

            Yukleme.Completed += new EventHandler(Yukleme_Completed);

        }

 

        void Yukleme_Completed(object sender, EventArgs e)

        {

            myGrid.ItemsSource = ((System.Windows.Ria.Data.LoadOperation<Insan>)sender).Entities;

        }

Örneğimizde hemen UserControl load olduğu gibi DomainService1 adında, aslında sunucu tarafındaki yarattığımız DomainService nesnemizden bir kopya alıyoruz. Ne de olsa bu nesne otomatik olarak istemci tarafına taşındı. Not olarak bu nesneyi SilverlightApplication1.Web altında bulabileceğinizi o nedenle using ile söz konusu sınıfı eklemeyi unutmamakta fayda var. Söz konusu DomainService'den bir kopya aldıktan sonra yükleme işlemini başlatmak üzere bir LoadOperation nesnesi tanımlıyoruz. Bu LoadOperation nesnesine de Servis üzerinden bir Load operasyonu yaratım aktarmamız gerekiyor. Bizim zaten tüm insanların bilgisini getirecek olan sunucu tarafında bir sorgumuz vardı. Onu kullanabilmek için doğrudan Servis üzerinden GetInsansQuery dememiz yeterli oluyor. Aslına bakarsanız GetInsansQuery bize sorgulanabilir bir insan listesi tanımı getirmekle mükellef. Bir sonraki adımda biraz daha detaylara gireceğiz.  Yükleme işlemimiz hazır olduğuna göre hemen yüklememizin Completed event'ını da yakalamakta fayda var. Completed event'ının sender'ı malum bizim LoadOperation'ın ta kendisi. Geriye Insan nesnesi döneceğini bildiğimiz için uygun casting işlemini de yapıp hemen operasyon tarafından döndürülen Entities dizisini alıp gridimize bağlayabiliyoruz.

[C#]

        void MainPage_Loaded(object sender, RoutedEventArgs e)

        {

            DomainService1 Servis = new DomainService1();

            System.Windows.Ria.Data.LoadOperation Yukleme = Servis.Load(from inc in Servis.GetInsansQuery()

                                                                        where inc.Adi.Contains("A") select inc);

            Yukleme.Completed += new EventHandler(Yukleme_Completed);

        }

 

        void Yukleme_Completed(object sender, EventArgs e)

        {

            myGrid.ItemsSource = ((System.Windows.Ria.Data.LoadOperation<Insan>)sender).Entities;

        }

RIA Services'ın esas esnek taraflarından biri de doğrudan istemciden istediğimiz sorguyu sunucuya gönderebiliyor olmamız. Tabi bu noktada itiraf etmem gerek ki kullanılabilecek keyword'lerde ADO.NET Data Services mimarisi gereği bazı sınırlar var fakat genel kullanımda pek sorun yaşanacağını sanmıyorum. Eğer çok kompleks sorgular düşünüyorsanız bunları sunucu tarafında ayrı metodlar olarak tanımlamak gerekecektir. Fakat basit bir where sorgusu gibi sorgularınızın çoğunu yukarıdaki şekilde doğrudan istemciden sunucuya gönderebilirsiniz.

Yukarıdaki kod içerisinde değişen tek şey bizim LoadOperation'ın yaratılırken aldığı parametre. Artık sadece bir GetInsansQuery değil de söz konusu Query ile dönen nesne tanımını tekrar sorgulayan bir yapı tanımlıyoruz. Burada aklınıza takılabilecek nokta; "Acaba tüm veriyi istemciye alıp orada mı sorguluyor?" olabilir. Tabi ki hayır! :)

Sorgumuz nereye nasıl gidiyor?
Sorgumuz nereye nasıl gidiyor?

Ekran görüntüsünde inceleyebileceğiniz rapor hazırladığımız Silverlight uygulaması çalıştırıldığında sunucumuza giden istekleri listeliyor. İsteklerin en sonunda ClientBin altında DataService.axd adında bir yere talep gönderildiğini görebiliyoruz. Bu talebin tam yolunu incelersek aslında bizim sorgunun da orada bulunduğunu görebilirsiniz. Bu da şu anlama geliyor; sorgu doğrudan sunucuya URL üzerinden gönderilmiş durumda.

SQL Profile'a baktık, sorgu orada!
SQL Profile'a baktık, sorgu orada!

Aynı şekilde SQL Profile ile SQL'e giden isteklere baktığımızda da bizim taaa :) Silverlight'tan gönderdiğimiz LINQ sorgusunun ASP.NET tarafından da algılanıp bir SQL sorgusuna çevrilerek parametremiz ile SQL'e gönderildiğini görebiliyoruz. Sanırım yeterince başarılı :)

Insert, Delete, Update nasıl yapılır?

.NET RIA Services tarafındaki operasyonların çoğu LINQ2SQL operasyonlarına benziyor. Yeni bir kayıt eklemek için ilk olarak söz konusu kayda ait Entity'den bir kopya alarak veriyi doldurmanız sonrasında da DomainService üzerinden uygun listeye eklemeniz yeterli.

[C#]

            DomainService1 Servis = new DomainService1();

            Servis.Insans.Add(new Insan() { Adi = "Denek", Soyadi = "denek2", Dogum=DateTime.Now, Tip=1 });

            Servis.SubmitChanges();

Son satırda ayrıca SubmitChages metodunu çağırmamız gerekli. Aksi halde yaptığımız değişiklikler sunucu tarafına gönderilmeyecektir. Delete işleminde ise Servis'in bizden istediği silinecek nesnenin bir referansı oluyor. Bu durumda örneğimizdeki Grid'de seçili nesneyi rahatlıkla silinmek üzere aktarabiliriz.

[C#]

        DomainService1 Servis = new DomainService1();

 

        void btnTikla_Click(object sender, RoutedEventArgs e)

        {

            Servis.Insans.Remove((Insan)myGrid.SelectedItem);

            Servis.SubmitChanges();

        }

Kod örneğindeki gibi servis üzerinden Insans listesinden Grid'deki seçili Insan nesnesini kaldırdıktan sonra tekrar SubmitChanges ile gerekli değişikliklerin sunucu tarafına yansıtılmasını sağlıyoruz. Aynı şekilde Entity'ler üzerinde yaptığımız değişiklikler de sunucu tarafına birer Update komutu ile yansıtılacaktır.

[C#]

        DomainService1 Servis = new DomainService1();

 

        void btnTikla_Click(object sender, RoutedEventArgs e)

        {

            Insan Degisecek = (Insan)myGrid.SelectedItem;

            Degisecek.Adi = "Deneme83";

            Servis.SubmitChanges();

        }

Yukarıdaki kod Grid'de seçili nesneyi alıp adını değiştirip değişikliklerin sunucu tarafına gönderilmesi için de SubmitChanges metodunu çağırarak işlemi tamamlıyor. Zaten Grid içerisinde bir nesne aldığımız için bu değişiklik görsel olarak kullanıcıya da anında yansıyacaktır. Bir diğer güzellik ise aslında Grid'imize aktardığımız verinin zaten servisimiz ile sürekli bağlantı içerisinde olması. Yani biz ilk aşamada verimizi Grid'e bağladıktan sonra kullanıcının yaptığı tüm değişiklikleri otomatik olarak sunucuya göndermek istersek aslında sadece servisin SubmitChanges metodunu çağırmamız yeterli olacaktır. Böylece zaten tüm değişikliker sunucuya gönderilecektir.

Önemli Uyarı!

Silverlight ile uygulama geliştirmeyi çok kolaylaştıran bir yapı olarak RIA Services eminim ki sizleri heyecanlandıracaktır fakat unutmamak gerek ki ürün daha yayınlanmış değil ve Preview aşamasında. Çıkacak yeni Preview'larda çok şey değişebilir. O nedenle bu sistem üzerine yapacağınız yatırımlarda dikkatli olup bu risklerin bilincinde olmak önemli.

Hepinize kolay gelsin.

Thursday, October 08, 2009 12:19:39 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight 3.0  | 
 Friday, October 02, 2009

Bugün sizlerle ilginç bir yazı paylaşacağım. Bundan yıllar önce :) darkhardware.com'da donanım incelemeleri yazardım. O yıllardan bu yıllara donanımdan iyice uzaklaştım diyebilirim fakat tabi ki bir bilgisayar kullanıcısı ne kadar uzaklaşabilirse ben de o kadar uzaklaşabildim. Tüm bunların bugünkü yazımla alakası ise bu yazıda kısmen bir donanım incelemesi ile karşınıza çıkacam olmam.

SSD Dünyası!

Solid State Disk olarak bir süre önce duymaya başladığımız yeni bir sabit disk tipi çok ilgi çekici bir şekilde ilerliyor. Mekanik herhangi bir parçası olmayan bu diskleri kabaca bilgisayarınıza sokulmuş USB hafıza kartları olarak düşünebilirsiniz. Durum böyle olunca tabi hem fiziksel hareketin yavaşlığından kurtulmak hem de bu hareket için gerekli enerjiyi harcamaktan kurtulmak mümkün. Standart SATA arabimini kullanan bu güzel disklerden birini bundan yaklaşık iki ay önce paraya kıyarak edindim. Bu yazıda da sizlerle deneyimlerini paylaşacağım.

Daha uzun pil ömrü!

Windows 7'nin de RTM olduğu döneme gelen bu upgrade senaryomda Windows 7 ile beraber laptop'umun pil ömrü yarım saat kadar artmıştı ki buna bir de SSD'nin katkısı gelince ortaya 1.5 saatlik bir fark çıktı. Tüm güç ayarlarını uygun şekilde yapıp hayati olmayan herşeyi kapatınca SSD ile 1 saatlik ekstra pil ömrü kazandım. Sanırım bu durum normal bir sabit diske göre ısınma anlamında da katkısını gösterdi ki artık AMD işlemcili laptopum (en azından) biraz daha soğuk.

Hız! Aslında herşey hız!

Aslında bir SSD satın almanın tek nedeni ekstra hız oluyor. Özellikle developer gözü ile bakarsak aslında biz sürekli olarak ufak dosyaları editleyen, yaratan kullanıcılarız. Düşünün VB, HTML vs kodlarını yazdığınız dosyaların büyüklüğü hiç MB'ları buluyor mu? Tam aksine genelde 1-20 KB arası gidip gelirler hatta çoğunluğu 2-8 KB arasındadır. Durum böyle olunca ufak dosyalarla çalışabiliyor olmak ve en ufak Visual Studio solution'unda bile 20-30 tane 3KB'lık dosyayı hızlıca açabilmek ve bunları compile edebilmek çok önemli. Bu senaryoda SSD'ler bakalım işe yarıyor mu?

Testler ortada!

Sanırım testler herşeyi gösteriyor. Sol tarafta klasik bir laptop diski olarak 5400 devirlik bir disk görebilirsiniz. Hemen ortada ise 7200 devir ile laptoplarda aslında ısı sorunları yaratan fakat developerın tek çaresi olan diske de baktığımızda aslında 4K dosya transferinde pek bir fark olmadığını görüyoruz. Hatta şansa 5400 rpm 4K'da dosya yazarken daha hızlı çıkmış. Oysa SSD tarafına geçtiğimizde ortada alenen belli performans artışı var. Büyük dosyaları geçip yine 4K'lık dosyalara baktığımızda 100 kata yakın performans farkı görülebiliyor.

Bu performans farkı Windows'un gelen açılışından tutun Visual Studio'nun açılışına kadar herşeyi etkiliyor. Fakat SSD kullanırken ve satın alırken dikkat edilmesi gereken bazı noktalar var.

SSD kullanırken nelere dikkat etmeli?

Birincisi en önemli tavsiye aslında Windows 7 kullanmak. Çünkü şu anda SSD'leri tanıyarak ona uygun performans optimizasyonlarını otomatik yapabilen tek işletim sistemi Windows 7. O nedenle mümkünse hemen Windows 7'ye geçmek çoğu sorununuzu çözebilir. Bunlardan ilki Windows 7'nin TRIM özelliği. SSD'lerin iç yapılarına ve veriyi saklama şekillerine pek girmeyeceğim fakat bilinmesi gereken ufak bir senaryo var. Diyelim ki elinizde SSD'de yazılı bir dosya var ve bunda değişiklik yaptınız. SSD'lerin gelen işleyiş şeklinde bu dosya eski yazıldığı yerden alınır, değişiklik yapılır ve yepyeni bir yere yazılır! Eski yer ise öyle kalır! Taaa ki diskteki boş yer bitene kadar. Tabi burada "boş yer" derken fiziksel boş yerden bahsediyorum. Aslında dosyanın eski yeri "boş" olarak işaretlenmiştir fakat boş değildir. Durum böyle olunca disk tamamen bir kere kullanıldığında sonraki işlemlerde yavaşlamaya başlar çünkü artık "boş" yer kalmamış ve eskiden veri bulunan "boş" olarak işaretlenen yerler kullanılacaktır. Eh bu yerler kullanılırken ilk önce gerçekten silinmeli sonra yeni veri yazılmalıdır. Bu durum diskin bir süre sonra yavaşlamasına neden olur. TRIM işlemi diskteki "boş" olarak işaretlenmiş yerlerin gerçekten boşaltılması anlamına gelir. Bu işlem (SSD Firmware'i destekliyorsa) Windows 7 tarafından otomatik yapılır. Bazı SSD üreticileri ayrı TRIM programları veriyorlar ve onları belirli aralıklarla bilgisayarınızda çalıştırmanız gerekiyor.

-Windows Disk Caching'i kapatın. Artık ihtiyacınız yok.
-Dosyalara son ulaşılma tarihini kaydetmeyi kapatın! (fsutil behavior set disablelastaccess 1) İhtiyacınız varsa açık kalabilir fakat gerek yoksa kapatın gitsin.
-Superfetch'i kapatın! (Windows 7'de default kapanır)
-Background Defrag'ı kapatın! Random accesste artık fiziksel hareket yok ne gerek var defraga! (Windows 7'de default kapanır)
-ReadyBoost kapatın! (Windows 7'de default kapanır)

SSD alırken nelere dikkat etmeli?

Tabi önce bir fiyatına dikkat etmeli :) Sonra kasadan dönmemekte fayda var. Hala epey tuzlu rakamlarla satılıyor ve eğer bir SSD sahibi olacaksanız elinizdeki 500GB'lık 5400 rpm'den vaz geçip belki de 64 GB'a geçmeyi göze almalısınız çünkü yüksek kapasitedeki SSD'ler daha da yüksek fiyatlarla geliyor.

Kapasitesi aynı olup arasında büyük fiyat varkı olan SSD'ler bulmanız da olası. Bu SSD'lerin arasında en önemli fark genelde SLC (Single Level Cell) ve MLC (Multi Level Cell) kullanmaları oluyor. MLC'ler genelde daha ucuz, yüksek kapasiteli ve büyük veri yığınlarını saklamakta iyiyken SLC'ler ise daha pahalı ve veri yazmada daha hızlıdır. Ayrıca SLC'ler fiziksel anlamda da daha dayanıklı disklerdir ve daha az enerji tüketirler. Daha teknik detaya girmek gerekirse SCL'ler her bir cell'de 1 veya 0 şeklinde iki değer (1bit) saklanabilirken, MLC'lerde 00, 01, 10, 11 gibi dört durum (2bit) saklanabilir. Cell'lerde veriler elektriksel olarak saklandığında göre bu durum farklılıkları ancak elektriksek yük farkları ile oluşturulabilir ve durumlar arasında farklar MLC'lerde daha az tutularak 4 durum yaratılır oysa bu fark 2 durum oluşturulurken çok daha yüksektir. Bu nedenle SLC'ler daha güvenli ve hızlıyken MLC'lerde bir veriyi okumak için daha yoğun işlem yapılması gerekir. Unutmadan; MLC disklerin ömrü de genelde 10 kat daha kısa olur.

Bu kadar kötü konuştuktan sonra gerçeği de söylemek gerek sanırım :) Açıkçası ben MLC aldım :) Belki ileride SLC'ye geçiş yaparım. Yukarıdaki SSD testinde kullanılan da malum MLC bir disktir.

Hepinize kolay gelsin!

Friday, October 02, 2009 7:40:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [8]   Windows 7  | 
 Thursday, October 01, 2009

AJAX'tan ilk bahsetmeye başladığımız yıllarda en çok aldığım sorulardan biri asenkron File Upload işlemi ile ilgiliydi. Asenkron işlem yapabilmek ve sayfanın Refresh atmaması çok hoş bir durumdu ve bu durumu istemciden sunucuya dosya yüklerken de yaşayabilmek istiyorduk. Bugünler bu gibi bir sorunu çözmek için Silverlight kullanmayı tercih etsem de özellikle 2GB'dan ufak dosyaların yüklenmesi noktasında aslında hala eski taktikler kullanılabilir.

Eminim bazılarınız "Yapılıyor zaten AJAX ile" şeklinde içinden cevap verecektir. Tabi ki yapılır fakat pek de kolay değil. İnternette bulunan çoğu çözüm seksen tane ekstra ayar gerektirirken hiçbir ayar gerektirmeden çalışan ASP.NET FileUpload kontrollerinin çoğu ise ücretli olarak karşımıza çıkıyor. Kişisel yorumumla geç kalınmış olsa da artık sonunda AJAX Control Toolkit içerisinde bir FileUpload kontrolü var!

ASP.NET için asenkron çalışan FileUpload kontrolü!

Her zamanki gibi tüm AJAX Control Toolkit kontrollerinde yaptığımız üzere ilk olarak Toolkit'in en güncel DLL'ini sitesinden bilgisayarımıza indiriyor sonra da Visual Studio içerisinde yarattığımız ASP.NET projesine Reference olarak Toolkit içerisinde DLL'i ekliyoruz. Eğer sürekli olarak AJAX Control Toolkit kontrollerini kullanacaksanız Toolbox'a da bu kontrolleri ekleyebilirsiniz.

[ASP.NET]

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

Eğer Toolbox'a eklemediyseniz yukarıdaki şekilde Control Toolkit'i kullanacağınız her sayfada elle gerekli tanımlamaları yapmanız gerekiyor ki mark-up tarafında bu assembly içerisinde kontrolleri kullanabilelim. Eğer Toolbox'a kontrolleri eklerseniz zaten sürükle-bırak işlemi ile kontrolü sayfaya yerleştirebilir hale gelirsiniz. Böylece yukarıdaki kod da otomatik olarak yaratılır. İtiraf etmek gerekirse ben de otomatik yaratılanı yukarıya yapıştırdım :)

[Default.aspx]

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">

    </cc1:ToolkitScriptManager>

    <div>

        <cc1:AsyncFileUpload ID="AsyncFileUpload1" runat="server" />

    </div>

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    </form>

</body>

</html>

Yukarıda basit bir ASP.NET sayfasında AsyncFileUpload kontrolünü bulabilirsiniz. Tabi sayfada ayrıca bir de ToolkitScriptManager bulunuyor ki Toolkit kontrollerini kullanabilelim. Son olarak alt tarafta göreceğiniz Label kontrolünü ise sadece sayfanın Refresh atıp atmadığını kontrol etmek için kullanacağız. Dikkatinizi çektiyse AsyncFileUpload kontrolü herhangi bir UpdatePanel içerisinde değil. Zaten normal olanda budur. Fakat eğer isterseniz AsyncFileUpload kontrolünü bir UpdatePanel içerisinde de rahatlıkla kullanabilirsiniz. İşlevsellikte herhangi bir değişiklik olmuyor.

[VB]

Partial Class _Default

    Inherits System.Web.UI.Page

 

    Protected Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles AsyncFileUpload1.UploadedComplete

        AsyncFileUpload1.SaveAs(MapPath("~/Konum/") & IO.Path.GetFileName(e.filename))

    End Sub

 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Label1.Text = Date.Now.ToLongTimeString

    End Sub

End Class

Yukarıdaki kodun ilk kısmında önemli olan şey AsyncFileUpload kontrolünün UploadedComplete eventını yakalamak. Adından da anlaşılacağı üzere Upload işlemi bittiğinde bu event çalışıyor ve biz de rahatlıkla AsyncFileUpload kontrolünün SaveAs metodu ile dosyamızı sunucuya kaydedebiliyoruz. Kaydederken de diskteki uygun bir yolu vermekte fayda var.

Alt kısımda göreceğiniz kod ise sayfa her refresh attığında sayfaya o anki saat bilgisini saniyesi ile yazdırıyor. Yaptığınız denemede göreceksiniz ki dosya yüklenmesine rağmen saat bilgisi hiç değişmeyecek. Bu da sayfanın tamamen refresh atmadığının bir kanıtı.

Animasyon göstermek istersek?

Yükleme işlemi asenkron olsa da kullanıcıya her zamanki AJAX animasyonlarından birini göstermek çok önemli. Malum zaten AJAX animasyonu olarak bahsettiğim şey aslında basit ve sürekli aynı animasyonu gösteren bir GIF dosyasından farklı değil.

Örnek AJAX Loading animasyonu.
Örnek AJAX Loading animasyonu.

Bu GIF dosyasını bildiğimiz şekilde ASP.NET sayfasına ekledikten sonra AsyncFileUpload kontrolünün ThrobberID özelliğine Image kontrolümüzün ID'sini vermemiz yeterli olacaktır.

[Default.aspx]

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">

    </cc1:ToolkitScriptManager>

    <div>

        <asp:Image ImageUrl="~/ajax-loader.gif" ID="Image1" runat="server" />

        <cc1:AsyncFileUpload ThrobberID="Image1" ID="AsyncFileUpload1" runat="server" />

    </div>

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    </form>

</body>

</html>

Eğer kontrolün tasarımında da hızlı bir değişiklik yapmak isterseniz şimdilik iki farklı tasarım hazır olarak sizi bekliyor.

Kontrolde kullanılabilecek hazır iki farklı tasarım var.
Kontrolde kullanılabilecek hazır iki farklı tasarım var.

Hepinize kolay gelsin.

Thursday, October 01, 2009 9:27:14 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET | ASP.NET 3.5  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.