28 Ocak 2009

İş Değişikliği

Bu hafta itibariyle sektördeki çalışmalarıma artık Innova’da Uygulama Geliştirme Uzmanı olarak devam ediyorum. Innova bünyesinde oldukça önemli projelerde görev almanın bana çok şey katacağından eminim. Kendim ve Innova adına hayırlı olması dileğiyle.

İki yılı aşkın süredir çalıştığım Netron’dan ve eğitmenlikten ayrılmak benim için biraz zor oldu tabii ki. Bu süreçte hep yanımda olan değerli iş arkadaşlarıma buradan da teşekkür etmeyi bir borç olarak görüyorum.

Bu arada Netron mail hesabımdan bana ulaşan arkadaşların artık umutluoglu (at) gmail.com adresini kullanmalarını rica edeceğim.

ASP.NET MVC 1.0 RC Resmen Duyuruldu

Dün Internet Explorer 8.0’ın RC1 sürümünün duyurulmasının ardından bu sabahta bir başka önemli Release Candidate duyurusu RSS okuyucularımıza düştü. Aylardır beklediğimiz ASP.NET MVC Framework 1.0’ın Release Candidate sürümü bugün itibariyle herkese açılmış durumda. Önümüzdeki ay içerisinde 1.0 versiyonunun (tahminimce Mart ayını bulur) duyurulması bekleniyor ve en güzel haberlerden birisi de 1.0 versiyonu hemen hemen RC versiyonu ile aynı olacak, yani ciddi değişiklikler beklenmiyor. Bu da RC sürümünü ciddi olarak incelemek için oldukça geçerli bir sebep.

Bu linkten indirebileceğiniz yeni sürümle ilgili bilgileri şimdilik Scott Guthrie ve David Hayden’in yazılarından incelemenizi tavsiye ederim.

Scott Guthrie - ASP.NET MVC 1.0 Release Candidate Now Available
David Hayden - Download ASP.NET MVC 1.0 Release Candidate

25 Ocak 2009

AJAX Sayfalarında Geç Yüklenme İşlemleri

Sayfanızda senkron şekilde yüklenecek içeriklerinizle beraber UpdatePanel'inizin içerisinde de asenkron yüklenecek içerikleriniz var. Fakat UpdatePanel içerikleri biraz yavaş yüklenecek gibi... Biraz daha somut bir örnek verecek olursam normal içeriklerinizin yüklenmesi 2 saniye, asenkron içeriklerinizin yüklenmesi de yaklaşık 7-8 saniye sürüyor. Normal işleyişte sayfanın tamamının oluşturulup istemciye gönderilmesini bekleyecek olursak en az 7-8 saniye istemciyi bekleteceğiz. Peki sayfanın ilk yüklenmesi esnasında, istemcinin tarayısına önce senkron yüklenecek olan içeriği göndersek, bu esnada da UpdatePanel içeriği yüklenmeye devam etse? Nasıl yapabiliriz ki böyle bir işlemi diye soruyorsunuz sanırım. Bu yazımda ASP.NET AJAX uygulamalarında yüklemeyi geciktirme(delay loading) işlemini nasıl gerçekleştirebileceğimize bakıyoruz.

Öncelikle gerekli malzemeler; 1 ScriptManager, 1 Label(senkron içerik için), 1 UpdatePanel, panel içerisine 1 Button ve asenkron içeriği yüklemek için 1 Label daha(sayfamız biraz daha yakışıklı olsun istersek 1 tane de UpdateProgress). İlk label normal içeriği saklayacak, yani ilk yükleme sonucunda istemciye bu kontrol dolu gidecek. Diğer label ise asenkron güncellenecek olan kontrolümüz, yani buradaki yükleme işlemi sayfa istemciye ulaştıktan hemen sonra gerçekleşecek. Sayfamızın HTML kodları ve UpdatePanel'i asenkron güncellenmesinde kullanacağımız kodlar aşağıdaki gibidir.

Default.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

<asp:Label ID="lblStatik" runat="server" Text="Burası statik içeriğin geleceği yer"></asp:Label>

<br /><br />      

<asp:UpdatePanel ID="UpdatePanel1" runat="server">

    <ContentTemplate>

        <asp:LinkButton ID="lbGuncelle" runat="server" Text="Güncelle" onclick="lbGuncelle_Click"></asp:LinkButton><br />

        <asp:Label ID="lblAsenkronIcerik" runat="server"></asp:Label><br />

        <asp:UpdateProgress ID="UpdateProgress1" runat="server">

            <ProgressTemplate>

                Bilgiler yükleniyor. Bekleyiniz...

            </ProgressTemplate>

        </asp:UpdateProgress>

    </ContentTemplate>

</asp:UpdatePanel>


Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)

{

    lblStatik.Text = "Bu kontrol statik içerikleri saklıyor";

}

protected void lbGuncelle_Click(object sender, EventArgs e)

{

    System.Threading.Thread.Sleep(3000); //İşlemi geciktirmek için

    lblAsenkronIcerik.Text = DateTime.Now.ToString();

}

Görüldüğü gibi lbGuncelle isimli LinkButton kontrolü UpdatePanel içeriğini güncelliyor. Sayfa bu haliyle ilk yüklendiğinde UpdatePanel'de herhangi bir çıktı oluşmaz. Ancak sayfa ilk yüklendiğinde LinkButton'a otomatik olarak postback yaptırabilirsek bu esnada UpdatePanel içeriği de istemciye gecikmeli olarak ulaşacaktır. İşte bu postback işlemini istemcide sayfa yüklendiği anda yapabilirsek yüklenmenin gecikmeli olarak gerçekleşmesi sağlanacaktır. Burada iki soru var; ilki istemciye sayfanın yüklendiği anı nasıl yakalayabilirim, ikincisi ise LinkButton'a tıklamadan nasıl partial postback işlemini tetiklerim? Her iki işlem de istemci tarafında gerçekleşecek olaylar olduğu için işin ucu JavaScript'e değiyor. Sayfanın yüklenmesi anında JavaScript'in pageLoad fonksiyonu devreye girer. Diğer yandan programatik şekilde bir kontrolü postback işlemine tabi tutmanın yolu da __doPostBack adındaki JavaScript fonksiyonundan geçer. Aşağıdaki JavaScript pageLoad fonksiyonu, UpdatePanel içeriğinin sayfanın ilk yüklenmesi esnasında gecikmeli olarak yüklenmesini sağlayacaktır.

Default.aspx

<script language="javascript" type="text/javascript">

    var ilkYuklenme = true;

 

    function pageLoad()

    {

        if(ilkYuklenme) // if bloğuna sadece bir kez girilmesi için

        {

            __doPostBack('lbGuncelle', ''); //LinkButton'a programatik olarak PostBack işlemi yaptırdık

            ilkYuklenme = false;

        }

    }

</script>

Sayfa istemciye yükleniyorken pageLoad fonksiyonu çalışır. ilkYukleme değişkeni bu esnada true olduğu için LinkButton kontrolü postback işlemi yapar ve UpdatePanel içeriği güncellenmeye başlanır. Thread sınıfının Sleep metodu ile geciktirme işlemi yaptığımız için çok açık bir şekilde sayfa istemciye yüklendiğinde gecikmeli olarak UpdatePanel'in içeriği güncellendiğini görebiliriz.

ajax delay loading

15 Ocak 2009

Response.Redirect() ile Yönlendirilecek Sayfayı Yeni Pencerede Açmak

Bundan 3-4 yıl kadar önce sunucu tarafında yapacağım sayfa yönlendirmesini yeni sayfada açma işlemini gerçekleştirmek için bir hayli araştırma yapmış ama sonucuna ulaşamamıştım. Aslında o kadar da zor değilmiş! Bazı durumlarda code-behind tarafında yazacağımız kodların içerisinde Response.Redirect metodunu kullanarak belirli bir sayfaya yönlendirme yapabiliyoruz. Peki bu yönlendirme işleminde açılacak olan sayfanın, yeni bir tarayıcı penceresinde görüntülenmesini nasıl sağlarız? Aslında bu sorunun cevabının Response.Redirect metoduyla hiçbir ilgisi yok. Olay tamamen bu metodu tetikleyen kontrol üzerinde yapılacak bir işlemle çözülebiliyor. Örneğin yönlendirmeyi Button kontrolü gerçekleştirecek ise aşağıdaki kodlar işimizi görecektir. Bu arada butonun form1 adındaki form elementi içerisinde yer alması gerektiğini söylememe gerek yoktur sanırım :)

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Tıkla Bakalım" OnClientClick="form1.target='_blank';" />

Button'ın Click olay metoduna standart Redirect metodumuzu yazmak yeterli olacaktır.

protected void Button1_Click(object sender, EventArgs e)

{

    Response.Redirect("Default.aspx");

}

Peki işleyiş nasıl? Button içerisinde eklediğimiz ve client tarafında çalışan form1.target='_blank' ifadesi butona tıklandığında işleyişi yeni bir pencereye devrediyor. Dolayısıyla açılan yeni pencere üzerinde sayfa postback oluyor ve Default.aspx sayfasına yönlendirme yapılıyor.

08 Ocak 2009

Ege ve Yaşar Üniversitesi Seminerleri Ardından

Dün Gençsen Geleceksin seminerleri için İzmir'deydim. Yaşar ve Ege Üniversitesi'nde gerçekleştirdiğim iki seminer ile koşturmaca dolu, heyecanlı ve oldukça güzel bir gün geçirdim. Dizüstü bilgisayarımın son zamanlarda projektörlerle anlaşmaya pek yanaşmaması, bana her iki üniversitede de zor dakikalar yaşattı:)

Günün erken saatlerinde İzmir'e inerek Yaşar Üniversitesi'ne geldim. Yaşar Üniversitesi'nin Bornova'daki kampüsü bugüne kadar gördüğüm en modern kampüstü diyebilirim. Konumu, yolları, çevre düzenlemeleri, binaları, derslikleri... gerçekten hepsi harikaydı. Yaşar Üniversitesi'ni bizim için farklı kılan durumlardan birisi de seminere katılan akademisyenlerin çokluğuydu. Seminere katılan öğretim görevlilerinin anlattıklarımızı en az öğrenciler kadar dikkatli bir şekilde dinlemesi bizi oldukça memnun etti. Gerek öğrencilerden, gerekse akademisyenlerden aldığımız pozitif elektrik bizi günün ikinci seminerine daha da motive olmuş şekilde çıkardı.

yasar_universitesi
İzmir Yaşar Üniversitesi'nden günün hatıra fotoğrafı

Öğleden sonra ise Ege Üniversitesi'ndeydim. Yine oldukça kalabalık bir katılımcı kitlesine Microsoft'un yakın gelecekteki yazılım teknolojileriyle ilgili konuşma yapma şansı buldum. Ege Üniversitesi öğrencilerinin sektörü yakından takip ediyor olmalarına ve de, ve deee soru sorma potansiyellerine hayran kaldım diyebilirim. Sanırım süre sıkıntımız olmasaydı salondaki öğrencilerin üçte biri soru sorma şansı bulacaktı :)

ege_uni
Ege Üniversitesi'nden günün hatıra fotoğrafı

Yorucu, ama bir o kadar keyifli bir günün akşamında ise İstanbul'a dönüş yaptım. Bu güzel gün için Yaşar ve Ege Üniversitesi öğrencilerine, akademisyenlere ve Turkcell adına etkinliğe konuşmacı olarak katılan arkadaşım Serdar Şimşek'e teşekkürlerimi sunuyorum. Yine etkinliklerin başarıyla gerçekleşmesi için emek harcayan MSP Okan İncecikli ve Can Bozdoğan'a teşekkür ederim.

05 Ocak 2009

Yeni Yılda Blogumda Yenilikler

Yeni yılla birlikte bloguma birkaç yenilik ekledim.

Bu yeniliklerden biri, artık blogumdaki teknik içerikli yazılarımı -eşimin de yardımlarıyla- İngilizce olarak da yayınlamam. Hatta bu yazılar farklı bir blog olarak karşınıza çıkıyor: www.umutluoglu.com/english

Diğer bir yenilik ise, artık gerçekleştireceğim seminer, webiner, workshop gibi etkinlikleri blog sitemden takip edebilir, hatta RSS listelerinize ekleyebilirsiniz. Etkinlik takvimi eklentim şu an sitemin sağ kısmında Seminer Programım başlığı altında yer alıyor. Dilerseniz bu linkten de gerçekleştireceğim etkinlikleri RSS okuyucularınıza kaydedebilirsiniz.

Aslında en önemli yenilik artık blog yazılarımı www.umutluoglu.com adresine taşımam sanırım. Henüz bu adresteki çalışmalarım tamamlanmadığı için blogspot'a bir süre daha eş zamanlı olarak yazmaya devam edeceğim. Anlaşılacağı üzere, yakında yazılarımı sadece www.umutluoglu.com adresinden takip edebileceksiniz :)

04 Ocak 2009

nedirtv?com - Ocak Ayı Webinerleri

nedirtv?com Webinerlerinedirtv?com ve Ineta Türkiye olarak düzenli şekilde gerçekleştirmeyi planladığımız aylık webinerlere Ocak ayı itibariyle başlıyoruz. Ocak ayı içerisinde 8 farklı webiner ile nedirtv?com editörleri sizlerle olacak. Webinerler bu ay için geçerli olmak üzere her Pazartesi ve Çarşamba akşamı 21:00-22:00 saatleri arasında gerçekleştirilecektir. Visual Studio 2008, Expression Media, C# 3.0, SharePoint, WCF, LINQ to SQL, Ado.Net Data Services ve MOSS Development konularında gerçekleştirilecek oturumları kaçırmamanızı tavsiye ediyorum. Detaylı bilgi ve katılım bilgileri için bu adresteki haberi okuyabilirsiniz. Yine gerçekleştirilecek webinerlerle ilgili duyuru ve hatırlatmaları takip etmek için bu adresten etkinliği ajandanıza ekleyebilirsiniz.

Bu arada webiner konusunda bir açıklama yapma zorunluluğu hissediyorum:) Zira birçok kişi webineri bir salonda, bir sınıfta gerçekleştirilecek seminer olarak düşünüyor. Nedirtv'de bu ayki webinerlerin duyurusunu yaptıktan sonra birkaç kişiden "Hocam biz İstanbul dışında oturuyoruz gelip izleme şansımız yok" şeklinde şikayetler geldi:) Webiner; web üzerinden gerçekleştirilen çevrimiçi seminerdir. Yani webinerlere katılmak için internet bağlantınızın olması ve bilgisayarınıza Live Meeting'i bir defalığına kurmanız yeterlidir. Türkiye'nin, hatta dünyanın neresinde olursanız olun internet bağlantınız olan bir bilgisayardan bu etkinliğe interaktif şekilde katılmanız mümkün. Webinerlere sadece izleyici olarak katılmıyor, aynı zamanda konuşmacılara sorular yöneltip aklınıza takılan hususlarda bilgi alabilmeniz mümkün oluyor. Kabaca bir tabirle bildiğimiz seminerin online ortamda olanı diyebiliriz webinerlere :)

01 Ocak 2009

"You tried to assign the Null value..." Hatası ve Çözümü

MS Access'te hazırladığınız bir tabloyu AccessDataSource kontrolü ile Insert işlemlerinde kullandığınızda "You tried to assign the Null value to a variable that is not a Variant data type" şeklinde bir hatayla karşılaşabilirsiniz. Ben null değer girişi yapmadım ki böyle bir hata alıyorum demeyin, zira sorun sizden değil Visual Studio'nun Insert cümlenize tablonuzun identity kolonunu veri eklenecek kolonmuş gibi eklenmesinden kaynaklanıyor! Çözüm ise oldukça basit; sayfanızın HTML kodları içerisinde AccessDataSource kontrolünüzün InsertCommand özelliğinden identity kolonunuzun(ki genellikle primary key kolonunuz olur) adını ve parametresini (VALUES kısmındaki ? karakterini) kaldırmanız gerekiyor. Ardından
InsertParameters koleksiyonundan yine bu kolon için eklenmiş olan parametreyi de kaldıracak olursanız artık Insert işlemini başarılı bir şekilde gerçekleştirebilirsiniz.