is neither a DataColumn nor a DataRelation for table

Şubat 4, 2009

Böyle bir hata ile karşılaştıysanız:
Bind ettiğiniz dataview,datatable gibi kontrollerden değer alır iken kolon ismini yanlış veriyorsunuz demektir(Benim sorunum buydu belki başka türlü de alabilirsiniz :D ).Söyle ki
DataView dv=new DataView(datatable,v.s…..);
dv[0]["columname"].ToString();

columname yanlış verdiniz veya o isimli bir kolon yok..

Kolay gelsin ^^


Ceturk Yazılım Semineri

Kasım 20, 2008

Bugüne kadar gerçekleştirdiği bir çok etkinlikle bilişim sektörünün gelişmesine katkıda bulunan CETURK etkinliklerine devem ediyor.

22 Kasım Cumartesi günü “CETURK Yazılım Seminerleri” etkinliği düzenleniyor. IBM’de gerçekleşecek seminerde ORM ve Hibernate, Web 2.0 ve IBM Yaklaşım ve Kurumsal Servis Odaklı Mimari (Enterprise SOA) seminerleri verilecek.

Etkinliğe katılım her zamanki gibi ücretsiz olacaktır. Seminere katılan 5 kişiye çekiliş ile kitap hediye edilecektir.

Ayrintılı Bilgi
ve Kayıt

Google Mühendisliği

Eylül 17, 2008

Gerçi çok eski bir yazı ama okumaya değer,

Burada


These columns don’t currently have unique values

Eylül 3, 2008

Uzun zamandır bloğa birşey yazamıyorum.Nedeni yok evde oyun oynuyorum insanın kendisine de biraz zaman ayırması gerektiğine inanıyorum :)

Neyse gelelim hataya:

Bu hata ile karşılaşmanın sebebi şudur,bir dataset döndürüceksiniz ve dataset içindeki bir tabloda uniqu alan belirlediniz.Örneğin ÜrünID unique varsayalım.Execute ettiğiniz query bir den fazla uniqe kayıt içeren değer döndürüyor demektir.Yani aynısından 2 tane 123 gelirse bu hatayı alırsınız.

Not:Ben bu hatayı Datatable’i programmatik olarak oluştururken almıştım.

Bir hatayı daha çözdük sayın seyirciler.Yok mu daha


Open Source manyağı olun.

Ağustos 27, 2008

480 tane opensource projenin yer aldığı çok güzel bir site.Open source değil mi? yumulun :)

Burada


Bandwidth Speed Test

Ağustos 14, 2008

İnternet hızınızı merak mı ediyorsunuz? Şu adreste oldukça güzel test ediliyor :)

Bende 1589 kbps Download,537 kbps Upload hızı çıktı.Ne kadar rezil olduğumuz anlaşılıyor?

Türk Telekoma kafam girsin!!!!

http://www.speedtest.net/


Dünyadaki bütün dosya uzantıları

Ağustos 13, 2008

Gerçekten de etkileyici

http://www.ace.net.nz/tech/TechFileFormat.html


Eyvah bu ne exe’si böyle?

Ağustos 13, 2008

Hemen hemen buraya yazıp search diyin çabuk!!!

http://exelib.com/

:)


Online çalar saat

Ağustos 13, 2008

:D Bu da mı olacaktı değil mi ama çok güzel bir uygulama.Bilgisayarını hiç kapatmayan benim gibi manyakların ihtiyacı olan birşey:D

http://kukuklok.com/


Kitapların içindeki kodu bulun!

Ağustos 13, 2008

Yazılım ile ilgili yazılan tüm kitapların kaynak kodlarının içinde arama yapabileceğiniz çok güzel bir arama sistemi.Diğerlerinden farklı olmasının nedeni istediğiniz kodun nasıl kullanıldığını bulmak için çok güzel bir kaynak.

http://www.codefetch.com/


45 Photoshop Tutorials for Better Navigation

Ağustos 8, 2008

Photoshop ile hazırlanmış 45 adet navigasyon örneği çok güzel tasarımlar var.

Burada


65 adet Login Form Tasarımı

Temmuz 31, 2008

İçinde çok güzel örnekler var

Burada


Tasarımcılara en çok söylenen 10 yalan

Temmuz 30, 2008

Rastladığım güzel bir yazıyı sizlerle paylaşmak istedim:

Mark W. Lewis tasarımcılara en çok söylenen 10 yalanı paylaşmış. Bu maddelerden en az bir yada bir kaçı eminizki başınıza gelmiştir.
Özellikle Freelance işlere yeni başlayanlar bu maddeleri çok dikkatli okusunlar çünkü sürekli karşılarına çıkacak!
Bakalım Neymiş bu 10 büyük yalan ?

1- Bunu bizim için ucuza yada ücretsiz yap, bir dahakinde telafi edelim!

Saygın hiç bir iş sahibi, daha sonra ödenmek üzere yada ücretsiz olarak emeğini ve zamanını vermez.
Bir tesisat ustasına “Bu seferlik lavaboyu bedava ver ve yerine monte et, bir dahaki lavabo ihtiyacımızda telafi ederiz!” dediğinizi hayal edebiliyoırmusunuz ?
Bu tip müşteriler muhtemel bir sonraki işte zaten sizi aramayacaklardır.

2- Son halini görmeden asla ücret ödemeyiz!

Bu müşterilerin sizden avans istemenizi engellemek için kurduğu bir tuzaktır. Heme her tür işte önce avans verilir ve ondan sonra işler devam eder.
Müşterinizle devamlılık arzeden bir ilişkiniz olması durumunda farklı davranabilirsiniz, ancak yeni bir müşteri hiç bir zaman çalışmalarınızı ücretinizin bir kısmını ödemeden görmemeli.

3- Bu işi bizim için yap, senin için iyi referans olur, işlerin açılır!

En büyük yalanlardan biri. Aynı şeyi lavabocuya söylediğinizde, size vereceği yanıt, “İşimi kusursuz yapsam bile farkedilmek için bunu size bedavayamı yapmam gerek?” olacaktır.
Ayrıca işi bu şekilde yaptıran işveren etrafındakilere projeyi ne kadar ucuza çıkardığını böbürlenerek anlatacaktır.
Çevresinden sizi yeni bir iş için arayan olsa bile muhtemelen size diğer işten aldığınız ücreti önereceklerdir.

4- Demo çalışmalara bakarken “Seninle çalışıp çalışmamaya henüz karar vermedik. Ama malzemeleri burada bırak ben ortağımla,yatırımcımla,karımla,patronumla görüşeyim.”

Bunu söyleyen kişi emin olabilirsinizki çalışmalarınızı teslim ettik sonra 15 dakika içinde diğer tasarımcıları arayarak fiyat bilgisi isteyecektir.
Geri aradığınızda size ona verdiğiniz fiyatın çok yüksek olduğunu ve x bir tasarım firmasının daha uygun fiyat vererek işi aldığını söyleyecektir.
Elbette onlar ucuz olacak, çünkü siz zaten saatlerce çalışarak ön çalışma ve danışmanlık hizmetini ücretsiz olarak verdiniz.
Sözleşme yapana kadar hiç bir yaratıcı çalışmayı müşterinin ofisinde bırakmayın !

5- Proje iptal olmadı, sadece ertelendi. Hesabımız açık kalsın 1-2 ay sonra devam ederiz!

Muhtemelen etmeyecektir. İşte duraksama varsa muhtemelen o proje cansızdır. O ana kadar yaptığınız kısmın ücretini almamanız ise büyük hata olacaktır.
2 ay sonra geri aradığınızda o proje ile ilgili olarak başka biri atanmış olabilir, ve bilin bakalım ?! Bu yeni sorumlu kişi sizin adınızı bile duymamış olabilir!

6-Sözleşme mi ? Ne sözleşmesi, biz arkadaş değilmiyiz ?

Birşeyler yanlış gidene dek elbette arkadaşız. Akabinde senin takım elbiseli aşağılık benimde gerzek tasarımcı olmamam için sözleşme şart.
Ancak yaptığınız işler için para ödenmemesini bekliyorsanız o sizin bileceğiniz iş.
Saygın her iş sahibi mutlaka sözleşme yapar. Sizde yapmalısınız.

7- Faturayı iş üretildikten sonra kesip gönder!

Daha çok basılı grafik işlerinde, eğer uygulama yada basımını sizin yapmadığınız bir iş için, neden başkasının iş bitiş tarihini bekleyesenizki.
Siz zaten tasarımınızı teslim ettiniz ve kabul edildi. O zaman faturanızı kesebilirsiniz. Bu sizi başka türlü bir bekletme taktiği olabilir. Müşteriniz işin tasarım sonrası aşamalarında ortaya çıklacak sorunları çözebilmek için sizi bekletiyor olabilir.

8- Senden önceki şu kadara yapmıştı…

Tamamen alakasız bir söylem. Eğer daha önceki çok iyi bir iş çıkarmış olsa şu an sizinle değil onunla konuşuyor olmaları gerekirdi.
Bir öncekinin ne kadar ücret aldığı yada talep ettiği sizi hiç ilgilendirmemeli. Piyasanın altında ücret talep edenler yakında bu piyasadan ayrılacak demektir ya iflas edeceklerdir yada sektör değiştireceklerdir.

9- Bizim bütçemiz bu kadar diyen firmalar

İnanılmaz değilmi ? Adam araba almak istiyor hiç araştırmadan alacağı araba için ne harcayacağını biliyor.
Her proje belli ölçekte bir ücrete karşılıktır. Daha az paraları varsa sizde karşılığında daha az çalışarak işi çıkarabilirsiniz. Ama bunu onların anladığından emin olun.
İşi basitleştirerek sunacağınız bütçeyi kısın.

10- Finansal sorunlar yaşıyoruz, işi teslim et, biz biraz kazandıktan sonra ödemeni yapalım!

Tabii ki, ancak ödeme yapılacaklar listesinde en alt sıralarda olduğunuzu bilin. Bir firma kötü gittiğini açıklayabiliyorsa emin olun göründüğünden çok daha kötü durumdadırlar.
Ayrıca bir banka olmadığınızı unutmayın geciken ödemeler ile ilgili olarak size ek ödeme yapılmasını isteyin.

İster tasarım ajansı sahibi olun ister freelance çaışın bu 10 maddelik listedekilere bir gün muhtemelen rastlayacaksınız. Yada bir çoğuna rastladınız bile.
Okuduğunuz yazının kaynağı yabancı, buda şu anlama geliyor Türkiye’de bu işi yapıyorsanız bu maddeler haricinde daha sert ve farklı zorluklar ile karşılaşmanızda olası.

Zaman zaman sizlerden, tasarım işine girmek ve bunu meslek edinmek isteyenler için tavsiyeler yada mesleğe yeni başlamış kişilerin iş hayatlarında yaşadıkları zorluklar ile ilgili e-postalar gelmekte bu makale işe yeni başlayanlar için önemli bir kilometre taşı olacaktır. Özellikle serbest çalışanlar için.

Kaynak: Burada


Directory name is invalid..

Temmuz 30, 2008

Ulan ne garip bir hatadır ilk aldığımda öküz-tren misali ekrana bakakalmıştım :D .Eğer visual studio ile çalışırken herhangi bir nesnenin ismini değiştirmeye kalktığınızda bu hatayı alıyorsanız yapmanız gereken:

C:\Documents and Settings\%kullanici%\Local Settings\Application Data\Microsoft\WebsiteCache

Bu yere proje adınızla ilgili klasörü oluşturun.

Bir sorun daha gitti yokmu daha?


String or binary data would be truncated. The statement has been terminated.

Temmuz 29, 2008

Eğer bir asp.net uygulamasında bu hatayı alıyorsanız,bunun nedeni insert/update etmek istediğiniz bir  alana, belirlediğinizden daha uzun bir veri girmeye çalışıyorsunuz demektir.Yani nvarchar(20) lik alana 25 karakterlik bir metin girmeye çalıştığınız da bu hatayı alırsınız.

Bir sorunu daha çözdük sayın seyirciler yok mu daha :D


Usta tasarımcı olmanın kuralları

Temmuz 29, 2008

1- Kullandığınız Yazı Tiplerini Sınırlayın
Tamam, “usta tasarımcı” lafı biraz zorlama olabilir. Ama en azından bu yedi kuralı takip ederek “uzman tasarımcı” olabilirsiniz. Bu, nasıl daha iyi bir tasarımcı olabileceğiniz hakkında okuduğunuz blog yazılarının en kısası ve en bilgilendiricisi olacaktır. Lütfen aklınızda bulundurun: bu kurallar KIRILABİLİR… çünkü yasa değiller, sadece benim bir tasarımı bir araya getirirken uyguladığım genel kurallardır.

Aşağıdaki kuralları izlediğinizde sanatsal mükemmelliğe giden yoldasınız demektir:
Kural Bir: Yazı tiplerini sınırlayın. İyi bir tasarımı bir araya getirmenin büyük bir kısmı, gördüğünüz gibi, görünüşün birbiriyle tutarlı olmasıdır. Tutarlı bir görünümü elde etmenin en iyi yolu tasarımını kullandığınız bir kaç motifle (temalar) sınırlamanızdır. Seçtiğiniz yazı tipleri sınırlamak isteyeceğiniz ilk değişkendir. Ben genellikle tasarım başına 2 yazı tipi seçerim.

İlk yazı tipi süslü veya sanatsal olabilir. Bu yazı tipi tasarımınıza biraz karakter, kişilik ve kabiliyet kazandırmak için kullanılır. Tasarımın ruh halini belirleyen bu yazı tipidir. Bir kızın partisi için fırıl fırıl dönen eğlencelik bir yazı tipi mi, yoksa bir rock grubu için kötülük dolu karanlık bir yazı tipi mi? Bu süslü yazı tipini üst kısım için kullanırdım –büyük olan herhangi bir yere, bu yazı tipini kullanırım. Süslü yazı tipi, tasarımın odak noktası olacaktır. Genellikle bu yazı tipini az yerde kullanırsınız ama daha büyük olacağından insanların odaklanacağı ve ilk göreceği şey bu olacaktır.

İkinci yazı tipi çok basit olmalıdır. Bu ikincil yazı tipini izleyici fark etmemelidir bile. Bu ikinci yazı tipi, çok kolayca okunabilir olmalıdır. Tasarımda yaygın olan metinlerde kullanılacak genel yazı tipi bu olacaktır. Açıkça, yaygın metinlerde artsitik yazı tiplerini okumak çok zor olacağından bu ikinci yazı tipinin amacı, sadece işlevsellikten ibaret olmalıdır.

İşte bir tasarımda kullanılan uygun yazı tiplerine örnek. Gördüğünüz gibi, burada sadece iki yazı tipi kullanıldı. Süslü yazı tipi, üst kısım için ve basit yazı tipi de genel metin için. Temiz ve tutarlı görünüyor.


solda: “basit yazı tipi” / sağda: “süslü yazı tipi”

Burada da yazı tiplerinin kötü kullanımı söz konusu. Bu durumda, bir çok süslü yazı tipip kullandım. Sadece tasarımı tutarsız gösteriyor. Alt kısım, ana başlıkla uyuşmuyor bile.


solda: “basit yazı tipi” / sağda: “çok fazla süslü yazı tipi”

Bir tasarımda çok fazla yazı tipi kullanmak en büyük hatadır. Broşüründe 8 farklı yazı tipi kullanan birinden daha kötü görünen bir şey yoktur. Daha da kötüsü genel metinleriniz için çok süslü bir yazı tipi kullanmanızdır. İşte yazı tiplerinin en kötü nasıl kullanılabileceğine dair bir örnek:


solda: “yazı tipleri genel metin için fazla süslü” / sağda: “çok fazla süslü yazı tipi”

Sizi göndermeden önce son bir düşünce. Eğer süslü yazı tipiniz modern veya çağdaş görünüyorsa, o halde basit yazı tipiniz bir sans-serif yazı tipi olmalıdır. Eğer süslü yazı tipiniz eski moda görünüyorsa, o zaman ikincil yazı tipi olarak serif kullanın.

2-Renklerini sınırla.
Usta bir tasarımcı olmanın yedi kuralının ikincisidir. Önce ilk kuralı okumak isteyebilirsiniz.

\

Yazı tiplerininizi sınırlamanın son kuralıymış gibi geliyor kulağa değil mi? Aynen! Renklerimizi, yazı tiplerimizle aynı nedenden sınırlamak istiyoruz. Tasarımda kullandığımız renkleri sınırlamak, tasarımımızın daha tutarlı olmasını sağlayacaktır. Yani, her şey uyumlu görünecektir. Aynı bir spor takımının üniforması veya bir şirketin markalaması gibi.

Yazı tipi seçiminde olduğu gibi, renkleri sınırlamak sadece bir rehberdir, kural değildir. Tasarımınızda bir hayli gökkuşağı gibi bir sürü renk kullanabilirsiniz, ve harika görünebilir. Ama bir renklendirme stratejisiyle başlamalı ve buna sonuna kadar uymalısınız. Renklerinizi tasarımınızla uyumlu bir şekilde kullanın.
Yeni başlayanlar için, önce renk değerlerinden bahsedelim. Bir rengin değeri, rengin ne kadar aydınlık veya ne kadar karanlık olduğudur. Bir sarı örneğin, epeyce aydınlıktır. Bir mor epeyce karanlıktır. Tabii ki, bir rengin değer yelpazesi vardır. Örneğin mor, çoğumuzun karanlıkla özdeşleştirerek düşündüğü, ama aynı zamanda oldukça açık değerde bir mor elde edebileceğiniz renktir. Aşağıda renklerin ve onların ilgili değerlerini gösteren bir örnek var. Onun yanında da tek bir renk için renk yelpazesini görebilirsiniz.

renk / değer / değer yelpazesi
renk / değer / değer yelpazesi

Renk planımı seçerken uyguladığım bir kural: renk planınızda mutlaka renklerin değer yelpazesi olduğundan emin olun. Her tasarımda, kontrastı üretmek için biraz açık renge ve biraz karanlık renge ihtiyacınız olacak. Örneğin, tasarımınızın arkaplanı karanlık ise bir de açık renge ihtiyacınız olacak ki metin rahatça okunabilsin. Ya da tam tersi, açık renk bir arkaplanınız varsa metninizin okunabilmesi için açık bir renk gerekli olacak.

Ayrıca genellikle renk planımı seçerken 2 ila 5 renk seçerim. Seçenek sayısını arttırın ve tasarımda iyi sonuçlar elde edeceksiniz. Aşağıda bir araya getirdiğim bir renk planının örneği var.

Görebileceğiniz gibi bir karanlık renk, bir orta değerli renk ve bir de açık renk seçtim. Sağa doğru ise her seçtiğim renk için bir değer yelpazesi hazırladım. Projemde palet niyetine kullanacağım renkler, bu koleksiyondaki renkler olacak. Bir kere paletim hazır olduğunda, sadece bu paletteki renkleri kullanmak için elimden gelenin en iyisini yapmaya çalışacağım.

\

Tamam, şimdi kaç tane renk seçeceğimiz ve hangi değerlerde olmaları gerekiyor gibi teknik renk seçimi işlemlerini hallettiğimize göre, sırada ne var? Sırada ne olacağını söyleyeyim, en zor kısım; o 2 ila 5 rengin hangileri olması gerektiğine karar vermek! Şahsen bunu zaman zaman zor bir iş olarak görüyorum. Aşağıda renk planımı yaparken aldığım yardımlar ve teknikler var:

Sıcaklık yelpazesine uyun. Ya tüm sıcak renkleri ya da tüm soğuk renkleri seçin. Sıcak renkler kırmızılar, turuncular, sarılar, kahverengiler vb. Soğuk renkler ise maviler ve morlardır. Ben şahsen, yeşilleri ise nötr olarak görmekteyim. Eğer tüm renklerinizi bir sıcaklık aralığında seçerseniz, büyük ihtimalle uyumlu olacaklardır.

İlham almak için www.colorlovers.com gibi bir siteyi kullanın. Bu mükemmel sitenin tüm olayı renk planlarıyla ilgili. Sayfa sayfa renk planları bulabilirsiniz.

Bir gözünüz etrafta olsun. Her tarafınızda renk planları vardır. Markette torbanıza bakın, Starbucks’taki tablodaki renklere bakın, Doğa Ana’ya bakın! Hoşunuza giden bir renk dizisi gördüğünüz zaman, not alın ve bilgisayarınızda bunu tekrarlayıp tekrarlayamayacağınıza bir bakın.

Var olan şirket renklerine dikkat edin. Sık sık, bazı markaların renklerinden yararlanıyorum. Logolarına ve renk yelpazesine bakıyorum daha sonra bunu başlangıç noktam olarak alıyorum. Daha sonra belki bir veya iki renk ekleyebiliyorum.

Aşağıda oldukça kısıtlı renk yelpazesi kullanarak hazırladığım bitmiş bir tasarım var.

\

Gördüğünüz gibi, kısıtlı renk yelpazesi ve yazı tiplerimi sınırlamak her şeyi bir arada, düzenli gösteriyor.

Yazar: Bill
kaynak

Alıntı:bildirgec.org


53 Adet Mükemmel CSS Tekniği

Temmuz 29, 2008

Gerçi biraz zamanı geçti ama olsun.Buyrun css harikaları :)

Buradan


The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. The statement has been terminated

Temmuz 26, 2008

Eminim bir çoğumuz bu hata ile karşılaşmışızdır.Bu hatanın anlamı veritabanına gönderilen tarih bilgisinin formatından kaynaklanıyor yani,sql server 2005 tarih formatı olarak MM.dd.yyyy(ay-gün-yıl) olarak kullanıyor ve siz (dd.MM.yyyy) olarak gönderiyorsanız bu hatayı alırsınız.Çözmek için gönderilen tarihi:

DateTime.Today.ToString(“MM.dd.yyyy hh:mm:ss”) olarak gönderirseniz sorun kalmayacaktır.

Ve bir sorunu daha çözdük sayın seyirciler yok mu daha!!!:)


Data Access Layer(DAL) yazmak

Temmuz 25, 2008

Sevgili dostum Mehmet Aydın Ünlü’nün yazmış olduğu makale oldukça güzel ve açıklayıcı.Kullanışlı bir veri erişim modeli nasıl oluşturulur?

Burdan erişebilirsiniz.


ASP.Net Component Paketi

Temmuz 25, 2008

Coolite component paketi içinde birçok component var ve gerçektende çok güzel kullanmanızı tavsiye ederim.Ücretsizdir.


ASP.NET QueryString Güvenliği

Temmuz 25, 2008

QueryString’leri birçoğumuz yoğun olarak kullanmaktayız.Günümüzde sistemlerde oluşan güvenlik açıklarından bir tanesi de yanlış ve kontrol edilmeyen querystring’lerden oluşmaktadır.Peki bunu nasıl engelleyebiliriz?

Düşünüyorum:

1-Bir sayfaya gelecek bütün querystring’leri almalıyım.

2-Bu gelen querystring collection’u analiz etmeliyim.

3-Kötü bir durum var ise engellemeliyim.

Algoritma tamam.Uygulamaya geçelim.İlk once sayfaya gönderdiğimiz querystring’leri nasıl toplayabiliriz?.

Querystring’ler .net’in NameValueCollection sınıfından türemektedir.Söyle bir querystring’imiz olduğunu varsayarsak:

update.aspx?ID=45&Mod=A&qu_id=45567 //tamamen salladım

Burdaki querystring değerlerini direk sql içine gömüyorsak;

Select *from urunler where id=”+Request.QueryString[ID]+”;

gibiSqlInjection yeme şansımız oldukça yüksektir veya aldığımız querystring’i direk yazdırıyor isek;

Response.Write(Request.QueryString[ID].ToString());

Bu seferde XXS(Cross-site Scripting) yeme şansımız yüksektir.Devam edelim.

private bool IsQueryStringsSafety(NameValueCollection qry)

{

string[] badWords ={ “DELETE”, “delete”, “‘”, “select”,”DELETE FROM”,”delete from”,”UPDATE”,”update”,”UPDATE FROM”,”update from”,”select *from”,”SELECT *FROM”,”<”,”>”,”OR”,”AND”,”OR=”,”=”,”‘OR=’”,”‘OR’”};

for (int i = 0; i <= qry.AllKeys.Length – 1; i++)

{

for (int a = 0; a <= badWords.Length – 1; a++)

{

if (qry[i] == badWords[a])

{

return false;

}

}

}

return true;

}

Yukarda yazdığım fonksiyon belirlenen değerler ile gelen querystring’leri karşılaştırarak kötü bir kod’un olup olmadığını bize bool türünden döndürmektedir.badWords’ü ben string dizi olarak yaptım isteğe gore xml’de tutulabilir,vt’de tutulabilir v.s.

using System.Collections.Specialized; //eklemeyi unutmayalım.

protected void Page_Load(object sender, EventArgs e)

{

private NameValueCollection qStrings;

//Gönderilen bütün querystring’leri kolleksiyona alalım

qStrings = Request.QueryString;

if (IsQueryStringsSafety(qStrings))

{

//eğer güvenli ise

}

else

{

//yapılacak işlemler.Kullanıcı ip’si alınabilir(mesela)

}

}

Ufak ama etkili bir yöntem.

Rock C# !! :)


ASP.NET Uygulama bazında hata yakalama(Application Error Management)

Temmuz 25, 2008

Bir çoğumuz yaptığımız sistemlerde oluşan hatalardan dolayı sıkıntıya düşmüşüzdür.Gelişmiş uygulamalarda oluşan hatalar,buglar kullanıcıya gösterilmez.Bunun yerine kullanıcıya yardımcı bir sayfa gösterilir.Mesela “Sistemde beklenmeyen bir hata oluştu.Lütfen söyle yapınız,böyle yapınız” şeklinde.Oluşan hataları log’lamak gerekir.Bu log’lama geliştirici açısından önemli olup,en çok nerelerde hata yaptığını da raporlayamabilir.

Asp.net’te hata yönetimi 2 türlü yapılmaktadır.Kod içerisinde try-catch-finally blog’ları kullanarak veya uygulama statüsünde global.asax dosyasındaki Application_Error methodunu kullanarak.

Şimdi sistemimize bir hata yöneticisi yapmayı planlıyoruz? Peki bu nasıl olacak?.Nasıl bir yöntem izlemeliyiz.?

Zaten try-catch-finally bloglarını kod içerisinde kullanmamız bize oldukça faydalı olacaktır.Biz uygumalama bazında hata yönetimi yapalım.

Yapacağımız ilk iş uygulamada oluşacak hatayı bulmaktır.Global.asax dosyası içinde:

void Application_Error(object sender,EventArgs e)

{

//son oluşan hatayı yakalıyoruz.

Exception ex = Server.GetLastError().GetBaseException();

//hatayı temizliyoruz.

Server.ClearError();

}

Burda birkaç yöntemden bahsetmek istiyorum.Biz bu aldığımız hatayı ne yapacağız?.İster loglayalım,ister bize e-mail olarak gelsin.Bence e-mail olarak gelsin:)

Global.asax dosyasının başına şu library’i ekleyelim:

using System.Net.Mail;

{

//son oluşan hatayı yakalıyoruz.

Exception ex = Server.GetLastError().GetBaseException();

//hatayı temizliyoruz.

Server.ClearError();

//Mail gönderme kodlarını yazalım.

StringBuilder sb = new StringBuilder();

sb.Append(“Stack Trace:”+ex.StackTrace.Trim()+”<br>”);

sb.Append(“Error Message:”+ex.Message+”<br>”);

string MailHTML = sb.ToString();

SmtpClient smtpserver = new SmtpClient();

MailAddress mSender = new MailAddress(“GonderenAdres@mailadresi.com”);

MailAddress MailTo = new MailAddress(kimegonderilecek@mailadresi.com);

MailMessage newMail = new MailMessage(mSender, MailTo);

newMail.IsBodyHtml = true;

newMail.Subject = “Koş admin koşş!”;

newMail.Body = MailHTML;

smtpserver.Send(newMail);

//Burda da kendi yaptığımız bir sayfaya yönlendirelim.

Response.Redirect(“~/Error.aspx(veya .html)”)

}

Tabi mail’i göndermeniz için web.config dosyası içinde smtp ayarlarını yapmamız gerekiyor.

<system.net>

<mailSettings>

<smtp from=”GonderenAdres@maildaresi.com”>

<network port=”25″ host=”mailsunucuadresi” userName=”kullaniciadi” password=”sifre” defaultCredentials=”true”/>

</smtp>

</mailSettings>

</system.net>

Bu ayarları yaptıktan sonra oluşan hata direk mailimize gelicektir :) Allah aşkına zormu :D

İyi kodlamalar..


C# Kodlama Standartları(Coding Standarts for C#)

Temmuz 25, 2008

İsimlendime düzeni ve yazım stillleri

1-Metod isimleri,sabit değişkenler ve tip değişkenlerinde pascal kalıplarını kullanın:

public class BenimClass

{

const int DefaultSize=100;

public void SomeClass()

{

}

}

2-Method değişkenlerinde ve lokal değişkenlerde deve tipi yazım (camel casing) kullanın.

Void BenimClass(int someNumber)

{

int number;

}

3-Arayüz tanımlamarıda “I” ön ekini kullanın.

interface IBenimArayuzum {…}

4.Bir classa ait özel değişkenlerde(private) “m_” gibi ön ekler ve pascal yazım tipini kullanın.

public class SomeClass()

{

Private int m_Number

}

5.Methodlara isim verirken yüklem-nesne ikilemesinde olmasına dikkat edin.Örneğin ShowDialog() -pencereyi göster.

6.Geriye değer döndüren methodlardaki isimlendirmelerde geriye döndürülen değer hakkında bilgi içermesine dikkat edin.Örneğin GetObjectState()-Nesne durumunu getir.(Neyin geleceğini biliyorum)

7.Anlaşılabilir değişken isimleri kullanın.Tek karakterlik değişken isimlerinden kaçının.Kelimeleri kısaltmayın(number yerine num yazmayın)

8.Generik kolleksiyonlar kullanır iken,tipler için baş etiketleri kullanın.

//Doğru

Public class LinkedList<K,T>

{…}

//Yanlış

Public class LinkedList<KeyType,DataType>

{…}

9.Namespace’leri(isim alanları) oluştururken anlamlı isimler verin,örneğin ürün veya firma isimleri..

10.Tip tanımlamalarında full isimleri kullanmayın.Örneğin;

System.Collections.ArrayList myarray=new System.Collections.ArrayList;

Bunun yerine using ile bu alan ismini tanımlayın.

11.using kelimesinin namespace’ler içinde kullanmaktan kaçının.

12.Tanımlanan bütün isim alanlarını alt alta gruplayın.

using System;

using System.Collections.Generic;

using System.Data;

using MyNameSpace;

using MyNameSpace2;

13.Paragraf başı kullanımını sürdürün.Tab’ları kullanmayın.

14.Class içinde tanımladığınız değişkenleri daima üstte tutun ve method tanımlamaları ile arasında bir boşluk bırakın.

public class BenimClass

{

int m_Number;

string m_Name;

public void Method1(){}

public void Method2(){}

}

15. “{“ işaretini daima yeni bir satıra indirin.

16.delegate tanımlamalarında aşağıdaki gibi yöntem izleyin:

delegate void SomeDelegate(string someString);

void InvokeMethod()

{

SomeDeleagete someDelegate=delete(string name)

{

MessageBox.Show(name);

}

}

17.Parametresiz delegate tanımlamalarında şu yöntemi izleyin:

delete void SomeDelegate();

//Doğru

SomeDeleagete someDelegate=delegate()

{

MessageBox.Show(name);

}

//Yanlış

SomeDeleagete someDelegate=delegate

{

MessageBox.Show(name);

}

Bu yazı IDesign tarafından yayınlanmıştır.Çevirisini ben yaptım:) Lütfen kötü olan yerleri bildirin:)

Not:Devamı gelecektir.


ASP.NET Connection String’i Şifreleme

Temmuz 24, 2008

Güvenlik şüphesiz ki uygulamalarımızdaki en önemli etmenlerden birisidir.Asp.net’te connectionstring’ler ile veritabanına bağlantı kurarız ama bu ne kadar güvenlidir?Hadi bunu şifreleyelim:

//Configürasyon dosyamızı açıyoruz ve içinden “connectionstrings” adlı sectionu alıyoruz.

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection configSection = config.GetSection(“connectionStrings”);

//zaten şifreli ise

if (configSection.SectionInformation.IsProtected)
{

//şifreyi kaldır
configSection.SectionInformation.UnprotectSection();
config.Save();
}
else
{

//yoksa şifrele
configSection.SectionInformation.ProtectSection(“DataProtectionConfigurationProvider”);
config.Save();
}

“DataProtectionConfigurationProvider” yazan yere asp.net’te bulunan 2 tip encryption provider’ından birini kullanabiliriz.

* RSAProtectedConfigurationProvider : Asp.net’in default olarak atadığı sağlayıcıdır ve  RSA(Açık anahtarlı şifreleme yöntemi.Bakınız.Wiki-RSA)
* DPAPIProtectedConfigurationProvider : Windows Veri Şifreleme Yöntemini (DPAPI) kullanır.(Bakınız.Wiki-DPAPI)

Not:Eğer bu işlemi dinamik olarak kod içerisinden yaparsanız; web uygulaması kendini resetleyecektir.Tüm sessionlar ve application nesneleriniz sonlanabilir.


Her yazılımcının bilmesi gereken 10 consept

Temmuz 24, 2008

Yazılım dünyası, kalabalık ekiplerin yerini büyük ve karmaşık işleri bir kaç iyi yazılımcının yapacağı bir yöne doğru ilerliyor.

yazılım mühendisi
yazılım mühendisi

Alex Iskold, bu ekiplerde yer alacak mühendislerin bilmesi gereken 10 konsepti listelemiş.

Devamı


Ajax loading gif generator

Temmuz 23, 2008

Eğer ajax uygulamarınız için “loading-Bekleyiniz” olarak görünen kısımlar için animasyon arıyorsanız burası tam size göre :)

Burada


Ajax harikalar diyari :)

Temmuz 23, 2008

Smashing magazine den bulduğum ve hayran kaldığım profesyonel ajax uygulamarı

Burada


ASP.NET Veri Erişim Sağlayıcıları(Data Providers) Nelerdir?

Temmuz 23, 2008

ADO.NET iki adet bağlantı nesnesi içerir.Connection-based ve content-based:

Connection-Based Objects:Veri sağlayıcı nesnelerden oluşur.Bağlantı(Connection),Komut(Command),DataAdapter(DataUyarlayıcı),DataReader(DataOkuyucu).Bu nesneler SQL ifadelerini çalıştıran veriyi bağlayan,veri kümelerini dolduran nesnelerdir.

Content Based Objects:Bu nesneler ise veri için gerekli olan paketlerdir.DataSet(Veri Kümesi),DataColumn(VeriKolonu),DataRow(VeriSatırı),DataRelation(Datailişkisi) ve birkaç nesneyi daha destekler.

Bildiğimiz üzere bu nesneleri kullanabilmemiz için bazı “namespace” lere ihtiyacımız vardır.Yani isimalanlarına şimdi ise bunları görelim..

System.Data:Anahtar veri kümelerini,ilişkiler,tablolar,görünümler gibi bir çok bağlantı nesnesini içerir.

System.Data.Common:Bu tür veri sağlayıcılar kendi sınıfında uzmanlaşmıştır.Arayüz olarak System.Data ve ADO.NET sınıflarını kullanır.

System.Data.OleDb:OleDb veri sağlayıcılarına bağlanmak için kullanılan sınıftır.OleDbCommand, OleDbConnection, OleDbDataAdapter’kullanır.

System.Data.SQLSlient:Microsoft SQL Server’a bağlanmak için kullandığımız SQLDbCommand,SqlDbConnection, SqlDBDataAdapter sınıflarını içerir. Bu sınıflar, SQL sunucuya TDS arayüzü kullanmak için optimize edilir.

System.Data.OracleClient:Oracle veritabanına bağlanmak için kullanılan sınıftır.OracleCommad,OracleConnection ve OracleDataAdapter’ı kapsar.

System.Data.Odbc:ODBC türü veritabanlarına bağlanmak için kullanılan sınıftır.OdbcCommand, OdbcConnection ve OdbcDataAdapter’ı içerir.

Bağlantı Cümleleri

(Connection Strings)

Bağlantı nesnelerini oluşturduğumuzda,tek ihtiyacımız olan bunu tetikleyecek bağlantı cümlesidir.Bağlantı cümlelerimiz bize şu avantajları sağlar:

Serverda veritabanımız nerde?

Veritabanımızda ne kullanmak istiyoruz?

Nasıl veritabanı bizi tanıyabilir?

Gibi işlemleri “connection strings” ile sağlarız.Bir örnek verecek olursak:

string connectionString = “Data Source=localhost;Initial Catalog=Sales;” +

“user id=sa;password=;Provider=MSDAORA”;

Sırasıyla gidicek olursak veritabanımız “Localhostta”,”Sales” isimli ve kullanıcı adı olarak “sa” şifreyi de boş geçtik,Sağlayıcı ise “MSDAORA” dır.

Haydi bir örnek uygulama yapalım:

İlk önce web.config dosyamızda connection string olarak şunu tanımlıyoruz..

<configuration xmlns=”http://schemas.microsoft.com/.NetConfiguration/v2.0″>

<connectionStrings>

<add name=”Northwind” connectionString=

“Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI”/>

</connectionStrings>

</configuration>

Bu işlemden sonra artık bağlantımızı test etmeye geldi.

// Bağlantı nesnemizi oluşturalım.

string connectionString =

WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;

SqlConnection con = new SqlConnection(connectionString);

try

{

// Bağlantıyı açmayı deniyelim.

con.Open();

lblInfo.Text = “<b>Server Version:</b> ” + con.ServerVersion;

lblInfo.Text += “<br /><b>Connection Is:</b> ” + con.State.ToString();

}

catch (Exception err)

{

// Hata alırsak

lblInfo.Text = “Error reading the database. “;

lblInfo.Text += err.Message;

}

finally

{

con.Close();

lblInfo.Text += “<br /><b>Now Connection Is:</b> “;

lblInfo.Text += con.State.ToString();

}

Bunu yaptıktan sonra sayfamızı çalıştıralım.Karşımıza şöyle bir sayfa çıkarsa sorun yoktur.

Server Version:”Sizin server versiyonunuz”

Connection Is: Open

Now Connection Is:Closed


ASP.NET GoogleMaps Kontrolü

Temmuz 23, 2008

GoogleMaps Google’in uydu üzerinden elde ettiği fotoğrafları internet ortamında kullanmasıdır.Bunun için kendine bir API(Application Programming Interface) oluşturmuştur.Geliştiriciler bu api’yi kullanarak istedikleri yeri kolay bir şekilde görüntüleyebilmektedir.Bu kadar google’ reklamı yeter :) Makaleme başlıyorum :)

Makale’nin ana konusuna girmeden önce şu linkteki bilgileri okumanızı öneririm.Zira makale içinde kullanacağımız javascript kodlarının ne anlama geldiğini bilmemiz gerekiyor.

http://code.google.com/apis/maps/documentation/reference.html

Burada google’in bize sunduğu api’nin tüm açıklaması yapılmıştır.Ayrıca demo gallery ve examples bölümlerinde örnekler verilmiştir.Ayrıca googlemaps’i kullanabilmemiz için google’dan bir “apikey” elde etmemiz gerekiyor.Onuda buradan elde edebilirsiniz.

http://code.google.com/apis/maps/signup.html

Javascript bilginizin biraz olması gerekiyor.Çünkü tamamıyla client-side olarak çalışan bu api’de çok işimize yaracaktır.Ama biz bunu server-side’a dönüştüreceğiz.(Nasıl yani?)

Google’ın dokümantasyonu inceledikten sonra tamamiyle client-side olan bu api’yi asp.net içerisinde nasıl kullanacağım’ı araştırmaya başladım.Aslında zor olan bir şey yok javascript kodlarını sayfaya koyunca harita yükleniyor ve istediğim sonucu alıyorum.

function load() {

if (GBrowserIsCompatible()) {

map = new GMap2(document.getElementById(“map”));

map.addControl(new GSmallMapControl());

map.addControl(new GMapTypeControl());

map.addControl(new GOverviewMapControl());

map.addControl(new GScaleControl());

map.setCenter(new GLatLng(38.4, 31.5), 5);

}

}

Bu fonksiyonu body tagının onLoad event’ına(<body onLoad=”Load()”) yazınca harita yükleniyor.Bu ne anlama geliyor? Şu anlama geliyor:

if (GBrowserIsCompatible())

{

}

Bu kod browser’ın harita için uyumluluğu kontrol eder.Harita yüklebilir bir browser ise yükler.(Daha fazla bilgi için dökümanlara bakınız.)

map = new GMap2(document.getElementById(“map”));

Bu kod sayfa üzerinde belirlenen bir element’in id’sine göre yükleneceği yeri belirler.Bu bir div olabilir tablo olabilir.

map.addControl(new GSmallMapControl());

map.addControl(new GMapTypeControl());

map.addControl(new GOverviewMapControl());

map.addControl(new GScaleControl());

map.setCenter(new GLatLng(38.4, 31.5), 5);

Bu kodlar ise haritanın kontrolleridir.Harita üzerine istenilen kontrolleri yükler.Ayrıca map.SetCenter ise yükleme anında haritanın hangi koordinatlarına gidileceğini belirler.Yani yukarıdaki koordinatlar ile yüklerseniz Türkiye haritasından başlar..

Buraya kadar tamam ama hala tatmin olabilmiş değilim.Tamamiyle cilent-side çalışmak gözümü korkutmaya başlamıştı.Benim istediğim şuydu,C# ile bu haritayı parmağımda oynatabilmeliydim..

Araştırmaya başladım..Bir çok makale ve örnekten sonra www.codeproject.com da bir örneğe rastladım.Tam istediğim gibiydi.C# ile her şeyi yapabilme özgürlüğü veriyordu..

http://www.codeproject.com/KB/webforms/Google-Maps-User-Control.aspx

Bunu ben yapamazmıydım? İlk aklıma gelen şey buydu.C# olarak sorun yoktu fakat javascript olarak sorun vardı:) C# ile javascript’i nasıl birleştirmeliydim?

Örneği 1-2 gün boyunca incedim.Örnekte sadece bir googlemaps class’ı (cGoogleMap.cs) bir tane webservis(GService.cs) ve bir tanede user control bulunmakta.(GoogleMapControl.ascx)

Örneği indirip incelerseniz user control’de söyle bir ibare yer alıyor:

<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>

<Services>

<asp:ServiceReference Path=”~/GService.asmx” />

<asp:ServiceReference Path=”~/GoogleMapForASPNet.ascx” />

</Services>

</asp:ScriptManager>

Örneği yazan kişi scriptmanager’a yazmış olduğu servisi referans olarak gösteriyor ve C# classından elde ettiği bilgileri servis aracılığyla javascript’ten çağırıyor.

Can alıcı noktalardan bahsetmek istiyorum.GoogleMapsControl.ascx’te önemli 2 tane fonksiyon bulunmakta:

function fGetGoogleObject(result, userContext)

function fGetGoogleObjectOptimized(result, userContext)

1.Fonksiyon sayfanın ilk yüklendiği anda çalıştığı fonksiyondur.

2.Fonksiyon ise postback işleminde çağırılan fonksiyondur.

İkisininde yaptığı işlem hemen hemen aynıdır.(Kodlara baktığınızda göreceksiniz.).Aralarındaki fark ise ilk yüklenen nesne ile sonradan yüklenen nesne arasındaki değişimleri bulup update etmektir.Bunuda webservis classında görebilirsiniz..

[WebMethod(EnableSession = true)]

public GoogleObject GetGoogleObject()

{

GoogleObject objGoogle = (GoogleObject)System.Web.HttpContext.Current.Session["GOOGLE_MAP_OBJECT"];

System.Web.HttpContext.Current.Session["GOOGLE_MAP_OBJECT_OLD"] = new GoogleObject(objGoogle);

return objGoogle;

}

Bu kod webservis içindeki kodtur.Session’dan GOOGLE_MAP_OBJECT’i çekiyor.Haydaa bu session nerden geldi şimdi dediğinizi der gibiyim :)

Bu session ise GoogleMapControl.ascx’in kod bölümüne gittinizde sayfanın page_load event’ında ki koda dikkatlice bakın:

if (!IsPostBack)

{

Session["GOOGLE_MAP_OBJECT"] = GoogleMapObject;

}

else

{

GoogleMapObject = (GoogleObject)Session["GOOGLE_MAP_OBJECT"];

}

Aynı sayfa içinde

#region Properties

GoogleObject _googlemapobject = new GoogleObject();

public GoogleObject GoogleMapObject

{

get { return _googlemapobject; }

set { _googlemapobject = value; }

}

#endregion

ile var olan GoogleMaps class’na ulaşılıyor.

GoogleMaps classından fazla bahsetmek istemiyorum.Zaten bildiğimiz c# kodları ile yazılmış.

Şimdiye kadar anlattıklarımı toparlarsam nasıl bir yol izlemişiz bakalım:

JavasctiptàWebServisàSessionàUygulama Class’ı

GoogleMaps ile ilgili bütün property’ler(özellikler) bir class yardımıyla alınıyor.Bu class session’a yükleniyor.Session’dan web servis aracılığıyla javascript’ten çağrılıyor.

Örneği incelerken kendime soruyorum.Bu adam postback ile ilk load’u birbirinden nasıl ayırmış yaw.? GoogleMapsControl sayfasında şu javascript kodları gözüme çarpıyor.

function endRequestHandler(sender, args)

{

GService.GetOptimizedGoogleObject(fGetGoogleObjectOptimized);

}

function pageLoad()

{

if(!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

}

Artık bundan sonra user control’ü sayfanıza sürükleyip kodları yazmaya başlayabilirsiniz.


Bende varım lan!

Temmuz 23, 2008

Biryerden başlamak lazım değil mi:) Blog dünyası merhaba!