29 Ekim 2008

INETA Capital Hit'in Ardından

Blogspot'un kapatılmasından dolayı son günlerde bloguma yazmaktan ziyade blogumu kendi domain'ime taşıma işlemleriyle uğraşıyorum. Ama bu aralıkta Ineta Capital Hit'in bıraktığı izlenimleri yazmazsam da olmaz. Geçtiğimiz hafta Ankara'da dolu dolu iki gün geçirdik bilişimi ve yazılımı seven insanlarla. Etkinlikte anlatılanlar, panel, etkinlik arasında katılımcılarla yaptığımız konuşmalar gerçekten görmeye, izlemeye dinlemeye değerdi. Fakat herşeyden ötesi Ankara'ya giderken minibüste yaşadığımız filmlik serüvenler tek kelimeyle mükemmeldi. Tüm INETA ekibine, minibüs şoförümüze ve muavinlerimize teşekkür ediyorum bu yolculuk için:)
Etkinlikten bir hatıra fotoğrafı ve etkinliğimizi kısaca özetleyen süper bir videoyu aşağıda bulabilirsiniz.

20 Ekim 2008

ASP.NET MVC Framework Beta Duyuruldu

ASP.NET MVC ürün olma yolunda en önemli adımlardan birini gerçekleştirdi ve beta versiyonuyla piyasaya sürüldü. Özellikle veritabanı işlemlerinin yoğun şekilde yapıldığı orta ve büyük çaplı projelerde kullanılabilecek olan bu yapı önümüzdeki aylarda 1.0 sürümüyle artık resmen ASP.NET geliştiricilerinin kullanımına hazır olacak. Tabi ki ASP.NET MVC'nin tam anlamıyla stabil hale gelmesi için .NET Framework 4.0'ı beklemek gerekebilir.

Benim gözüme çarpan ilk yenilikler Visual Studio tarafına baktığımızda kod yazımını hızlandıracak bazı yeniliklerin gelmesi ve artık proje şablonuna eklenen Scripts klasörüne ASP.NET AJAX, jQuery gibi JavaScript kütüphanelerinin ekli olarak gelmesi. Yanılmıyorsam jQuery de resmi olarak ilk defa bir Microsoft ürünüyle ile birlikte anılmaya başlandı. (Ki gelecekte daha da fazla anılacak emin olabilirsiniz)

ASP.NET MVC Beta'yı bilgisayarınıza kurmak için bu linki
ASP.NET MVC ile ilgili detaylı bilgilere erişmek için http://www.asp.net/mvc linkini kullanabilirsiniz.

14 Ekim 2008

nedirtv v2.0 Beta Yayınına Başladı

nedirtvUzun süren çalışmalarımız sonucunda nedirtv?com'un yeni versiyonu test yayınlarına başladı. Yayın hayatına 2006 yılında başlayan, fakat gerek sunucudan kaynaklanan, gerekse altyapısındaki sorunlar nedeniyle tam istenilen şekilde işlemeyen nedirtv'nin artık daha sağlıklı ve kullanılabilir bir hale geldiğini söyleyebilirim. Ajax dışında tüm Web 2.0 nimetlerini kullandığımız bu arayüzün gerek tasarım gerekse işleyiş açısından çok daha kullanışlı olacağını düşünüyorum.

Gelişen editör ekibimiz ile yakında çok daha önemli gelişmelerle karşınızda olacağız. nedirtv v2.0 beta'yı http://www.nedirtv.com/ adresinden inceleyebilirsiniz. Beta aşamasında olduğu için elbetteki sorunlar ve eksiklikler mevcut. Sitede karşılaştığınız sorunlar olursa veya eleştirileriniz olursa üst kısımdaki Sorun Bildir linkinden bizleri haberdar edebilirsiniz.

Çok yakında nedirtv v2.0'ın release olmuş versiyonuyla sizlerde birlikte olmak dileğiyle...

Not: Bu projenin geliştirilmesinde çok büyük emeği geçen sevgili Serkan PEKTAŞ'a teşekkürlerimi bir de blogum aracılığıyla göndermek istiyorum.

09 Ekim 2008

İstanbul Ticaret Üniversitesi Bilişim Günleri Etkinliğinde Konuşmacıyım

İstanbul Ticaret Üniversitesi - Teknoloji Günleriİstanbul Ticaret Üniversitesi'nin bu yıl ilk kez düzenleyeceği Bilişim Günleri etkinliğinde ASP.NET Uygulamalarında LINQ başlıklı oturumda konuşmacı olarak yer alacağım. 17-18 Ekim 2008 tarihlerinde gerçekleşecek ve sektörümüzden önemli isimlerin yer alacağı bu etkinlikte değerli iş arkadaşlarım Bülent Sözge ve Burak Batur'unda sunumları gerçekleşecek. Bu önemli etkinliği kaçırmamanızı tavsiye ediyorum.

Aşağıda etkinlikte yer alan bazı oturumların bilgilerini bulabilirsiniz.


17 Ekim 2008 Cuma
15:15-16:15
ASP.NET Uygulamalarında LINQ (Uğur UMUTLUOĞLU)

18 Ekim 2008 Cumartesi
13:30-14:30
SQL Server 2008 (Bülent SÖZGE)

16:00-17:00
What is SharePoint? (Burak BATUR)

08 Ekim 2008

Mono 2.0 Resmen Duyuruldu

mono20_banner .NET Framework'ün platformdan bağımsızlığı adına oldukça önemli bir haber aslında bu. Zira Mono 2.0'ın resmi olarak duyuruldu, hem de sadece Linux işletim sistemleri için değil, Mac işletim sistemleri içinde! Evet yanlış duymadınız, .NET Framework uygulamaları artık Mono kurulu Linux ve Mac işletim sistemlerinde çalıştırılabilecek. Ayrıca Mono projesinin internet sitesinde yaptığım araştırmalarda Mono'nun IPhone üzerinde de çalıştırılabileceğine dair ibarelerde buldum ama net açıklama gözüme çarpmadığı için bu konuda kesin birşey söylemek doğru olmayabilir.

Projenin bu denli genişlemesinde elbetteki geçtiğimiz aylarda Microsoft ve Novell'in bazı konularda ortaklaşa çalışma kararı almalarının etkisi oldukça büyük. Zira Mono 2.0 projesi Novell'in desteğiyle geliştirilerek release olmuş durumda.

Mono kullanmayan birisi olarak sadece bu haberi sizlere duyurmak istedim. Test etme şansını bulanlar olursa bilgi ve tecrübelerini bizlerle paylaşmayı sakın unutmasınlar. Detaylı bilgi ve gerekli yüklemeler için Mono projesinin resmi web sitesini ziyaret edebilirsiniz.

05 Ekim 2008

INETA Capital Hit

Geçtiğimiz aylarda gerçekleştirdiğimiz ve yazın en sıcak günlerine rağmen yoğun ilgi alan INETA Summer Hit'in ardından bu kezde INETA Capital Hit ile Anadolu yollarındayız. INETA Türkiye olarak değişen içeriğimizle yine önemli konularındaki bilgi ve tecrübelerimizi 18-19 Ekim 2008 tarihlerinde Çankaya Üniversitesi'nde Ankara'daki katılımcılarla paylaşıyor olacağız. Sektörümüzde sezon başlangıcı olarak kabul edilen şu anki zaman diliminde sanırım ülkemiz adına muthiş bir etkinlikle bu sezonu açıyor olacağız :)

Silverlight 2.0, IIS 7.0, LINQ, WPF, Expression Blend, WCF, Internet Explorer 8.0 ve ADO.NET Data Services gibi oturumların gerçekleştirileceği etkinlikte ben yine LINQ sunumumla yer alacağım. Bu önemli etkinliğe yolu Ankara'ya düşen tüm yazılımcıları bekliyoruz. Kayıt işlemi için bu linki kullanabilirsiniz.

Ineta Capital Hit

01 Ekim 2008

jQuery Artık Visual Studio ile Bütünleşik Hale Gelecek!

jQuery Artık Visual Studio ile Bütünleşik Hale Geliyor Microsoft web uygulama geliştiricileri için önemli bir haberin duyurusunu geçtiğimiz günlerde gerçekleştirdi. jQuery adı verilen ve özellikle JavaScript ile uygulama geliştiren web programcılarının yakından tanıdığı ücretsiz JavaScript kod kütüphanesinin artık Visual Studio'nun bir parçası haline getirileceği ve ASP.NET programcılarının bu aracı çok daha kolay şekilde kullanabileceğini belirtti. Bu haberlere göre jQuery artık Visual Studio'nun bir parçası olacak, gerek uygulamalara entegre edilmesi, gerek intelli-sense penceresindeki yazım desteği, gerekse dokümantasyonu açısından tam desteklenir hale gelecek.

Aslında bu gelişmeye çokta şaşırdığımı söyleyemeyeceğim. Zira web dünyasındaki gelişmeleri yakından takip edenler jQuery kullanımının özellikle son aylarda çığ gibi büyüdüğünü, artık jQuery fanlarının dahi oluştuğunu görmüşlerdir. Bundan yaklaşık 2.5 ay önce yazdığım bir yazımda da ilerleyen zamanlarda ASP.NET AJAX'ın jQuery'den etkilenerek daha da gelişeceğini belirtmiştim. Artık jQuery tamamen yapıyla bütünleşerek ASP.NET AJAX'ı çok daha kullanılır hale getirecektir.

Peki nedir jQuery?

jQuery bir JavaScript kod kütüphanesidir. Ama öyle sıradan bir kütüphane değil, logodaki "write less, do more" yani "daha az yaz, daha fazla iş yap" sloganını hakkıyla yerine getiren bir kütüphane! Yapısını ve örneklerini incelediğinizde tek bir satırlık kod ile bile HTML kodlarınıza hükmedebileceğinizi, dinamik olarak istemci tarafında JavaScript ile ilgili bir çok işlemi kolayca yapabilmenizi sağlayan bir araçtır. Yapısındaki nesneler aracılığıyla çok basit şekilde zor işleri yapabilmenizi, grafiksel olarak sayfalarınıza efektler uygulayabilmenizi, yine basit şekilde sayfanızı AJAX destekli şekilde çalıştırabilmenizi sağlayan bu kütüphaneyi ASP.NET ile birleştirdiğimizde karşımıza şöyle bir sonuç çıkacaktır: ASP.NET sunucu tarafında yapacağımız bir çok işlemi basite indirgemiş ve kolay yapılabilir hale getirmişti. ASP.NET AJAX ve jQuery de istemci tarafında yapacağımız işlemleri çok daha pratik şekilde yapabilmemizi sağlayacaktır.

jQuery son yıllarda popüler hale gelen, hızlı ve az kod yazarak istemci tarafında işlemleri kolaylaştıran JavaScript kod kütüphaneleri furyasının en sevilen, en kullanılan ürünü olarak son bir yıl içerisinde adını oldukça duyurdu. Çok küçük boyutlu olmasına rağmen(15 Kb.) boyundan büyük işleri başarabilen bu kütüphane AJAX'ın hayatımıza fazlasıyla girmesinden sonra bu denli büyüdü ve artık ciddi bir marka haline geldi.

Özellikle uygulamalarında JavaScript ve AJAX kullanan arkadaşlara tavsiyem jQuery'nin resmi web sitesini ziyaret etmeniz ve Documentation ile Tutorials bölümlerini incelemeniz. Tabi ki bilgisayarınıza jQuery'i indirip ASP.NET uygulamalarınızda test etmeyi de unutmamak lazım:) Önümüzdeki günlerde fırsat bulursam jQuery ile ilgili yazılara blogumda daha sık yer vermeye çalışacağım.

25 Eylül 2008

Netron Techweek'deki Sunumlarım ve Örnek Kodlar

Bu hafta içerisinde gerçekleşen ve benimde iki oturumda konuşmacı olarak yer aldığım Netron Techweek her sene olduğu gibi sektördeki önemli gelişmeleri takip edebilmek adına herkes için güzel bir etkinlik oldu. Özellikle ASP.NET MVC Framework oturumumda, hala gelişme aşamasında olan ve henüz tam bir ürün kimliğine bürünmemiş bir yapının bile katılanların ciddi anlamda ilgisini çekmesi ve olumlu tepkiler alması, ilerleyen günlerde MVC uygulamalarındaki artacak eğilimin bir işaretiydi. LINQ'in büyüleyici ortamının özellikle bu ortamı yeni tanıyanlarda bıraktığı izlenimler hakkında yorum dahi yapmama gerek yoktur diye düşünüyorum :)

Aşağıdaki linklerde gerçekleştirdiğim sunumları ve örnek kod dosyalarını bulabilirsiniz.

ASP.NET MVC Framework - Sunum Dosyası
ASP.NET MVC Framework - Örnek Kodlar

LINQ Overview - Sunum Dosyası
LINQ Overview - Örnek Kodlar

16 Eylül 2008

Netron Techweek Etkinliğinde Konuşmacıyım

Netron Techweek Geleneksel hale gelen ve bilişim sektörünün en önemli etkinliklerinden olan Netron Techweek (Teknoloji Haftası) bu yıl 22-26 Eylül tarihleri arasında Netron Altunizade Genel Merkezi'nde gerçekleşecek. Infrastructure ve Development kategorilerinde yirminin üzerinde oturumun olacağı bu beş günlük etkinlikte benim de iki farklı konuda sunumlarım gerçekleşecek.

Gerçekleştireceğim sunum konuları ve zaman bilgilerini aşağıda bulabilirsiniz. Yine etkinlik ile ilgili detaylı bilgilere ve kayıt formuna erişmek için aşağıdaki linkleri kullanabilirsiniz. Bu önemli etkinliği kaçırmamanızı tavsiye ediyorum.

Konuşmacı olduğum oturumlar:

Konu Zaman
ASP.NET MVC Framework 23 Eylül 2008 Salı / 14:30-16:30
LINQ Overview 24 Eylül 2008 Çarşamba / 14:30-16:30

Etkinlik Takvimi
Kayıt Formu

09 Eylül 2008

LINQ to SQL'de Insert, Update ve Delete İşlemleri

LINQ to SQL ile Insert,Update,Delete İşlemleriBildiğiniz gibi LINQ adını verdiğimiz dile entegre sorgularla artık .NET ortamında koleksiyon tabanlı nesneleri sorgulayabiliyoruz. Buradaki sorgulamaların temel amacı normalde foreach döngüleri, if-else kontrol yapılarıyla yapabildiğimiz uzun ve karmaşık işlemleri tıpkı T-SQL'de olduğu gibi sade Select sorguları yazarak daha basit hale getirmektir. LINQ'in asıl çıkış noktası ise uygulama içerisinde büyük ve karmaşık olan veri nesnelerini (entity nesnelerini) kolay ve pratik şekilde sorgulanabilmesini sağlamak ve büyük çaplı projelerde yazılımcıların en büyük yüklerinden birisini hafifletmektir.

LINQ to SQL ile ilgili olarak en çok sorulan sorulardan birisi de Insert, Update ve Delete işlemlerinin nasıl gerçekleştirilebileceği. LINQ ifadelerinde Insert, Update ve Delete gibi anahtar kelimelerle sorgular yazılamadığını söylemeye gerek yok sanırım:) Dolayısıyla LINQ to SQL'de amaç veri nesneleriyle çalışmak ise bir şekilde bu tip işlemleri de gerçekleştirebilmek gerekecektir. LINQ to SQL Classes (.dbml) dosyaları veritabanında yer alan veri nesnelerini doğrudan uygulamamıza class'lar olarak aktarmamızı sağlamaktadır. Örneğin Northwind veritabanındaki Product tablosunu uygulamamızda veri class'ı olarak oluşturduğumuzda DataContext nesnesinin içerisindeki Products özelliği(property) Products tablosundaki ürünleri koleksiyon olarak döndürecektir. İşte bu property'nin bazı metotları bizim Insert, Update ve Delete gibi işlemleri gerçekleştirebilmemizi sağlayacaktır. Bu metotlardan;

- InsertOnSubmit, Insert işlemini
- DeleteOnSubmit, Delete işlemini

gerçekleştirebilmektedir. Peki Update işlemi nerede? Update işlemini ise LINQ sorgusu sonucundan gelen kayıt veya kayıtların değerlerini değiştirerek gerçekleştirebileceğiz. Buradaki her üç işleminde sonuçlarının veritabanına aktarılabilmesi için DataContext nesnesinin SubmitChanges isimli metodunun çalıştırılması yeterli olacaktır. Aşağıdaki kod parçalarında LINQ to SQL'de veri ekleme, silme ve güncelleme işlemlerinin nasıl yapılabileceği görülmektedir. Kodlarda yer alan northWind adındaki nesne DataContext nesnemizdir.

Product eklenecekUrun = new Product() { ProductName="Acer Aspire 5100", UnitPrice=1290, UnitsInStock=15, CategoryID=9 };
northWind.Products.InsertOnSubmit(eklenecekUrun); // Eklenecekler listesine yeni bir ürün eklendi

Product guncellenecekUrun = northWind.Products.First(u => u.ProductID == 69);
guncellenecekUrun.ProductName = "HP Pavilion 3355"; // Seçilen ürünün ProductName özelliği değiştirildi

Product silinecekUrun = northWind.Products.First(u => u.ProductID == 79);
northWind.Products.DeleteOnSubmit(silinecekUrun); // Seçilen ürünü silinecekler listesine at

northWind.SubmitChanges(); // Yukarıda yapılan güncellemeler veritabanına gönderildi

05 Eylül 2008

CLR SQL ile Hazırlanan Nesneyi Visual Studio'da Debug Etmek

SQL Server 2005 ve ADO.NET 2.0 ile gelen yeniliklerden sonra çoğunuzunda bildiği gibi .NET ortamında hazırladığınız nesneleri SQL Server sunucusu üzerinde CLR (Common Language Runtime) desteğiyle çalışmasını sağlayabiliyoruz. Oluşturulan bu nesnelerin IL çıktıları .dll'dir, dolayısıyla ilk bakışta nesneleri kodlama aşamasında nasıl debug işlemine tabi tutacağımız bizler için soru işareti olabilir. Bu başlıkta .NET tabanlı bir dilde yazdığımız CLR SQL kodlarımızın çalışmasını debug etmek, kodların takibini ve analizini yapmak için oluşturulan projede nasıl bir yol izleyeceğimizi anlatmaya çalışacağım.

Test.sql dosyasına eklenen SQL cümlesi"SQL Server Projects" şablonunu oluşturduğunuzda proje içerisinde Test Script adında bir klasör ve içerisinde örnek kodları içeren Test.sql adında bir dosya bulunmaktadır. Debug işlemi için öncelikli olarak nesneyi çalıştıracak bir SQL ifadesine ihtiyacımız olacaktır. Bu dosya SQL ifadesinin veya ifadelerinin saklanacağı yerdir. Nesneyi oluşturduktan sonra öncelikli olarak bu dosyaya nesneyi test etmemizi sağlayan SQL cümlesini ekliyoruz.

clrsql_debug_image3 Bu işlemin ardından Test.sql dosyasını projemizin varsayılan script dosyası olarak seçmemiz gerekiyor. Solution Explorer'da dosyanın üzerine sağ tıkladığımızda karşımıza çıkan Set as Default Debug Script seçeneğinden dosyayı varsayılan debug dosyası olarak belirliyoruz. İlgili seçenek sağ kısımda yer alan resimde görülmektedir.

Nesneyi oluşturduktan sonra debug işlemini başlatacağımız satıra breakpoint ekliyoruz. Bu işlemin ardından projemizi yayınlayıp IL çıktısını üretmemiz ve çalıştırmamız gerekecektir. Bu işlem için Solution Explorer'da projemizin üzerine sağ tıklayıp Deploy seçeneğini seçiyoruz.

Artık projeyi debug modunda çalıştırıp kodların adım adım takibini yapabiliriz. Bu işlem için yine Solution Explorer'dan az önce debug dosyası olarak ayarladığımız Test.sql dosyasına sağ tıklayıp Debug Script seçeneğine tıklıyoruz. Dosya içerisindeki sorgu çalıştırılacak ve derleyici seçtiğimiz satıra geldiğinde Visual Studio debug moda geçecektir.

clrsql_debug_image4

Bu şekilde bir CLR SQL nesnesini oluşturan kodların debug edilmesi sağlanabilir. Özellikle karmaşık User Defined Function, Stored Procedure ve Trigger oluşturduğumuz durumlarda nesneyi sürekli SQL Server'a taşımak, burada çalışma sonucuna göre tekrar Visual Studio'ya dönüp değişiklikleri yapmak uzun ve çözümü zor bir yol olabilir. İşte bu tip durumlarda nesnenin SQL Server'a gitmeden doğrudan CLR üzerinde çalışmasını debug edebilmek biz programcıların işini oldukça kolaylaştıracaktır.

06 Ağustos 2008

LINQ Sunumu ve Örnek Kodlar

Geçtiğimiz pazar günü INETA Summer Hit'in son gününde C# 3.0 ve LINQ sunumunu gerçekleştirdim. Sürenin az olması nedeniyle LINQ to SQL ve LINQ to XML konularını derinlemesine anlatma şansım olmadı ama güzel ve iyi izlenimler bırakan bir sunum gerçekleştirmişimdir diye umuyorum. Seminerde öyle bir kod arşivi üzerinden demolar gerçekleştirmişim ki; sadece bugün 4-5 farklı kişiden bu kodlara ulaşmak için mailler aldım :) Aşağıdaki linklerden etkinlikte kullandığım sunumu ve örnek kodları içeren demo dosyasını indirebilirsiniz.

LINQ Sunumu
LINQ Demolar

Ve etkinlikten kalan iki hatıra fotoğrafı...

ineta_summer_hit_cikis
ineta_summer_hit_sunum

Bu güzel etkinliği düzenleyen başta Daron Yöndem ile Ali Rıza Babaoğlan'a ve emeği geçen tüm arkadaşlara teşekkürlerimi buradan da sunmak isterim.

Not: Askerlik nedeniyle biraz uzak kaldığım yeni teknolojilere yeni yeni ısınmaya başlıyorum. Bundan sonra blogumda C# 3.0, LINQ, MVC ve WPF gibi konularda daha sık yazılar yazmaya çalışacağım. Beni takip etmeye devam edin...

26 Temmuz 2008

ASP.NET'te Gelecek WebForm'larında mı, Yoksa MVC'de mi?

WebForms vs. ASP.NET MVCSon yıllarda web programlama dünyasında yaygınlaşan MVC uygulama modeli yavaş yavaş ASP.NET uygulamalarında da yerini almaya başladı. .NET Framework ile birlikte web sitelerine getirilen Windows formlarının çalışma modeli giderek benimsenmiş ve web literatürüne oturmuşken birden çıkıveren MVC Framework kafalarımızda şu soruları da oluşturdu: Hangi modeli kullanmak daha avantajlı, hangisi daha verimli çalışır? Belki de en önemli soru "Gelecek hangisinde? WebForm'larında mı, yoksa MVC Framework'te mi?" Hatta benim kafamda oluşan önemli sorulardan birisi de "Acaba Microsoft gelecekte WebForm'larını bırakıp ASP.NET'te MVC modelini mi kullanabilir mi?" idi birkaç gün öncesine kadar...

Geçtiğimiz günlerde Joe Stagner'ın blogunda okuduğum bir haber aklımdaki bu soru işaretini biraz da olsun kaldırdı. Zira Joe Stagner yazısında WebForm'larının gelecekte de ASP.NET uygulamalarındaki ana platform olacağını, Microsoft'un bu strateji üzerinden ilerleyeceğini, fakat MVC Framework'ün de geliştiremeye devam edeceğinden bahsediyordu. Yani; gönül rahatlığıyla WebForm'ları üzerinde kontrolleri sürükleyip bırakıp, üzerine çift tıklayıp, olay tabanlı programlama yapmaya devam edebiliriz. Peki MVC bu noktada programlama anlayışımızın neresinde yer almalı?

Bu sorunun cevabını bulabilmek için öncelikle ASP.NET WebForm'larının ve ASP.NET MVC Framework'ün ne gibi özelliklere sahip olduğunu, avantaj ve dezavantajlarının neler olduğunu iyi çözümlemek gerekir. MVC Framework ASP.NET uygulamalarına şu anki anlayışa biraz aykırı gelebilecek, ASP'de olduğu gibi HTML ile içiçe ve daha fazla kod yazılmasını gerektiren, durum verisinin saklanmasını zorlaştıran, diğer yandan da programcının web sayfasına daha fazla hakim olmasını sağlayan, control-view mekanizmasını kendi istediği gibi geliştirebileceği ve arama motorlarının çok sevdiği az karmaşık URL'ler oluşturulmasını sağlayan bir uygulama modelidir. MVC Framework web programlama hayatımıza iyiden iyiye oturan olay tabanlı(event-driven) programlamadan, ViewState ve PostBack'ten uzak bir ortam sunuyor. Bu gelişme kimilerine göre çok olumlu iken, kimilerine ise "Aman benden uzak dursun" dedirtiyor. WebForm'ları bize o kadar rahat bir programlama ortamı sunuyor ki, MVC'ye geçiş biraz zor geliyor sanırım. Fakat MVC Framework'ün özellikle hız, performans, arama motorlarına tam uyumluluğun önemli olduğu, uzun soluklu kurumsal projelerde çok sık ihtiyaç olacağı da bir gerçek.

Konumuzun başlığına dönecek olursak; Gelecek WebForms da mı, yoksa MVC Framework'te mi, benim şahsi düşüncem gelecek dün olduğu gibi yine WebForm'larında(ki Microsoft'un dediklerini tercüme etmiş oluyorum), fakat MVC Framework önümüzdeki yıllarda iyi bir web programcısının mutlaka bilmesi gereken bir uygulama deseni olacaktır. Microsoft'un şu anki stratejisi ASP.NET WebForm'ların üzerinde gelişmeye ve zenginleşmeye devam edecektir, fakat MVC Framework'te programcılara ikinci bir seçenek olarak sunulacaktır.

22 Temmuz 2008

ASP.NET AJAX Roadmap ve ASP.NET AJAX 4.0 Preview 1

Geçtiğimiz günlerde CodePlex'te yayınlanan ASP.NET AJAX'ın yol haritasının ardından dün de ASP.NET AJAX 4.0'ın ilk önizleme sürümü duyuruldu. ASP.NET AJAX ekibinin önümüzdeki aylarda web uygulamalarında biraz daha istemci tabanlı çalışacak bileşenler geliştirme yolunda ilerlediğini söyleyebiliriz. İstemci tarafında çalışacak veri-veri kaynağı (data-data source) kontrolleri ile istemci tarafında içeriğin render edilmesi fikirleri Preview 1 sürümünde zaten gerçekleşen birkaç adım. Animasyon ve sürükle-bırak (drag-drop) özellikleri, yine ASP.NET MVC Framework için şu anda olmayan ASP.NET AJAX MVC desteği ilerleyen günlerde bizi bekleyen yeniliklerden sadece birkaç tanesi. Sanırım sonraki sürümlerde ASP.NET AJAX'ın biraz da JQuery'den etkilenerek bizleri daha da heyecanlandıracak yeniliklerle karşımıza gelmesi hiç birimizi şaşırtmayacaktır(En azından beni). Artık HTML kodları içerisine bol bol inline kod yazılacak AJAX uygulamaları bizi bekliyor diyebilirim.

ASP.NET AJAX yol haritası ve ASP.NET AJAX 4.0 Preview 1 ile ilgili dosya ve dökümanları aşağıdan, CodePlex sitesindeki linklerinden indirebilirsiniz. Yine aynı sayfa üzerinden proje ile yapılan yenilikleri takip edebilirsiniz.

ASP.NET AJAX Roadmap
ASP.NET AJAX 4.0 CodePlex Preview 1

17 Temmuz 2008

Yazılımcılar için Yaz Etklinliği: INETA Summet Hit

inetasummerhit

INETA Türkiye olarak güzel bir yaz etkinliği ile karşınızdayız. 2-3 Ağustos 2008 tarihlerinde Yıldız Teknik Üniversitesi Auditorium'da gerçekleşecek olan iki günlük etkinlikte birçok önemli konu ile ilgili seminerleri ve konuşmaları bulabileceksiniz. 3 Ağustos'ta 15:00-17:30 saatleri arasında benim de LINQ (Language Integrated Query) sunumumun olacağı bu etkinliğe ilgilenen herkesi bekliyoruz.

Etkinlikle ilgili bilgiler ve kayıt işlemi için bu linkten faydalanabilirsiniz.

10 Temmuz 2008

GridView'da Silme ve Güncelleme İşlemi Onayı

GridView kontrolünde silme ve güncelleme işlemleri yapılırken işlem tamamlanmadan önce kullanıcıdan onay alınmak istenilebilir. Özellikle silme işlemleri geri dönüşü olmayan sorunlara yol açabileceği için bu tip bir işlemi kazara bir butona basılarak yapılmasına izin vermemek son derece doğru olacaktır. GridView kontrolünde yapacağımız çok basit 2 değişiklik ile Update ve Delete işlemlerinin kullanıcıdan onay alarak gerçekleştirilmesini sağlayabiliriz.

İlk adımda Update ve Delete butonlarımızın bulunduğu CommandFieldTemplateField'a dönüştürmek gerekecektir. Böylece artık Update ile Delete butonlarına erişebilir, gerekli istemci olayına istediğimiz JavaScript kodunu ekleyebiliriz. GridView'in smart tag ikonundan Edit Columns linkine tıklayıp açılan pencereden CommanField kolonunu seçmeli ve sağ kısımda yer alan Properties penceresinin altındaki Convert this field into a TemplateField linkine tıklamalıyız. Böylece artık Update, Delete, Cancel gibi butonların kontrol tanımlamalarına sayfanın HTML kodlarından erişebileceğiz.

Gridview - Kolonu templatefielda çevirme

İkinci adımda ise gerekli butonun OnClientClick olayına ufak bir JavaScript kodu eklememiz gerekecektir. Böylece onay işleminde sunucuya gidilmeden, istemci tarafında yapılacak ve gereksiz bir postback işlemi de engellenmiş olacaktır. Aşağıda Delete butonuna tıklandığında kullanıcıdan onay alma işlemini gerçekleştirecek kod parçası yer almaktadır.

<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="Değiştir"></asp:LinkButton>&nbsp;
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Delete" Text="Sil"
OnClientClick="return confirm('Silmek istediğinizden emin misiniz?');">
</asp:LinkButton>
</ItemTemplate>
Basit iki işlemin ardında gridview oldukça kullanışlı bir hale gelebiliyor. Sonuç aşağıdaki gibi...

Gridview - Silme işlemi için onay

20 Mayıs 2008

VS 2008 ile SQL Server 2005 Kurulumunda Problem ve Çözümü

Bugün bilgisayarıma Windows XP'yi yeniden kurdum. Visual Studio 2008 ve SQL Server 2005'in kurulumları sorunsuz bitti, fakat Management Studio ve SQL Profiler gibi araçların kurulmadığını görünce bu sorunun neden kaynaklandığını ve nasıl çözebileceğimi internetten biraz araştırdım. Sorun ve çözümü şöyle:

Sorun: Visual Studio 2008'i SQL Server 2005'ten önce kurduğunuzda SQL Server sunucu olarak bilgisayarınıza kurulmuş olsa da, beraberinde gelen bileşenlerin kurulumu gerçekleşmiyor.

Çözüm-1: Önce SQL Server 2005'i, ardından Visual Studio 2008'i kurun.

Çözüm-2: Çözüm-1'deki sıranın tersinde kurulum yaptıysanız; SQL Server kurulum CD'sinden Tools klasörünün altındaki setup.exe'yi Command Prompt'tan aşağıdaki parametreleri kullanarak çalıştırın. Açılan kurulum penceresinden de Client Components ve Documentation, Samples and... seçeneğinden gerekli bileşenleri seçerek güncelleme kurulumunu tamamlayın.
Command Prompt'ta yazılacak komut: start /wait setup.exe SKUUPGRADE=1

Gerekli bileşenler artık bilgisayarınıza kurulacaktır.

Not: Gerçekleştirdiğim kurulum Windows XP Professional işletim sistemi üzerinde Visual Studio 2008 Team System Edition ve SQL Server 20005 Developer Edition sürümleri ile yapıldı.

18 Mayıs 2008

Makaleler E-Kitabım

Yapımına askerde başladığım ve ancak bitirebildiğim, içerisinde bugüne kadar çeşitli sitelerde yayınlanan makalelerimin bulunduğu e-kitabı bu linkten bilgisayarınıza yükleyebilirsiniz. Başta ASP.NET ve ASP.NET AJAX konularında yazdığım makalelerden ve yaklaşık 160 sayfadan oluşan bu doküman umarım sizler için faydalı olur.

E-kitabımı zaman içerisinde yeni makalelerimle güncellemeye çalışacağım. Bu başlıktaki linkten veya www.umutluoglu.com adresinden güncel versiyonunu takip edebilirsiniz.

16 Mayıs 2008

Askerlik Görevim Sona Erdi

Askerlik maceram bugün sona erdi. Bu sabah 1.5 saatlik uçak yolculuğunun ardından Elazığ'a hoşçakal dedim ve İstanbul'a 5 ay 5 gün sonra ayak bastım. İnsanın tekrar sivil hayata dönmesi, ailesine, sevdiklerine (ve dizüstü bilgisayarına) kavuşması kelimelerle anlatalımayacak kadar güzel bir duygu!

Elazığ'da Jandarma Komando Taburu'nda başlayan askerliğimin usta birliğini 8.Kolordu Komutanlığı Askeri Mahkemesi'nde tamamladım. Oldukça güzel dostluklar edindiğim bu beş aylık maceramda sivil hayatta belki de 1-2 yılda göremeyeceğim tecrübeler edindim. 26 yaşında asker olsam da, askerliğin insanın olgunlaşma sürecinde oldukça önemli bir yeri olduğunu görmüş oldum.

Blogumdan da takip ettiğiniz üzere aslında bilgisayardan ve .NET dünyasından askerlikte de pek kopmadım. Görev yaptığım Askeri Mahkeme'ye boş zamanlarımda oldukça önemli bir uygulama geliştirme şansını buldum. .NET Framework 2.0 üzerinde çalışan Esas Defteri adındaki masaüstü bir uygulama ile artık Kolordu'daki tüm dava dosyaları bilgisayar ortamında saklanabiliyor. Gelişmiş arama, raporlama arayüzleri ve devir işlemleri arayüzleri ile hazırladığım bu uygulama uzun yıllar mahkememize hizmet edecektir diye düşünüyorum. Kullandığım Pentium-2 işlemcili makina beni biraz kısıtlasa da, birkaç makale ve birkaç blog postu askerlik günlerimde bilgi paylaşımı adına klavyemden çıkarabildiklerim oldu.

İyisi ile kötüsü ile bitti gitti askerliğim. Beş ay kadar önce yazdığım veda yazısında da dediğim gibi "kaldığımız yerden devam ediyoruz..."

11 Mayıs 2008

RenderControl Metodu ile Kontrolün HTML Çıktısını Üretmek

ASP.NET uygulamalarında kullandığımız tüm kontroller HTML çıktılara dönüştürülmekte ve sayfanın HTML kodları içerisine yerleştirilmektedir. Basit olarak bir Label kontrolü sunucuda çalıştırıldığında <span> elementine dönüştürülürken, GridView gibi karmaşık bir kontrol ise tablo (<table> elementi) ve tablo içerisindeki elementlere dönüştürülür. Web uygulamalarında kullandığımız tüm sunucu kontrolleri WebControl sınıfından, WebControl ise Control sınıftan türetilmektedir. Control sınıfında yer alan RenderControl metodu (virtual metot olduğu için türetilen sınıflarda override edilir) sunucuda oluşturulan kontrolün HTML çıktısını string olarak elde edebilmemizi sağlar. Control sınıfında yer alan bu metot dolayısıyla tüm sunucu kontrollerinin de sahip olduğu bir üyedir ve programatik olarak oluşturulacak bir sunucu kontrolünün RenderControl metodu ile HTML çıktısına ulaşılabilir.

"Neden bir kontrolün HTML çıktısını alayım ki?" gibi bir soru akla gelebilir. Nerelerde karşımıza çıkabilir bir kontrolün HTML çıktısını programatik olarak elde etmek? Aklıma gelen bir kaç noktayı hemen şöyle listeleyim:

- Substution Caching (sayfanın tümünü önbellekten okuyup sadece belirli bir alanı dinamik oluşturmak) işlemlerinde sunucuda çalışacak metodun içerisinde bir kontrolü oluşturmak ve metodun geri dönüş değeri olarak kontrolü döndürmek,
- AJAX uygulamalarında WebMethod'lar ile asenkron güncellemeler yapılacağı zaman yine sunucudaki metodun içerisinde bir kontrol oluşturmak ve metottan kontrolün HTML çıktısını geri göndermek,
- Kullanıcılara toplu mail gönderimi yapılacağı zaman veritabanından çekilen kayıtların oluşturacağı grid türevi kontrolün kodlarını mailin HTML içeriğine eklemek,
- Raporlama sistemlerinde farklı kriterlere göre oluşturulan sonuçların HTML çıktısının veritabanına kaydedilmesi ve daha sonradan tekrar takip edilebilmesi...

Biraz daha düşünüldüğünde farklı senaryolar da akla gelebilir. Zaten bu tip varsayımlar ilk başta akla gelmeyen, fakat uygulamanın geliştirme safhalarında karşımıza çıkabilen durumlardır. Bu yazım belki karşınıza çıkan bu tip bir duruma ilaç olabilir:) Gelelim RenderControl metodunun nasıl kullanılacağına. Senaryoyu karmaşık hale getirmeden basit şekilde inceleyelim. Sayfamızda bir Label kontrolü olsun ve sunucuda oluşturacağımız GridView kontrolünün HTML çıktısını alıp Label'a yazdıralım. Aşağıda sayfamızın kodları yer almaktadır.


...
using System.Collections.Generic;
using System.IO;

public partial class RenderControlKullan : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      Dictionary<string, string> liste = new Dictionary<string, string>();
      liste.Add("Uğur Umutluoğlu", "http://umutluoglu.blogspot.com");
      liste.Add("Burak Batur", "www.burakbatur.com");
      liste.Add("Burak Selim Şenyurt", "www.bsenyurt.com");
      liste.Add("nedirTV?com", "www.nedirtv.com");
      liste.Add("Türk Aspx", "www.turkaspx.net");

      GridView gvSiteler = new GridView();
      gvSiteler.DataSource = liste;
      gvSiteler.DataBind();

      StringWriter sw = new StringWriter();
      HtmlTextWriter htw = new HtmlTextWriter(sw);
      gvSiteler.RenderControl(htw);
      lblGrid.Text = sw.ToString();
   }
}

Sayfa çalıştırıldığında lblGrid.Text = sw.ToString(); satırına bir break-point atalım ve sw'nin içerisinde neler varmış bir bakalım.

GridView nesnesi üretildikten sonra RenderControl metodu ile işlem gerçekleşiyor. RenderControl geriye herhangi bir değer dönen bir metot değildir (void); parametre olarak aldığı HtmlTextWriter tipinden nesneye kontrolün çıktısını aktarır. HtmlTextWriter'da InnerWriter özelliğindeki HTML elementlerini TextWriter ve türevi nesnelerden birine aktarır. Burada StringWriter en uygun tip. Performans açısından StringWriter'ı da bir StringBuilder'a aktarmak iyi bir yol olabilir ama işi uzatmadan kısaca sonuca gidelim. sw adındaki StringWriter nesnesinin çıktısını stringe dönüştürerek lblGrid adındaki kontrole değeri yazdırıyoruz. Aşağıdaki sayfamızın çıktısı görülmektedir.