26 Eylül 2007

Web Sayfalarını Temel Bir Class'tan Kalıtmak

Nesne yönelimli programlamanın (OOP) en temel yapı taşlarından biride kalıtımdır(inheritance). .NET mimarisinde her yerde olduğu gibi ASP.NET web uygulamalarında da gerek sayfa tiplerinde gerekse kontrollerde kalıtımın getirilerini ve etkilerini önemli derecede görüyoruz. Fakat eğitimlerimde ve kendi çevremde gördüğüm kadarıyla kalıtımın web sayfalarında en güzel uygulanabileceği noktalardan birisini kaçırıyoruz.

Şöyle bir senaryo üzerinden anlatmaya çalışacak olursam; bir projede kullandığımız birçok sayfanın ortak işlevleri olsun. Mesela bu sayfaların tamamında online kullanıcı sayısını görüntülemek isteyebiliriz. Yine sayfanın title bilgisini veritabanından dinamik olarak çekip görüntülemek isteyebiliriz. Normal şartlarda aklımıza gelen ilk yol tüm sayfaların code-behind kısmında bu işlemleri metot-property olarak tek tek yazmak olabilir. Yine bu işleri yapan bir class yazarak her sayfada class'ın nesne örneğini elde ederek bu işlemi instance üzerinden yürütmekte akla gelen bir diğer yol olabilir. Fakat benim bahsetmek istediğim yol bu iki yoldan da daha kolay ve pratik olacaktır.

Bildiğimiz gibi aspx uzantılı sayfalarımız System.Web.UI.Page sınıfından kalıtılarak elde edilir. Eğer kendimiz için bir sayfa prototipi çıkarır ve bunu System.Web.UI.Page sınıfından kalıtılan BasePage isminde bir class olarak oluşturursak, artık Default.aspx gibi bir sayfanın class'ını System.Web.UI.Page yerine BasePage gibi bir class'tan kalıtacak olursak istediğimiz işlemi gerçekleştirmiş olacağız. Anlaşılmadı mı? O zaman örnek kodlara bakalım.

BasePage.cs
public class BasePage: System.Web.UI.Page
{
public int OnlineKullaniciSayisi
{
get {
// Online kullanıcı sayısını bul ve return ile döndür
}
}
public BasePage()
{
// Tüm sayfalar ilk çalıştırıldığında yapılması istenilen değişiklikler
// constructor'da yapılabilir. Örneğin; sayfanın adını çözümle,
// veritabanına git ve sayfanın ziyaret edilme sayısını 1 arttır...
this.Title = "Dinamik oluşan başlık bilgisi...";
}
}

Default.aspx
public partial class Default : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Sitedeki online kullanıcı: " +
this.OnlineKullaniciSayisi.ToString());
}
}

Böylece artık tüm sayfaları BasePage isimli class'tan kalıtarak sayfalar ile ilgili temel ve ortak işlemleri daha kolay yönetebilir hale getirebilirsiniz.

24 Eylül 2007

ASP.NET 2.0 Tema(Theme) Kullanımında Bir Sorun ve Çözümü

Az önce Rick Strahl'ın blogunda okuduğum bir bilgiyi sizlerle paylaşmak istedim. Bildiğiniz gibi bir ASP.NET sayfasında tema(theme) kullandığınızda ilgili App_Themes alt klasörünün içerisindeki css ve skin dosyalarındaki stiller sayfanıza uygulanır. Fakat bu stilleri sayfa içerisine ekstra css kodları ekleyerek değiştirmeye çalıştığınızda, eklenen css kodları maalesef temadan gelen css kodlarını override edemediği için, yeni stilleri sayfaya uygulamada sıkıntı yaşarsınız. Eğer böyle bir sıkıntı ile karşılaşırsanız; eklenecek css kodunu sayfanın form etiketi içerisine yerleştirmek bu sorunu aşmanıza yardımcı olabilecektir.

Rick Strahl'ın bu konuyla ilgili ASP.NET and Styles & CSS Embedding yazısını okumak için buraya tıklayabilirsiniz.

22 Eylül 2007

Ajax View JavaScript Instrumentation Proxy

Microsoft'un web geliştiriciler için sunduğu bu araç ile hazırladığınız web uygulamalarında kullanılan JavaScript kodlarının işleyişini ve performansını test edebilirsiniz. Özellikle AJAX geliştiricilerin ilgisini çekeceğini düşündüğüm kullanışlı bir araç. Uygulama sadece performans ile ilgili istatistikleri değil, aynı zamanda uygulamada karşılaşılan fakat tarayıcı tarafından önemsenmeyen JavaScript hatalarını da listeliyor.

Kullanımı ilk bakışta biraz karışık gibi görünsede, bu linkteki 515 kb.lık bir dosyayı bilgisayarınıza yükleyip, bu linkteki dökümanı da adım adım takip edecek olursanız izleme işlemlerinin sonuçlarına kolay bir şekilde erişebilirsiniz. Unutmadan; programla işiniz bittiğinde Internet Explorer'ın proxy ayarlarını düzeltmeyi unutmayın.

12 Eylül 2007

.NET ile Programlamaya Giriş Seminerine Davetlisiniz

15 Eylül Cumartesi günü İstanbul-Bakırköy'de .NET ile Programlamaya Giriş semineri veriyor olacağım. Temel olarak .NET ortamını tanımak ve bu ortamda hızlı uygulama geliştirmek (Rapid Application Development) üzerine konuşma yapacağım bu seminere özellikle programcılığa yeni başlayan veya başlamayı düşünen arkadaşların katılımlarını bekliyorum.

Ayrıntılı bilgi ve kayıt işlemi için buraya tıklayabilirsiniz.

09 Eylül 2007

PC MAGAZINE'de Yazmaya Başlıyorum

Ekim ayı itibariyle PC MAGAZINE dergisinde yazmaya başlıyorum. Bundan sonra bir aksilik çıkmazsa ASP.NET konusundaki bilgilerimi sizlere PC MAGAZINE dergisi aracılığıyla da ulaştırıyor olacağım. İlk yazımın başlığı ASP.NET AJAX ile Web Sayfaları Geliştirmek olacak.

Bu olayda her türlü yardımlarından ve desteğinden dolayı değerli Ali Rıza BABAOĞLAN'a teşekkürlerimi blogumdan da sunmak isterim.

05 Eylül 2007

INETA Türkiye Toplantısı

Bugün INETA (International .NET Association) Türkiye Toplantısını Microsoft İstanbul'da gerçekleştirdik. nedirTV?com Topluluk Lideri olarak benimde bulunduğum bu toplantıyı INETA MEA Bölge Başkanı Aykut Taşdelen ve INETA Türkiye Başkanı Bülent Sözge'nin katılımlarıyla gerçekleştirdik. Toplantıda INETA'ya üye olan topluluklar olarak önümüzdeki dönemlerde yapabileceğimiz organizasyonlarla ilgili olarak uzunca konuştuk ve tartıştık. Önümüzdeki günlerde eminim ki bizleri oldukça güzel organizasyonlar bekliyor olacak.

04 Eylül 2007

Substitution ile Önbellekleme İşlemleri

ASP.NET 2.0 ile birlikte gelen yeni kontrollerden biri olan Substitution kontrolünü önbellekleme işlemlerinde kullanabiliyoruz. Tamamı önbellekten getirilen bir sayfanın içerisinde sadece belirli bir alanın dinamik şekilde oluşturulması için bu kontrolü kullanabiliriz. Aşağıdaki görsel derste Substitution kontrolünün nasıl kullanabileceğini görebilirsiniz.


ASP.NET 2.0'da Substitution ile Önbellekleme İşlemleri

Türkiye'deki ilk SilverLight Uygulaması: SilverLightTV

Değerli arkadaşım Tayfun AKÇAY'ın sitesinde gördüğüm ve ilgiyle okuduğum haberi sizlerle paylaşmak istedim. Ankara'dan uzun süredir uzak kaldığım için bu tip gelişmelerden ancak 3. şahıs olarak haberdar olabiliyorum. Değerli hocam ODTÜ BÖTE Bölüm Başkanı Prof.Dr. M.Yaşar ÖZDEN'in emekleri ile hazırlanan ve Türkiye'deki ilk SilverLight örneği olma özelliğini taşıyan bu projeye buradaki linkten ulaşabilirsiniz. İlgili sayfada SilverLight plugin'i aracılığıyla 24 saat kesintisiz olarak NTV kanalını canlı yayında izleyebilirsiniz.

30 Ağustos 2007

.NET Framework 3.5 ve VS 2008 ile Gelen ASP.NET AJAX Yenilikleri

Geçtiğimiz günlerde Visual Studio 2008 (Orcas) Beta 2 sürümünü kullanmaya başladım. Tabi ki ilk olarak web uygulamalarında ne gibi yenilikler getirilmiş bunları araştırmaya koyuldum. Özellikle ASP.NET AJAX tarafında önemli gelişmeler var. Şimdilik keşfettiğim birkaç yeniliği sizlerle paylaşacak olursam;

- .NET Framework 3.5 ile birlikte artık ASP.NET uygulamalarında tam olarak AJAX desteği getirilmiş durumda. Yani .NET 3.5 sürümünde açılan her ASP.NET projesi artık AJAX desteği ile geliyor ve bilgisayarımıza AJAX Extension'larını kurmaya gerek kalmıyor. ASP.NET 2.0'daki bir çok kontrolde yaşanan uyumsuzluklarda artık çözülmüş durumda.

- .NET Framework 2.0 ile geliştirilen bir AJAX projesi, sorunsuz bir şekilde ve kodlarında en ufak bir değişiklik dahi yapılmadan .NET Framework 3.5 ile çalışabilir hale getirilebiliyor.

- Gelişmiş Control Toolkit entegrasyonu! Artık Control Toolkit'de bulunan kontrolleri, ASP.NET kontrolleri ile çalıştırmak çok daha kolay. Yeni getirilen "Add Extender" menüsünden Control Toolkit'teki bir Extender kontrolünün ASP.NET kontrollerine bağlanması ve kullanılması çok kolay bir şekilde gerçekleşebiliyor. Tabi bu işlem için bilgisayarınıza AJAX Control Toolkit'in Framework 3.5 için yazılmış versiyonunu indirmeniz gerekli. Bu linkten ilgili dosyayı indirebilirsiniz. Aşağıdaki ekran çıktılarında bir TextBox kontrolüne AJAX Control Toolkit'teki CalendarExtender kontrolünü nasıl bağlayabileceğimizi görebilirsiniz.

Adım-1: SmartTag ikonundan Add Extender seçilir

Adım-2: Kullanılacak Control Toolkit Extender'ı seçilir

Adım-3: Sayfa çalıştırıldığında kullanıcı textbox'a tıkladığında popup olarak seçilen Control Toolkit kontrolü açılır.

ASP.NET AJAX İstanbul Semineri - Sunum ve Örnekler

Dün İstanbul-Bakırköy'de gerçekleştirdiğim seminerde ilk defa Visual Studio 2008 (Orcas) ve .NET Framework 3.5 ile birlikte gelen ASP.NET AJAX yeniliklerinden de bahsettim. 25 kişinin katıldığı ve oldukça güzel geçen bu seminerin sunum ve örnek uygulamalar dosyasını aşağıdaki linklerden indirebilirsiniz.

ASP.NET AJAX Sunum
Örnek Uygulamalar

26 Ağustos 2007

ASP.NET AJAX Semineri (Bakırköy-İstanbul)

29 Ağustos Çarşamba günü 15.00 - 17.00 saatleri arasında Microsoft Akademik Yazılım Geliştiricileri Grubu ve nedirTV?com olarak İstanbul'da gerçekleştireceğimiz ASP.NET AJAX seminerine davetlisiniz.

Detaylı bilgi ve kayıt işlemi için buraya tıklayabilirsiniz.

ASP.NET - CacheDependency ile Önbellekleme İşlemleri

SoapBox'ta video yayınlamak için uzun zamandır fırsat bekliyordum. İlk uygun zamanımda hazırlamış olduğum CacheDependency sınıfı ile önbellekleme işlemleri videosunu aşağıdaki kutudan izleyebilirsiniz.


ASP.NET - CacheDependency ile Önbellekleme İşlemleri

24 Ağustos 2007

ASP.NET 2.0 - Performans Yönetimi Sunumu

Geçtiğimiz günlerde vermiş olduğum ASP.NET 2.0 - Performans Yönetimi semineri ile ilgili sunum dosyasını ve uygulama dosyalarını aşağıdaki linklerden indirebilirsiniz.

Sunum Dosyası
Uygulama Dosyası

16 Ağustos 2007

Netron Teknoloji Haftası 2007’de buluşalım

Netron Teknoloji Haftası 2007 (TechWeek 2007) bu yıl 3-12 Eylül tarihleri arasında Netron - Altunizade Plaza'da yapılıyor olacak. Gerçekleştirilecek kurumsal seminerlerle bilişim dünyasındaki profesyonelleri ağırlayacak olan bu etkinlikte, ben de 6 Eylül Perşembe günü 14:00-15:30 saatleri arasında "Developing Web Applications with Asp.Net 2.0 Ajax" sunumunu gerçekleştiriyor olacağım.

Detaylı bilgiler ve kayıt işlemleri için bu linke göz atabilirsiniz.

AJAX Nedir?

Wikipedia'dan alıntıdır...

En yaygın kullanım alanı sayfayı tekrardan yüklemeye gerek kalmadan sayfada görünür değişiklikler yapmaktır. XMLHttpRequest kullanarak birden fazla bağımsız işlemi yapabilir. Bazı bilişim uzmanları, AJAX'ın HTML ve XML'den sonra en yenilikçi Internet yazılımı olduğunu ve Web 2.0'ı bitirip, 3. evreye ulaştırdığını iddia etmişlerdir.

AJAX'ı bu kadar kısa ve net şekilde tanımlayan kişiye "Klavyene sağlık" demek düşer sanırım.

11 Ağustos 2007

Programcılara özel font: Consolas

Microsoft'un Visual Studio'da uygulama geliştiren programcılar için özel olarak sunduğu font olan Consolas'ı yaklaşık 1 yıldır kullanıyorum. Hatta yaklaşık 1 yıldır da bu fontun duyurusunu ve linkini blogumdan yapacağım diyorum ama nasip bugüneymiş:) Farklı ve göze hoş gelen bir font tipi Consolas. Hatta bazı zamanlar kod yazma azmimi yükselttiğini söylersem, biraz abartmış olur muyum acaba? Consolas'ı kullanmak isteyenler bu linkteki dosyayı indirebilirler.

Not: Consolas font tipi Windows Vista işletim sistemi ile birlikte gelen yeni fontlar listesinde bulunuyor.


(Consolas fontunun görünümü)

30 Temmuz 2007

GridView'de bulunan toplam kayıt sayısı

GridView içerisine yüklenen toplam kayıt sayısına GridView kontrolü üzerinden ulaşmakta zorluk yaşabilirsiniz. GridView kontrolünü eğer SqlDataSource kontrolüne bağladıysanız, SqlDataSource nesnesi üzerinden hareket ederek çok kolay bir şekilde sonuca ulaşabilirsiniz. SqlDataSource kontrolünün Selected isimli eventini bağlayacağınız bir metoda aktarılan e parametresinin AffectedRows özelliği size toplam kayıt sayısını getirecektir. Aşağıdaki örnek kodları web uygulamalarınızda deneyebilirsiniz.

protected void Page_Load(object sender, EventArgs e)
{
  SqlDataSource1.Selected+=new SqlDataSourceStatusEventHandler(SqlDataSource1_Selected);
}

void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
  Response.Write(e.AffectedRows); // Toplam kayıt sayısını getirir
}

27 Temmuz 2007

ASP.NET Futures

.NET Framework 3.0 ile gelen yeniliklere her ne kadar tam adapte olamasakta, bir yandan da gözlerimizi diğer dil ve teknolojilerde olacak yeniliklere çevirdik. ASP.NET'in bir sonraki sürümü olacağı tahmin edilen 3.5 ile birlikte gelecek yeniliklerin beta çalışmaları ise hızla devam ediyor. Takip ettiğim kaynaklara göre ASP.NET'in yeni sürümünde 2.0'da olduğu kadarıyla köklü değişiklikler olmayacak gibi. Fakat geçtiğimiz günlerde duyurulan ASP.NET Futures paketini biraz inceleyince yine de web geliştiriciler olarak bizleri heyecanlandıracak birkaç yeni kontrolle karşılaştım. Web 2.0 dalgası ile köklü değişikliklere giden internet dünyasında önümüzdeki süreçte hiç kuşkusuz zengin görsel içeriklere sahip siteler ve kullanıcının etkileşimli şekilde kullanabileceği siteler daha da popüler hale gelecek. Yine uygulama geliştiriciler olarak bizlerin de bu tip ortamları kolay ve hızlı bir şekilde hazırlayabilmemiz bir o kadar önemli olacaktır.

ASP.NET Futures paketini biraz inceleyecek olursanız ASP.NET AJAX, SilverLight ve XAML eklentileri ile daha şimdiden .NET ortamında daha interaktif uygulamalar yapabilememiz sağlanmış. Özellikle Media, History ve Dynamic Data Control grubu altında yer alan data kontrolleri gerçekten etkileyici olmuş. Şimdilik detaylı bir dökümantasyonu olmasa da aşağıdaki linkler ASP.NET Futures hakkında bilgi edinmek için yeterli olacaktır.

ASP.NET Futures Quick Start (Başlangıç Rehberi)
ASP.NET Futures paketini bilgisayarına yükle
ASP.NET Futures - Dynamic Data Control'leri ile ilgili videoyu izle

ASP.NET Futures ile birlikte IronPhyton ve ManagedJScript gibi iki dinamik dil desteğinin de geldiğini bir dipnot olarak ekleyeyim.

Visual Studio 2008 ve SQL Server 2008

Mehmet Emre'nin blogunda okuduğum bir haberi paylaşmak istedim sizlerle. Visual Studio 2008 ve Microsoft SQL Server 2008 sürümleri 27 Şubat 2008 tarihinde resmen duyurulacak; yani bugünü baz alırsak tam 6 ay sonra! Başka şekilde düşünecek olursak önümüzdeki sene bu zamanlarda Visual Studio 2008 ve SQL Server 2008 hayatımızdaki yerini haylice almış olacak.

Zaman gerçekten çok çabuk geçiyor. Şimdiden beta sürümlerini edinip kullanmaya başlamakta fayda vardır diye düşünüyorum.

26 Haziran 2007

"Operation must use an updateable query" hatası ve çözümü

Bir ASP.NET uygulamasında kullandığım Access veritabanındaki işlemlerde "Operation must use an updateable query" hatası ile karşılaştım. Local makinamda herhangi bir problem oluşmazken, sunucuda yapmak istediğim INSERT, UPDATE ve DELETE işlemlerinde çıkan problemin sebebi sorgu cümleleri ile ilgili değil de, dosya okuma-yazma izinleri ile ilgili olduğunu öğrendim. Bu tip bir hata ile karşılaşırsanız mdb dosyasının bulunduğu dizinde NETWORK SERVICE isimli kullanıcıya yazma hakkı vermeniz gerekiyor.