Asp.NET ile W3C Validator (XHTML 1.0 Strict sorunu)

by Uğur Çelenk 26. Kasım 2008 08:53

Sayfamızın html çıktısının W3C standartlarına uygun olup olmadığını burdan kontrol ediyoruz -->  http://validator.w3.org/

Asp.NET ile yapılan sitelerin birçoğu document type(DOCTYPE) olarak XHTML 1.0 Transitional kullanıyor. Oysa ki bu alanda uzman kişilerin önerisi XHTML 1.0 Strict oluyor. XHTML 1.0 Strict kullanarak yaptığım sayfayı W3C validator ile kontrol ettiğimde 2 hata verdi ve bu 2 hatanın suçlusu bu sefer biz değiliz, araştırmalarım sonucu bunun bir bug olduğunu farkettim ama bu hatanın üstesinden nasıl gelinebiliniyor, aşağıda bahsedeceğim.. 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


W3C validator ile kontrol ettiğimizde verdiği hatalar şunlar :
1. <form name="aspnetForm" method="post" action="default.aspx" id="aspnetForm">...

2. document type does not allow ... <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="asdasdasdwerwerwesdsa3432..../" >   

İlk hatanın nedeni render anında form elementine otomatik olarak name özelliği katmasından kaynaklanıyor ve işin ilginç yanı bu name özelliğini internet explorerda sayfanızın html çıktısına baktığınızda göremiyorsunuz ama W3C ile kontrol ederken sayfanın kaynağını gösteri işaretlerseniz, W3C sizin sayfanızı render ettiğinde form elementine name özelliğini de eklediğini göreceksiniz, uzun uğraşlar sonucu bu ilginç olayı farkedebildim..

İkinci hata ise yine sayfanın render esnasında üretilen base64 ile şifrelenmiş viewstate için bir input oluşturması ve sonucunda hata vermesi..


Peki XHTML 1.0 Strict kullanarak nasıl W3C valid bir sayfa elde edebiliriz?

İlk denediğim yöntem formun render anına erişip, name özelliğini atamamasını sağlamak oldu ve başarılı da oldum, W3Cde ki hatalar 1e indi ama bu seferde sayfamda asp.net ajax kullandığımdan ajax kullandığım yerler çalışmadı, ajaxın çalışabilmesi name özelliğine bağlıymış.! Neyse bu yöntemden vazgeçip başka çareler aradım ve sonucu buldum.

- Öncelikle web.config dosyasında bir tanımlama yapmak gerekiyor.
  <system.web> düğümünün hemen altına aşağıdaki satırı yerleştirin.

   <xhtmlConformance mode="Strict" />

-
Proje dosyanızın içinde App_Browsers adında bir klasör oluşturun (Bu dosya ismi özel bir isimdir, başka bir isim kullanmayınız). Bu klasörün içine W3C.browser adında dosya ekleyiniz.
Bu dosyanın içine aşağıdaki kodları yerleştirin.

<browsers>
<browser id="W3C_Validator" parentID="default">
<
identification>
<
userAgent match="^W3C_Validator" />
</
identification>
<
capabilities> <capability name="browser" value="W3C Validator" />
<
capability name="ecmaScriptVersion" value="1.2" />
<
capability name="javascript" value="true" />
<
capability name="supportsCss" value="true" />
<
capability name="tables" value="true" />
<
capability name="tagWriter" value="System.Web.UI.HtmlTextWriter" />
<
capability name="w3cdomversion" value="1.0" />
</
capabilities>
</
browser>

</browsers>


Yukarıdaki adımları uyguladıktan sonra artık W3C validator ile tekrar test edebilirsiniz, sayfanızda eğer başka bir hata yapmadıysanız W3C kontrolünden başarıyla geçmiş olacaksınız..

w3c

Ücretsiz e-book indir : 'The Art and Science of CSS'

by Uğur Çelenk 26. Kasım 2008 06:05

sitepoint.comSitepoint.com tarafından "The Art and Science of CSS" pdf halinde ücretsiz olarak sunuldu.
CSS hakkında çeşitli güzel örneklerle(yatay ve dikey menüler,köşeleri yuvarlak kutular vs.) anlatılmış 227 sayfalık bu pdf dosyasını indirmek için buraya tıklayınız. (Dosya boyutu 23 mb)



Blog sitenize özelleştirilmiş Friendfeed Widget yerleştirin

by Uğur Çelenk 14. Kasım 2008 10:01

Friendfeed.com nedir, ne işe yarar, eğer bilmiyorsanız öncelikle Volkan Görgülü'nün hazırladığı bu tanıtım videosunu izlemenizi öneririm.

Friendfeed, sitelerimize yerleştirmemiz için çeşitli görünüm ve amaçlara sahip widgetlar hazırlamış.Bu widgetlardan en çok tercih edilen ve benim de sayfamda sağda bulunan "Friendfeed Akışım" başlıklı bölümde görebileceğiniz üzere kullandığım bu widgetı nasıl yerleştirdiğimi ve özelleştirdiğimi sizlere bahsedeceğim, 3-4 dakika içerisinde sitenize yerleştirebileceksiniz siz de, hemen anlatalım.

Öncelikle widget scriptinin oluşturulduğu sayfaya girip, istediğiniz kriterleri seçin ve kriter seçiminize göre sitenizde göreceğiniz halini görebiliyorsunuz, yazı rengini, fontunu, friendfeed logosunu felan düşünmeyin şimdilik, bunları css kullanarak değiştirebileceğiz. İstediğiniz kriterleri seçtikten sonra sol alttaki script kodunu kopyalayıp, sitenizde nerede gözükmesini istiyorsanız oraya yapıştırın.
Artık demoda gördüğünüz şekliyle sitenizde de görebiliyor olmanız gerekir, peki çerçeveyi kaldırmak, üst taraftaki logoyu kaldırmak gibi çeşitli görsel düzenlemeler yapmak istermisiniz?
"Evet, isterim", diyorsanız sitenizin css dosyasını açıp içine aşağıdaki kodları yapıştırırsanız, benim sayfamda sağda bulunan "Friendfeed Akışım" başlıklı bölümün aynısı sizin sitenizde de oluşmuş olacak. ( Css ile ff widgetını özelleştirme konusuna friendfeed'in sayfasında genel olarak yer verilmiş)



.friendfeed.widget a {
text-decoration: none !important;
border: 0px !important;
}


.friendfeed.widget a:hover {
text-decoration: underline !important;
border: 0px !important;
}


.friendfeed.widget {
width: 100% !important;
background-color: transparent !important;
border: none !important;
}


.friendfeed.widget .logo { /*  Üstte bulunan logoyu kaldırdık  */
display: none;
}


.friendfeed.widget,
.friendfeed.widget div,
.friendfeed.widget span,
.friendfeed.widget img,
.friendfeed.widget table,
.friendfeed.widget tr,
.
friendfeed.widget td {
background-color: transparent !important;
}


.friendfeed.widget .feed .entry .media {display:none}  /*  Mesajda eğer resim,video vs. eklemişsek(text dışında), kötü bir görünüm oluşturabileceğinden, kaldırdık */

.friendfeed.widget .feed .entry {
font-size: 12px !important;
}


.friendfeed.widget .feed .entry .info {
font-size: 8px !important;
}


.friendfeed.widget .bottom {
font-size: 8px !important;
background: none !important;
border-top: 1px solid #794822 !important;
}




Yorum kısmında isteyenler friendfeed widget yerleştirdikleri sitelerinin linklerini paylaşabilir.

T-SQL : 'Kayıt varsa güncelle, yoksa ekle' durumu için iki farklı yöntem

by Uğur Çelenk 6. Kasım 2008 01:05

İlk Yöntem

Öncelikle update işlemi gerçekleştirilir, bu işlem sonucunda etkilenen kayıt sayısı kontrol edilir, eğer @@ROWCOUNT = 0 ise güncellenebilecek bir kayıt bulunmuyor demektir, bu durumda kayıt eklenir.

    UPDATE Tablo1 SET Kolon1 =  @Kolon1_Degeri WHERE ID = @ID
    IF @@ROWCOUNT = 0
    BEGIN
       INSERT INTO Tablo1 (Kolon1) VALUES (@Kolon1_Degeri)
    END
 

İkinci Yöntem

Öncelikle kaydın olup olmadığını anlamak için IF EXISTS kullanılarak select cümlesi çalştırılır. Kayıt varsa güncelleme işlemi yapılıyor, yoksa ekleme işlemi yapılıyor. 

    IF EXISTS(SELECT ID FROM Tablo1 WHERE ID = @ID)
    BEGIN
       UPDATE Tablo1 SET Kolon1= @Kolon1_Degeri WHERE ID = @ID
    END
    ELSE
    BEGIN
       INSERT INTO Tablo1 (ID, Kolon1) VALUES (@ID, @Kolon1_Degeri)
    END


Peki hangi yöntem performans açısından daha iyidir?

Kesinlikle X. yöntem kullanılmalıdır gibi birşey söylemek mümkün değil, tamamen kullandığınız yapıyla ilgili sizin karar vermeniz gerekmektedir. Şöyle ki,
- Eğer kayıt  büyük ihtimalle bulunuyorsa yani güncelleme işleminin büyük ihtimalle gerçekleşeceğini düşünüyorsanız 1. yöntemi uygulamak performans açısından daha iyi olacaktır.
- Eğer büyük ihtimalle insert işlemi gerçekleşecek diyorsanız, 1. yönteme göre 2. yöntemi uygulamak daha mantıklı olacaktır. Çünkü INSERT ve UPDATE işlemleri pahalı işlemlerdir.

Tags:

YTÜ Matematik Mühendisliğinin düzenlediği seminerden izlenimlerim

by Uğur Çelenk 1. Kasım 2008 12:45

Yıldız Teknik Üniversitesinde 31 Ekimde Matematik Mühendisliği tarafından düzenlenen SharePoint, C#, Asp.net semineri hakkındaki izlenimlerimi ve seminere katılma fırsatı bulamayanlar için seminerde nelerden bahsedildiğini paylaşmaya çalışacağım ama öncelikle organizasyonda emeği geçen ytü'lü arkadaşlara ve Netron'a + Burak Batur'a teşekkür ediyorum.

2 ayrı oturum gerçekleşti.

İlk oturum da  Asp.NET ve C# hakkında bilgiler verildi. Framework 1.1'den Framework 2.0'e geçişt hangi yeniliklerin geldiğinden ve ardından framework  2.0'dan framework  3'e ve framework  3.5'a geçişte gelen yeniliklerden bahsedildi ve Visual Studio 2008in, VS 2005e göre farklılıklarına değindi. Örneğin split view görünümü, css style penceresinin eklenmesi ve artık element üzerinde uygulanan style değişikliklerinin doğrudan tagın içersinde yer almadığına, head tagları içinde tanımlandığına kadar çeşitli yenilikler gösterildi. 

Asp.NET Ajax'ın ne amaçla kullanıldığı ve ajax kullanılması gereken noktalardan bahsedildi. Verilen örneklerden birisi haber sitelerinde yazı okunurken sayfanın refresh olması nedeniyle yazıya odaklanamama sorununu ve borsa işlemlerini gerçekleşen sitelerde de aynı şekilde refresh yüzünden ciddi maddi sıkıntılar yaşanabildiğini ve bu durumlarda ajaxın kullanılmasını gerektiğinden bahsedildi. ( Ajax hakkında bir sorum oldu Burak Batur'a ama cevap pek tatmin etmedi beni açıkçası, bu konuya yazımın sonunda eleştiri başlığında ayrıntılı olarak bahsedeğim )

İkinci oturumda ise 'Sharepoint nedir?', 'neler yapılabilinir?' ve 'nasıl kullanılır?' sorularına cevap şeklinde ufak demolarla gösterildi. 'Sharepoint nedir?' sorusunu "SharePoint kurumsal uygulamarda kod yazılarak gerçekleştirilebilecek pek çok projenin tek satır kod yazmadan var olan komponentler ile gerçekleştirilmesine olanak tanıyan bir teknoloji." şeklinde cevapladı. Örnek olarakta pamukkale üniversitesinin sistemini verdi. "Anket sistemi yazan oldu mu?" şeklinde gelen soruya tek kalkan el benim ki oldu, kalkan elin ardından Burak Batur'un söylemiş olduğu fazlasıyla iddialı olan "sharepoint kullanmadan yaptıysanız, boşa kod yazdınız" şeklindeki cümle çok şaşırttı beni açıkçası, fazla uçtu sanki.! Eleştiri kısmında bahsedeceğim konular arasında bu da. Çok basit bir anket oluşturma, kişiye özel sayfa ekleme ve bilgilerin kolaylıkla değiştirebileceği bir demo gerçekleştirildi.

Eleştirilerim

Sürekli .NET'in avantajlarını anlatıp, dezavantajı olduğu noktalara hiç değinilmedi, ben de microsoft tarafındayım ama olumsuz olan yönlerini de söylemekten çekinmiyorum. Örneğin Asp.NET Ajax gerçekten kullanımı kolay olan ama arkaplanda oluşturduğu büyük boyuttaki javascript dosyaları yüzünden sayfalarınız çok yavaş açılabilinir, ufak bir google araması ile bu tür sorunlar yaşayanlara denk gelebilirsiniz. Bu sitede bu konu ele alınmış ve dosya boyutlarının büyüklüklerini ve uygulanabilinecek tekniklere değinilmiş, sonuçta çıkan js dosyalasnın boyutları bile yine çok büyük. Sayfa açılışı yavaşlıyor, fazlasıyla bandwith harcıyabiliyor. Bunun yanında biraz ayrıntı olacak ama benim saatlerce uğraşıpişin içinden çıkmayı başaramadığım bir konudan bahsedeceğim --> Asp.NET ajax kullanılan bir sayfa hiçbir zaman XHTML 1.0 Strict kullanıldığında 0 hata ile çalışmıyor, W3C ile test edince bunu farkettim, sorunun nedenine inecek olursak strict olarak kullanmaya çalışınca form tagı için id özelliği bulunmaması gerekiyor W3C'ye göre, yani web standartlarına uymayan bir durum var ortada, herneyse çözeriz dedim formun render edildiği kodları override ederek form un id özelliğini sildirmeyi başardım ve 0(sıfır) hata ile çalışıyordu ama bilin bakalım bu sefer de ne oldu.! Asp.NET Ajax form id olmadan iş yapamıyormuş, arkaplanda oluşan javascriptler form id ye göre işlem yapıyormuş, anlayacağınız bir türlü asp.net ajax kullanılan bir proje de W3C'nin önerdiği bir kullanım olan XHTML 1.0 Strict ile sıfır hataya ulaşamıyorsunuz.! XHTML 1.0 Transitional kullanmaya mahkum kalıyorsunuz.

Biz ajax kullanmak isteriz ama aynı zamanda en az zararla bu işten sıyrılmakta isteriz? diyorsanız benim size tavsiyem sürekli geliştirilen ve şuan en yaygın olarak kullanılan jQuery kütüphanesine göztamanız şeklinde olacaktır. jQuery sadece 30kb ve istediğiniz herşeyi yapabiliyorsunuz ama javascript bilginizin orta seviye olması gerekiyor ki bence asp.net ajax ile 250kb lık javascript dosyaları kullanmaktansa, 30kb lık bir kütüphanecik ile herşeyi halletmek için javascript öğrenmeye değer. (en fazla 7-8 saatinizi alır javascriptte orta seviyeye gelebilmeniz, zor değildir). jQuery kullanarak ajax çağrıları yapabilmekteseniz, bunun yanında asp.net ajax ı yine projenize dahil edipte kullanabilirsiniz ama sayfanıza updatepanel ve diğer zımbırtıları koymadan sadece scriptmanager ekleyerek, client-side yani html tarafından webservisleri kullanarak server tarafındaki bir kodu çalıştrıp, geriye sonuç döndürebilmeniz mümkün. Tüm kontrolün elinizde olmasının sizi fazlasıyla tatmin edeceğine inanıyorum.

Bence tüm proje için wizard kullanarak ve sürükle-bırak kullanılarak yapılan işe programcılık denilemez(denilmemesi gerektiğini düşünüyorum en azından), program kullanan denilebilinir belki. Php fanatikleri genellikle .NET platformunda yazılım geliştirenler için şöyle diyorlar "herşeyi sürükle-bırak(drag-and-drop) ile yapıyorsunuz, belki de mantığını bile bilmeden site yapıyorsunuz, gerçek codder değilsiniz". Neden böyle düşündüklerine bir türlü anlam veremiyordum, bu seminer ile  PHP fanatiklerinin bu tutumunun neden kaynaklandığını anlamış oldum.

Eğer iyi bir yazılımcı iseniz bu tür sürükle-bırak olaylarına bu kadar bağımlı kalarak proje geliştirmeyi pek tercih etmezsiniz, hatta büyük ihtimalle işe bile alınmazsınız.İş ilanlarında OOP(Object-Orianted Programming), 3 katmanlı mimariyi bilen yazılımcı ararlar, ama bu sürükle-bırak olayı bu duruma çok tezat kalmıyor mu? Herşeyi code-generator yapıyor, siz sadece tıklıyorsunuz, iyi güzel, proje erken bitiyor da, hazır oluşturulan kısımlarda değişiklik yapılmak istenirse bazen tabiri cai ise "deveye hendek atlatmak" gerekebiliyor.

Sharepoint sunumundaki söylenen söylediği cümle üzerinde de eleştiri yapmadan duramayacağım, çünkü hiç ama hiç söylenmemesi gereken bir cümleyi söyledi, karşısındakileri küçük gören bir yaklaşımı varmış gibisinden gibisinden şu sözleri sarfetti "Anket sistemi yazan oldu mu?" gelen soruya tek kalkan el benim ki oldu, ardından da  "sharepoint kullanmadan yaptıysanız, boşa kod yazdınız demekki".  Ne kadar yanlış bir cümledir ya, çok gelişmiş bir anket sistemi kodlamış birisi olaraktan anket dediğin sadece 1 soru gir 2-3 de seçenek gir, oyla sonuçları görden ibaret değildir herzaman, anket için 5 çeşit soru türüne özel kodlama yaptım ve anketi oylayabilecek kişilerde demografik bilgilerine göre ankete katılıp katılamayacağının belirlendiği ve ankete katılanların ankete özel belirlenen miktarda para kazanıyor olması da sistemin ayrı bir özelliğiydi. Hadi bunu sharepointte yapmayı deneyin bakalım, sharepoint ile buna kalkışmak komedi olur, sharepointi küçümsemek anlamında demiyorum, bahsettiğim anket sistemi için sharepoint'in hiç uygun düşmeyeceği için.

Neden bu kadar eleştirdin? diye soracak olursanız, tamamen stratejik işleyen sisteme karşı bir eleştiri olarak algılayabilirsiniz dediklermi, kimse çalıştığı kurumunda eğitimini verdiği toolları/dilleri kötülemeye kalkışmaz, dışarıdan birisinin müdahele etmesini gerektiğim nokta da eleştirilerimi yazdım.
ve eleştiriler biter..

(Not: Etkinlik fotoğraflarına facebook'tan bakabilmektesiniz.)

Etiket Bulutu