DevExpress kontrollerinin client side event’lerinde bir javascript fonksiyonu çağırıyorsak Internet Explorer için bu işlemi aşağıdaki gibi yapabiliriz.
<ClientSideEvents KeyDown=”foo()” />
Ancak bu kodun bulunduğu sayfayı Firefox ile açmaya çalıştığımızda foo fonksiyonunun tanımlanmadığına dair hata verecektir. Bu sorunu aşmak için fonksiyonu aşağıdaki gibi DevExpress’in normal söz dizimi içinde vermeniz yeterli olacaktır.
Uygulamalırımızda en çok kullandığımız değişken tiplerinden bir tanesi de string’dir. Bir çok işlemimizi string’ler üzerinde yaparız. Ancak strinf değişkenleri kullanırken dikkat etmemiz gereken ve bize performans açısından büyük katkı sağlayacak bir kaç nokta vardır.
Hepimiz uygulamalarımızda
string x = “”;
for (int i=0; i <= 100000; i++)
{
x += i.toString();
}
tarzında bir string birleştirme işlemi gerçekleştirmişizdir. Bu tarz bir string birleştirme işlemi küçük döngülerde bir problem oluşturmazken büyük döngülerde başımıza ciddi performans problemleri çıkarabilir. Bunun nedeni ise böyle bir birleştirme işleminde bütün atama işlemlerinde yeni bir nesne oluşturulmasıdır. Yani döngümüzün ilk tekrarında x değerini alır, yeni bir string değişken oluşturur. Eski değeri yeni değişkene atar ve sonrasında verdiğimiz string değeri buna ekler. Bir sonraki adımda yine yeni bir nesne oluşturulur, bu kez ikinci nesnedeki değer üçüncüye atılır ve adımlar bu şekilde devam eder. Yani yukarıdaki gibi bir döngü yazmış iseniz, sadece string birleştirme işlemi için 100000 ekstra nesne oluşturulur. Buna uygulamanıza esktra yük demektir.
Bu soruna çözüm ise StringBuilder. Yukarıdaki kodu aşağıdaki şekilde de yazabiliriz.
StringBuilder builder = new StringBuilder();
for (int i=0; i < 100000; i++)
{
builder.Append(i.toString());
}
string x = builder.ToString();
Kodumuzu bu hale getirdiğimizde bu kod parçası için yaklaşık 10 kat hız artışı sağlamaktadır.
Peki heryerde string oluşturma işlemlerimizi bu şekilde mi yapmalıyız. Tabii ki hayır. Örneğin
ASP.Net ile web uygulamalarımız geliştirirken kimi zaman kontrollerin çalışma şekillerini
değiştirmek isteyebiliriz. Kontrollü biraz daha özelleştirmek isteyebiliriz. Bu işlemi kontrolü sayfamızın üstüne attıktan sonra sayfamızın koduna eklemeler yaparak gerçekleştirebiliriz. Ama peki başka bir sayfada daha aynı kontrolü kullanacaksak ne yapacağız. Böyle bir durumda kodları ilk sayfamızdan diğerine kopyalamamız gerekecek. Bu sorunu da böyle hallettikten sonra kontrolümüzü bir çok sayfada kullandık. Peki kontrolümüzün bir özelliğinde değişiklik yapacaksak ne olacak? Eklediğimiz bütün kodları teker teker değiştireceğiz. Daha sonra iş arkadaşınız kendi uygulamasında aynı özelleşmiş kontrolü kullanmak istediğinde ona kontrolün arkasına yazdığımız kodları göndermemiz
gerekecek. İşte bu ve buna benzer sorunlardan kurtulmak için kendi ASP.Net Server Kontrollerimizi yazarız.
Bu makalede uygularımızda kullanabilmek için Sayısal Textbox kontrolü oluşturucağım. Sayısal karakterlerin tesbitinde javascript kullanacağım için, javascript bilginiz olması bir avantaj olacaktır. Amacımız custom kontrolleri oluşturmayı anlamak olduğu için çok ayrıntılı bir kontrol yazmayacağım, ama siz bu başlangıcın üzerine eklemeler yaparak istediğiniz hale getirebilirsiniz. Bu konuda karşınıza çıkacak sorunlarda yardımcı olmaya çalışırım. Yazının tamamını okuyun »
Eğer ASP.Net uygulamanızda “error CS1026: ) expected” hatası alıyorsanız. İlgili sayfanızın source’unda <% %> tagleri ile yazdığınız kodun sonunda (büyük ihtimalle alışkanlık nedeniyle ) “;” unuttuğunuzu göreceksiniz. Bunu sildiğinizde sorun çözülecektir.
DevExpress kontrollerinden ASPxPopUpControl kullanırken, bir yerde genişliğini 100% yapmam gerekti. Ama nedense bir türlü ayarlayamadım. Genişliği piksel olarak verdiğim de ise hiçbir sorun çıkmıyordu. Sonuçta biraz google’lama sonucunda çözümü buldum. Belki birilerine daha yardımı dokunabilir. Öncelikle şunu da söyleyeyim. Bu çözümü DevExpress Team önermiş yani bir nevi sorun olduğunu kabul ediyorlar.
Öncelikle bir javascript fonksiyonu yazıyoruz. (popup, kontrolümüzün ClientInstanceName’i)
function GenislikAyarla(){
var width = _aspxGetDocumentWidth(); popup.SetWidth(width); }
Daha sonra kontrolün init client side event’inde bu fonksiyonu çağırıyoruz.
Asp.Net ile uygulama geliştirirken hepimiz bir kere bile olsa updatepanel kullanmışızdır. Bazen bunu kullanılabilirlik için yaparken bazen de performans için yapabiliyoruz. Eğer updatepanel’i performans için kullanıyorsak dikkat etmemiz gereken bir nokta var. Örneğin bir web uygulaması yazdık. Bu uygulamada sol tarafta ağır sorgular sonucu getirilen bilgiler listeleniyor. Sağ tarafta ise basit kullanıcı işlemleri yapılıyor. Uygulamamızı çalıştırdığımızda sol taraftaki işlemler nedeniyle sayfadaki her postback’de sayfamız geç yükleniyor. Oysa biz sağ taraf güncellenirken sol tarafta işlemlerimize devam etmek istiyoruz. Hemen updatepanel aklımıza geliyor. İki tane updatepanel kullanıyoruz sağ ve sol taraf için. Tabii ki UpdateMode’u nu da conditional yapmamız gerektiğini biliyoruz. Evet tamam şimdi oldu. Mu? Uygulamamızı tekrar çalıştırdığımızda sağdaki updatepanel’de bir güncelleme yaptığımızda sayfamızın yine yavaş geldiğini görürüz. Bunun nedeni sadece bir updatepanel güncellenmesine rağmen ASP.Net sayfasının yaşam döngüsü nedeniyle sol taraftaki kodun bağlama işlemi de tekrar edilir. Bir de custom control ya da user control kullanırsanız, bunu farketmek daha da zor olacaktır. Bunu aşmak için belirli sayfanın yaşam döngüsünde postback’e neden olan kontrolleri takip ederek, belirli işlemlerin yapılmamasını sağlamalıyız. Mesela örneğimizdeki sol taraftaki databind işlemi için sadece bir timer ise yada belirli bir buton ise databind işlemini gerçekleştirmesini sağlayabiliriz.
Evet bu aralar teknik birşeyler yazmadığımın farkındayım. Ama günlüğün bir amacı da insanlarla faydalı olacağını düşündüğün şeyleri paylaşmaksa, günlüğümün hala görevini yerine getirdiğini söyleyebilirim.
Bu kez bir belgeseli tavsiye edicem. Belgeselin adı Einstein’s Big Idea (Einstein’ın Büyük Fikri ) ve bu fikirde e=mc^2. Ama gelgeseli güzel kılan yönü bu formülü merkeze koyup sebeplerinden başlayıp, sonuçlarına gitmesi. Yani bir nevi süreci anlatıyor. Elektromanyetik dalgalardan başlayıp, Einstein’a uğrayıp, atom bombasına oradan da Cern Laboratuvarlarına kadar geliyor. Bu süreci ise hiç teknik olmayan bir dille ve birçok biliminsanının insani yönlerinden de kesitler sunarak anlatıyor. İnternette Türkçe dublajlı olarak mevcut.
Not : Bu arada Einstein resimlerde görülen yaşlı adam kadar masum değilmiş
Gecenin bu vaktinde bloğa yazmak ta nerden çıktı diyebilirsiniz. Ama bu sefer farklı bir amaçla yazıyorum, naçizane bir film önericem. 3 Idiots. Aralık 2009 çıkışlı, belki konuşulmuştur önceden ama o zaman askerde olduğum için kaçırmış olabilirim.
Ben yatmadan önce kafa dağıtmak için film ararken, şans eseri izlemeye başladım. Film bir Bollywood filmi. Önyargım ve filmin biraz vasat başlaması nedeniyle bir ara kapatıcaktım ama hadi dedim biraz daha sabredeyim. İyi ki de öyle yapmışım. Ama film baya bi uzun yaklaşık 2 saat 40 dakika. Yani 4 bölüm dizi çıkarabilirlerdi Neyse dediğim gibi filmi izlemeyi iyiki bırakmamışım. Oldukça güzel bir film. İçinde kaçınılmaz bir şekilde müzikler ve danslar da var. Bollywood filminde bunların olmaması da garip olurdu.
Filmi uzun uzadıya anlatmayacağım. Filmin kahramanları bir mühendislik okulunda ( tamamen tesadüf, bilsem açmazdım, mühendis mühendis yeter ya ), tabi kahramanlarımızın birinin hayata bakış açısı biraz değişik. Ve tabii bu bakışı açılarının sonucunu da filmin sonunda görüyoruz.
Mühendislik deyince sıkıcı gelebilir ama sıkıcı bir film değil, mühendislikle de alakası yok ( bakış açısına göre değişir tabi ) . Ben vaktiniz olduğu bir zaman izlemenizi tavsiye ederim. Başlarda sıkılırsanız bırakmayın izlemeyi sonradan saracaktır zaten.
DevExpress kontrollerini kullanırken eğer server tarafında yazdığınız kodda Enabled property’sini kullandıysanız. Örneğin
ASPxTextBox1.Enabled=true;
gibi, Client Side Eventler ‘de kontrolün enablad özelliğini değiştirmek istediğiniz de (SetEnabled fonksiyonu ile) beklediğinizden farklı ve hatalı sonuçlarla karşılaşırsınız. Buna engel olmak için eğer bir kontrolün enabled özelliğini client side’da değiştireceksek ve server side’da da bu özelliğe müdahale etmemiz gerekiyorsa Enabled yerine ClientEnabled property’sini kullanmalıyız.
Günlerdir beklediğim (13 gün oldu sipariş vereli) kitaba (Code Complete 2) nihayet kavuştum. Türkiye’de güvendiğim sitelerde tükendiği için Amazon’dan sipariş vermek zorunda kaldım. Ama fiyat olarak daha ucuza bile geldi Belki çevremdeki arkadaşlardan temin edebilirdim ama kitaplığımda bulunmasını istediğim bir kitap olduğu için alma ihtiyacı duydum. Bir kaç kitap daha var almayı planladığım onları umarım Türkiye’de bulabilirim.
Bir paragrafta Amazon’a bu kadar iyi çalıştıklarını bilmiyordum. İlk alışverişim olduğu için biraz şüpheliydim ama hiçbir sıkıntı olmadan tam da söyledikleri günde elime geçti kitap. Ayrıca kargo ücreti de beklediğimin çok altındaydı. Yurtiçi gönderi ücreti kadar nerdeyse. Bu arada eğer Amazon’dan alışveriş yapacaksanız. Amazon.com yerine Amazon.co.uk’u hatta Almancanız varsa Amazon.de’yi tercih etmenizi öneririm. Kargo ücreti ve elinize geçiş süresi bakımında oldukça fark ediyor.