Ana Sayfa | English Blog | Seminer TV | Dil Cookie Sil  Blog'u Mail ile takip et!  
Daron Yöndem - IE 8.0
bir yazılımcının tasarıları...
 Thursday, March 04, 2010

Blogumu takip edenlerin bileceği üzere son üç gündür Dubai'deydim. Hatta hala dönmüş değilim :) TechEd ME (Middle East) için geldiğim Dubai en son geldiğimden bu yana pek değişmemiş açıkçası. TechEd olarak ise hem North America hem de Europe aktivitlerine katılmış biri olarak Middle-East'i değerlendirecek olursam aslında hem kültürel hem de bilgi ve birikim açısından TechEd ME'nin bizim ülkemizdekine çok benzer bir kitleye sahip olduğunu ve hitap ettiğini gördüm. Fakat maalesef ki community tarafları bize kıyasla çok zayıf olduğu için Türkiye'ye kıyasla diğer ülkelerin TechEd'e çok çok daha fazla ihtiyaçları var. Bölgede hem MVP sayısı ile hem de INETA tarafındaki sosyal toplulukların aktivitesi ile epey güzel bir konumda olduğumuzu itiraf edebilirim.

MEA MVP'leri ile beraber yemekteyiz.
MEA MVP'leri ile beraber yemekteyiz.

Benim her gün birer oturumum olduğu için neredeyse hiç tembellik yapma şansım olmadı :) Her gün sabahtan akşama konuşmacı odasında oturumlarıma hazırlanmakla geçti. Akşamları biraz ufak kaçamlar yapabildik diyebilirim. Bunlardan ilki ve tabi ki en önemlisi MVP yemeği oldu. Orta Doğu bölgesinden bir sürü MVP ile tanışma şansım oldu fakat ilginçtir ki ülkemizde de olduğu üzere sanki orada da developer MVP'lerinde azalma var gibi gözüktü gözüme :) Development işi çok karışıyor artık sanırım kimse bulaşmak istemiyor :D

Benim için oturumlarım arasındaki en heyecan verici olan tabi ki Multitouch oturumuydu. İlk önce WPF tarafından başladık sonrasında Silverlight'a geçtik. Bu arada Türkiye'de yaptığım Multitouch oturumlarından bu yana epey zaman geçtiğini ve bu süreçte özellikle WPF tarafında aslında çok şeyin de değiştinin farkına tekrar vardım. Tekrar Türkiye'de de bir Multitouch oturumu yapıp içeriği tazelemek gerek sanırım. Her neyse, oturum sonuna doğru Surface üzerinde de Multitouch development konusuna değinerek oturum sonunda yanıma gelip laptop ile oynamak isteyenlerden yola çıkarsak :) başarılı bir sunumu sonlandırmış oldum.

TechEd ME'de Multitouch Oturumum'dan bir kare.
TechEd ME'de Multitouch Oturumum'dan bir kare.

Benim için çok değerli bir üç gün oldu. Tanıştığım uzmanlarda tutun kurduğum iletişimleri kadar hepsinin de yansımlarını önümüzdeki 6 ayda sizlerin de göreceğini tahmin ediyorum :) Sevgili MVP Lead'imiz Baransel Doğan'da ayrıca tüm ME MVP'leri ile röportajlar yaptı, arasında ben de vardım. Yayınlandığında sizlerle twitter üzerinden paylaşacağım. En kısa zamanda tüm TechEd oturumlarımın birer Türkçe'lerini de ya screencast olarak çekip ya da fiziksel olarak bir akvitide sizlerle de paylaşmayı düşünüyorum. Aslında tüm oturumlarım video kayıtları alındı fakat TechEd'in kuralı gereği bu kayıtlar sadece etkinliğe katılan kişilerle paylaşılıyor.

Çok gevezelik etmiyim :) Hepinizle en kısa zamanda görüşmek üzere ;)

Thursday, March 04, 2010 8:22:20 AM (GTB Standard Time, UTC+02:00)  #    Comments [3]   IE 8.0 | MultiTouch | Silverlight 4 | TechEd | WPF  | 
 Tuesday, February 09, 2010

Hatırlarsanız sizlerle daha önce bu sene Berlin'de yapılan TechEd Europe'dan izlenimlerini aktarmıştım. (Gün 1, 2, 3) Bu sene ilk defa Middle-East yani bizim bölgemizde de TechEd gerçekleşiyor. Dubai'da 1-3 Mart arasında gerçekleşecek olan TechEd ME 2010'da benim de iki oturumum var!

TechEd ME'ye indirimli kayıt ol!
TechEd ME'ye indirimli kayıt ol!

TechEd'in birinci günündeki oturumumun başlığı "New in C# and Visual Basic for 2010" şeklinde. Tahmin edebileceğiniz üzere Visual Studio 2010 ve .NET 4 RC üzerinden VB ve C# yeniliklerine göz atacağız bu oturumda. İkinci oturumum ise TechEd'in ikinci gününde "Windows Internet Explorer 8 in the Enterprise: Build, Deploy, and Manage Better Experiences" başlığını taşıyor. Bu oturumda IE8 ile beraber gelen yeni özelliklerin kurumsal alandaki kullanımına yönelik senaryoları inceleyeğiz ve bu araçların dağıtımı, yönetimi ile ilgili detayları ele alacağız. TechEd'de daha önce de TLC (Technical Learning Center)'da ve Silverlight Booth (ATE-Ask The Expert)'de görevli olmuş biri olarak bu sefer de oturumlarla katkıda bulunmak benim için çok heyecan verici.

Dikkat Dikkat! İndirim var!

İşte geldik sizin için elimde neler var kısmına :) Birincisi eğer TechEd ME'ye katılıyorsanız lütfen beni haberdar edin! Orada görüşelim! Eğer katılamıyorsanız ve katılmak istiyorsanız bu sefer de size özel %15 indirim kodunu kıvançla paylaşıyorum :) 52F42DC3 Bu kodu kullanarak TechEd ME'ye kayıt olursanız kayıtta %15 indirim alacaksınız! Hadi bakalım Dubai'de görüşmek üzere!

Update: Son dakika değişiliği ile bir üçüncü oturumum daha var TechEd ME'de! "Create Multitouch Applications on Windows, on Surface and on the Web" ;) Kaçırmayın!

Tuesday, February 09, 2010 12:30:11 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   C# | IE 8.0 | MultiTouch | Visual Basic 2010  | 
 Sunday, December 27, 2009

Koca bir INETA NEXT serisi bitti! :) Bu hafta sonu gerçekleştirdiğimiz Denizli etkinliği ile beraber 2009'ın NEXT serisine son vermiş olduk. Diyarbakır, İstanbul, Kayseri ve Denizli turumuz INETA kapsamında tüm sosyal topluluklar ve editörleri ile beraber son iki yılda gerçekleştirdiğimiz en büyük hareket oldu. Tüm bu seri boyunca katkıda bulunan INETA sosyal topluluklarımıza ve sevgili konuşmacılarımıza ÇOK teşekkürler.

Muammer Benzeş (birliktegelistir.com)
Erkan Balaban (Ceviz.net)
Oğuz Yağmur (csharpnedir.com)
Uğur Umutluoğlu (nedirtv.com)
Barış Kanlıca (yazgelistir.com)
Burak Selim Şenyurt (nedirtv.com)
Selçuk Yavuz (Ceviz.net)

Tüm etkinlikler boyunca en çok merak edilenlerden birinin "Beyin" olduğunu gördüm :) Biliyorsunuz ilk etkinliği duyurduğumuzda her şehirde bir katılımcıya yeni bir beyin vereceğimizden bahsetmiştik. Bu beyin konusunda ben her ne kadar samimi olsam da :) herkes "beyin" kelimesinden yola çıkarak çok farklı şeyler düşünmüş. Oysa gerçekten de "beyin" derken "beyin" demek istemiştim :)

Yepyeni bir beynin sahibi!
Yepyeni bir beynin sahibi!

Fotoğrafta da görebileceğiniz üzere arkadaşımız yeni beynini sevinçle karşılamış durumda :D Her şehirde bu şekilde bir beyin hediye etme şansımız oldu. Beynin özelliği gerçek bir beyin "vıcıklığında" olma ile beraber her ne yaparsanız yapın esnese de şeklini kaybetmiyor olması :)

Etkinliklerimize katılan herkese tekrar defalarca çok teşekkürler. Bizi takip etmeye devam edin ;)

Sunday, December 27, 2009 10:23:48 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   .NET Framework 4.0 | ASP.NET 4.0 | C# | Expression Blend | Expression Studio | IE 8.0 | IIS 7.0 | LINQ | PLINQ | Silverlight 4 | Visual Basic 2010 | Visual Studio 2010 | WCF | Windows 7 | WPF  | 
 Sunday, December 13, 2009

Bugün INETA NEXT'in İstanbul ayağını gerçekleştirdik. Kişisel olarak benim için efsanevi bir hafta sonu oldu! Tüm konuşmacılarımıza tek tek milyonlarca defa teşekkür ediyorum. Ayrıca tabi ki yağmura rağmen tüm salonu dolduran herkese de onlarca teşekkürler! Umarım herkes için de bir o kadar faydalı bir aktivite olmuştur.

Katılım zirvede bir seminer! INETA NEXT!
Katılım zirvede bir seminer! INETA NEXT!

İki gün boyunca hızlı bir "geleceğe bakış" attık. SL 4, VB10, CS4, ASP.NET 4, WF4, IIS Media Services, IE Development vs derken epey bir içeriğe hızlıca göz atma şansımız oldu. Tabi hediyelerimiz de eksik olmadı :) NEXT serisine uygun şekilde Windows 7 hediyemizin yanı sıra Windows 7 T-Shirtlerimiz, Visual Studio 2010 atkılarımız, laptop stickerlarımız! havalarda uçuştu desem yeridir :)

INETA NEXT İstanbul ayağı...
INETA NEXT İstanbul ayağı...

Tekrar katılan herkese defalarca teşekkürler. Çok yakında etkinlikte konuşan tüm konuşmacılarımızın sunumlarını ve video kayıtlarını da sizlerle www.inetatr.org üzerinden paylaşacağız. İçerikler ve paylaşımlar hazır olduğunda ben de twitter ve blog üzerinden duyuracağım.

Bu arada unutmayın :) blogumu sayfanın en üstündeki linkten kayıt olarak mail ile de takip edebilirsiniz.

Haftaya hafta sonu Kayseri'de görüşmek üzere!

Not: Tüm etkinlik fotoğraflarına buradan ulaşabilirsiniz: http://skydrive.live.com/inetanext09istanbul

Sunday, December 13, 2009 11:29:09 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   .NET Framework 4.0 | ASP.NET 4.0 | C# | IE 8.0 | Seminer | Silverlight 4 | Visual Basic 2010 | Visual Studio 2010 | WCF | WF  | 
 Sunday, October 25, 2009

Knowledge Base Articles olarak geçen Microsoft Support / Destek sitesindeki makaleler ile bugüne kadar kesin karşılaşmışsınızdır. İster genel Windows arayüzünde olsun ister kullandığınız farklı Microsoft uygulamalarında çoğu zaman ekrandaki "Yardım" yordamlarını izlediğinizde bir KB Article ile karşılaşırsınız. İşte Türkiye'den de MVP'ler olarak artık bu sisteme katkıda bulunacağız. İlk iki makale benden geldi :) Internet Explorer 8 Web Slice ve Accelerator yapılarına dair genel kullanım bilgisi içeren KB Article'lara aşağıdaki adreslerden ulaşabilirsiniz.

http://support.microsoft.com/kb/976980/tr
http://support.microsoft.com/kb/976896/tr

Bu gelişme özellikle son kullanıcı deneyimi adına çok değerli. Yakın zamanda birçok MVP'den makaleler ile Destek altyapısı çok daha zengin bir hal alacak. Hatta sistemin navigasyonu ile ilgili de çalışmalarımız var :) Özellikle Türkiye Destek sayfalarında çok ilginç şeyler görebilirsiniz yakında.

KB Article olarak destek sisteminde görmek istediğiniz konuları veya olması gerektiğini düşündüklerinizi benimle paylaşmaktan çekinmeyin ;) Yorumlarınızın doğru yerlere ulaşmasını sağlayabilirim.

Sunday, October 25, 2009 11:45:28 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   IE 8.0  | 
 Saturday, October 10, 2009

Bir hayallim daha kısmen gerçek oldu :) Şimdi bu da ne demek? değil mi :) Hayallerimden biri de bir gün İngilizce bir kitap yazmaktı. Kitap olmasa da şimdilik bir kitapçık ile hayallerimi gerçekleştirdim diyebilirim. Hatırlarsanız bundan bir süre önce Internet Explorer 8 ile ilgili yazılımcılar ve tasarımcılar için Türkçe bir kitapçık yazmıştım.

Internet Explorer 8 hepsiburada.com'da en çok satan kitap.
Internet Explorer 8 hepsiburada.com'da en çok satan kitap.

Internet Explorer kitabımla ilgili çevremdeki developerlardan çok ilginç yorumlar aldım. Bazıları "Bu adam da cılkını çıkardı. Ne yazdı ki?" diyip salt uyuzluk olsun diye okumuşlar :) Bunu "yahu okuyunca cidden içeriği dolu doluydu" yorumları ile beraber itiraf ettiler. Nitekim ben bu tepkiyi öngörmüş ve kitabımın önsözüne bile eklemiştim :) İlk bakışta IE8 ile ilgili teknik ne kitap yazılabilir ki diye düşünülse de emin olun içeriğinde hem yazılımcılar hem de tasarımcılar için çok önemli bilgiler var. Kesinlikle bir son kullanıcı kitabı değil :)

Konuyu çok uzattığımın farkına vardım :) Konunun özüne dönersek kısa bir süre önce Internet Explorer 8 kitabımın İngilizcesi de basıldı. İngilizce blogumda söz konusu duyuryu geçenlerde çıktım.

Internet Explorer 8 İngilizce Kitabım
Internet Explorer 8 İngilizce Kitabım

Kitap tüm Ortadoğu Afrika bölgesinde şimdiden 10'a yakın ülkede dağıtıldı. Hatta iki ülkeden de ikinci baskı talebi geldi. Kitapla beraber bu sefer bir de mini-CD geliyor. Mini-CD içerisinde Silverlight ile hazırladığım bir arayüzde IE8 için WebSlice, Accelerator ve Search Suggestion development anlatıyorum. Kitap Türkçe'sinde olduğu gibi PDF'i ve tüm CD içeriği ile beraber internetten de ücretsiz dağıtılıyor.

Bu benim için sevinçli haberi sizlerle de paylaşmak istedim :)

Not: Türkçe kitap ücretsizse hepsiburada.com'da nasıl en çok satan olur? Bilmiyorum cidden :) Basılı olanı orada satılıyor bir şekilde :) Ben yine telif almıyorum :) Kitabın İngilizcesi için İngilizce bloguma uğrayabilirsiniz veya Türkçe'si için hemen buraya tıklayabilirsiniz.

Saturday, October 10, 2009 10:37:17 AM (GTB Standard Time, UTC+02:00)  #    Comments [9]   IE 8.0  | 
 Tuesday, March 24, 2009

Internet Explorer 8 KitapçığıInternet Explorer 8 lansmanı yapılalı yaklaşık bir hafta oluyor. Ben de sizlere artık sinsi bir çalışmamı duyurmak istiyorum. Internet Explorer 8 ile ilgili birçok makale yazdım, seminerler verdim. Hepsinde de başlangıçta "Ne anlatabilir ki?" :) şeklinde bir ön yargı olduğunu kabul ediyorum fakat her seferinde de sonunda aldığım tepkiler çok güzel oldu ve insanlar gerçekten "yazılımcılara" anlatılabilecek yenilikler de olduğunu gördüler.

Bu çerçevede tüm bu içeriği bir kitapçık olarak toplama kararı alalı epey oluyor :) Sonunda kitapçık basıldı. Kitapçığı tamamen ücretsiz olarak etkinliklerde talihli arkadaşlara hediye edeceğiz :) ayrıca isteyenler kitapçığın PDF'ini de aşağıdaki adreslerden bilgisayarlarına indirebilirler.

Internet Explorer 8 Kitapçık (Mirror 1, Mirror 2)

Tuesday, March 24, 2009 12:31:20 PM (GTB Standard Time, UTC+02:00)  #    Comments [9]   IE 8.0  | 
 Thursday, March 19, 2009

Güzel bir gün daha geldi ve geçti :) MIX'in 2. gününe damgasını vuran tabi ki Internet Explorer 8 oldu. Internet Explorer 8'in yayın alınması ile beraber yayılan bu heyecan sonraki oturumlarda da devam etti diyebilirim. Türkçe'si iki hafta içerisinde çıkacak olsa da İngilizce'sini isteyenler aşağıdaki adresten indirebilirler.

http://www.microsoft.com/ie8

Eğer IE 8 ile ilgili Türkiye'deki implemetasyonları merak ederseniz :) ilk www.trt.net.tr adresini ziyaret edebilirsiniz. Ana sayfada alt kısımda, haberlerde Web Slice'lar karşınıza çıkacaktır. www.zargan.com'u ziyaret edip hemen bir Türkçe-İngilizce Accelerator'ı edinebilirsiniz. www.nedirtv.com'u ziyaret edip Visual Search sağlayıcısını yükleyebilirsiniz. Daha bunun gibi bir çok aracı http://www.ieaddons.com/tr/

MIX Keynote öncesinde DJ sahnede!
MIX Keynote öncesinde DJ sahnede!

İkinci günde herhangi başka bir duyuru yapılmadı :) Fakat kendi adıma özellikle akşamki partide süper bilgiler almayı başardım. İlk olarak Internet Explorer 8 ekibi direktörü Ray Winninger ile özellikle Web Slice'lar ile ilgili bir sohbet yapıp bazı dokümante edilmemiş bilgiler aldım :) Sonrasında Tim Heuer ile görüştüm ve oradan da Scott Guthrie'ye geçiş yaptım. Scott'a özellikle Silverlight 4 ile ilgili birkaç soru sordum fakat zaten yarın kendisi ile ayrı bir toplantıda olacağım için çok da yormak istemedim.

Las Vegas'tan bir kare.
Las Vegas'tan bir kare.

Las Vegas yorumlarım...

Bugün ilk olarak Las Vegas sokaklarına çıkıp biraz turlama şansım da oldu. Şehir gerçekten ilginç bir şehir :) eğer kumar oynamıyorsanız ve sanatsal showları takip etmezseniz çok sıkıcı bir şehir diyebilirim. Kişisel olarak kumardan anlamam :) kız tavlası olabilir :) Her neyse... Sanatsal showlar konusunda yorum yapamayacağım çünkü katılma zamanım olmadı. Fakat özetle şehir pek de dışarıda gezilecek tarzda bir yer değil. Genel atraksiyonları otellerin içinde geçiyor.  Ben "Office Depot" "BestBuy" gibi teknoloji mağazalarını turladım, döndüğümde insanlara nereleri gezdiğimi söylediğimde tepkileri açık ve netti "ur geek!" :) So what?

Thursday, March 19, 2009 8:21:40 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
 Tuesday, March 17, 2009

Bu hafta çok hareketli bir hafta olacak ve bundan sonraki günler de aynı şekilde :) Şu anda sizlere Atatürk Hava Limanı StarBucks'tan yazıyorum. Birazdan uçağa binip New York oradan da Las Vegas'a geçeceğim. Neden mi bunları anlatıyorum? Çünkü MIX'e gidiyorum ve ben gidiyorum demek bloğumu okuyan herkes gidiyor demektir :)

MIX Nedir?

MIX Microsoft'un web yazılımcıları ve tasarımcıların için her yıl bir defa düzenlediği en büyük konferanstır. Toplam üç gün süren MIX boyunca her zaman yeni ürünler yayınlanmış, tanıtılmıştır. Örneğin MIX'in geçmişine bakarsak 2007 yılında Silverlight (WPF/E) adı ile karşımıza çıktı :) MIX 2008'de Silverlight 2.0 Beta geldi. MIX 2009'da da da da da :) ....!!!! :) Silverlight 3 Beta!

MIX 2009'da daha birçok güzel yenilik gelecek, bunlardan biri de Internet Explorer 8.

Eh biz gelemiyoruz!

Siz gelemiyorsanız ben MIX'i size getireceğim :) İlk olarak arada hatırlatmadan geçmiyim, 11-12 Nisan'da INETA NEXT etkinliğimiz olacak. Bu konuda ayrıca duyurular yapacağız MIX sonrasında :) Ama şimdiden kaydolabilirsiniz. MIX içeriğini aynı kalitede İstanbul'da taşıyacağız.

Diğer yandan "Ben MIX'i size getireceğim" derken de şaka yapmadım :) MIX boyunca tüm gelişmeleri her gün bloğumdan sizlerle paylaşacağım. Ayrıca Twitter üzerinden de en güncel yenilikleri takip edebilirsiniz.

Önümüzde yine çok hareketli bir dönem var ;) Süper!

Tuesday, March 17, 2009 11:08:28 AM (GTB Standard Time, UTC+02:00)  #    Comments [9]   IE 8.0 | Silverlight 3.0  | 
 Friday, March 13, 2009

Web sitelerinde AJAX kullanımı gün geçtikçe artıyor ve neredeyse artık AJAX kullanılmayan sitelere demode gözüyle bakmaya başladık. Bu çerçevede AJAX’lı sitelerde yaşadığımız en büyük sorunlardan biri tarayıcını geri ve ileri düğmelerinin çalışmaması. Konu ile ilgili farklı tarayıcılar için farklı taktiksel çözümler geliştirilmiş olsa da artık IE 8 ile beraber standart bir çözüm de geliyor.

AJAX ile sayfaları programatik olarak yenilediğimizde sayfa adresinin değişmiyor olması aslında sorunumuzun esas nedeni. Eğer sayfanın adresini değiştirebilseydik tarayıcı da bu adresi kendi tarayıcı geçmişine ekleyebilecekti. Tam da bu noktada web adreslerinin sonuna ekleyebildiğimiz çapalar akılımıza geliyor. Örneğin default.aspx#1 ile default.aspx#2 aslında aynı sayfa olsalar da ayrı adresler şeklinde tanımlanıyor. Bu adresin çapa kısmı, yani # işaretinden sonraki kısmı değişse de tarayıcı sayfayı baştan yüklemeyecektir çünkü konsept olarak aynı sayfa içerisinde farklı bir konum arayacaktır. Çapaların bu özelliğinden faydalanarak normal kullanımlarının yanı sıra sadece adres çubuğundaki adresi değiştirebilmek için de kullanabiliriz. Peki tüm bunları nasıl yapacağız?

[JavaScript]

window.location.hash = "birsey";

Yukarıda gördüğünüz kod AJAX kullandığımız web sitelerinde hayatımızı kurtaracak olan kodun sadece ufak bir parçası. Doğrudan window.location.hash değerine aktardığınız değerler artık tarayıcının adres çubuğunda # işaretinden sonrasına eklenecek ve hash değeri her değiştirildiğinde bir önceki adres de tarayıcı geçmişine kaydedilecek. Böylece hızlı bir şekilde AJAX sitemizde ileri ve geri düğmelerinin aktif hale gelmesini sağlayabiliyoruz. Fakat bir sonraki adımda kullanıcının ileri veya geri düğmelerine bastığını da algılamamız gerekiyor ki duruma göre gerekli AJAX isteklerini tekrar yaparak sayfayı eski haline getirebilelim. Unutmayın sayfa hiçbir şekilde tekrar yüklenmeyecek o nedenle sayfayı eski haline getirmek de tamamen bize kalıyor. Hash değerine daha önce söz konusu sayfaları tanımlayacak bir değer verdiyseniz kullanıcı tarayıcıda gezerken gidilmek isteyen sayfanın hash değeri size verildiğinde sayfanın eski halini üretebilmeniz hiç de zor olmayacaktır.

<body onhashchange="HashChanged();">

Yine IE 8 ile beraber gelen AJAX navigasyon sisteminin bir parçası da kullanıcının tarayıcı içerisinde ileri veya geri düğmelerini kullandığında bizi haberdar edecek olan event-listener. Standart şekli ile herhangi bir HTML sayfada yer alan Body tagının onhashchange event’ına özel bir JavaScript listener fonksiyonu ekleyebilirsiniz. Böylece artık ileri veya geri navigasyonlarında bizim HashChanged metodumuz çalıştırılacak. Peki ne yapacağız HashChanged içerisinde? Hash değiştiğinde göre yeniden window.location.hash üzerinden yeni hash değerini alıp ona uygun AJAX isteklerini gerçekleştirerek siteyi eski haline getirmemiz gerekiyor.

Tüm bu manzara içerisinde önemli olan noktalardan biri de AJAX sitelerinde yaşadığımız bir diğer sorunu daha gidermiş olmamız. Bildiğiniz üzere AJAX sitelerinde sitenin farklı durumlarına ait farklı URL adresleri de bulunmaz. Oysa bizim # implementasyonu ile beraber artık sitemizin hash bilgisini değiştirdiğimiz her noktada yeni bir sayfa ve URL de yaratmış oluyoruz.

Not: Bu sistemi ASP.NET AJAX ile beraber kullanabilmeniz için ya ScriptManager'ın tüm requestlerini JavaScript ile yakalamanız ya da sadece PageMethod kullanmanız gerekecektir. Daha kolay bir entegrasyon için maalesef ASP.NET 4.0'ı beklememiz gerekecek.

Friday, March 13, 2009 7:50:25 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   IE 8.0  | 
 Saturday, February 28, 2009

MSDN Magazine'i takip edenleriniz vardır diye tahmin ediyorum. Microsoft'un yazılımcılara yönelik aylık olarak yayınlanan İngilizce dergisi olan MSDN Magazine'in Mart sayısında benim de bir makalem yer alıyor.

MSDN Magazine Mart 2009 Sayısı
MSDN Magazine Mart 2009 Sayısı

Yukarıdaki kapakta en üstte yer alan :) Internet Explorer 8 yazısı bana ait. Yazılımcılara yönelik olarak Internet Explorer 8 yeniliklerini bugüne kadar birkaç seminerde anlattım, ayrı makaleler şeklinde bilgileri sizlerle blogumdan da paylaştım. Dergi içerisindeki yazıya da aşağıdaki adresten dijital ortamda da ulaşabilirsiniz.

http://msdn.microsoft.com/tr-tr/magazine/dd458804(en-us).aspx

Yazı içerisinde screenshotlara dikkat ederseniz :) Türkçe Live.com arayüzünde statüs barda "TR" karakterlerini de net olarak görebilirsiniz :) Garip bir duygu ama MSDN Magazine'de bu gibi Türkçe bir screenshot görmek beni kendimce gururlandırdı :) Kabul ediyorum bunlar garip duygular...

 

Saturday, February 28, 2009 7:41:15 PM (GTB Standard Time, UTC+02:00)  #    Comments [16]   IE 8.0  | 
 Wednesday, February 04, 2009

Internet Explorer 8 ile ilgili sanırım bugüne kadar 10'a yakın seminer verdim ve bu seminerlerin hepsinde de doğal olarak "Ne anlatacak ki bu adam?" soru işareti ile şaşkın gözlerle bana bakan yazılım geliştiricileri daha da şaşkın bir şekilde seminerin sonunda azat ettim diye tahmin ediyorum :). Aslında bu çok doğal bir süreç çünkü maalesef ki Internet Explorer'dan beklentilerimiz ürünün geçmişinden dolayı çok düşük ve gerçek anlamda işimizi kolaylaştırabilecek, değer katabilecek neler olabilir dediğimizde aklımıza pek bir şey gelmiyor.

Bundan önceki dönemde ben IE 8 ile gelen yeniliklerle ilgili yazdığım makalelerin linklerini sizinle tekrar paylaşmak istiyorum. Çünkü emin olun IE8'in son sürümü ile karşı karşıya kalmamıza çok az kaldı.

IE8'de Offline ve Online Çalışma Modları
Internet Explorer 8.0 için Accelerator nasıl hazırlanır?
Internet Explorer 8.0 için Search Provider ve Search Suggestions sistemlerini hazırlamak.
Internet Explorer 8.0 için Web Slice hazırlayalım.
Internet Explorer 8.0 ve dahili JSON işlemleri
Internet Explorer 8.0 ile beraber gelen Developer Tools'u inceleyelim.
Internet Explorer 8.0 ile beraber "Compatibility View" ve web sitelerinin uyumluluk ayarları.
Internet Explorer 8.0 Beta 2 ile gelen güvenlik yenilikleri

IE8 ile beraber gelen en güzel özelliklerden biri Web Slice yapıları. Ben bu yapıların çok popüler bir şekilde kullanılacağından ve site yayıncıları için de çok güzel avantajlar getireceğinden eminim. Geçen hafta içerisinde TRT.NET.TR ekibi ile görüşme şansım oldu ve heyecanlarına hayran kaldım. Çok yakında başka haberlerim de olacak sizlere ;) Şimdilik TRT'nin resmi ana sayfasında ve iç sayfalarda Web Slice desteğinin verilmeye başlandığını müjdeleyebilirim. Artık isterseniz TRT'nin haberlerini hiç sitelerine girmeden IE 8 içerisinden birer Web Slice olarak takip edebiliyorsunuz!

Buyurun buradan bir inceleyin ;) http://www.trt.net.tr/ 

Wednesday, February 04, 2009 4:32:27 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
 Sunday, January 04, 2009

Özellikle RIA uygulamalarındaki en büyük sorunlardan biri anlık internet bağlantısı kesintilerinde sayfanın bir daha geri ulaşılamayacak şekilde ekrandan kaybolması veya farklı hataların ortaya çıkarak geri dönüşü imkansız hale getirmesidir. Bu hoş olmayan durumu artık Internet Explorer 8.0 ile beraber çözebiliyoruz. IE 8.0 içerisinde navigtor.offline nesnesi ile istemci tarafında internet bağlantısının o an için olup olmadığı kontrol edebildiğimiz gibi internet bağlantısı ile ilgili değişiklikleri algılayacak event-handler tanımlamaları da yapabiliyoruz. Bu kolaylıklar ile artık AJAX veya Silverlight uygulamalarının istemci tarafındaki kesintileri algılayarak uygun bir şekilde kullanıcıyı uyarmaları mümkün. Hatta belki de internet bağlantısının koptuğunu algılayan uygulama veriyi DOMStorage'a saklayıp bir sonraki çalıştığında sunucuya gönderebilir. Minik bir örnek ile bu işlemleri nasıl yapabileceğimize göz atalım.

[HTML]

<body ononline="VarMi();" onoffline="VarMi();">

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

    <asp:ScriptManager ID="ScriptManager1" runat="server">

    </asp:ScriptManager>

    <div id="icerik">

 

    </div>

    <input onclick="VarMi();" id="Button1" type="button" value="button" />

  </form>

</body>

Yukarıdaki HTML kodu içerisinde özellikle koyu yazılı noktalara dikkat etmemiz gerekiyor. Birazdan yazacağımız VarMi adındaki JavaScript fonksiyonumuz istemcide internet bağlantısı olup olmadığını kontrol edecek. Fakat hangi durumlarda bu kontrolü yapacağız? İlk olarak söz konusu fonksiyonumuzu sayfamızda bir düğmeye bağladık. Böylece istediğimiz zaman tıklayarak internet bağlantısı olup olmadığını öğrenebiliriz. Diğer yandan istemcide internet bağlantısı koptuğunda veya internet bağlantısı geldiğinde de VarMi fonksiyonumuzun çalışarak gerekli değişiklikleri yapmasını istiyoruz. O nedenle body’nin ononline ve onoffline özelliklerine de söz konusu fonksiyonumuzun adını yazıyoruz. Böylece online durumunda yani internet bağlantısı geldiğinde veya onoffline durumunda yani internet bağlantısı kesildiğinde de anında VarMi fonksiyonumuz çalıştırılacak. Gelelim şimdi de VarMi fonksiyonumuzu yazmaya.

[JScript]

function VarMi() {

    if (window.navigator.onLine) {

        $get("icerik").innerHTML = "İnternet Var";

    }

    else {

        $get("icerik").innerHTML = "İnternet YOK";

    };

}

Aslında kod çok basit. navigator.onLine metodu bize geriye bir Boolean değeri döndürüyor. Eğer tarayıcıda o an internet bağlantısı varsa sayfadaki bir DIV içerisine uygun uyarı mesajını yazıyoruz. Aynı şekilde eğer bağlantı yoksa bu sefer de farklı bir uyarı mesajı yazıyoruz. Siz örneklerinizde bu durumlara göre farklı işlemler yapabilirsiniz. Böylece hazırladığınız web sitesi yeri geldiğinde belki bazı işlemleri bir süreliğine sunucudan bağımsız olarak da yapabilir ve nasıl çalışacağına internet bağlantısının durumuna bakarak kendisi karar verebilirim.

Hepinize kolay gelsin...

Sunday, January 04, 2009 9:32:28 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
 Wednesday, September 17, 2008

Internet Explorer 8.0 ile beraber yazılımcılar olarak karşılaştığımız bir diğer uygulama geliştirme alanı da "Accelerators" yapısı. Accelerator'lar ile tarayıcı içerisinde kullanıcıların farklı konumlarda sadece sağ tuşa tıklayarak hızlıca bazı içeriklere veya işlevselliklere ulaşmasını sağlayabiliyoruz. Gelin ilk olarak canlı bir örnek üzerinden bir Accelerator'ın ne olduğuna göz atalım.

Accelerator nedir?

Internet Explorer'ı bilgisayarınıza ilk yüklediğinizde varsayılan ayarları ile beraber LiveMaps'in Accelerator eklentisi de yüklenmiş olacaktır. Bu Accelerator bize herhangi bir web sitesine bir adresi seçip sağ tıkladığımızda o adresin doğrudan hızlı bir şekilde haritada görebilmemizi sağlıyor. Bu işlem için herhangi bir şekilde LiveMaps web sitesine gitmemiz gerekmiyor. Eğer ki adresi doğrudan LiveMaps'de görmek isterseniz bu sefer de herhangi bir adresi seçip sağ tuş ile gelen LiveMaps Accelerator'ını seçmeniz yeterli. Böylece hızlı bir şekilde kullanıcının LiveMaps gibi bir uygulamaya herhangi bir site adresi yazmadan kullanabilmesini sağlayabiliyoruz.

LiveMaps Accelerator uygulaması.
LiveMaps Accelerator uygulaması.

Kendi Accelerator'ımızı yazalım.

Yapacağımız uygulamayı öğrenirken konu mankeni olarak zargan.com sitesini kullanalım. İngilizceden Türkçeye ve Türkçeden İngilizceye çeviri yapan sitede herhangi bir kelimeyi arattığınız aşağıdaki şekilde bir adres ile karşılaşıyoruz.

http://www.zargan.com/sozluk.asp?Sozcuk=deneme

Aslında bizim farklı aramalar yaptırabilmemiz için siteye bu şekilde adresler göndermemiz yeterli olacaktır. Zargan'ın sistemini anladıktan sonra şimdi geçelim Accelerator'ların yapısını incelemeye ve eldeki siteye uygun bir Accelerator nasıl yazarız sorusunu cevaplamaya.

Her Accelerator bir XML dosyası içerisinde "OpenService Format" denilen bir standarda uygun şekilde yazılır. Accelerator'ın tüm çalışma yapısı bu XML içerisinde saklıdır. Hemen sizinle Zargan için çalışacak olan XML'i paylaşacağım.

<?xml version="1.0" encoding="UTF-8"?>

<openServiceDescription

    xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

    <homepageUrl>http://www.zargan.com/</homepageUrl>

    <display>   

        <name>Zargan ile cevir</name>

        <icon>http://www.zargan.com/favicon.ico</icon>

    </display>

    <activity category="translate">

        <activityAction context="selection" >

            <preview action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" />

            </preview>

            <execute action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" type="text" />

            </execute>

        </activityAction>

    </activity>

</openServiceDescription>

Yukarıdaki gibi bir XML'i accelerator.xml gibi bir dosyaya kaydedip sitenize koyduktan sonra artık tek yapmanız gereken bu XML'in bir Accelerator olarak yüklenmesini sağlayacak JavaScript kodunu yazmak.

        <button onclick="window.external.addService('accelerator.xml')">Zargan Accelerator Ekle</button>

Artık kullanıcılar yukarıdaki düğmeye tıkladıklarında doğrudan Accelerator'ı yükleyebilecek ve Internet Explorer içerisinde herhangi bir metni seçip sağ tuşa bastıklarında gelen "Zargan ile çevir" komutunu verirlerse seçtikleri kelimenin çevirisini gösteren zargan.com sayfası otomatik olarak açılacaktır.

Daha da ileri gidip eğer "Zargan ile çevir" menüsünün üzerinde biraz dururlarsa ufak bir pencere içerisinde aynı LiveMaps Accelerator'ında olduğu gibi seçilen kelimenin arandığı sayfa da gösterilecektir. Tabi şu an için Zargan'ın bahsettiğimiz çerçeveye uygun tasarımda bir sayfası olmadığı için ortaya pek hoş bir manzara çıkmıyor fakat önemli olan bizim uygulayabilmiş olmamız.

Peki nedir bu XML'dekilerin anlamı?

Şimdi gelin çalışan XML'i parçalayarak bölüm bölüm neyin ne olduğuna ve ne anlama geldiğine bir göz atalım. İlk olarak XML'in ana yapısındaki hizmet sağlayıcı ile ilgili bilgileri içeren kısma bir bakalım.

<?xml version="1.0" encoding="UTF-8"?>

<openServiceDescription

    xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

    <homepageUrl>http://www.zargan.com/</homepageUrl>

    <display>   

        <name>Zargan ile cevir</name>

        <icon>http://www.zargan.com/favicon.ico</icon>

    </display>

    <activity category="translate">

        <activityAction context="selection" >

            <preview action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" />

            </preview>

            <execute action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" type="text" />

            </execute>

        </activityAction>

    </activity>

</openServiceDescription>

homepageUrl içerisinde hizmeti sağlayan sitenin tam adresini girmemiz gerekiyor. Bu adres kullanıcılar Accelerator'ı sistemlerine eklerken göreceklerin adresin ta kendisi, bir anlamda hizmet sağlayıcının kimliğinin bir kanıtı olarak da kabul edebiliriz. Name tagları arasında yer alan metin doğrudan Accelerator'ın sağ tuş ile gelen menülerde gözükecek olan adı. Aynı şekilde icon tagları arasında adresi verilen ikon da sağ tuş ile gelen menülerde gösterilecektir.

Gelelim Accelerator'ımızın yapacağı işlere. Bizim Accelerator örneğimiz sayfada seçili olan metni alarak http://www.zargan.com/sozluk.asp adresine Sozcuk parametresi olarak göndermekle yükümlü. Bunun için ilk olarak Accelerator altında bir Activity tanımlıyoruz.

<?xml version="1.0" encoding="UTF-8"?>

<openServiceDescription

    xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

    <homepageUrl>http://www.zargan.com/</homepageUrl>

    <display>   

        <name>Zargan ile cevir</name>

        <icon>http://www.zargan.com/favicon.ico</icon>

    </display>

    <activity category="translate">

        <activityAction context="selection" >

            <preview action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" />

            </preview>

            <execute action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" type="text" />

            </execute>

        </activityAction>

    </activity>

</openServiceDescription>

Yarattığımız activity tagının category özelliğine farklı değerler verebiliyoruz. Bu değerler Internet Explorer'ın kategoriye göre Accelerator'ları sıralayabilmesini sağlıyor. Kendi istediğiniz değerleri verebileceğiniz gibi olabildiğince genel geçer olması olası değerleri vermekte fayda var. Şu an için map (harita), blog (günlük), define (ansiklopedi), add (Bookmarking) ve translate (Çeviri) gibi kategoriler genel olarak kullanılanlar arasında.

<?xml version="1.0" encoding="UTF-8"?>

<openServiceDescription

    xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

    <homepageUrl>http://www.zargan.com/</homepageUrl>

    <display>   

        <name>Zargan ile cevir</name>

        <icon>http://www.zargan.com/favicon.ico</icon>

    </display>

    <activity category="translate">

        <activityAction context="selection" >

            <preview action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" />

            </preview>

            <execute action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" type="text" />

            </execute>

        </activityAction>

    </activity>

</openServiceDescription>

Bir sonraki adımda bir activityAction tanımlıyoruz. activityAction'ın context değeri için farklı seçenekler mevcut. Bizim örneğimizde herhangi bir metin seçilerek sağ tuşa basıldığında işlem yapılacağı için selection değeri atanmış durumda. İsterseniz buraya link değerini de verebilirsiniz, böylece herhangi bir linke tıklandığında yapılacak işlemi belirleyebilirsiniz.

<?xml version="1.0" encoding="UTF-8"?>

<openServiceDescription

    xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

    <homepageUrl>http://www.zargan.com/</homepageUrl>

    <display>   

        <name>Zargan ile cevir</name>

        <icon>http://www.zargan.com/favicon.ico</icon>

    </display>

    <activity category="translate">

        <activityAction context="selection" >

            <preview action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" />

            </preview>

            <execute action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" type="text" />

            </execute>

        </activityAction>

    </activity>

</openServiceDescription>

Sıra geldi execute tagları ile artık doğrudan yapılacak işleme karar vermeye. Sağ tuş ile tıklanarak gelen menüden Accelerator'a tıklandığında çalıştırılacak olan işlem bir POST veya GET olabilir. Execute taglarına method özelliği vererek POST ve GET arasında bir seçim yapabilirsiniz. Varsayılan değeri GET olduğu için ve bizim örneğimize bu seçenek uyduğu için method özelliğini ayarlamamıza gerek kalmadı. Action kısmına ise gidilecek adresi veriyoruz. Geriye Zargan'a gönderilecek olan parametre kaldı. Parametrenin adı (Name) Sozcuk, tipi (Type) metin (text) değeri ise kullanıcının seçtiği metin ({selection}) olmalı. Böylece XML içerisinde yapıyı da sanırım aydınlatmış olduk.

Seçili metni {selection} ile alarak parametre haline getirebildiğiniz gibi daha bir çok bilgiyi de elde edebilirsiniz.

  • documentDomain -Kullanıcının Acceleator'ı çalıştırdığı alan adı
  • documentTitle - Accelerator'ın çalıştırıldığı sayfanın Title (başlık) bilgisi.
  • documentUrl -  Accelerator'ın çalıştırıldığı sayfanın tam adresi.
  •  link - Eğer bir linke tıklanarak Acceleratır çalıştırılıyorsa linkin adresi.
  • linkDomain - Eğer bir linke tıklanarak Acceleratır çalıştırılıyorsa linkin alan adı.
  • linkRel - Eğer bir linke tıklanarak Acceleratır çalıştırılıyorsa linkin rel özelliği.
  • linkText - Eğer bir linke tıklanarak Acceleratır çalıştırılıyorsa linkin metni.
  • linkType - Eğer bir linke tıklanarak Acceleratır çalıştırılıyorsa linkin tipi.

Son olarak gelelim Accelerator'ın yanında gözüken önizleme ekranının XML kodlarına.

<?xml version="1.0" encoding="UTF-8"?>

<openServiceDescription

    xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

    <homepageUrl>http://www.zargan.com/</homepageUrl>

    <display>   

        <name>Zargan ile cevir</name>

        <icon>http://www.zargan.com/favicon.ico</icon>

    </display>

    <activity category="translate">

        <activityAction context="selection" >

            <preview action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" />

            </preview>

            <execute action="http://www.zargan.com/sozluk.asp">

                <parameter name="Sozcuk" value="{selection}" type="text" />

            </execute>

        </activityAction>

    </activity>

</openServiceDescription>

Ön izleme ekranı yaratmak için preview taglarını kullanmamız gerekiyor. Aynı execute taglarında olduğu gibi burada da action ve gönderilecek olan parametrenin ayarlanması gerekiyor. Normal şartlarda burada yönlendirilen sayfa (action) ile arama sonuçlarının doğrudan gösterileceği sayfanın tasarım olarak farklı olması gerekir. Buradaki sayfanın özellikle ön izleme penceresinin boyutlarına (320*240px) sığacak şekilde tasarlanması çok daha hoş bir kullanım deneyimi sağlayacaktır.

Hepinize kolay gelsin.

Wednesday, September 17, 2008 5:25:19 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   IE 8.0  | 
 Sunday, September 14, 2008

Internet Explorer 7.0 ile beraber alıştığımız "Search Providers" yapısına IE 8.0 içerisinde bazı eklemeler yapıldı. Bu eklemelerin içinde en dikkati çeken özellik "Search Suggestions" özelliği. Aslında biz yazılımcıların uzun süredir AJAX ile hazırladığımız ve AutoComplete adını verdiğimiz sistemin ta kendisi.

IE 8.0 içerisinde Search Suggestions örneği.
IE 8.0 içerisinde Search Suggestions örneği.

Artık IE içerisinde arama için siz bir şeyler yazdıkça o an seçtiğiniz "Search Provider" eğer "Search Suggestion" destekliyorsa otomatik olarak sonuçlar anında yukarıdaki gibi karşınıza gelecektir.

Search Provider nasıl hazırlanır?

Search Provider'lar aslında birer XML dosyası şeklinde hazırlanır. Bu XML dosyası içerisinde arama motoru ile ilgili tarayıcının ihtiyaç duyduğu bilgiler yer alır. Düşündüğümüzde bunlar tabi ki arama motorunun adı, adresi ve tarayıcıda gösterilecek olan ikonundan farklı bilgiler değiller.

<?xml version="1.0" encoding="UTF-8"?>

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">

    <ShortName>AramaMotoruAdı</ShortName>

    <Url type="text/html" template="http://localhost:49438/WebSite2/?aranacak={searchTerms}"/>

    <Image height="16" width="16" type="image/icon">http://localhost:49438/WebSite2/aramaikonu.ico</Image>

</OpenSearchDescription>

Yukarıda görmüş olduğunuz XML formatı OpenSearch standartlarına uygun şekilde hazırlanmalıdır. ShortName tagları arasında arama motorunun adı, URL taglarının template özelliğine arama motorunun adresi yazılır. Adresi yazarken dikkat etmeniz gereken nokta aranacak terimler yerine denk gelen noktaya {searchTerms} yazmanız. Tarayıcı içerisinde kullanıcının arattığı herhangi bir şey doğrudan bu adresteki {searchTerms} yazının yerine konarak verilen adres çalıştırılacaktır. Son olarak isterseniz arama motorunuzun ikon dosyasını da bir Image tagı içerisine adresini yazarak iletebilirsiniz.

Yukarıdaki şekilde Search Provider dosyanızı hazırladıktan sonra artık geriye kalan tek şey kullanıcıların bu dosyayı bir Search Provider olarak bilgisayarlarına eklemelerini sağlayacak JavaScript kodunu yazmak.

<a

  href="#"

  onclick="window.external.AddSearchProvider('http://localhost:49438/WebSite2/arama.xml')">

  Search Provider Ekle

</a>

window.external.AddSearchProvider metoduna doğrudan XML dosyasının konumunu verirseniz yukarıdaki gibi bir linke tıklandığında Search Provider ekleme ekranının gelmesini sağlayabilirsiniz. Artık kullanıcılar sizin Search Provider'ınızı kullanabilirler.

Peki ya Search Suggestions?

Search Suggestions sistemi tabi ki Search Provider'ların üzerine eklenen bir sistem. O nedenle yukarıdaki gibi elinizde hazır bir Search Provider'ın zaten bulunması gerekiyor. Sonrasında eklemeler ile Search Provider'ınızı Search Suggestions destekli hale getirebiliyorsunuz.

<?xml version="1.0" encoding="UTF-8"?>

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">

  <ShortName>AramaMotoruAdı</ShortName>

  <Url type="text/html"

      template="http://localhost:49438/WebSite2/?aranacak={searchTerms}"/>

  <Url type="application/x-suggestions+json"

      template="http://localhost:49438/WebSite2/json.ashx?aranacak={searchTerms}"/>

  <Url type="application/x-suggestions+xml"

      template="http://localhost:49438/WebSite2/xml.ashx?aranacak={searchTerms}"/>

  <Image height="16"

        width="16"

        type="image/icon">http://localhost:49438/WebSite2/aramaikonu.ico</Image>

</OpenSearchDescription>

Bir önceki örneğimizdeki arama.xml dosyasına iki URL daha ekliyoruz. Bu sefer eklediğimiz URL'lerin type özellikleri text/html değil de application/x-suggestions+json veya application/x-suggestions+xml olabiliyor. Her iki özelliği beraber kullanmanın herhangi bir anlamı yok. Amacımız Search Suggestion esnasından gösterilecek AutoComplete bilgisinin alınacağı adresi belirlemek. Bu adreslerden ya XML ya da JSON formatında veri aktarımı yapılabiliyor. Yine bu adresler içerisinde de aranan kelime doğrudan {searchTerms} kısmına yerleştiriliyor. XML veya JSON döndüreceği için en mantıklısı bu adreslerde ASHX (Generic Handler) kullanmak.

<SearchSuggestion>

  <Query>asp.net</Query>

  <Section>

    <Item>

      <Text>Sonuç 1</Text>

      <Description>Açıklama</Description>

      <Url>http://sonucadresi.com</Url>

    </Item>

  </Section>

</SearchSuggestion>

Yukarıdaki örnekte ASHX dosyamıza aranan parametresi olarak asp.net metnini gönderdiğimizde ortaya çıkan sonucu görebiliriz. Query tagları arasına doğrudan aranan parametresi tekrar yazdırarak tarayıcıya iletmemiz gerekiyor. Böylece tarayıcı gerçekten aranan şeyin sonucunun gelip gelmediğini kontrol edebiliyor. Sonrasında bir Section açarak içerisine tek tek item tagları içerisinde her arama sonucunun Text (metin), Description (Açıklama) ve Url (Adres) bilgisini veriyoruz. Bizim örneğimizde şimdilik sadece tek sonuç var. Tarayıcı en fazla 10 adet sonuç gösterebiliyor.

İlk Search Suggestion denememizin sonucu.
İlk Search Suggestion denememizin sonucu.

Yukarıdaki ekran görüntüsünde de inceleyebileceğiniz üzere XML'den gönderdiğimiz tek sonuç bilgisi otomatik olarak tarayıcı tarafından gösterilmiş durumda. Eğer kullanıcı gelen sonuçlardan herhangi birine tıklarsa o sonuca ait Url tagları ile gelen adrese yönlendirilir. Şimdi sıra geldi bu sonuçlara biraz da görsellik eklemeye.

Son bir defa tekrar yukarıdaki ekran görüntüsüne bir göz atalım. Dikkatinizi çektiyse en üstte "AramaMotoduAdı Suggestions" yazıyor. Bu başlık otomatik olarak arama motorunun adı alınarak sonuna "Suggestions" eklenerek oluşturuluyor. İşin güzel tarafı biz istersek alt başlıklar oluşturabiliyoruz.

<SearchSuggestion>

  <Query>asp</Query>

  <Section>

    <Separator title="Bölüm 1" />

    <Item>

      <Text>Sonuç 1</Text>

      <Description>Açıklamaa</Description>

      <Url>http://sonucadresi.com</Url>

    </Item>

    <Separator title="Bölüm 2" />

    <Item>

      <Text>Sonuç 2</Text>

      <Description>Açıklamaa</Description>

      <Url>http://sonucadresi.com</Url>

    </Item>

  </Section>

</SearchSuggestion>

Yukarıdaki XML içerisinde Separator tagları dikkatinizi çekecektir. Bu taglar title özelliklerindeki yazılarla beraber Search Suggestion içerisinde farklı bölümlemelerin oluşmasını sağlayacaktır.

İki bölümlü Search Suggestion.
İki bölümlü Search Suggestion.

Son olarak gelelim bu sonuçların yanına ufak birer de görsel yerleştirmeye. Böylece çok daha hoş bir görüntü oluşacaktır. Aslında tek yapmamız gereken her bir sonucu tanımlayan item elementinin içerisine bir de image elementi yerleştirerek sonuçla ilgili resmin adresini vermek.

<SearchSuggestion>

  <Query>asp</Query>

  <Section>

    <Separator title="Bölüm 1" />

    <Item>

      <Text>Sonuç 1</Text>

      <Image source="http://localhost:49438/WebSite2/dock.jpg"

            alt="Bir resim"

            width="75"

            height="50" />

      <Description>Açıklamaa</Description>

      <Url>http://sonucadresi.com</Url>

    </Item>

    <Separator title="Bölüm 2" />

    <Item>

      <Text>Sonuç 2</Text>

      <Description>Açıklamaa</Description>

      <Url>http://sonucadresi.com</Url>

    </Item>

  </Section>

</SearchSuggestion>

Daha önceki arama sonucunu tanımlayan XML dosyamızdaki ilk item tagının içerisine bir de Image tagı yerleştiriyoruz. Bu Image tagının aslında HTML'den bildiğimiz Image tagından neredeyse hiçbir farklı yok. Source özelliğine gösterilecek olan fotoğrafın adresini, alt özelliğine ToolTip metnini, width ve height özelliklerine de resmin gösterilecek olan boyutunu belirtmemiz yeterli olacaktır.

Search Suggestion içerisinde fotoğraf gösterimi.
Search Suggestion içerisinde fotoğraf gösterimi.

Bizim örneğimizde resmin boyutları XML içerisinde tanımlı şekilde. Bu boyutları sabit tutabileceğiniz gibi isterseniz dinamik olarak da ayarlayabilirsiniz. Bunun için Search Provider'ın XML tanımındaki URL bilgisinde ufak bir değişiklik yapmak gerekiyor.

  <Url type="application/x-suggestions+xml"

      template="http://localhost:49438/WebSite2/xml.ashx?aranacak={searchTerms}?}&amp;
maxgenislik={maxWidth}&amp;satiryuksekligi={rowHeight}&amp;bolumyuksekligi={sectionHeight}
"/>

ASHX dosyasına ek olarak gönderebileceğiniz {maxWidth}, {rowHeight} ve {sectionHeight} bilgileri tarayıcı tarafından otomatik olarak doldurulacaktır. {maxWidth} Search Suggestion barının genişliğini, {rowHeight} her bir sonucun gösterildiği satırının yüksekliğini, {sectionHeight} ise varsa bir bölümün toplam yüksekliğini verecektir. Bu bilgileri kullanıcının çözünürlüğüne göre değişeceği için sizde ASHX dosyanıza gelen parametrelere uygun şekilde XML yaratırken Image taglarının boyutlarını belirleyebilirsiniz.

Gelin işin bir de sunucu tarafına göz atalım ve son örneğimizdeki XML kodunu oluşturacak ASHX'ın arkasına bakalım.

[VB]

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        context.Response.ContentType = "text/xml"

 

        Dim XMLFeed As New XDocument(New XDeclaration("1.0", "utf-8", "yes"))

        XMLFeed.Add(New XElement("SearchSuggestion", _

                      New XElement("Query", context.Request.QueryString("aranacak")), _

                        New XElement("Section", _

                          New XElement("Separator", _

                            New XAttribute("title", "Bölüm 1")), _

                          New XElement("Item", _

                            New XElement("Text", "Sonuç 1"), _

                            New XElement("Image", _

                              New XAttribute("source", "http://localhost:49438/WebSite2/dock.jpg"), _

                              New XAttribute("alt", "Bir resim"), _

                              New XAttribute("width", "75"), _

                              New XAttribute("height", "50")), _

                            New XElement("Description", "Açıklamaa"), _

                            New XElement("Url", "http://sonucadresi.com")), _

                          New XElement("Separator", _

                            New XAttribute("title", "Bölüm 2")), _

                          New XElement("Item", _

                            New XElement("Text", "Sonuç 2"), _

                            New XElement("Description", "Açıklamaa"), _

                            New XElement("Url", "http://sonucadresi.com")))))

        context.Response.Write(XMLFeed)

    End Sub

[C#]

    public void ProcessRequest (HttpContext context) {

        context.Response.ContentType = "text/xml";

 

        XDocument XMLFeed = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));

        XMLFeed.Add(new XElement("SearchSuggestion",

            new XElement("Query", context.Request.QueryString["aranacak"].ToString()),

            new XElement("Section",

                new XElement("Separator",

                    new XAttribute("title", "Bölüm 1")),

                    new XElement("Item",

                        new XElement("Text", "Sonuç 1"),

                        new XElement("Image",

                            new XAttribute("source", "http://localhost:49438/WebSite2/dock.jpg"),

                            new XAttribute("alt", "Bir resim"),

                            new XAttribute("width", "75"),

                            new XAttribute("height", "50")),

                        new XElement("Description", "Açıklamaa"),

                        new XElement("Url", "http://sonucadresi.com")),

                new XElement("Separator",

                    new XAttribute("title", "Bölüm 2")),

                    new XElement("Item",

                        new XElement("Text", "Sonuç 2"),

                        new XElement("Description", "Açıklamaa"),

                        new XElement("Url", "http://sonucadresi.com")))));

 

        context.Response.Write(XMLFeed.ToString());

    }

Tabi tüm yukarıdaki kodun bir veritabanına bağlanması ve uygun şekilde For döngüleri ve LINQ sorguları ile birden çok item elementlerinin yaratılması gerekiyor.

İşin JSON tarafına baktığımızda maalesef programatik olarak kullanımı çok daha bir sistem söz konusu. Ayrıca JSON tarafında Separator ve Image nesneleri şu an için desteklenmiyor. O nedenle JSON kullanımı pek uygun değil.

Her Search Provider aynı anda bir Accelerator!

Internet Explorer 8.0 ile beraber gelen bir diğer yenilik de eski adıyla "Activities" olan "Accelerator"lar. Accelerator'ların detayına girmeyeceğiz, bunun için ayrı bir makale çok daha uygun olur fakat her Search Provider'ın aslında otomatik olarak da bir Accelerator olduğunu söyleyebiliriz. IE içerisinde herhangi bir web sayfasını açtıktan sonra bir metin seçip fare ile sağ tıkladığınızda Accelerator menüsünden Search Provider'ları görebilirsiniz.

Her Search Provider aynı anda bir Accelerator!
Her Search Provider aynı anda bir Accelerator!

Bu otomatik Accelerator yapısının oluşması için ek bir işlem yapmak gerekmiyor. İsterse kullanıcı rahatlıkla "Manage Accelerators" bölümünden arama motorunu ilk sağ tık ile gelen menüye de alabiliyor.

Search Provider'ı bulunabilir hale getirmek?

JavaScript kodu ile Search Provider ekleme işlemini görmüştük. Bunun haricinden tarayıcıların sayfanıza girildiği gibi uygun Search provider'ı otomatik olarak bulabilmesi için de aşağıdaki kodu sayfanın head bölümüne yerleştirebilirsiniz.

<link title="AramaMotoruAdı"

      rel="search"

      type="application/opensearchdescription+xml"

      href="AramaMotoruAdı">

Burada önemli olan nokta Search Provider'ı tanımlayan XML dosyası içerisinde ShortName ile bu tag içerisindeki title'ın kesinlikle aynı olması gerektiği. Aksi halde birleştirme işlemi yapılamayacaktır. link tagı içerisinde href özelliği doğrudan Search Provider'ın XML dosyasını göstermelidir.

Hepinize kolay gelsin.

Sunday, September 14, 2008 3:55:40 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   IE 8.0  | 
 Saturday, September 13, 2008

IE8.0 ile gelen ve biz web yazılım geliştiricilerin önümüzdeki dönemde belki de en fazla uygulayacağımız yeniliklerden biri Web Slice yapısı. Özellikle tasarımcılar için Expression Design ve Photoshop gibi araçlardan tanıdık gelecek olan Slice mantığı ile birebir ayı mantıkla bir uygulamadan bahsediyoruz. Kullanıcı hazırlamış olduğunuz web sitesinin belirli bir bölümü keserek kendi tarayıcısının bir parçası haline getiriyor. Tabi bu kesme işleminin nasıl yapılabileceği ve sonucunun ne olacağı konusunda bire bir yazılımcılar olarak biz devreye giriyoruz. Konuyu fazla uzatmadan ilk önce çalışan bir Web Slice nasılmış onu inceleyelim.

Web Slice nedir? ne değildir?

Örnek olarak şu an yayında olan canlı bir siteyi inceleyelim. EBay'in IE 8 Beta 2 uyumlu sitesini buradan inceleyebilirsiniz. Sitenin içerisinde ürünlerde bir aram yaptırdığınızda arama sonucunda gelen listeden herhangi bir ürünün üzerine fare ile gittiğinizde ürünün etrafında ilginç bir yeşil çerçeve ve solunda da özel bir ikon beliriyor.

Canlı bir WebSlice'a ait ikon!
Canlı bir WebSlice'a ait ikon!

Yukarıdaki resimde gördüğünüz yeşil ikona tıkladığımızda karşımıza "Subscripe to a Web Slice" uyarısı çıkıyor. "Add" düğmesine basarak bu Slice'ı IE 8.0'ın arayüzüne eklemiş oluyoruz.

WebSlice'ımız artık IE 8.0 araç çubuğunda duruyor.
WebSlice'ımız artık IE 8.0 araç çubuğunda duruyor.

Biraz önce Web Slice'ını eklediğimiz ürünü artık IE 8.0 araç çubuğundan takip edebiliyorum. Şu an için standart ayarlarda IE 2 saatlik aralıklarla gidip bu Web Slice'ın yenilenip yenilenmediğini kontrol edecek ve eğer yenilenmiş ise tarayıcının üst kısmında bu Web Slice kalın yazılarla gözükecek. İsterseniz kontrol edilme süresini Web Slice'a sağ tuş tıklayarak gelen menünden "Properties" komutunu vererek siz de ayarlayabilirsiniz.

Peki bu iş nasıl yapılıyor?

İlk olarak hazırlamış olduğunuz web sitesinde nerelerin birer Web Slice olacağına karar vermeniz gerekiyor. Web Slice olarak yerlere HTML kodları içerisinde Microformats ile işaretlemeler yapıyoruz. Microformats'ı bir HTML eklentisi gibi düşünebilirsiniz, HTML elementlerine farklı anlamlar kazandırmak için kullanılan bir standart. Buna bir örnek de XFN olabilir. Web Slice'lar da Microformats üzerinden çalışıyorlar.

        <div class="hslice" id="urun1">

            <div class="entry-title item_title">

                ÜRÜN ADI

            </div>

            <div class="entry-content">

                Ürünle ilgili özellikler

            </div>

            <a rel="feedurl" href="/slicebilgi.ashx?ID=1"></a>

        </div>

Yukarıda gördüğünüz HTML kodu bir WebSlice'ı tanımlıyor. Bu kod içerisindeki tagların DIV olmalarının hiçbir önemi yok. Esas önemli olanlar Microformat'lar yani class isimleri!

Bir WebSlice'ın oluşturulabilmesi için kesinlikle tüm WebSlice'ın bir ana HTML elementi içerisinde yer alması gerekiyor. Bu HTML elementinin class ismi olarak hslice'a sahip olması şart. Unutmayın bu isimlerde CSS sınıfları tanımlayarak aynı anda bu classları görsel değişiklikler için de kullanabilirsiniz fakat WebSlice'ın yapısının IE 8.0'ın anlayabilmesi için classların isimlerinin değiştirilmemesi gerekir. hslice olan ana elementin kesinlikle bir ID'ye sahip olması gerekiyor, bu ID'nin standart HTML kuralları çerçevesinde sayfada tek olması da şart.

Yukarıdaki örnek kodumuzu incelersek bir de entry-title CSS sınıfını göreceksiniz. Bu şekilde işaretlenmiş bir elementin içerisinde metin tarayıcı tarafından Web Slice'ın ismi olarak algılanacak ve kullanıcıya da bu şekilde gösterilecektir. Ayrıca Web Slice'ın IE içerisinde araç çubuğunda ilk gözüken kısmı da entry-title'dan alınır.

entry-content şeklinde işaretli kısımlar bu sayfadan kesilerek Web Slice'ın tarayıcının araç çubuğundan ulaşılacak kısımlarını tanımlıyor. Araç çubuğunda herhangi bir WebSlice'a tıklandığında sadece site içerisinde bu WebSlice ile ilişkili olarak entry-content şeklinde işaretli yerler alınarak gösterilecektir. Bunun haricinde isterseniz WebSlice'ın araç çubuğundan gösterilecek kısmını farklı kaynaklardan da alabilirsiniz. Örneğin harici bir RSS kaynağı kullanılabilir.

Örneğimizde içinde yazı olmayan bir link "a" tagı görüyorsunuz. Bu tag kullanıcıya gösterilmeyecek fakat önemli olan bu tagın rel özelliğinde feedurl değerini taşıması. Böylece WebSlice tarayıcıya eklendiğinde tarayıcı WebSlice içerisinde gösterilecek veriyi entry-content olarak ayarlanmış bölümlerden değil de doğrudan harici bir RSS kaynağından alacak.

RSS kaynağı nasıl ayarlanır?

Eğer WebSlice içerisinden harici kaynak kullanılacaksa en mantıklısı bir RSS kullanmak olacaktır. Tabi WebSlice'ın sayfa içindeki rel özelliği feedurl olan adresin bu WebSlice'a özel olması şart. Yani bizim örneğimizde 1 numaralı ürünle ilgili RSS kaynağının gelmesi için slicebilgi.ashx dosyasına parametre olarak ürün ID'sini gönderiyoruz. Söz konusu adresten çıkan RSS içerisinde ilk item nesnesi doğrudan IE tarafından alınarak Web Slice içerisinde gösterilecektir.

<rss version="2.0">

  <channel>

    <title>WebSlice RSS</title>

    <ttl>120</ttl>

    <item>

      <title>Ürün Bilgisi</title>

      <description>HTML &lt;b&gt;kod&lt;/b&gt; gider</description>

    </item>

  </channel>

</rss>

Yukarıdaki gibi basit bir RSS kaynağının Generic Handler(ASHX) üzerinden aktarılıyor olması yeterli. ASHX'in arkasında VB veya C# kodunuzda gelen ID parametresine göre veritabanından veri alabilir ve uygun içeriği üretebilirsiniz. Item tagları içerisinde title IE içerisinde araç çubuğunda WebSlice'da gözükecektir. Description içerisinde kod ise doğrudan Web Slice'ın içeriğini tanımlar.

Yukarıdaki gibi bir RSS'i rahatlıkla XLINQ ile yaratabilirsiniz.

[VB]

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

    context.Response.ContentType = "text/xml"

 

    Dim RSS = New XDocument()

    RSS.Add(New XElement("rss", New XAttribute("version", "2.0"), _

               New XElement("channel", _

                  New XElement("title", "WebSlice RSS"), _

                  New XElement("ttl", "120"), _

                  New XElement("item", _

                    New XElement("title", "Ürün Bilgisi" & context.Request.QueryString("id")), _

                    New XElement("description", "HTML <b>kod</b> gider")))))

    context.Response.Write(RSS.ToString())

End Sub

[C#]

    public void ProcessRequest (HttpContext context) {

        context.Response.ContentType = "text/xml";

 

        XDocument RSS = new XDocument();

        RSS.Add(new XElement("rss",

            new XAttribute("version", "2.0"),

            new XElement("channel",

                new XElement("title", "WebSlice RSS"),

                new XElement("ttl", "120"),

                new XElement("item",

                    new XElement("title", "Ürün Bilgisi" + context.Request.QueryString["id"].ToString()),

                    new XElement("description", "HTML <b>kod</b> gider")))));

        context.Response.Write(RSS.ToString());

    }

İçerik kadar sürede bir yenilensin?

Yazımın başında da bahsettiğim gibi kullanıcı WebSlice içeriğinin ne kadar zamanda bir yenilenmesi gerektiğine karar verebiliyor. Fakat bunun haricinde yazılımcı olarak bizim de TTL (Time To Live) değeri vererek içeriğin ne kadar zamana kadar geçerli olduğunu belirtebiliyoruz. Hemen bir önceki örneğimizdeki RSS kaynağındaki TTL değeri de dikkatinizi çekmiştir. TTL değerleri dakika üzerinden verilir. İsterseniz WebSlice'ın ana sayfadaki HTML kodunun içerisinde de Class adı ttl olan bir tag içerisinde bu değeri yazabilirsiniz.

Slice'lar var ama biraz kapalı kalsalar olmaz mı?

HTML kodunuz içerisinde Slice'lar var fakat bir süreliğine veya belirli bir sayfada IE'nin yeşil Slice çerçevelerini ve düğmelerini göstermesini istemiyorsunuz. İşte bu durumda aşağıdaki Meta taglarını kullanabilirsiniz.

<meta name="slice" scheme="IE" content="off" />

Yeşil düğmeler ortadan kaybolsa da Slice'lar çalışmaya devam eder ve kullanıcılar isterlerse IE içerisinde Slice menüsünden tüm Slice'ları görebilir. Ayrıca sayfadaki Slice'ları istemci tarafında dinamik olarak yaratıyorsanız veya değiştiriyorsanız IE'nin Slice Discovery'sini yenilemek ve Slice menüsündeki Slice listesinin güncellenmesini sağlamak için aşağıdaki JavaScript komutunu çağırabilirsiniz.

window.external.contentDiscoveryReset()

Slice ekleme düğmelerinin tasarımını değiştirilir mi?

Slice'ların hepsi kendi özel yeşil düğmeleri ile eklenebilse de bu yeşil düğmeleri yukarıdaki taktik ile kapattığınızda kendi düğmeleriniz ile Slice'ları ekletmek isteyebilirsiniz. Bunun için özel olarak kullanabileceğimiz bir JavaScript komutu yer alıyor.

window.external.addToFavoritesBar('http://sliceburada.com', 'SliceTitleBurada', 'slice')

Yukarıdaki JavaScript metoduna verdiğimiz üç parametreden ilki doğrudan Slice'ın HTML hslice kodlarının bulunduğu adresin ta kendisi. İkinci parametre sayfadaki hangi Slice'ı istediğimizi belirten Slice'ın ID bilgisi. Son olarak eklenecek öğenin tipini de slice olarak belirtiyoruz.

Hepinize kolay gelsin.

Saturday, September 13, 2008 4:52:00 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   IE 8.0  | 
 Friday, September 12, 2008

AJAX ile programlama yaparken en sık kullandığımız veri taşıma formatlarından biri JSON (JavaScript Object Notation). Detaylarına baktığımızda ASP.NET AJAX içerisinde de tüm PageMethod'lar sunucundan istemciye JSON formatından veri gönderiyor. Bunun tabi ki anlamlı nedenleri var; JSON XML'e kıyasla çok daha düşük boyutta çok daha fazla veri taşıyabiliyor. Ayrıca JSON'un JavaScript tarafında kullanımı XML'e göre daha kolay. JSON'un artık neredeyse tüm AJAX kütüphanelerinde kullanıldığını düşünürsek Microsoft tarafında da IE 8.0'a JSON ile ilgili özelliklerin eklenmesi gerektiği kararı alınarak Beta 2 ile beraber doğrudan JSON'a özel yeni JavaScript özellikleri sunuluyor. Gelin neler varmış beraber inceleyelim.

Eval() mi? İmdat!

AJAX kullanılan sitelerdeki en büyük güvenlik açıklarının arkasına baktığımızda belki de çoğu zaman Eval metodu karşımıza çıkacaktır. Peki Eval metodu ne yapar? Eval kendisine String olarak verilen bir değişkenin içindekileri bir kodmuş gibi çalıştırır. Örneğin aşağıdaki kod çalıştırıldığında ekrana normalde alert JavaScript metodu çalıştırılarak getirilen bir mesaj kutusu gelecektir.

        var Degisken = "alert('DENEME');";

        eval(Degisken);

Gördüğünüz gibi aslında çalıştırılan kod doğrudan bir metin olarak başka bir değişkenin içerisinde saklanıyor. Güvenlik açığı nerede? JSON kullandığınızda sunucudan gelen bir metni doğrudan Eval ile çalıştırarak JSON'un bir JavaScript dizisi olmasını sağlarız. Bu noktada eğer veri harici bir kaynaktan geliyorsa veya bu veriyi daha önce kullanıcı girmişse aslında kullanıcının doğrudan sitenizde çalıştırılacak bir JavaScript kodunu girmesini sağlamış olursunuz. Bunu engellemenin tabi ki yolları var, harici kütüphanalerde yine JavaScript ile eval'e verilen metinleri Parse ederek inceleyen metodlar mevcut, hatta bazıları bunun için Regular Expression bile kullanabiliyor. Fakat bunların hepsi unutmayalım ki yine JavaScript metodları kullanılarak yapılan işlemler. Oysa bizim doğrudan tarayıcı motorunda bu işlemleri yapan bir sistemimiz olsa daha hızlı ve güvenli olmaz mı?

IE 8.0 ve JSON

IE 8.0 Beta 2 ile beraber doğrudan JSON'u parse edebilme özelliği geliyor. Serialization ve Deserialization işlemlerini doğrudan IE içerisinde Native kodlar yaptığı için tabi ki ortaya çok daha yüksek performanslı bir çözüm çıkıyor.

        var KitaplarMetin = "{\"kitaplar\":{\"kitap\":[\"ASP.NET AJAX\",\"ASP.NET 3.5 AJAX\"]}}";

        var Kitaplar = JSON.parse(KitaplarMetin);

        alert(Kitaplar.kitaplar.kitap[0]);

Yukarıdaki kod içerisinde KitaplarMetin değişkenine bir JSON metni aktarıyoruz. Bu metnin bir şekilde JavaScript nesnelerine çevrilmesi gerekiyor. Bunun için klasik eval metodunu kullanmaktansa doğrudan IE 8.0 Beta 2 ile beraber gelen JSON nesnesinin parse özelliğini kullanıyoruz. Son satırda ise artık Kitaplar değişkenimize aktarılan JSON nesnelerinin içerisinden ilk kitabın adını alıyoruz.

Peki ya eldeki JavaScript nesnelerini JSON'dan standart metne çevirmek istersek ne yapacağız? Bu durumda da yardımımıza yine JSON nesnesinin stringify metodu yetişiyor.

        var Kitaplar = {

            kitaplar:{

                kitap:[

                    'ASP.NET AJAX',

                    'ASP.NET 3.5 AJAX'

                ]

            }

        };

        alert(JSON.stringify(Kitaplar));

Yukarıdaki örnekte yarattığımız Kitaplar adından nesneyi stringify metodu ile bir JSON metnine çeviriyoruz. Ayrıca isteyenler haricen .toJSON metodunu da kullanabilirler. IE 8.0 ile beraber standart olarak Boolean, String, Date, Number sınıflarının prototiplerine toJSON metodu eklenmiş durumda.

Zaten JSON sınıfı lokalde harici dosya ile tanımlıydı!

Bugüne kadar harici kütüphanelerle yukarıdaki işlemleri yaptığımız için tabi ki bu kütüphanelerin JSON nesnesi tanımladıklarını unutmadık. Böyle bir durumda aşağıdaki gibi ufak bir kontrol ile tarayıcının JSON nesnesini tanımlayıp tanımlamadığını kontrol edip eğer tanımlı değilse harici scriptler üzerinden ilerlemek gerek.

        if(!this.JSON)

        {

            JSON = .....;

        }

Hepinize kolay gelsin.

Friday, September 12, 2008 3:16:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   IE 8.0  | 
 Thursday, September 11, 2008

Internet Explorer içerisinde en büyük eksikliklerden biri de biz yazılım geliştiriciler için gerekli profilleme de hata bulma araçlarına sahip olmamasıydı. Bunun için bazı durumlarda harici eklentiler kullanırken bazen alternatif tarayıcılara da yönelmek zorunda kalıyorduk. Bu yazımızda yukarıda bahsi geçen sorunları çözme amacıyla Internet Explorer 8.0'a eklenmiş olan "Developer Tools" uygulamasını inceleyeceğiz.

CSS ve HTML DOM gerçek zamanlı düzenleme

Internet Explorer 8.0 içerisinde Tools menüsünden ulaşabileceğiniz "Developer Tools" ayrı bir pencerede ayrı bir programmış gibi açılsa da tabi ki tarayıcı ile entegre çalışıyor. Açılan "Developer Tools" penceresinin sağ üst köşesinde "Pin" düğmesine basarsanız bu pencere kendini IE içerisine yerleştirecektir. Açtığınız herhangi bir sitenin  HTML DOM'unu incelemenin yanı sıra CSS konusunda raporlar da alabiliyorsunuz. Hangi CSS sınıfının nereden geldiği, ve sayfada geçerli olup olmadığını görebiliyorsunuz. Örneğin harici bir CSS ayarı local satır içi bir stil ayarı ile devre dışı bırakılmış olabilir. Tüm bunları rahatlıkla bir liste olarak görmek mümkün.

CSS ve DOM tam kontrol altında!
CSS ve DOM tam kontrol altında!

Yukarıdaki gördüğünüz ekranda sol tarafta sayfanın DOM ağacını inceleyebilirsiniz. DOM içerisinde herhangi bir element özel olarak seçildiğinde o elementi etkileyen tüm CSS sınıfları, özellikleri ve bu özelliklerin nereden geldikleri sağ tarafta görülebiliyor. Daha da güzeli sağ taraftaki herhangi bir özelliğe tıklarsanız istediğiniz bir değeri değiştirerek IE içerisinde gerçek zamanlı olarak sonucu görebiliyorsunuz.

İsterseniz "Developer Tools" içerisinde HTML tabından CSS tabına geçerek doğrudan sayfadaki tüm CSS özelliklerini yakalayabilir ve gerçek zamanlı olarak değişiklikler de yapabilirsiniz. Tüm bu değişiklikleri tamamladıktan sonra araç çubuğundaki "Kaydet" düğmesine basmanız CSS dosyanızın o anki hali ile kaydedilmesi için yeterli.

JavaScript Debuging

Visual Studio içerisinde JavaScript Debuging'e kıyasla çok daha başarılı bulduğum IE 8.0 Developer Tools içerisinde JavaScript araçlarının en büyük avantajı doğrudan IE ile beraber çalıştıkları için tarayıcı içerisindeki tüm aktiviteyi takip edebiliyor olmak. İsterseniz herhangi bir JavaScript değişkenine aynı Visual Studio içerisinde VB veya C# kodlarına yaptığımız gibi Watch'lar ekleyin veya istediğiniz bir adıma BreakPoint yerleştirin. Hatta F10 ve F5 gibi Visual Studio kısayolları bile aynı.

JavaScript tarafında Watch koyarak durumu takip edin.
JavaScript tarafında Watch koyarak durumu takip edin.

Özellikle Silverlight 1.0 tarafında yazılan JavaScript kodlarının veya AJAX tarafında yazılan veri ulaşım kodlarının incelenmesi ve hataların bulunması epey kolaylaşmış durumda. Aşağıdaki görsel içerisinde JavaScript ile tanımlanmış bir Silverlight nesnesinin Source özelliğine verilen değeri doğrudan "Locals" tabı üzerinden giderek sayfada tanımlanmış tüm JavaScript nesnelerini listeleyip bulabiliyoruz. Tüm bunları yaparken istediğiniz anda herhangi bir değişkenin değerini Developer Tools içerisinde değiştirebilirsiniz, sonucu gerçek zamanlı olarak IE içerisinde göreceksiniz.

JavaScript tarafındaki sayfada bulunan tüm nesneler ve değişkenler düzenlenebiliyor.
JavaScript tarafındaki sayfada bulunan tüm nesneler ve değişkenler düzenlenebiliyor.

Profiler ile optimizasyon

Yazdığımız kodun ne kadar optimize olduğunu anlamak çok önemli. Bunun için tam olarak hangi kodun daha çok zaman aldığını bilmeliyiz. Özellikle SQL tarafında alışık olduğumuz Profiler sistemine benzeyen bir yapı ile artık IE üzerinde de Developer Tools içerisinde bir Profiler bulunuyor. "Start Profiler" düğmesine bastıktan sonra IE penceresine geçip site üzerinde istediğiniz işlemleri yapabiliyorsunuz. Sonra Developer Tools'a dönerek "Stop Profiler" dediğinizde geçen süre içerisinde yaptığınız tüm işlemlerin bir listesi karşınıza çıkıyor. Bu listeyi ister bir "Function" listesi olarak alın ister bir ağaç görüntüsünde hangi function'ın hangisini çağırdığına bakarak inceleyin. Önemli olan artık hangi işlemin ne kadar sürdüğünü görebiliyor olmamız.

Kod optimizasyonu için Profiler
Kod optimizasyonu için Profiler

Image Optimizasyonu

Bazı durumlarda bir web sitesine koyduğumuz resmin hem en ve boy boyutu hem de dosya boyutuna bakabilmek için doğrudan dosyanın kendisini bulmamız gerekebilir. Developer Tools içerisinde Image menüsü böyle bir durumda yardımımıza koşuyor ve doğrudan gerçek zamanlı olarak gezdiğiniz tüm sitelerdeki resimlerin boyutlarını resimlerin üzerine yazıyor. Gerçekten hoş bir özellik.

Gerçek zamanlı olarak sitedeki resimlerle ilgili detayları görebilirsiniz.
Gerçek zamanlı olarak sitedeki resimlerle ilgili detayları görebilirsiniz.

Pratik araçlar

Bir sayfadaki tüm DIV'leri görmek mi istiyorsunuz, tek yapmanız gereken "Outline" menüsünden DIV seçeneğini işaretlemek. Böylece gerçek zamanlı olarak sayfa içerisinde tüm DIV'ler ayrıca birer çerçeve içine alınacaktır. Sadece DIV elementleri değil istediğiniz bir elementi kendiniz de belirterek aranmasını sağlayabilirsiniz.

Tools menüsünden "Show Ruler" özelliği ile fare ile ekranda tıkladığınız iki nokta arasında mesafeyi piksel olarak ölçebilir bu mesafeler arasında X ve Y koordinatları farkları görebilirsiniz.

Pratik araçlardan biri : Cetvel!
Pratik araçlardan biri : Cetvel!

Aynı menüdeki "Show Color Picker" ile gezdiğiniz sitedeki herhangi bir rengi seçebilir RGB ve HEX renk kodlarını alabilirsiniz. "Resize" menüsünden ekran çözünürlükleri seçerek tarayıcının otomatik olarak farklı ekran çözünürlüğündeymiş gibi boyutlandırılmasını sağlayabilirsiniz.

Sonuç

IE 8.0 çok ilginç ve güzel yenilikler ile geliyor. IE içerisinde bu kadar geniş özelliklere sahip bir  Developer Tools paketi görmek çok sevindirici. Umarım daha yeni özellikler ile IE'nin sonraki sürümlerinde de gelişmeye devam eder.

Hepinize kolay gelsin.

Thursday, September 11, 2008 4:00:37 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
 Tuesday, September 09, 2008

Internet Explorer ile diğer web tarayıcıları arasında kod uyumsuzluk sorunları web programcıları olarak hepimiz biliyoruz. Hazırladığımız siteleri tek tek farklı tarayıcılarda test etmek zorunda olmak ve tarayıcıya özgü farklı kodlar yazmak belki de işimiz en sıkıcı noktalarından biriydi. İşte bu soruna artık bir nokta koymak adına Internet Explorer 8.0 ile beraber artık IE tüm standartlara uygun hareket ediyor. Tabi bu gelişme içerisinde bulunduğum durumunda bizim için "yeni sorunlar" anlamına geliyor. Eskiden IE 7 ve öncesi tarayıcılara özel olarak hazırladığımız kodlar artık IE 8.0 içerisinde aynı şekilde çalıştırılmayacak ve bir anda tüm sitelerin görsellikleri bozulacak.

Compatibility View

Internet Explorer 8.0 Beta 2 ile beraber aslında Beta 1'de de "Emulate IE7" düğmesi aracılığı ile ulaştığımız eski tarayıcı motoru hala geliyor. Bunun nedeni eski sitelerin eski tarayıcı motoru ile gösterilmesinin şart olması. Bir anda tüm sitelerin yeni motora uygun şekilde hazırlanması mümkün değil. Beta 2 ile beraber gelen yenilik bu sistemin "Compatibility View" adı altında farklı bir işlevsellik ile karşımıza çıkması. Artık IE8.0 eski sistem için hazırlanmış siteleri algılayıp kullanıcıyı uyarabiliyor ve farklı tarayıcı motorları arasında geçiş tarayıcının kapatılıp tekrar açılmasını gerektirmiyor.

"Compatibility View" düğmesi.
"Compatibility View" düğmesi.

"Compatibility View" düğmesine basarak eski standartlara göre açtığınız bir web sitesiyle ilgili ayarı IE 8 saklayarak bir dahaki sefere aynı siteyi ziyaret ettiğinizde otomatik olarak "Compatibiltiy View" seçeneği aktif hale getiriyor. Şu an için Beta 2 içerisinde internet üzerinden açılan tüm siteler normal modda çalışırken intranet üzerinden açılan tüm siteler ise otomatik olarak "Compatilibity View" modunda açılıyor. Burada önemli olan bir diğer nokta da User Agent bilgisi. Özellikle istatistik sistemleri için ASP.NET tarafından tarayıcının sürüm bilgisinin alındığı durumlarda unutmamak gerek ki IE 8.0 "Compatibility View" içerisindeyse sunucuya User Agent olarak IE 7 bilgisi gönderecektir.

Hangi sitelerin nasıl gösterileceğine ayrıca Tools menüsünden "Compatibility View Settings" kısmından ulaşabilirsiniz. Buradan ister tüm sitelerin IE 7 gibi gösterilmesini veya sadece adresini ilettiğiniz sitelerin IE 7 olarak açılmasını sağlayabilirsiniz.

Hangi sitelerinde "Compatibility View" modunda açılacağını belirleyebiliyorsunuz.
Hangi sitelerinde "Compatibility View" modunda açılacağını belirleyebiliyorsunuz.

Sitemizi nasıl ayarlarız?

Tavsiye edilen tabi ki tüm sitenizi gözden geçirerek IE 8'e uygun şekilde gerekli düzenlemeleri yapmanız. Fakat bu süreçte hızlı bir adaptasyon sağlamak için isterseniz sitenizin IE 8 içerisinde otomatik IE 7 motoru ile, yani "Compatibility View" içerisinde açılmasını da sağlayabilirsiniz. Bunun için iki seçeneğiniz var;

Eğer tüm site bazında bu işlemi yapmak istiyorsanız HTTP Header olarak aşağıdaki kodu kullanabilirsiniz;

X-UA-Compatible: IE=EmulateIE7

Sitenizdeki sadece bir sayfanın bu modda çalıştırılmasını istiyorsanız, bu sefer de Meta Tag'larından faydalanabilirsiniz;

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

IIS 7.0 üzerinde bir site için genel HTTP Header tanımlamak için aşağıdaki kodu Web.Config dosyasına koymanız yeterli olacaktır.

<system.webServer>

    <httpProtocol>

        <customHeaders>

            <add name="X-UA-Compatible" value="IE=EmulateIE7" />

        </customHeaders>

    </httpProtocol>

</system.webServer>

Peki sitenizi ilk başta IE7 moduna göre çalışacak şekilde ayarladınız ve "Compatibility View" içerisinde gösterildi. Tüm istemcilerde artık siteniz bu modda gösterilecek şekilde kaydedildiği için IE8.0 ile ilgili uyumluluk sorunlarınızı halletseniz ve HTTP header bilgisi ile meta tagları kaldırsanız da herkes hala IE 7.0 modunda sitenizi ziyaret etmeye devam edecektir. Bunu aşmanın yolu ise tüm istemcileri IE 8.0 modunda çalışmaya zorlamaktan geçiyor.

X-UA-Compatible: IE=EmulateIE8

Yukarıdaki gördüğünüz şekilde ister HTTP Header ayarlayın ister meta taglar kullanır hiç fark etmez. Artık siteniz kesinlikle IE8.0 modunda gösterilecek ve istemcilerde kullanıcılar isteseler de "Compatibility View" modunu aktif hale getiremeyecekler. Eğer siteniz daha öncesinde istemcide "Compatibility View" ile gösterilecek siteler listesinde yer alıyorduysa IE 8.0 tarafından otomatik olarak o listeden de silinecektir.

Hepinize kolay gelsin.

Tuesday, September 09, 2008 2:00:07 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   IE 8.0  | 
 Wednesday, September 03, 2008

INETA Summer Hit'deki bir diğer seminerim olan IE 8.0 Beta 1 konulu video kaydını da aşağıda sizlerle paylaşıyorum. Bugünlerde epey izleyecek malzeme çıktı sanırım seminerlere gelemeyenler için.

Wednesday, September 03, 2008 3:40:00 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
 Saturday, August 30, 2008

Internet Explorer 8.0 Beta 2 kısa bir süre önce yayınlandı. Bu yazımda "Güvenlik" çerçevesinde IE 8.0 ile beraber gelen değişikliklerden bahsedeceğim. Değineceğim bazı noktalar doğrudan son kullanıcıya ilgilendirirken bazıları ise yazılım geliştiricilere yönelik olacak.

Data Execution Prevention

Kısa adı DEP olan sistemin aslında doğrudan IE ile bir ilişkisi yoktu. Windows XP ve 2003 ile beraber gelen altyapı sistemde belirli bellek alanlarının korunmasını ve bu alanlardan kod çalıştırılmasını engellenebilmesini sağlıyor. Böylece Buffer Overrun saldırılarına ait boşlukların bulunması çok daha zor bir hal alıyor. Tabi "Managed Code" yazarları olarak VB.NET ve C#.NET programcılarına bu yapı yabancı gelecektir. Maalesef şimdilik çok detaylarına girme şansımız yok.

Şu ana kadar bu altyapı Windows'da olmasına karşın maalesef IE 7.0 ile beraber varsayılan ayarlarda açık gelmiyor. Bunun mantıklı bir nedeni var; DEP ile uyumsuz programların bugüne kadar çalışması gerekiyordu, özellikle IE 7.0 için yazılmış çoğu Plug-In maalesef bu durumdaydı. ATL 7.1 ve öncesindeki uygulamaların DEP ile karşı karşıya gelmesi durumunda uygulamanın kendisine izin verilmeyen bir hafıza alanına yazmaya çalışması sonucu doğrudan uygulamanın sonlandırılması söz konusu. Tabi ki var olan Plug-In'leri ve uygulamaları uygun şekillder düzelterek (IMAGE_SCN_MEM_EXECUTE şeklinde işaretlemeler ile) sorunu gidermek mümkün.

Internet Explorer 8.0 tarafında artık DEP Vista SP1 ve Server 2008 içerisinde otomatik olarak açık gelecek. DEP ile beraber bir de Vista'da gelen ASLR (Address Space Layout Randomization)'yi de birleştirdiğimizde ortaya güvenlik anlamında hoş bir manzara çıkıyor. ASLR'nin yaptığı ise sistem her açıldığında Kernel32 gibi belleğe yüklenen sistem öğelerinin her seferinde farklı bellek noktalarına yüklenmesini sağlamak. Böylece kötü niyetli bir kodun saldırma öncesinde doğru hedefi bulması daha zor oluyor.

Vista içerisinde hangi uygulamaların DEP tarafından korunduğunu görmek isterseniz doğrudan "Görev Yöneticisi" / "Task Manager" içerisinde "View / Select Columns" altından "Data Execution Prevention" kolonunu seçerek ilerleyebilirsiniz.

IE 7.0 içerisinde DEP'yi aktif hale getirmek için "Tools / Internet Options / Advanced" sekmesine giderek uygun seçeneği işaretleyebilirsiniz. Unutmayın bunu yapabilmeniz için IE'yi Admin hakları ile açmış olmanız gerekecektir.

Kullanıcıya özel ActiveX

Özellikle Vista ile beraber gelen UAC (User Account Control) sonrasında gelen en büyük şikayetlerden biri ActiveX kontrolleri yüklerken admin haklarının gerekmesiydi. Kişisel olarak kullandığınız bilgisayarınızda bu bir sorun teşkil etmese de şirket içi domainlere kayıtlı ve farklı güvenlik sınırlamalarını olan bilgisayarlarda bu durum sıkıcı sonuçlar doğuruyordu.

Artık her şey değişti, kullanıcıların Admin haklarına sahip olmasalar da kendi kullanıcı hesaplarına özel olarak ActiveX uygulamaları yükleyebilecekler. Eğer söz konusu ActiveX uygulaması zararlı bir kod içeriyorsa bu durumun bilgisayar hiçbir şekilde zarar görmeyecektir. Var olan ActiveX uygulamaları herhangi bir sorun yaşamadan bu sistem ile çalışacak.

Kullanıcıların herhangi bir ActiveX kontrolü ile karşılaştıklarında kontrolü sadece kendileri için veya tüm makine bazında yüklemek isteyip istemediklerini seçebilecekler. Bu seçim şu anki Internet Explorer içerisinde ActiveX kontrolleri için gelen uyarı mekanizmasına dahil edilmiş durumda.

Siteye özel ActiveX

Hazırladığınız ActiveX kontrollerinin sadece belirli bir sitede çalışmasını isteyebilirsiniz. Özellikle yüksek güvenlik amacıyla bankacılık uygulamalarında kullanılan ActiveX kontrolleri buna bir örnek olarak gösterilebilir. Bu kısıtlamanın yapılabilmesi için ActiveX uygulaması geliştirilirken "SiteLock Active Template Library"nin kullanılması gerekiyor. Arka planda çalışan mantık aslında çok basit; Internet Explorer içerisinde çalışabilecek ActiveX kontrollerinin "Safe" şeklinde işaretlenmesi gerekir. Eğer bir ActiveX kontrolü kendi istediği alan adları haricinde çalıştırıldığında kendisini "UnSafe" olarak tanımlarsak IE doğrudan söz konusu ActiveX'i pasif hale getiriyor.

Standart ATL şablonunun yerine oturan SiteLock şablonu IObjectSafety ve IObjectSafetySiteLockImpl üzerinden türüyerek Build esnasından tanımlanan siteler dışında çalışmıyor. SiteLock 1.14 şablonunu aşağıdaki adresten indirebilirsiniz.

http://www.microsoft.com/downloads/details.aspx?FamilyID=43cd7e1e-5719-45c0-88d9-ec9ea7fefbcb&displaylang=en

ActiveX'ler artık birer Add-On
ActiveX'ler artık birer Add-On ve siteye özel yüklenebiliyorlar.

Kullanıcılar ActiveX uygulamalarını IE 8.0 içerisinde birer Add-On olarak görecekleri için istedikleri ayarı "Manage Add-ons" penceresinden yaparak belirli ActiveX'lerin sadece istedikleri sitelerde çalışmasını sağlayabilirler. Bu ayar "Group Policy" üzerinden de artık yapılabiliyor.

 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{ID}\iexplore\AllowedDomains\{Domain}

Yukarıda adres üzerinden Registry içerisinde gerekli ayarlar bulunabilir. {ID} yerine kontrol edilmesi hedeflenen ActiveX kontrolünün Class ID'si, {Domain} yerine de izin verilen domainler atanabilir.

Phishing Koruması

Phishing koruması aslında IE 7.0 ile beraber karşımıza gelmişti. IE 8.0 ile beraber SmartScreen adı altında gelen yeni özellikler gerçekten etkileyici.

Phishing çabaları nafile!
Phishing çabaları nafile!

Yukarıda gördüğünüz adres barındaki adresin bir Phishing çabası olma ihtimali çok yüksek. Böyle bir durumda IE bunun farkına varıp hemen kullanıcıyı uyarabiliyor. Eskiden Phisping analizi internette gezme hızımızı da etkilerken bu sefer o konuda da yeni geliştirmeler yapılmış ve daha hızlı bir inceleme motoruna geçilmiş durumda.

XSS Saldırıları

Son dönemde XSS (Cross Site Scripting) saldırıları belki de en sık karşılaştığımız güvenlik açıklarından. Bu teknik ile rahatlıkla bir web sitesi ile kullanıcısı arasına girerek kullanıcının bastığı tuşlara kadar her tür bilgi alınabiliyor. Bu konuda tam bir koruma sunmanın kullanıcı deneyimini ciddi şekilde kötü durumlara sürükleyeceği için minimal koruma mekanizmaları devreye sokulmuş.

XSS Koruması
XSS Koruması

Yazılım geliştiriciler isterler bu korumaları sunucu tarafından kapatabiliyorlar. Tek yapmaları gereken X-XSS-Protection: 0 şeklinde gerekli HTTP Header bilgisinin sayfalarına eklemek.

Bu noktada özellikle bir uyarıda bulunmak istiyorum. İstemci tarafında bir tarayıcı olarak IE 8.0'ın XSS koruması her çeşit XSS saldırısını korumamakla beraber kesinlikle bir yazılım geliştiricinin bu sisteme "güvenerek" hareket etmesine neden olabilecek bir yapı değildir. Unutmamak gerek ki herkese IE kullanmayabilir.

Cross Domain Request

XDR için bugüne kadar birçok teknik kullanıldı. Bunların içinde belki de en çok tercih edilen harici script'lerin SCRIPT tagları ile dinamik olarak sayfalara JavaScript ile eklenmesi. Normalde bir güvenlik açığını temsil etse de bu teknik bugün Mash-Up dediğimiz uygulamalarının temelini oluşturuyor. Bu tekniği uzun vadede ortadan kaldırmak adına IE 8.0 ile beraber bir XDR nesnesi geliyor.

XDomainRequest objesi klasik XMLRequest ile aynı şekilde çalışırken harici domainlerden veri alınabilmesini sağlıyor. Bunun için sadece uzaktaki hedefin HTTP Header bilgisinde XDomainRequest: 1 yer alması gerekiyor.

HTML Üretiminde Güvenlik

Özellikle AJAX'ın oluşumu ile beraber eldeki veriden istemci tarafında HTML oluşturarak kullanıcıya göstermek performansı arttırmek adına kullanılan tekniklerden biridir. Bu tekniğin tehlikeli tarafı elinize gelen veri eğer harici kaynaklardan geliyorsa aslında bir anlamda sayfaya script de ekleyebileceğiniz durumlarının oluşması.

Artık toStaticHTML adında bir metodumuz var. Böylece elimizdeki herhangi bir metni doğrudan HTML'e çevirirken tüm kontrollerin yapılmasını sağlayabiliyoruz. Eğer kaynak metinde script tagları varsa hepsi güzelce temizlenecektir :)

JSON ve EVAL tehlikesi

JSON verileri uğraşırken EVAL metodunu kullanmamak neredeyse mümkün değil. Hatta JSON'un getirdiği en önemli kolaylıktan faydalanmanın tek yolu EVAL komutunu kullanıyor olmak. Oysa yine verinin harici kaynaklardan geldiğini düşünürsek EVAL komutu sayfada doğrudan metin bazındaki bir kodu çalıştırdığı için çok tehlikeli sonuçlar doğurabilir. Karşı taraftan gelen zarar verici bir kod sitenizde çalışabilir.

Örnek kod:

var Nesne = JSON.parse(XML.responseText);

IE 8.0 ile beraber yeni gelen JSON Parser nesnesini kullanmanız halinde artık güvenli olarak ilerleyebilirsiniz. Söz konusu parser doğrudan metin olarak aldığı kaynağı JavaScript nesneleri olarak geri döndürüyor. Bu özellik ile beraber toStaticHTML  komutunun kullanımı çok daha sağlıklı bir deneyim sağlayacaktır.

MIME TYPE Kararları

MIME Type ayarları normal şartlarda HTTP Header bilgisi içerisinde saklansa da bugüne kadar Internet Explorer kendi kendine kararlar vererek daha kolay bir kullanım sağlamak için MIME Type değişiklikleri yapabiliyordu. Örneğin text/plain olarak ayarlanmış bir dosya içerisinde HTML kodu varsa bu dosya açıldığında IE içerisinde bir HTML sayfa olarak render edilir. Oysa dosya bir text dosyasıdır ve o şekilde gösterilmelidir.

IE 8.0 ile beraber eğer sunucudan authoritative=true HTTP header bilgisini gönderirseniz IE sizin sunucu tarafında düzenlediğiniz MIME Type ayarlarını saygı göstererek herhangi bir değişiklik yapmayacaktır.

O uygulamayı sitemde çalıştırma!

Bir diğer güvenlik açığı da sitelerde tıklanarak istemci tarafına indirilen herhangi bir uygulamanın veya farklı kodun doğrudan sitenin üzerinde çalıştırılabiliyor olmasıydı. Örneğin bir PDF dosyasına tıkladığında dosyayı indirerek doğrudan IE içerisinde açabilirsiniz. Bu işlemi yapabilmeniz için karşınızda uygun seçenekler IE tarafında getirilir.

Eğer kullanıcıya sunulacak dosyayı kesinlikle kullanıcı tarafında diske kaydedilmesini ve doğrudan site üzerinden açılamamasını istiyorsanız X-Download-Options: noopen HTTP Header bilgisini vererek bu işlemin tamamlanmasını sağlayabilirsiniz.

InPrivate

Bir Internet Explorer düşünün ki kapattığınızda her şey eskisi gibi olacak :) Tarayıcı geçmişi, cookie, Temp dosyaları ve geri kalan herşey tarayıcıyı kapattığınızda otomatik olarak yok olsa ne kadar güzel olurdu? Tabi tüm bunları varsayılan ayarlarda olmaması gerekiyor :) Sadece istediğimizde böyle geçici özel bir IE açabilsek?

InPrivate tarayıcı pencereleri kullanıcı tüm bu saydıklarımızı sağlıyor. InPrivate olarak açtığınız bir pencereyi kapattığınızda o pencere ile ilgili her şey yok ediliyor. IE 8.0 içerisinde "Safety / InPrivate Browsing" komutu ile açabileceğiniz InPrivate pencerelerini adres çubuğundaki InPrivate yazısından tanıyabilirsiniz.

InPivate Browsing ile internet kafelerde güvenlik :)
InPrivate Browsing ile internet kafelerde güvenlik :)

InPrivate Blocking

InPrivate Browsing'e ek olarak bir de Blocking mekanizması var. Bu sistemin amacı ise size özel bilgilerin farklı sitelere siz farkında olmadan ulaşmasını engellemek. Örneğin aynı remote script'in eklendiği iki siteyi ark arkaya gezdiğinizde aslında uzaktaki bir script olmasına rağmen söz konusu uzaktaki sunucu sizin ziyaret ettiğiniz bir önceki siteden sonrakine geldiğinizi bilecek ve ona göre işlem yapabilecektir. Oysa siz bu bilgiyi yeni girmiş olduğunuz siteye vermek istemeyebilirsiniz.

Eğer InPrivate Blocking aktif ise tarayıcı her sitede harici olarak yüklenen scriptlerin listesini saklayacak ve durumuna göre bazı scriptleri de-aktif edecektir.

IE 8.0 Beta 2 ile karşılaştığımızda güvenlik taraflı yeniliklerin kendimde önemli olanlarını seçerek sizlerle paylaştım. İleriki yazılarımda daha heyecan verici uygulamalar yapacağız.

Hepinize kolay gelsin.

Saturday, August 30, 2008 10:30:46 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
 Friday, August 29, 2008

Dün Internet Explorer 8.0'ın Beta 2'si duyuruldu. Ben de çok kısa zaman içerisinde bu konuda detaylı yazılar yazacağım. Bu sabah da Swiss Hotel'de Microsoft'un Internet Explorer 8.0 ön lansmanı vardı. Bir gün önce yayınlanan bir ürünü anlatmak için öncesinde sıkı bir çalışma yaptığımızı söylemek gerek :)

Internet Explorer 8.0 Ön Lansmanı
Internet Explorer 8.0 Ön Lansmanı
(Soldan sağa: MSP Murat Duman, Ben ve Nuri Çankaya)

Türkiye'nin önde gelen web sitelerinin teknik ekiplerinin davetli olduğu toplantıda IE 8.0'ın yeniliklerinden bahsettik. Gerçekten çok heyecan verici özellikler geliyor, üstün körü burada bahsetmektense detaylı yazılar yazmak istiyorum o nedenle şimdilik işin teknik kısmını atlayacağım.

Hemen Internet Explorer 8.0 Beta 2'yi indirerek incelemek için aşağıdaki linke tıklayabilirsiniz;

http://www.microsoft.com/windows/internet-explorer/beta/

Friday, August 29, 2008 7:29:31 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   IE 8.0  | 
 Monday, August 25, 2008

INETA Summer Hit etkinliği sonrası verdiğim bir söz vardı :) Tüm konuşmacıların sunumlarını benim blogdan sizlerle paylaşacağımı söylemiştim. O kadar geç kaldım ki sonunda artık "Nerede hocam?" gibi mailler almaya başladım :) Haklısınız. İşte hepsi aşağıda;

Silverlight Sunumu - 26082008_1.pptx (3,79 MB)
TFS Sunumu - 26082008_2.pptx (10,5 MB)
IE 8.0 Sunumu - 26082008_3.pptx (1,53 MB)
LINQ Sunumu - 26082008_4.pptx (660 KB)
Web 3.0 Sunumu - 26082008_5.xps (344 KB)

Monday, August 25, 2008 5:51:30 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   IE 8.0 | LINQ | Silverlight 2.0  | 
 Monday, August 04, 2008

Bugün INETA Summer Hit 2008'in ikinci gününü de mutlu bir şekilde sonlandırdık. Yaz aylarında bir hafta sonu etkinliğinde 350 üstü katılımcıya sahip olmak benim için çok heyecan vericiydi. "Acaba gerçekten gerek var mı? Yoksa ben mi gaza geliyorum?" sorusunu artık kendi kendime sormama gerek kalmayacak sanırım. Tüm konuşmacılarımız adına bizi yalnız bırakmadığınız ve bilgi paylaşımından doğan sevinci yaşamamıza olanak tanıdığınız için çok teşekkür ediyorum.

INETA Summer Hit 2008
INETA Summer Hit 2008

Gelen maillerden cevaplarını beklediğiniz bazı sorular olduğunu bildiğim için birkaç noktaya değinmek istiyorum. Aktivitenin video kayıtlarını, tüm çekilen fotoğrafların tam çözünürlüklü halini, sunumları sizlerle paylaşacağız. Bu gibi içerikler için benim blogu takip etmenizi tavsiye edebilirim. Bahsettiğim içerikleri şu an hazırlıyoruz.

Aktiviteyle ilgili teşekkür etmem gereken bir ordu var; sevgili konuşmacılarımız Ali Rıza Babaoğlan, Ali Servet Eyüpoğlu, Eralp Erat, Kadir Çamoğlu ve Uğur Umutluoğlu'na buradan çok teşekkürler. Organizasyonda benim yardımıma koşan kardeşlerim Murat Duman, Yiğit Kıran, Görkem Güngör ve YTÜ Bilişim Kulübü'nden Oğuz Yılmaz, M. Zeki Ersen'e de ayrı ayrı teşekkürler.

Sunday, August 03, 2008 11:34:18 PM (GTB Standard Time, UTC+02:00)  #    Comments [8]   IE 8.0 | LINQ | Seminer | Silverlight 2.0  | 
 Saturday, March 08, 2008

Internet Explorer için benim tanımım "belki de Microsoft'un en başarısız ürünü" şeklindeydi. IE 7.0 ile bu durum biraz toparlandı ve yolda IE 8.0 var. Özellikle tam CSS 2.1 desteği ve tüm standartlarla uyumlu olacağı iddiası ile IE8.0 gerçekten çok şey vaat ediyor. Bakalım zamanla göreceğiz, şimdiden IE 8.0'ı test etmek isteyenler için aşağıdaki linki paylaşıyorum.

Internet Explorer 8.0 Beta 1

*Dikkat: Beta yazılımlar makinenize zarar verebilirim. Lütfen deneme amaçlı olarak sanal makine kullanınız.

Saturday, March 08, 2008 8:59:26 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.