Blog'un tarzı dışına çıkarak, tesadüfen gördüğüm bir yazıyı paylaşmak istiyorum. 1988'de tanıştığım ve beni "bilgisayar" kavramıyla tanıştıran ve halen fırsat buldukça emülatörleriyle vakit geçirdiğim (orijinalini saklıyorum ancak teşkilatı hazırlamak için vakit bulmak mümkün olmuyor) muhteşem cihaz Commodore 64'ü nasıl küçücük bir PDA boyutuna indirmişler.

Gerçekten okurken ve resimlere bakarken büyük keyif aldım. Umarım siz de aynı keyfi yaşarsınız: Jason Winters' Pico-Projects: The Picodore 64 - a Commodore 64 PDA

Geçtiğimiz günlerde yaptığımız bir proje için basit ama yetenekli bir HTML editor ihtiyacımız oldu. Bundan önce bir çok seçenek denemiş ve değerlendirmiştik. Genellikle basit olanların özellikleri yetersiz, yetenekli olanalrda çok ağır ve hantal çalışmaktaydı. Ancak projenin doğası gereği ihtiyacımız hem implementasyonu hem de kendisi hafif, aynı zamanda da "dosya yükleme" gibi (nispeten) ağır işlemleri yapabilen bir bileşene ihtiyacım oldu.

İnternette yaptığım aramada, NicEdit'in (http://nicedit.com) güzel bir seçenek olduğunu gördüm. Özellikle, jQuery tarzı, sadece ihtiyacınıza göre özelleşebilen, daha küçük boyutlu js dosyaları alabildiğiniz yapısı, hem altyapının gücünün hem de başarılı bir bileşenin habercisiydi.

Gerçekten de bileşeni uyguladığımda, hem hafif hem de başarılı olduğu konusundaki fikrimde yanılmadığım ortaya çıktı. Tek sorun, dosya yükleme konusundaydı. Aslında içindeki dosya yükleme rutininde herhangi bir sorun bulunmuyor. Varsayılan ayarlarla kurulum yaptığınızda, resimleri ImageShack üzerinde host ederek, güzel bir yükleme arabirimiyle işini doğru şekilde yapıyor. Ancak uygulamamın tarzı sebebi, resimlerin ImageShack üzerinde değil, kendi sunucumuzda tutulması gerekiyordu. NicEdit, parametrik olarak yükleme işlemlerini farklı bir adrese yönlendirme opsiyonu sağlıyor. Bunun için de örnek olarak bu özelliği karşılayacak bir sayfa sunulmuş. Ancak örnek sayfa PHP ile kodlanmıştı. Benim tabi ki C# koda ihtiyacım vardı. PHP'den hiç anlamadığım için, kodu okuyarak çözmek yerine, gelen giden istekleri takip edip Firebug yardımıyla çalışma mantığını çözmeye karar verdim. Sonuç olarak NicEdit ile uyumlu çalışan, C# tabanında bir dosya yükleme karşılama sayfası yapmayı başardım.

Doğrusunu söylemek gerekirse bütün özellikleri desteklemedim. Örneğin yükleme yüzdesinin ne kadar olduğunu gösteren özelliği implemente etmedim. Aslında mümkündü ancak ihtiyacım olmadığı için yapmadım. "Dosya yükleniyor" ibaresi benim için yeterliydi. Gönderilen cevaptaki bütün parametreleri de incelemedim. Sadece kendime yarayacak kısımları düzelttim, geri kalanları sabit olarak gönderdim.

Eğer siz de bir ASP.NET projesinde dosya yükleme özelliği ile NicEdit kullanmak istiyorsanız, yaptığım basit geliştirmeyi SVN üzerinden svn checkout http://nicedit-csharp-fileupload.googlecode.com/svn/trunk/ nicedit-csharp-fileupload-read-only komutuyla checkout edebilirsiniz. Web üzerinden de http://code.google.com/p/nicedit-csharp-fileupload adresinden projede gezinebilirsiniz. Yükleme işlemi tek bir aspx dosyasında yapılıyor. General.cs dosyası içerisindekiler ise, yükleme işlemlerinin listesinin tutulduğu bir class. Ayrıca fark edeceğiniz gibi bazı parametreler web.config'den alınıyor. Onları da konfigüre ettiğinizde kullanıma geçmeniz 2-3 dakikanızı alacaktır.

Umarım işinize yarar...

Yeni bir Flash-Javascript uygulaması keşfettim. Downloadify isimli uygulama, bir Flash uygulaması ve bu Flash uygulamasındaki bazı fonksiyonları dışarıdan Javascript üzerinden çağırmanızı sağlayan framework'ten oluşuyor.

Uygulamanın amacı, hiç bir server etkileşimi olmaksızın, client üzerinden javascript+Flash kullanarak kullanıcının makinesine dosya yazdırmak. Kullanıcıya gösterilen bir "Save" kutusunun ardından dosya içerisine istediğinizi yazabiliyorsunuz.

Uygulamanın detayları ve (varsa) kısıtları ile ilgili bir uygulama yapmadım, yapabilirsem tecrübelerimi burada paylaşacağım. Girdiğiniz metni, clientside olarak kullanıcını makinesine yazdıran basit bir uygulamayı http://downloadify.info/downloadify/test.html adresinden deneyebilirsiniz.

Yeni geliştirdiğim bir Windows Service'i kurmak istediğimde, aşağdaki gibi bir hata aldım:

Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053
Copyright (c) Microsoft Corporation. All rights reserved.


Running a transacted installation.

Beginning the Install phase of the installation.
See the contents of the log file for the d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe assembly's progress.
The file is located at d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog.
Installing assembly 'd:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe'.
Affected parameters are:
logtoconsole =
assemblypath = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe
i =
logfile = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog
Installing service xxxxx...
Service xxxxx has been successfully installed.
Creating EventLog source xxxxx in log Application...

An exception occurred during the Install phase.
System.ArgumentException: Source xxxxx already exists on the local computer.

The Rollback phase of the installation is beginning.
See the contents of the log file for the d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe assem
bly's progress.
The file is located at d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog.
Rolling back assembly 'd:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe'.
Affected parameters are:
logtoconsole =
assemblypath = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe
i =
logfile = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog
Restoring event log to previous state for source xxxxx.
Service xxxxx is being removed from the system...
Service xxxxx was successfully removed from the system.

The Rollback phase completed successfully.

The transacted install has completed.
The installation failed, and the rollback has been performed.
Installation complete!


Burada önemli olan kısım (hatayı içeren) şu:
An exception occurred during the Install phase.
System.ArgumentException: Source xxxxx already exists on the local computer.


Bu hata sonrasında servis kurulumu rollback oluyor ve işlem başarısızlıkla sonlanıyor.

Anlayabildiğim kadarıyla problem şundan kaynaklanıyor: Yazdığım servis kendi adıyla bir event log tipi yaratıyordu. Servis adı da aynıydı. Kurulum sırasında otomatik olarak bu isimle bir event log tipi yaratılmak isteniyor, ancak önceden olduğu için hata alıyor.

Çözüm olarak şunu yapmak gerekiyor. Regedit aracılığı ile aşağıdaki konumda, servisinizin adı ile yaratılmış kayıtları silmeniz gerekli.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\#servisadı#
\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\#servisadı#

#servisadı# olarak gösterilen kısımlar yerine servisinizin adı gelecek şekilde silme işlemini yapın ve tekrar kurulum yapın, sorunun çözüldüğünü göreceksiniz.

Bu arada bu işlem sonrasında yazılımınızın çalışmasında bir sorun olmaması için sizin de aynı hataya düşmemeniz gerekli. Yani varsa event log tipini eklememeniz gerekli. C# için basit bir örnek şöyle olabilir bu kontrol için:
if (!EventLog.SourceExists(sSource))
EventLog.CreateEventSource(sSource, sLog);


Eğer bu kontrolünüz varsa, yukarıda registryden silme işlemi yapsanız bile yazılımınız sorunsuz çalışacaktır...

This post is also available in English

Bir süredir evde kullanmaya başladığım Windows 7'den oldukça memnun sayılırım. Hatta kısa sürede özellikle performansından dolayı fanatiği oldum diyebilirim.

Diyebilirdim yada. Bugün IIS üzerinde bir websitesini çalıştırmak tam 1 saat 40 dakikamı alana kadar.

Acısız olmasını beklemiyordum ama bu kadar kanlı olmasını da beklemiyordum açıkçası. Her zaman yaptığımız gibi sitemi oluşturdum, hemen görmek istedim boş sayfayı. IIS'i açtığımda IIS 7.5'un jelibon-bonbon yüzünü görünce işlerin iyi gitmeyeceği içime doğmuştu zaten. Neyse, websitesi tanımlamasını yaptım. Tarayıcıya yöneldim ve ilk hata:

HATA 1: HTTP Error 500.19 / Error Code: 0x80070005 / Config Error: Cannot read configuration file due to insufficient permissions

Araştırma süreci başladı tabi ki. Sorunun yetki hatası olduğu belliydi. Web projesinin dizinine IIS_IUSRS kullanıcısına yetki verdim. Tarayıcıda sayfayı refresh ettim ve ikinci hata:


HATA 2: HTTP Error 500.19 / Error Code: 0x80070021 / Config Error: This configuration section cannot be used at this path. This happens when the section is locked at parent level....

En fazla bilgi öğreten hata bu oldu. Her ne kadar öğrendiklerim hata ile ilgili olmasa da... Araştırmalar sonucunda kolay bir çözümü olduğunu öğrendim.
%windir%\system32\inetsrv\config\applicationhost.config konumundaki dosyayı açıp, içerisindeki

<section name="handlers" overrideModeDefault="Deny" />
<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
satırlarındaki "Deny" ibarelerini "Allow" yapmak. Bu sayede bu section'ların web.config üzerinden override edilmesine izin vermek.
İşlem kolay, kolay olmasına da dosyayı bulabilirsen... Hemen Total Commander'ıma geçtim, dizine gittim, o da ne, dizin boş? Ara tara boş. Hemen cmd'ye geçtim. Dizine gittim yok da yok.
En sonunda bir forumda "SYSWOW32 Redirection" denen bir zımbırtıyı öğrendim. 64Bit işletim sistemlerinde, sistem dizini iki adet. Bir System32 bir de SysWOW64. Ancak bütün yazılımlar sistem dizinine aynı şekilde erişmek isteyeceği için, Microsoft, 32 Bit'lik yazılımlar sistem dizinlerine erişirken "SYSWOW32 Redirection" ile onları 32Bit dizinine atıyor. Yani dizine gözatmak için kullandığınız yazılım (bende Total Commander ve cmd) 32 bit ise, dizinde hiçbirşey olmuyor, çünkü o dizin o dizin olmuyor.
Bunu da öğrendikten sonra 64Bit'lik Notepad ile tam dosya adresi vererek dosyayı açmaya muktedir oldum ve değişiklikleri yaptım. Tarayıcıya döndüm, refresh veee buyrun 3. hata:


HATA 3: HTTP Error 401.3 / Error Code: 0x80070005 / Unauthorized

Uzun araştırmalardan sonra, sorunun IIS7.5 üzerindeki site yetkilendirmesindeki bir sorun olduğunu tespit edebildim. Düzeltmek için şu adımları izlemek gerekiyor:
1. IIS7.5'a girilir,
2. "Sites" dalı genişletilir, sorunlu web sitesinin adına tıklanır.
3. Sağ taraftan "Authentication"a çift tıklanır.
4. "Anonymous Authentication" öğesine sağ tıklanır "Edit..." denir.
5. "Application Pool Identity" seçenği işaretlenir
6. Kaydedilir.
Adımları tamamladım, büyük bir hevesle "bu sefer tamam" diyerek tarayıcıya döndüm F5 veeee 4.hata:


HATA 4: HTTP Error 404.3 / Error Code: 0x80070032 / Not Found

Hata mesajından ASP.NET handler'ının çalışmadığını düşündüm ama, jelibon-bonbon IIS7.5'da nasıl bulasın da düzeltesin handlerları. Bu sefer onu aramaya başladım. Handlerların yerini tespit ettim ama ASP.NET handler'larının yerinde yeller esiyordu. Meğerse Windows 7, Framework kurulsa dahi, ayrı ASP.NET bileşenlerini aktive etmeyi gerektiriyor. Bunun için denetim masasından "Programs and Features" altından "Turn Windows Features on or off" diyoruz ve çıkan ağaçta şu dala kadar gidiyoruz: "Internet Information Services/World Wide Web Services/Application Development Features". Buradaki öğelerden, "CGI" hariç diğerlerini işaretliyoruz.

Bu işelmi de tamamladım tarayıcıda refresh, yine bir hata. Ama bu sefer ne güzel ki artık sarı ASP.NET hata sayfası görebilmeye başlamıştım. Anlamsız bir hataydı ama bir compile edeyim projeyi tekrar dedim. Netekim düzeldi ve boş, düz beyaz Default.aspx sayfamı görmeyi başardım...

Yukarıda anlattığım sorunlar, orası burası kurcalanmış yada uzun süredir kullanılarak sorunlara yol açılmış bir Windows kurulumnda değil, 3-4 gün önce yeni işletim sistemi ve 1 gün önce de yeni Visual Studio 2008 kurulumu ile tam manasıyla bir out-of-the-box sistem üzerinde meydana geldi.

Umarım bu sorunları yaşayan birilerin biraz faydam dokunur...

W3C, bugün (09.12.2009) bir taslak yayınlayarak yeni önerisini sundu. Bu çalışma, javascript yardımıyla kameradan anlık görüntü, mikrofondan ise ses alabilmeyi sağlayacak bir API için yazılan ilk draft.

Çalışma oldukça enteresan ve enteresan olduğu kadar bütün web geliştiricileri heyecanlandıracak türden. Özellikle sosyal ağ platformu çılgınlığının sürdüğü ve şekil değiştirerek sürmeye devam edeceği bu dönemde, böyle bir özellik gerçekten çok farklı hizmetlerin sunulmasında kullanılabilir.

Elbette ki bu tip uygulamalar Flash ile yapılmakta ve yapılacak da. Mesela gerçekten güzel bir (yerli) uygulama olan, üyelik kartınız için gereken fotoğrafı anında çekip kartta size gösteren Müzekart uygulaması gibi. Ancak bu tip işlemlerin, javascript ile çok farklı alanlara ve geliştirici kitlesine yayılacağı da kesin.

Taslağı kabaca incelediğimde, kameradan bir görüntü yakalamak için ihtiyaç duyulacak kod aşağı yukarı şu kadar:

// Create a container div element and append it to the document body.
var container = document.createElement("div");
document.body.appendChild(container);

// The browser viewport width in pixels.
var screenWidth = window.innerWidth;

function successCallback(data) {
for (var i in data) {
var img = document.createElement("img");
img.src = data[i].uri;
// If the image width exceeds that of the browser viewport, the image
// is scaled to fit the screen keeping the aspect ratio intact.
if (data[i].format.width> screenWidth) {
img.style.width = screenWidth + "px";
img.style.height = (data[i].format.height/data[i].format.width)*screenWidth + "px";
}
container.appendChild(img);
}
}

function errorCallback(err) {
alert(err.message + " (" + err.code + ")");
}

// Launch the device camera application and invoke the callback once
// the user exits the camera application.
transactionId = navigator.device.captureImage(successCallback, 1, errorCallback);

Gerçekten ilgi çekici değil mi?

Son olarak tabi ki W3C Taslağına ulaşmak için: http://dev.w3.org/2009/dap/camera

Bugün genellikle pek yazmadığım türden bir habere yer vereceğim. 3M'in servisleri arasına kattığı VAS (Visual Attention Service), bir resimde, dikkat çeken alanların neler olduğunu yazılımsal olarak tespit edebiliyor.


Özellikle ürün ve ambalaj tasarımı yapanlar için gerçekten işleri ciddi oranda kolaylaştıracak (ve büyük ihtimalle ucuzlaştıracak) bir yöntem. Sistem henüz beta üyelik kabul ediyor, ücretlendirmesi belli değil. Hazırladığınız bir ürün görselinin, kullanıcılar tarafından nasıl algılandığını anketlerle tespit etmek pahalı olacağı gibi objektif sonuçlar elde etmek de çok mümkün olmayacaktır. VAS'ın kullandığı bilimsel teknikler, kişilerin istemli veya istemsiz olarak dikkatini çeken bölgeleri algılayabiliyor. VAS ile ilgili genel bilgiyi: http://www.3m.com/VAS adresinden alabilirsiniz. Beta üyelik için de https://vas.3m.com/Account/Register adresini kullanabilirsiniz.

3M'in kendi sitesindeki tanıtım ve teknoloji anlatım yazısına (güzel görseller kullanılmış) buradan ulaşabilirsiniz.

Gelelim denemelere. Bir deneme hesabı oluşturup bir kaç deneme yaptım. Öncelikle ortağımın somon füme firması Delicco'nun bir ürün ambalajını test ettim.

Yüklediğim görsel:

Dikkat çeken bölgeler (sıcaklık analizi):

Odak noktaları:

Her ne kadar tasarım uzmanı olmasam da sonuçların pek iç açıcı olmadığını düşünüyorum. Sıcaklık analizi, tasarımdaki kuşakların daha fazla dikkat topladığını ve logo/ürün gibi ana noktaları dikkatten kaçırdığını gösteriyor.
Odak noktası analizi ise biraz daha iyi, en azından logoya yakın bir bölge tek odak noktası ambalajda...

Daha sonra daha bildik tasarımlarla bir deneme yapmayı düşündüm ve Coca-Cola'nın bir tasarımını denedim. Gerçekten tasarımın ne kadar önemli olduğunu fark edip, aşağıdaki detaylarla şaşıracaksınız :)

Yüklediğim görsel:

Dikkat çeken bölgeler (sıcaklık analizi):

Odak noktaları:

Sıcaklık analizinin tamamen logo üzerine yayıldığını görebiliyoruz. Odak noktlar da tamamen logo üzerine yayılmış ve neredeyse logonun tamamını kaplamış durumda. Delicco tasarımında olduğu gibi burada da dikkat çeker gibi görünen kuşaklar olmasına rağmen kişinin dikkatini cezbetmediğini açıkça görebiliyoruz. Ve bence bu Coca-Cola tasarımının başarısının sırrı, sıcaklık dağılımda da belli olan ve odak analizinde de 4 numaralı odağa sahip olan bardağın üstünden görünen buz. Herhalde Coca-Cola'nın vurgulamak isteyebileceği en önemli unsurlardan biri bu görselde ve bunu başarmışlar. Tasarımda sadece Coca-Cola Classic yazıları ve buz ilgi ve odak noktası.

3M ürününün bilimsel tabana dayandığını belirtiyor ve bu konuda iddialı. Her ne kadar ürün henüz beta sürecinde olsa da bana gerçekten başarılı geldi. Ücretlendirmesine bağlı olarak ürünlerini ve paketlerini konumlandırmayı deneyen firmalar için çok başarılı bir çözüm olabileceği kanısındayım...

SQLServerCentral'da, SQL Server Analysis Services üzerindeki karar ağacı motoru ile ilgili çok güzel ve adım adım bir makale yayınlandı. Konuya hakim olmayanların rahatlıkla takip edip bilgi edinebilecekleri bir başucu kılavuzu olmuş.


Tesadüfen bulduğum RegExr, online ve real time olarak verdiğiniz metin üzerinde girdiğiniz Regular Expression tümcesini deneyip sonuçları gösterebiliyor. Gerçekten kullanımı çok pratik bir uygulama olmuş.


Ancak farklı platformlarda farklı davranışlar gösteren Regular Expression tümceleri açısından nasıl bir davranış sergileyeceğini deneme fırsatım olmadı. Flash tabanlı olduğu için Flash içerisindeki moturu kullanıyor. Zaten Regular Expression tümcenizi girdikten sonra, yaptığınız girişin üzerinde fareniz ile gezindiğinizde, Flash tabanlı çıkması olası sorunlarla da ilgili bilgilendiriliyorsunuz.

Denemeye değer, ama yine de saç baş yolmadan önce farklı motorlarda da denemek lazım tümceleri...

Daha önce bir çok sistem için sanal POS entegrasyonu yapmıştım. Uygulamaları yaptığım ve jenerik kütüphanelerimi yazdığım dönemlerde "3D Güvenlik" uygulaması yoktu. Daha sonra entegre ettiğim bütün sistemler de POS başvurularını önceden yaptıkları için 3D çözümleri kullanmasına gerek yoktu ve kütüphanelerim çalışmıştı.

Ancak yakın zamanda yaptığım bir geliştirme yeni başvuru olduğu için 3D Güvenlik uygulamalarının kullanılmasını gerektirdi. Bu yüzden bu konuyla ilgili araştırma yapmak ve kod yazmak zorunda kaldım. İnternet üzerinde çok doyurucu kaynaklar bulamadım. Bankalardan alınan dokümantasyonlar da maalesef çok yeterli değildi. Bu yüzden bir çok noktayı deneme-yanılma ile keşfetmek zorunda kaldım.

Çalışmalarımın ardından, toparladığım bilgileri birarada düzenleyip 20 yansılık bir sunu çıkardım. Aşağıda SlideShare üzerinde paylaştığım sunuyu bulabilirsiniz.

Umarım birilerinin işine yarar ve en azından mantıkları kavramasına yardımcı olur...



Henüz 4. beta sürümü yayınlanmış olan Firefox 3.6 da gördüğüm ve bence biraz daha geliştirmeyle bir CSS standardı haline gelebilecek bir style var.

pointer-events:none;
Bu style none ve auto olmak üzere iki değer alabiliyor. Yaradığı işi de şu şekilde açıklayayım. Üstüste binen nesnelerde (örneğin iki div), mouse event'leri, biliyorsunuz üstteki nesnede yakalanır, alttaki nesneye geçmez. Bu sebepten dolayı, aşağıdaki nesnede a gibi, input gibi nesneler mevcutsa, kullanıcının bunlarla mouse aracılığı ile etkileşime girmesi mümkün değildir. Firefox 3.6 bu gibi durumlarda, üstteki elemana pointer-events:none style'ı verilerek sorunun çözülmesini sağlıyor. Bu özelliğe sahip nesne mouse işlemlerini yakalamıyor, alttaki elemana geçiriyor. Bu sayede alt nesnede bulunan nesneler çalışıyor, bu nesne ile etkileşime girilebiliyor.

Bazı noktalarda gerçekten hayat kurtarıcı olabilecek bu özelliğin kısa sürede CSS standardı olmasını diliyorum. Canlı bir örneği görebilmek için en az bir Firefox 3.6b4'e ihtiyacınız olacak. Henüz resmi olarak yayınlanmadığı için bu sürümü http://www.mozilla.com/en-US/firefox/all-beta.html adresinden indirip kurmanız gerekmekte. 3.5.5 sürümü ile yanyana çalışabiliyor sürüm.
Kurulumunuzu tamamladıktan sonra http://demos.hacks.mozilla.org/openweb/pointer-events adresini ziyaret ederek canlı bir uygulama görebilirsiniz. Üstünde gradient bir dolgu efekti olan div, a nesnelerinin dizili olduğu başka bir div'in üzerine getirilmiş. Burada gradient efektinin olduğu sağ bölgedeki linklere erişmek mümkün olmuyor, çünkü mouse event'ları üstteki gradient div'i tarafından yakalanıyor. Ancak hemen alttaki işaret kutusunu seçtiğinizde artık bu linklere de erişilebilmeye başlıyor.

Gerçekten web programcılarının ve tasarımcılarının hayatını kurtarabilecek bir özellik. Umarım kısa sürede Trident ve Webkit engine'lerine de girer ve biz de gönül rahatlığı ile kullanmaya başlayabiliriz...

*** Ekleme: 02.12.2009 17:51 ***
Bu sayfayı Google Chrome, Safari, Opera ve IE üzerinde de denedim. Chrome ve Safari'de de özelliğin çalıştığını gördüm (we love webkit). Opera üzerine gelen div'i yorumlayamadığı için deneme şansım olmadı. Linkler hep çalışıyordu. IE ise sayfayı açamadı bile :) Yorum sizin...

LABjs isimli bir proje (http://labjs.com), web sayfalarına dışarıdan yüklediğimiz (js gibi) dış kaynakların yüklenmesini optimize etmeye yönelmiş bir Javascript kaynağı. Dış kaynakların aynı anda (veya sizin belirteceğiniz bir sıralama ile) yüklenmeye başlamasını sağlayabiliyorsunuz.

Bu tip bir iyileştirmenin Firefox 3.5 ile geldiğini biliyoruz. Kısmen (tarayıcının tanımlayabildiği) ilişkisi bulunmayan kaynaklar aynı anda yüklenmeye başlanarak önemli bir kaynak artışı sağlamışlardı.

Firefox 3.0'da bazı kaynakların yüklenmesi aşağıdaki şekildeyken (16.84 saniye):



Firefox 3.5'te kaynakların yüklenmesi bir miktar hızlanmıştı (10.69 saniye):



Ancak görebildiğiniz gibi hala bazı kaynaklar paralel yüklemeye maruz kalmıyorlar. Bunun sebebi yukarıda bahsetmeye çalıştığım tarayıcının kararverdiği öngereklilik koşulları.

Bu örnekte de LABjs tarafından önceliğe konulmuş dış kaynakların yüklenmesini görebilirsiniz (6.24 saniye):



Görüldüğü gibi LABjs önemli bir performans artışı daha sağlamış oluyor. Konuyla ilgili detaylı bir incelemeyi (resimleri da aldığım kaynak olan) http://blog.getify.com/2009/11/labjs-new-hotness-for-script-loading adresinden okuyabilirsiniz.

Ancak tavsiye, yukarıda belirttiğim sitede yazan uyarılara gözatmadan sistemlerinize entegre etmeyin. Bu uyarıları "Are there any negative side effects?" başlığı altında görebilirsiniz.

Kendim yaptığım testleri derli toplu hale getirebilirsem burada yayınlayacağım...

Copyright Ali INAL ©2009 - Creative Commons Licence
preload preload preload

Taşındık!


Ali's Surprisingly Web blog'u, artık yeni, güçlü ve daha esnek altyapısıyla yeni adresinden yayın yapıyor. Yeni adresimiz: http://surprisingly.web.tr. Bu eski blog sayfalarındaki bütün içerik, yeni blog altyapısına da taşındı. Arzu ederseniz sizi yeni blog'umda ağırlamak isterim.
Yeni blog'a gitmek istiyorum Bu sayfayı okumak istiyorum

We've Moved!


Ali's Surprisingly Web Blog is now serving from a new, stronger and flexible system with a brand new address. Our new address: http://surprisingly.web.tr. Also we've migrated all old content from this blog to our new blog. If you wish, I want to welcome yo to my new blog.
I want to visit new blog I want to stay and read this page