Tahirle Zühre Meselesi

Tahir olmak da ayıp değil Zühre olmak da
hatta sevda yüzünden ölmek de ayıp değil,
bütün iş Tahir’le Zühre olabilmekte
yani yürekte.
Mesela bir barikatta dövüşerek
mesela kuzey kutbunu keŞfe giderken
mesela denerken damarlarında bir serumu
ölmek ayıp olur mu?
Tahir olmak da ayıp değil Zühre olmak da
hatta sevda yüzünden ölmek de ayıp değil.
Seversin dünyayı doludizgin
ama o bunun farkında değildir
ayrılmak istemezsin dünyadan
ama o senden ayrılacak
yani sen elmayı seviyorsun diye
elmanın da seni sevmesi şart mı?
Yani Tahir’i Zühre sevmeseydi artık
yahut hiç sevmeseydi
Tahir ne kaybederdi Tahirliğinden?
Tahir olmak da ayıp değil Zühre olmak da
hatta sevda yüzünden ölmek de ayıp değil.

Nazım Hikmet

SEPOF

Epeydir yeni yazı girmemiştim günlüğe, bu suskunluğuma faydalı olduğunu düşündüğüm bir site için son veriyorum. www.sepof.com adresinden ulaşabileceğimiz Search Engine Position Finder’ın özellikle web geliştiricilerin ve SEO’ların işine yarayacağını düşünüyorum. Bu site aracılığıyla girdiğiniz kelimenin YAHOO, BING ve GOOGLE’da kaçıncı sırada oldığunu bulabilirsiniz. Ayrıca sitede bulunan son aramlar ve sitenizin arama geçmişi kısımları da benim oldukça hoşuma gitti.

ASP.NET Güvenlik Açığı

Geçtiğimiz günler içinde bir konferans sırasında çok ciddi bir güvenlik açığı ortaya çıkarıldı. Ayrıca daha Microsoft bir reaksiyon almadan, bu konferans sırasında açığı kullanan bir demo bile yapıldı. Bu demoya ait videoyu da internette rahatlıkla bulabilirsiniz. Bu açık bütün ASP.NET sürümlerini etkiliyor. Microsoft bu sorunla ilgili olarak bir güvenlik önerisi yayınladı.

Bu açık kullanılarak saldırgan ASP.NET uygulamanızdaki dosyaları indirebilir ya da şifrelenmiş olarak gönderilen bilgileri çözebilir. Saldırı ASP.NET’in gönderdiği hata mesajları aracılığıyla yapılıyor. Saldırgan şifrelenmiş bir text’i server’a göndererek çok sayıda istek gönderiyor. Ve bu sorgular sonucunda dönen hata mesajlarını kontrol ederek bu şifrelenmiş text’i çözebiliyor.

Şu an Microsoft’un önerdiği çözüm CustomErrors’ı açmanız ve bütün hataları tek bir hata mesajı sayfasından göstermeniz. Böylece saldırgan hata mesajları üzerinden çıkarım yapamayacak. Ayrıca bu hata sayfası gösterimi sırasında da bir delay yapılması tavsiye ediliyor.

DevExpress ClientSideEvents FireFox Problemi

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.

 <ClientSideEvents KeyDown=”functions (s, e) {

foo();

}” />

String Birleştirme Ve Performans

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

string tamad=ad+” “+soyad;

kod parçası yerine

 StringBuilder builder = new StringBuilder();
 builder.Append (ad);
 builder.Append (” “);
 builder.Append (soyad);
 string tamad= builder.ToString();

kod parçasını kullanmak bize bir performans artışı sağlamayacağı gibi okunurluğu da azaltacaktır.

ASP.NET Custom Server Control

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.
Continue…