18 Mart 2009

Blogspot’a Veda

Bundan sonraki yazılarımı sadece www.umutluoglu.com adresinde yayınlayacağım. Yani bu yazı, bu blogun son post’udur.

www.umutluoglu.com


Ayrıca RSS okuyucularında bu blogun RSS kaynağını saklayan arkadaşlar da blog RSS’imi şu linkle güncelleyebilirler:

www.umutluoglu.com/syndication.axd



15 Mart 2009

nedirtv?com İstanbul Seminerlerinin Ardından

Dün Microsoft İstanbul ofisinde gerçekleştirdiğimiz seminerleri başarıyla tamamladık. nedirtv?com’un 3.yılını kutladığımız bugünlerde gerçekleştirdiğimiz bu güzel etkinlikte Windows 7, Multipoint Programlama, ASP.NET 3.5, C# 3.0 ve SQL Server 2008 gibi konulara değindik. Sabah saat 10’da başlayıp akşam 18 civarında biten bu uzun gün bizler için oldukça keyifli ve eğlenceliydi. Dağıtılan değerli hediyeler de güne heyecan katan ayrı bir unsurdu. Etkinlik sonunda katılımcılardan aldığımız olumlu geribildirimler bizleri fazlasıyla mutlu etti. Buradan etkinliğimize sunumlarıyla ve gün boyunca sarfettikleri eforla büyük katkıları olan Fatih COŞKUN, Daron YÖNDEM, Burak Selim ŞENYURT, Pamir ERDEM’e ve değerli katılımcılara sonsuz teşekkürlerimi sunuyorum.

nedirtv_semineri
Günün sonunda çekilen bir hatıra fotoğrafı :)

Bu arada nedirtv?com’un 3. yıldönümü etkinliklerinin bununla sınırlı olmayacağını, önümüzdeki ay içerisinde İstanbul’da veritabanı programcıları için, Mayıs ayı içerisinde de Ankara’daki yazılımcılar için güzel etkinlik planlarımızın olduğunu şimdiden belirtmek istiyorum. Detaylar için www.nedirtv.com adresini takip etmeye devam ediniz…

Etkinlik boyunca çekilen fotoğraflara erişmek için bu linke tıklayabilirsiniz (Fotoğraflar için Tuba ÇEBİ ve Daron’a ayrıca teşekkürler)

13 Mart 2009

nedirtv?com Mart Ayı Webinerleri

nedirtv?com webinerleri Mart ayında da tüm hızıyla devam ediyor. Sekiz farklı webinerin olacağı bu ayda XNA Game Studio, Visual Basic.NET 9.0 ve SQL Server 2008 gibi konuları ilk defa ele alacağız. Benim de önümüzdeki hafta ASP.NET – Veriye Erişim – I ve II olmak üzere iki webinerim olacak.

Yapılacak olan webinerlerle ilgili detaylı bilgileri görmek için bu linki, etkinliği Facebook'taki ajandanıza kaydetmek ve etkinlik duyurularını takip etmek için bu linki kullanabilirsiniz.

06 Mart 2009

nedirtv?com Seminerleri – İstanbul

nedirtv_3_yasinda nedirtv?com ailesi olarak 3. yılımızı 14 Mart 2009 Cumartesi günü İstanbul'da gerçekleştireceğimiz seminerlerle kutluyoruz. Gün boyunca sürecek beş farklı seminerin olacağı ve günün sonunda süpriz hediyelerin de dağıtılacağı bu etkinliğe nedirtv?com üyelerinin katılımlarını bekliyoruz.

Seminer programını aşağıda bulabilirsiniz. Seminere kayıt olmak için bu sayfayı kullanabilirsiniz.

Seminerlerin ücretsiz olacağını ve toplam kontenjanın da 150 kişi olacağını da belirtmek isterim.

 

SEMİNER PROGRAMI

10:00-10:10 Açılış
10:15-11:00 Windows 7 (Fatih Coşkun)
11:00-12:00 Multipoint Programlama (Daron Yöndem)
12:00-13:00 ASP.NET 3.5 SP1 Yenilikleri (Uğur Umutluoğlu)
14:00-15:30 Derinlerde C# (Burak Selim Şenyurt)
15:30-17:00 SQL Server 2008 ile Gelen Yenilikler (Pamir Erdem)
17:00-17:15 Hediye Çekilişi ve Kapanış

02 Mart 2009

INETA Eskişehir Hit

Bu hafta sonu Eskişehir’de yeni bir INETA etkinliği ile Eskişehirli yazılım severlerle beraber olacağız. 7-8 Mart tarihlerinde Osmangazi Üniversitesi Fen-Edebiyat Fakültesi F5 Blok Konferans salonunda gerçekleştireceğimiz seminerlere tüm Eskişehirliler davetlidir. Etkinlik programını aşağıda bulabilirsiniz.

7 Mart Cumartesi
10:00-12:00 Silverlight 2.0
13:00-15:00 XNA ile Oyun Programlama
15:30-17:30 AJAX 4.0

8 Mart Pazar
10:00-12:00 WPF
13:00-14:30 LINQ
15:00-17:00 ASP.NET 3.5 ve SP1 Yenilikleri

28 Şubat 2009

FileUpload ile Yüklenen Dosyaları Veritabanında Saklamak

FileUpload kontrolünün temel olarak istemciden aldığımız dosyaları sunucunun fiziksel bir konumuna kaydetmek için kullanırız. Fakat bazı durumlarda istemciden alınan bir dosyanın sunucuda güvenli şekilde saklanması için veritabanında saklama yoluna da gidebiliriz. Bu yazımda ASP.NET sunucu kontrollerinden olan FileUpload ile istemciden aldığımız bir dosyayı sunucudaki SQL Server gibi bir veritabanında nasıl saklayabileceğimizi inceleyeceğiz.

İlk olarak dosya bilgilerini saklayacağımız bir tablo oluşturuyoruz.

Tablomuzda resmin adını, binary formatta dosya içeriğini ve dosyanın MIME type bilgisini saklayacağız. FileUpload kontrolünün üç farklı özelliği bize dosyanın bu bilgilerini getirecektir. Bu özelikler ve açıklamaları aşağıdadır:

FileName: Yüklenen dosyanın adı
FileBytes: Dosyanın binary formatta içeriği (byte dizisi olarak getirilir)
PostedFile.ContentType: Dosyanın MIME type bilgisi (MIME dosyanın formatını belirleyen bir isim standartıdır)

Artık sayfamızı tasarlayıp, gerekli kodlarımızı oluşturabiliriz.

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

    Yüklenecek dosyayı seçiniz:<br />

    <asp:FileUpload ID="FileUpload1" runat="server" /> &nbsp;<asp:Button

        ID="Button1" runat="server" Text="Dosyayı Yükle" onclick="Button1_Click" />

    <br />

    <br />

    <asp:Label ID="lblMesaj" runat="server" ForeColor="Red"></asp:Label>

</form>


Default.aspx.cs

public partial class _Default : System.Web.UI.Page

{

    protected void Button1_Click(object sender, EventArgs e)

    {

        if(FileUpload1.FileContent != null)

        {

            string dosyaAdi = FileUpload1.FileName; //Dosyanın adı

            byte[] dosyaIcerik = FileUpload1.FileBytes; //Dosyanın bilgilerini binary formatta getirir

            string dosyaTipi = FileUpload1.PostedFile.ContentType; //Dosyanın MIME Type bilgisini getirir

 

            SqlConnection con = new SqlConnection("data source=localhost; initial catalog=Test; integrated security=true");

            SqlCommand cmd = new SqlCommand("Insert Into Dosyalar Values(@dosya_isim, @dosya_icerik, @dosya_tip)", con);

            cmd.Parameters.AddWithValue("@dosya_isim", dosyaAdi);

            cmd.Parameters.AddWithValue("@dosya_icerik", dosyaIcerik);

            cmd.Parameters.AddWithValue("@dosya_tip", dosyaTipi);

            con.Open();

            if (cmd.ExecuteNonQuery() > 0)

                lblMesaj.Text = "Dosya başarıyla yüklendi";

            con.Close();

        }

    }

}

Görüldüğü gibi SQL Server'da hazırladığımız Dosyalar adındaki tablo için yazılan bir INSERT cümlesine parametre olarak eklenen dosya bilgileri bu şekilde tablomuza eklenebiliyor. Birkaç kayıt ekledikten sonra tablomuzun içeriğini Management Studio gibi bir araçtan kontrol edecek olursak aşağıdaki gibi bir görüntüyle karşılaşırız.

Resimleri başarıyla kaydettik, peki okuma işlemi nasıl gerçekleşecek? Okuma işlemi için ise tablomuzdaki kayıtları SELECT sorgusu ile okumamız gerekecek. Eğer Windows uygulamasında çalışıyor olsaydık DosyaIcerik kolonundan okunan kaydı System.Drawing.Image tipine çevirip Image gibi bir kontrolde görüntüleyebiliriz. Ancak web uygulamalarında bir resmi istemci tarafına taşımamızın yolu biraz daha farklı olacaktır. Resmin içeriği ancak istemciye yollanan cevabın(Response) içerisine yazdırılarak gönderilebilir. Dosyayı istemciye gönderirken dikkat edilmesi gereken hususlardan birisi dosyanın tarayıcıda görüntülenip görüntülenmeyeceğidir. Zira jpg, gif, xml, txt gibi dokumanlar web tarayıcısında görüntülenebilir dosyalarken, zip, exe, dll gibi dosyalar ise tarayıcıda görüntülenemez, ancak yüklenebilir dosyalardır. Aşağıdaki kod parçasında tasarladığımız bir sayfanın kullanıcıya veritabanındaki bir dosyanın nasıl iletilebileceği görülmektedir.

Bu arada, dosyaya yapılan talep QueryString üzerinden resmin DosyaId kolonundaki değer ile iletilmektedir. Yine talebin daha hızlı cevaplanması için Web Form(.aspx) dosyası yerine Generic Handler(.ashx) dosyası kullanmak daha faydalı olacaktır.

ResimGoruntule.ashx

...

using System.Data.SqlClient;

 

public class ResimGoruntule : IHttpHandler {

 

    public void ProcessRequest (HttpContext context) {

        string id = context.Request.QueryString["id"];

        byte[] dosyaIcerik = null;

        string dosyaTipi = String.Empty;

 

        SqlConnection con = new SqlConnection("data source=localhost; initial catalog=Test; integrated security=true");

        SqlCommand cmd = new SqlCommand("Select * From Dosyalar Where DosyaId=@id", con);

        cmd.Parameters.AddWithValue("@id", id);

        con.Open();

        SqlDataReader dr = cmd.ExecuteReader();

        if (dr.Read())

        {

            dosyaIcerik = (byte[])dr["DosyaIcerik"];

            dosyaTipi = dr["DosyaTip"].ToString();

        }

        con.Close();

 

        //context.Response.AddHeader("content-disposition", "attachment; filename=" + dosyaAdi + ";"); //Download edilecek dosyanın adı belirleniyor. Bu satırın yorum durumu kaldırılırsa tüm dosyalar download işlemine zorlanacaktır.

        context.Response.ContentType = dosyaTipi; //Gönderilen dosyanın tipi belirtiliyor

        context.Response.BinaryWrite(dosyaIcerik); //Gönderilen cevabın içeriği dosyanın binary formattaki bilgileri olacaktır

    }

 

    public bool IsReusable {

        get {

            return false;

        }

    }

}

Görüldüğü gibi Response nesnesinin BinaryWrite metodu byte dizisi olarak saklanan dosya içeriğini istemciye göndermektedir. Yine dosyanın tarayıcı tarafından tanınmasını ve işlemin sağlıklı şekilde tamamlanması için ContentType özelliğini de resmin MIME type değeri olarak belirliyoruz. Eğer resmin istemci tarafından download edilmesini istiyorsak kod içerisinde yorum satırı olarak bulunan ve AddHeader metodu ile sayfaya eklenen başlık bilgilerinin bulunduğu satırı normal hale getirmek gerekecektir.

24 Şubat 2009

Bilkent Üniversitesi Yazılım Teknolojileri Seminerleri Ardından

Geçtiğimiz hafta sonu Ankara’da Bilkent Üniversitesi’ndeydim. Daron Yöndem ile beraber Bilkentli teknolojistlerle dolu dolu iki günde .NET teknolojileriyle ilgili bilgi ve tecrübelerimizi paylaşmaya çalıştık. Ben Cumartesi günü C# 3.0 ve LINQ, Pazar günü ise ASP.NET 3.5 ve SP1 ile Gelen Yenilikler sunumlarımla bu güzel etkinliğe katkıda bulunurken, Daron’da Silverlight, WPF ve WCF sunumlarını gerçekleştirdi. Karlı ve soğuk bir Ankara havasında salonu tıka basa dolduran öğrenci arkadaşlarla birlikte oldukça keyifli sunumlar gerçekleştirdik. Uzun bir aradan sonra tekrar Ankara’da olmak, Ankara’daki arkadaşlarımla zaman geçirmek bu hafta sonunun anılarımda daha da güzel bir şekilde yer almasını sağladı :)

bilkent_ilkgun2 bilkent_ilkgun1
Etkinliğin ilk gününden iki kare

Vee katılımcı arkadaşlara söz verdiğim gibi etkinlik dosyalarını paylaşıyorum. Oturumlarda kullandığım sunumları ve kod örneklerini aşağıdaki linklerden indirebilirsiniz. Etkinlikte emeği geçen başta MSP arkadaşlarım Ali Uğur Çakmak ve Alper Özçetin olmak üzere tüm arkadaşlara teşekkürlerimi buradan da iletiyorum.

C# 3.0 ve LINQ Sunumu
C# 3.0 ve LINQ Demolar
ASP.NET 3.5 ve SP1 Sunumu
ASP.NET 3.5 ve SP1 Demolar

15 Şubat 2009

ASP.NET 4.0 ve Vadettikleri

Geçtiğimiz aylarda gerçekleştirilen PDC etkinliğinde önümüzdeki 1-2 yıl içerisinde .NET dünyasında bizleri bekleyen yenilikler anlatıldı. Bu yeniliklerden biri de ASP.NET 4.0'dı. .NET Framework 4.0 ile 4 numaralı versiyonuna erişecek ASP.NET'te bizleri gerçekten önemli yenilikler bekliyor. Zaten bunun ilk uyarılarını .NET Framework SP1 ve ASP.NET MVC ile alıyoruz. ASP.NET’in 1.1 sürümünden 2.0 sürümüne geçiş kadar derin yenilikler olmasa da, 2.0’dan 3.5’e geçişteki yeniliklerden çok daha fazlası yeni sürümde bizleri bekliyor. Henüz ne zaman doğacağı bile kesin olmayan bir teknoloji hakkında birşeyler yazmak normal şartlarda zordur. Ancak Microsoft sağolsun, daha şimdiden bize öyle ipuçları, öyle araçlar sunuyor ki birkaç sene sonraki yenilikleri şimdiden okuyabilme, inceleyebilme, hatta test edebilme şansını yakalayabiliyoruz. İşte bu izlenimlerim sonucunda sizlerle paylaşmak istediklerim:

Gelecek olan yeniliklere baktığımızda mimariye eklenen köklü değişikliklerin yanı sıra, varolan yapıda aksaklılara neden olan ve çoğu ASP.NET programcısının şikayetlerinin ciddi anlamda giderilmeye çalışıldığı görülüyor. MVC Framework, Routing, Dynamic Data, Chart kontrolleri, Ajax tarafındaki yeni eklentiler ve kontroller aslında 4.0 sürümünde bizleri bekleyen en ciddi yenilikler olarak göze çarpıyor. Diğer yandan şu an varolan ViewState ile ilgili sorunlar, Master-Content Page, User Control’ler ile veri kontrollerinin template’lerindeki kontrollerin istemci tarafına taşındığında ID bilgilerinin değişmesi ve ele alınmasının zorlaşması, kontrol çıktılarının <table> elementi olarak üretilmesi gibi sorunların giderilmesine yönelik yeniliklerin daha şimdiden geldiğini görebilmek, hatta test edebilmek mümkün(CTP sürümünde bu özelliklerin çoğunu test edebiliyoruz). Yine Visual Studio 2010’da 2.0 sürümünden 4.0 sürümüne kadar multi-targetting özelliğinin olması, JQuery desteğinin gelmesi bizi bekleyen olumlu gelişmeler. Bunların dışında yine ufak tefek, ancak etkileyici yenilikler de önümüzdeki Beta sürümlerde eklenerek, nihai sürümde karşımıza yepyeni bir ASP.NET geliştirme ortamı çıkacak gibi görünüyor.

11 Şubat 2009

Birden Fazla Tabloyu CacheDependency Yapısında Önbelleklemek

SqlCacheDependency nesnesi ASP.NET uygulamalarında veritabanındaki güncellemelere göre önbellekleme yapılmasını sağlayan nesnedir. Zamana bağımlı kalmadan çok daha hızlı ve performans açısından önemli kazançlar sağlayan bu nesneyi tek bir tablodan gelen kayıtların önbelleklenmesi için kullanabiliyoruz. Fakat çoğu uygulamada JOIN'li ifadelerle birden fazla tablonun verilerini eşleştirebiliyoruz. Peki böyle bir durumda önbellekleme işlemini SqlCacheDependency nesnesi ile nasıl gerçekleştirebileceğiz? Çünkü yapısı itibariyle bu nesne tek tablo ile çalışabilir şekilde tasarlanmıştır. Sorumuzun cevabı: AggregateCacheDependency nesnesi(Yanılmıyorsam .NET Framework 2.0 ile gelen bir tiptir). AggregateCacheDependency nesnesi birden fazla CacheDependency nesnesini içerisinde saklayarak, herhangi bir nesnenin durumunun değişmesinde Cache nesnesinin bellekteki bilgilerini kaldıracak ve önbellekleme işlemini başarılı şekilde yapabilmemizi sağlayacaktır. Yapmamız gereken tek işlem herbir tablo için oluşturduğumuz SqlCacheDependency nesnelerini AggregateCacheDependency nesnesine Add metodu ile eklemek ve bu nesneyi Cache'e Insert metodu aracılığıyla eklemektir. Aşağıdaki kod parçalarında bu işlemin nasıl yapılabileceğini görebilirsiniz.

SqlCacheDependency dep1 = new SqlCacheDependency("dbCon", "Urunler");
SqlCacheDependency
dep2 = new SqlCacheDependency("dbCon", "Siparisler");

SqlCacheDependency dep3 = new SqlCacheDependency("dbCon", "Musteriller");


AggregateCacheDependency
aggDep = new AggregateCacheDependency();

aggDep.Add(dep1,dep2,dep3);


Cache.Insert("urunSiparis", dt, aggDep);

SqlCacheDependency ASP.NET uygulamalarında çok verimli şekilde önbellekleme işlemleri yapılmasını sağlar. Ancak hangi şekilde olursa olsun, önbellekleme işlemlerinde unutulmaması gereken nokta, çok büyük verileri Cache'te saklayacak olursak ve sistem kaynakları yeterli değilse bazı durumlarda OutOfMemoryException hatası alabiliriz. Yani hem hataların oluşması, hem de bellekte çok fazla yer işgal etmek uygulamanın performansı adına kötü pratikler olacaktır(bkz: Kaş yapalım derken göz çıkarmak). Bu nedenle Cache'te saklanacak verilerin boyutu bizim için önemli bir kriterdir, bu ayrıntıyı unutmamak lazım.

Bu arada yeri gelmişken ASP.NET uygulamalarında performans ipuçlarına ihtiyacınız varsa, bu Cuma akşamı gerçekleşecek olan webinerime katılımlarınızı beklerim. Bilgileri bu adresten bulabilirsiniz.

04 Şubat 2009

nedirtv?com Şubat Ayı Webinerleri

nedirtv?com webinerleri tüm hızıyla devam ediyor. Ineta Türkiye’nin de desteğiyle nedirtv?com editörleri olarak bu ay 7 farklı konuda gerçekleşecek webinerlerde yazılım geliştiricilerle beraber olacağız. ASP.NET AJAX 3.5, Expression Blend 2, ADO.NET Data Services Güvenlik , ASP.NET Uygulamalarında Performans İpuçları , Windows Workflow Foundation, MOSS 2007-InfoPath Form Services, Expression Web 2 gibi konular üzerinde yapılacak webinerler hakkında daha detaylı bilgi almak için bu linkteki haberi okuyabilir, webinerlerin duyurularını almak için de bu linkteki olayı Facebook ajandanıza kaydedebilirsiniz.

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.