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

Bir önceki gönderimde (Zen Coding) bahsettiğim Zen Coding ile ilgili yeni bir kaynak buldum. Bu kod için Visual Studio Add-in'i geliştirmeye başlayacağımı söylemiştim. Konu ile ilgilenip, Python kodlarını .NET ortamında compile etmeyi denemeye başladım. Tam IronPython ve IronPyhton Studio ile içli dışlı olmuşken ve bir noktaya gelmişken, Amerika'nın daha önce keşfedildiğini fark ettim...

Einar Regilsson'un Blog'unda, konu ile ilgili bir çalışma yaptığını gördüm. Blog yazısını buradan okuyabilirsiniz. Yazının sonlarına doğru "an installer" linki ile setup dosyasına, "the source" linki ile de kaynak kodlarına erişebilirsiniz. Emeğe saygı olarak hotlink yapmıyorum. Aslında mantık konusunda doğru yolda ilerlediğimi kaynak kodlara baktığımda görmüş oldum. Regilsson da IronPython modülünü kullanarak çalışma yapmıştı. Tek farkı kodu olduğu gibi Python kaynağında bırakıp, on-the-fly compile işlemini IronPython ile yapmış.

Add-in'i çektim, denedim. Hem Visual Studio 2005 hem de 2008'de sorunsuz olarak çalıştı. Kurulumdan sonra Visual Studio'nuz içerisinden bir kısayol ataması yapmanız gerekiyor sadece. Kısaca adımlar şöyle;

  1. Visual Studio kapalı iken Add-in kurulumunu tamamlayın.
  2. Visual Studio'yu açın, "Tools" menüsünden "Add-in Manager..." seçeneğini seçin.
  3. Listede "ZenCoding" karşısındaki iki işaret kutusunu da seçip onaylayın.
  4. "Tools" menüsünden "Options..." seçeneğini seçin.
  5. "Environment" dalından "Keyboard" yaprağını seçin.
  6. Komut listesinden "ZenCoding.VisualStudio.ZenCodingAddIn.Expand" seçeneğini seçin.
  7. "Use new shortcut in" kutusundan "HTML Editor Source View" seçeneğini seçin (eğer ZenCoding özelliklerinin code-behind dosyaları, resource dosyaları gibi diğer bütün yerlerde aktif olmasını istiyorsanız seçimi "Global" olarak bırakabilirsiniz).
  8. "Press shortcut keys" kutusunda istediğiniz kısayolu tuşlayın (ben CTRL+E kullanmayı tercih ettim).
  9. Kutuyu onaylayarak çıkın.
Evet böylelikle ZenCoding add-in'i kullanıma hazır hale gelmiş oluyor. Hemen bir aspx dosyası açıp denemeye başlayabilirsiniz.

table#tblMain.tblClass>th.tblHeaderClass+tr#trSub_$.tblRowClass*5>td#tdSub_$.tblCellClass*3

Yazıp CTRL+E yaptığınızda şu çıktıyı görmek korkunç güzel birşey :)

<table id="tblMain" class="tblClass">
<th class="tblHeaderClass"></th>
<tr id="trSub_1" class="tblRowClass">
<td id="tdSub_1" class="tblCellClass"></td>
<td id="tdSub_2" class="tblCellClass"></td>
<td id="tdSub_3" class="tblCellClass"></td>
</tr>
<tr id="trSub_2" class="tblRowClass">
<td id="tdSub_1" class="tblCellClass"></td>
<td id="tdSub_2" class="tblCellClass"></td>
<td id="tdSub_3" class="tblCellClass"></td>
</tr>
<tr id="trSub_3" class="tblRowClass">
<td id="tdSub_1" class="tblCellClass"></td>
<td id="tdSub_2" class="tblCellClass"></td>
<td id="tdSub_3" class="tblCellClass"></td>
</tr>
<tr id="trSub_4" class="tblRowClass">
<td id="tdSub_1" class="tblCellClass"></td>
<td id="tdSub_2" class="tblCellClass"></td>
<td id="tdSub_3" class="tblCellClass"></td>
</tr>
<tr id="trSub_5" class="tblRowClass">
<td id="tdSub_1" class="tblCellClass"></td>
<td id="tdSub_2" class="tblCellClass"></td>
<td id="tdSub_3" class="tblCellClass"></td>
</tr>
</table>

Bir süre sonra kısa bir video hazırlayıp yazıyı editlemeyi düşünüyorum. Vakit bulabilirsem tabi...

-- Ekleme 25.11.2009 18:25
Bahsettiğim videoyu hazırladım ve yükledim. Hem kurulum sonrası ilk ayarların yapılışını hem de bir örnek uygulamayı gösterdim. Umarım işinize yarar, iyi seyirler: http://screencast.com/t/ODkxOTY1MjQt

Bir çok yaygın Javascript framework'ünün üzerine oturduğu temel hep aynı; CSS seçimi. CSS seçimi ile ne kastediyoruz, bir veya daha fazla nesneyi, CSS için kullandığımız tanımlama sentaksları ile yakalamak. Daha sonrasında da bunu manipüle etmek.

Örneğin;
<div class="test">
<span id="spn1">
<span id="spn2">
<span id="spn3">
</div>
Bu kodda bütün spn1, spn2, spn3'leri yakalayıp içine test yazdırmak jQuery ile tek satır bir koddur:
$('div.test span').html('test');
Prototype, Mootools, Midori... diğer bütün frameworkler de aynı veya benzer söz dizimleri ile bu işlemi gerçekleştirebilirler (yeri gelmişken Türk bir yazılımcı Aycan Gülez'in -http://twitter.com/aycangulez- elinden çıkan Midori'ye tekrar saygı/tebrik).

Yazının konusuna yaklaşırsak, CSS seçicileri mantığını tam tersten değerlendiren bir proje ile karşılaştım. Zen Coding, bir çok farklı editör desteği ile (maalesef Visual Studio yok) verilen CSS seçicisini genişleterek HTML'ini sunuyor. Aslında uygulama metin bazlı bir girdi alıp, metin bazlı bir çıktı veren bir uygulama. Visual Studio add-in'i yazma planlarım var :)

Ne anlatmak istediğimi örneklerle görmek için video'ya bir gözatın:


Kendi sitesindeki bir online editor ile denemek için de http://zen-coding.ru/demo adresini ziyaret edebilirsiniz.

İlgi çekici bir proje. Dediğim gibi Visual Studio add-in yapma planlarım var. Eğer tamamlarsam bu blog aracılığı ile sizinle paylaşıyor olacağım...

Bir ASP.NET projemizde, CheckBoxList içerisindeki her bir işaret kutusunun açıklamasının mouse işaret kutusu üzerine geldiğinde tooltip olarak çıkması yönünde bir ihtiyaç başgösterdi. Teknik olarak CheckBoxList içerisindeki her bir kayda ayrı ayrı standart tooltip vermek mümkün değil.

Aklımıza gelen ve sırayla uyguladığımız üç çözüm seçeneği şunlar oldu:
  1. CheckBoxList kullanımından vazgeçip, alanı repeater'a çevirmek istediğimiz gibi özgür olmak.
  2. Bir javascript array içerisinde ilgili açıklamaları ve ID'leri tutup, sayfa yüklendiğinde prototype.js ile (projede prototype kullanılıyor) bunları tooltip'e çevirmek.
  3. Soruna bir CSS yaklaşımı ile çözüm aramak.
İlk seçeneği, projenin bulunduğu durum, bu checklist'in sayfada ve codebehind'da kullanım durumu vs. göz önünde bulunarak ilk etapta eledik. Ardından ikinci çözüm için çalışmaya başladık ve bu çözümü gerçekleştirdik. Ancak sayfada bu işlemin uygulanacağı çok fazla sayıda checkbox olduğu için (yaklaşık 1000 adet) çözüm istediğimiz performansı sağlamadı. Sayfanın açılışı, JS çalışmasından dolayı 10 saniye kadar yavaşladı.

İki başarısız girişimden sonra CSS seçeneğini değerlendirmeye başladık. Asıl yazı amacıma yavaş yavaş yaklaşıyoruz. Burada isteğimizi gerçekleştirmek için 3-5 satırlık bir CSS yeterli oldu. Sonuçta elde ettiğimiz çıktı, CheckBoxList kullanılan her yerde kullanılabilecek bir çözüm oldu. Tek ön koşul var: CheckBoxList'teki her bir nesnenin açıklamasının normalde görüntülenmiyor olması. Örnek olarak şu görüntüye bakabilirsiniz:



Eğer checkboxların açıklamaları buradaki gibi görünmüyorsa, bunları tooltip olarak değerlendirebiliriz. Checkboxlist'i normal şekilde bind ediyoruz. Bu durumda görüntü şu şekilde oluyor:


İlk önce checkboxlist'imize bir class atıyoruz (.NET tarafından CssClass). Örneğin bu class chkOptionHover olsun. Şu şekilde bir style ekliyoruz:
table.chkOptionHover td label
{
display:none;
}
Bu sayede checkboxlistteki her bir checkbox'a ait açıklamalar görünmez hale geliyor. Bir önceki style'da belirttiğimiz td'nin hover'ına bir class daha vererek üzerine geldiğimizde açıklamaların görünmesini sağlıyoruz.
table.chkOptionHover td:hover label
{
position:absolute;
display:block;
}
Belirttiğim style eklendikten sonra mouse over efekti şu duruma geliyor:



Her ne kadar görsel olarak kullanılabilir olmasa da isteğimiz aslında teknik olarak gerçekleşmiş durumda. Bir kaç küçük CSS dokunuşu ile label'larımızı gerçek birer tooltip'e döndürüyoruz. Bunun için sadece :hover class'ına bazı eklemeler yapıyoruz. Tabi ki istediğiniz şekilde görsel oluşturabilirsiniz. Bu benim tercihim:
table.chkOptionHover td:hover label
{
font-size:10pt;
font-weight:bold;
padding:5px;
position:absolute;
background-color:yellow;
-moz-border-radius:3px;
-webkit-border-radius:3px;
display:block;
}
Yukarıdaki uygulamalardan sonra artık tooltip'imiz oturmuş duruma geliyor ve aşağıdaki gibi bir görüntü oluşuyor:



Gerçek bir tooltip'e benziyor değil mi? Uygularken Checklist'e class verip yukarıdaki satırları eklemek dışında da bir geliştirme gerektirmiyor. Ön koşulların sağlandığı durumlarda oldukça uygulanabilir bir çözüm olduğunu düşünüyorum. Ayrıca IE, Firefox ve Chrome (webkit) uyumlu olarak çalışıyor. Tarayıcıdan tarayıcıya tooltiplerin konumları değişebiliyor, ancak hepsi kabul edilebilir sınırlar içerisinde kalıyor. Arzuya göre genişlik de belirterek daha tooltip-benzer bir görüntü de elde edilebilir. Ötesi CSS yeteneklerinize kalmış...

Umarım sizin de işinize yarar...

Tebdil-i Mekanda ferahlık varmış. Blog'uma yeni tasarım giydirdim. Diğer tasarım da iyiydi hoştu ama yazı alanı çok dardı...


Aslında kendime blog giydirme işi çıkarmadan önceki amacım bir-iki yazı yazmaktı ama artık erteledik göründüğü kadarıyla onları...

Bir müşterimiz için geliştirdiğimiz intranet sistemine entegre ettiğimiz ClickOnce uygulaması ile ilgili enteresan bir problem yaşadık geçtiğimiz hafta. Uygulama, müşteride 5 bilgisayarda kullanılacaktı. Bunlardan 3 tanesinde sorunsuz çalışan uygulama, 2 makinede aynı hata ile çalışmayı reddediyordu. Daha kurulum esnasında hiç bir kontrol yapmadan ADODB 7.0.3300.0 sürümünün kurulu olması gerektiği uyarısı ile hata alıyorduk. Haliyle MDAC güncellemesi yapıldı. Ancak hiç bir şey değişmedi. Uygulamadan bütün data ile ilgili dependencyler bile kaldırıldı, yine hata almaya devam ettik. İşin ilginci yazılım Framework 2.0 ile yapılmışken bahsi geçen sürüm 1.1 sürümüydü.

Daha sonra incelemem sırasında, adodb ile ilgili bir dizini "Program Files" altında "Primary Interop Assembly" dizininde gördüm. Bunun üzerine Google'da hayat kurtaran aramayı yapmayı akıl ettim: "adodb pia". Bu aramayı yaptıktan sonra çıkan sonuçların büyük bir kısmında "Office 2003 PIA"lardan bahsediyordu. Office 2003 PIA'nın içeriğine baktığımda bulunan sürümün aranan sürüm olduğunu gördüm. Hızla Office 2003 PIA'ları download edip kurdum veeee sorun çözüldü.

Her ne kadar çok anlamsız bir ilişki gibi görünse de böyle bir ilişki var. Bu yazıyı başka bir yerde okusam, kesin birşeylerin yanlış ifade edildiğini düşünürdüm ama birebir böyle.

Enteresan...

Çok katılmayı istediğim, ama bunun bir hayal olduğunu bildiğim Berlin Javascript konferansı tamamlandı (http://jsconf.eu). Katılımcılar arasında kimler yoktu ki? John Resig (jQuery), Thomas Fuchs (script.aculo.us), Dion Almaer (Ajaxian), Steve Souders (Velocity), Jörn Zaefferer (jQuery UI)...

Gidemedik, ama sağolsunlar Blip üzerinden sunumların bir kısmını paylaşmışlar. Videoları aşağıda bulabilirsiniz...

İç geçirerek inşallah seneye diyoruz artık. Napalım...






Dostum Ümit Öncel'in bir yazısından öğrendiğim Lose/Lose süper bir oyun. Detayları okumadan oynamayın lütfen :) İlk önce Visual Studio dosyalarından silmeye başlıyorsa hemen oynamaya başlamayı planlıyorum...
http://www.tekno-cafe.com/index.php/oyun/dunyanin-en-tehlikeli-bilgisayar-oyunu

Bir oyun örneği ve 5000'e yaklaşan puanlar olan highscore listesini (manyaklar listesi de diyebiliriz) görmek için ise http://www.stfj.net/art/2009/loselose

Script.aculo.us'un mimari Thomas Fuchs'un yeni marifeti Scripty2 ile bugün tanıştım. Henüz alpha release. Güzel bir kütüphane gibi görünse de yine Prototype tabanlı olması bir eksi. Eski bir Prototype fanı olarak onu unutmuş değilim. Sadece artan jQuery eğilimini görmezden gelememiş biriyim :) Scripty2'nin açılış sayfasına adres vermeyeceğim. Doğrudan dokümantasyondan bir sayfaya örnek vereceğim. Beni tanıyanlar kütüphaneyi niçin beğendiğimi bu sayfadan çok net anlayacaktır: http://scripty2.com/doc/scripty2 fx/s2/fx/transitions.html

Tam da kütüphanelerden bağımsız bir animasyon kütüphanesi nasıl olurdu acaba diye düşünürken, yine bir Thomas Fuchs üretimi çıktı karşıma, Émile. Henüz hazır sayılmaz, ama 50 satır kodla harikalar yaratılmış. Henüz kendi sitesi bile yok, kendi blog girdisine bir göz atabilirsiniz: http://mir.aculo.us/2009/11/07/a-50-lines-of-code-javascript-animation-framework-say-hello-to-emile

Daha önceki gönderilerimde, Perculus ürünümüzün başarısını anlatmıştım.

Bugün (aslında saat itibariyle dün), çalışma arkadaşlarım beni ve bu işin diğer elebaşı Cengiz'i çok mutlu edecek bir jest yaptılar. Bizim için aşağıdaki kocaman pastayı yaptırmışlar, pastayı ilk kesme şerefini de bana verdiler sağolsunlar.



Çok mutlu oldum. İş yerinde çalıştığım kişilerin "iş arkadaşı"ndan çok dost olduğunu bir kere daha gördüm.

Teşekkürler dostlarım, iyi ki varsınız. Sizlerle beraber daha bir çok başarı tesadüf olmayacak. Kadir kıymet bilmeyenler hiç önemli değil. Siz biliyorsanız bu bana yeter. Sizler oldukça ben de bu çatı altında olacağım...

Ali

Uzun süredir var olan ancak ücretli olan Ample GUI SDK artık ücretsiz. Özellikle XUL tabanlı arabirim elemanları, IE'ye SVG desteği getirmesi gibi özellikleri ile göz dolduruyor ve ilgi çekiyor. Bütün web developerların arşivinde bulunmalı...

http://www.amplesdk.com


Bugün artık zengin internet uygulamaları geliştiren her web yazılımcısı, jQuery, Prototype, Dojo, MooTools gibi farklı farklı Javascript kütüphanelerinden birini mutlaka kullanıyor. Hatta artık $ olmadan bir javascript tümcesine başladık mı garip gelir haldeyiz...

Bu kütüphaneler ortada yokken, yada varken ama henüz "experimental" seviyeyi geçmediği dönemlerde, ben ve benim gibi web geliştiriciliği yapan bütün yazılımcıların ağzının suyunun akmasına sebep olan uygulamalar görmeye başladık. Google kaynaklı GMail, Google Maps, Google Docs... gibi uygulamalar gerçekten o gün için hayal gücümüzün sınırlarını zorluyordu.

Gitgide javascript çerçeve çalışmaları ile tanıştıkça artık bu tip uygulamalar hiç birimiz için çok uzak değildi. Ama Google zamanında bunları nasıl yapmıştı? Kendi bir çerçevesi olmadan pure javascript mi yazmıştı? Tabi ki hayır. Bugün dahi halen hiç bir Google uygulaması, yukarıda örneklerini verdiğim bildik javascript kütüphanelerini kullanmıyor.

Bir zamanlar kulaktan kulağa efsane gibi yayılan, daha sonra doğruluğuna emin olduğumuz ama sır gibi saklanan Closure artık Google tarafından açık kod olarak dağıtılmaya başladı.

Şu noktada artık alışkanlıklarımızı değiştirir miyiz, bir jQuery'den bir Prototype'tan vazgeçer miyiz bilemem. Ama işin içinde Google varsa incelemeye değer. İncelediğimde gördüğüm ince zeka örnekleri gerçekten hala çok etkileyici...

Buyrun: http://code.google.com/closure

İlginç bir proje. Bilindik çok kullanılan yazılımları tek seferde bilgisayarınıza kurmak için tasarlanmış bir sistem. İstediğiniz yazılımları uzunca bir listeden seçiyorsunuz. Daha sonra size küçük bir installer download ettiriliyor.

Bundan sonra start'a basıp kahve almaya gidiyorsunuz... Çünkü Ninite, seçtiğiniz programları sırayla download ediyor (son sürümlerini) ve size tek soru sormadna kuruyor... Şaka gibi ama gerçek :)

Buradan deneyin lütfen: http://ninite.com



Bir süredir yazamıyorum çünkü 1-2 haftadır, uzun süredir geliştirmekte olduğumuz ve bir çok organizasyon tarafından kullanılan Perculus sanal toplantı platformumuz, ciddi bir sınav veriyor.

İSMMMO, verdiği SM'den SMMM geçişi eğitimlerinde ve canlı soru-cevap oturumlarında Perculus'u kullanmayı tercih etti ve tabi ki pişman olmadı ;)

Geçen hafta yapılan ders anlatımlarının ardından, bu hafta dün ve bugün 4'er oturum olmak üzere toplam 8 oturum yapıldı. Kullanıcı sayıları her derste değişkendi ancak maksimumda 370 kişiyi aynı anda, sorunsuz, kesintisiz ve kaliteli bir eğitim ortamında bir arada gördük. Ortalama katılım 300-350 kişi civarında oldu. Soru-cevap oturumları yarın, Perşembe ve Cuma günleri yine her gün 4 oturum olmak üzere 12 oturumla son bulacak. En fazla 540 kullanıcı beklediğimiz oturumlarda, önümüzdeki günlerde rekoru kırar mıyız bilinmez. Ama Perculus, 370 kişilik performansıyla gerçekten gözlerimizin dolmasına sebep oldu. Türk Mühendisleri de güzel işler yapıyorlar :)

Bu üstün performans süresince, tahmin edersiniz sunucumuzun değerleri de hiç görmediğimiz seviyelere çıktı. Ancak bu noktada da, öngörülerimizin ne kadar yerinde olduğunu bir defa daha gördük. Her ne kadar laboratuar ortamı testlerini defalarca yapsak da, bu seviyede katılımlı bir "gerçek hayat tecrübesini" kaldıracak sunucu konfigurasyonunu tespit edip canlı tutmak bile başlı başına bir olaydı.

Ne seviyelerden bahsettiğimizi rakamlarla söylersek;
* Ortalama bandwidth kullanımı: 50-60 Mbit,
* Ortalama kullanıcı sayısı: 300-350 Kişi,
* Oturum başına ortalama veri transferi: 20GB,

Şunu da son not olarak belirtmek isterim ki katılımcıların tatmini de oldukça üst seviyedeydi. Yorumlardan bunu görebiliyorduk. Ayrıca bu iki günlük oturum fırtınası boyunca, ofisimizi arayarak bağlantı sorunu yaşadığını belirten tek kullanıcımızın sorununun pek muhterem Vista üzerine kurulu antivirus ve firewall uygulaması olduğunu tespit edip, sorununu çözdük.

Artık fırtınanın geri kalan kısmını bekliyoruz. Yorgun ama gururlu adımlarla uykuya yenilme vakti geldi. Kimi zaman stresli, kimi zaman keyifli, kimi zaman komik ama hep gurur verici uzun mesai akşamlarında omuz omuza çalıştığım Cengiz'e de teşekkür etmezsem çok ayıp olur :)

Yeni rekorlarda görüşmek üzere...



EDIT 28.09.2009 12:25: Bugün elime geçen 370'lik screenshot'ı eklemek istedim. Whooo hooo :)

1,5 Aydır ilk defa evdeki internet bağlantım umut verici sonuçlar vermeye başladı. Tabi dünyanın %70'nin güleceği bu hızlar bize muhteşem geliyor. Hele 1,5 aydır benim gibi, sorun çıkacak diye evde internete girmekten korkar olmuşsanız...



Ajaxian'ın haberine göre, Microsoft, canvas nesnesinin HTML5 spesifikasyonundan çıkarılması ve ayrı bir spesifikasyon haline getirilmesi için öneride bulunmuş. Hatta bu çalışmaların tamamlanması için kağıt-kürek işlerini de tamamen üstlenebileceğini söylemiş.

Kendileri yapamadıkları/yapmadıkları yetmezmiş gibi, bütün community tarafından benimsenen, beta üretimleri başlayan bazı standartları artık standartlardan ayıklatmaya çalışıyorlar.

Artık pes, inanılır gibi değil...

JS Bin adındaki sistem, yazdığınız javascript kodunun, online olarak nasıl çalışacağını denemenizi sağlıyor. Ayrıca örneklerinizi tek bir tıklama ile kısaltılmış URL'lere indirgeyebiliyorsunuz, bu sayede paylaşma şansınız da oluyor.

En ilgi çekici yanı ise kod yazdığınız kutunun üzerindeki bir açılır menü sayesinde, popüler bütün javascript frameworklerini çalışmanıza tek tıkla dahil edebiliyorsunuz. Bu sayede frameworkler üzerinde de deneme yapma şansınız oluyor. Desteklenen frameworkler:
- jQuery
- Prototype
- script.aculo.us
- YUI
- MooTools
- Dojo
- Ext JS

Özellikle kısa javascriptler denemek istediğinizde, yada bir kod farklı kütüphanelere çevirmek istediğinizde pratik bir araç olabilir.

Buyrun: http://jsbin.com

Excel kullanırken, herhangi bir hücreyi bold, italic vb. yapmak istediğiniz ilk seferde çok uzun süre bekliyorsanız, bunu sebebi, varsayılan yazıcınızın bir ağ yazıcısı olmasıdır.

Yaşadığım sorunun sebebini tespit etmek bayağı zamanımı aldı. Bu sıkıntıyı başka yaşayan olursa zorlanmasın istedim.

Excel, diğer Office uygulamalarına nazaran (Word, PowerPoint..) yazıcı özelliklerine daha az ihtiyaç duyuyor. Bu yüzden açılışın hızlı olması için, yazıcılarla ilgili bir çok özelliği açılırken yüklemiyor. Örneğin Word ise, yazıcı sürücüsüyle ilgili bütün bilgileri ilk anda yüklüyor. Excel'in elinde bu bilgi olmadığı için, format değiştirmeyle ilgili bir işlemi ilk defa yaptığınızda, varsayılan yazıcı sürücüsüne bağlanıp, bu özelliği destekleyip desteklemediğini denetliyor. Eğer yazıcınız bir ağ yazıcısıysa, haliyle bu süre çok uzun olaibliyor ve çok fazla beklemeniz gerekiyor. Word gibi uygulamalarda ise bu bilgi en başta yüklendiği için hiç bir yavaşlık sezmiyorsunuz.

Sorunu çözmek için varsayılan yazıcınızı ağ yazıcısı olmayan herhangi başka bir yazıcı olarak değiştirmeniz yeterli olacaktır.

Bundan bir kaç gün önce, Microsoft'un Ajax Minifier projesiyle ilgili bir post yapmıştım.

Bugün Ajaxian ekibinin, Microsoft Ajax Minifier ile YUI Compressor karşılaştırmasını okudum. İki ürün de birbirlerine üstünlük sağlamıyorlar yazarların yorumlarına göre. Bence YUI Compressor bir adım önde görünüyor. Özellikle sıkıştırdığı/küçülttüğü örnek kodları incelediğinizde, kodu körü körüne küçültmek yerine akışı algılayıp gereksiz tekrarları ve kaynak hebalarını yakalayabildiğini gözlemliyoruz. Bu bile oldukça ilgi çekici :)

Buradan okuyabilirsiniz: http://ajaxian.com/archives/microsoft-ajax-minifier-vs-yui-compressor

SQL Server 2005/2008 kurulumları sırasında (özellikle kaldırıp tekrar kurmalarda), kurulum son aşamaya kadar gelip, sebep göstermeksizin fail olabiliyor. Bir kaç defa başıma gelen sorun, bende hep aynı şekilde çözüldü.

Sistem servsilerinde "SQL Server VSS Writer" olarak görünen, program ekle/kaldırda ise "VSS Writer" olarak görünen servisin kaldırılması gerekiyor. Bu servisi program ekle/kaldırdan kaldırıp, bilgisayarı yeniden başaltıp SQL Server kurulumunu yeniden yaparsanız sorununuz çözülebilir.

Ayrıca bazı ek notlar:
1. Kurulum sırasında, default parametreleri kesinlikle kullanmayın
2. Kurulum adımlarında size sorulan, kurulum sonrası şu şu servisleri başlat kısmında, hiç bir servis seçili olmasın. Herhangi başka bir sebeple servis başlamazsa kurulumu geri alabiliyor bazen setup.
3. Eğer SQL Server Reporting Servcies de kuruyorsanız, default ayarlarla konfigüre et seçeneğini seçmeyin, sonradan düzeltilemeyen bazı ayarlar yapılabiliyor. Reporting Services'ı konfigüre etme opsiyonunu seçin mutlaka. Kurulumdan sonra adım adım bir ekranla konfigüre etmek mümkün zaten.
4. Kurulum sırasında mutlaka "Mixed Mode" seçin.
5. Birden fazla instance kullanmayacaksanız bile, default instance kurulum yapmayın, named instance kurulum yapın.

Benden bu kadar, sorunsuz kurulum dileklerimle...

HTML tagları nasıl kullanılır? Çok kullanmadığımız taglar ne işe yarar? Görünüşleri farklı mıdır? Hangi eventleri destekler?

Dene, gör: http://www.htmlplayground.com

Her web programcısının gündelik hayatında kullandığı bir çok konu ile ilgili farklı kaynakların sınıflandırılıp, bir araya toplanfığı bir sayfa. Çok enteresan şeyler olmasa da birarada derli toplu bir liste güzel olmuş...

Buyrunuz: http://www.kayodeok.btinternet.co.uk/favorites/webdesign.htm

Microsoft, AJAX.NET faciasından sonra tekrar bir Ajax kütüphanesi işine girişmiş. Henüz inceleme fırsatım olmadı, Pazartesi incelemeyi umuyorum. Sonra tekrar yorumlarımı yazarım inceleyebilirsem. Ama yorumlardan bakıldığında bu sefer "boyunun ölçüsünü" biliyor gibi görünüyor. jQuery pluginlerine geçiş vs. desteği verdiğine göre, babaları kabul etmiş, kendileri de bir şeyler eklemiş olabilir...

Bunula beraber Microsoft Ajax Minifier'ı test ettim. Bildiğimiz metotlarla Javascript dosyalarında boyut küçültmeye gidiyor. Denediğim JS'leri bozmadan iyi oranda küçülttü. Özellikle hyperchruncing özelliğini de denemenizi tavsiye ederim.

Projeyi CodePlex'ten alabilirsiniz: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34488

ASP.NET 3.5'ta bazı uygulamaları yapılmıştı ancak özellikle performans sorunları sebebiyle pek tercih edilmemişti. Ayrıca sadece SP1'li sistemlerde çalışması da bir sorundu. ASP.NET 4.0 daha temelden bir çözüm getiriyor gibi görünüyor. 3.5'taki geliştirmeye de oldukça benziyor.

http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx

ScottGu'nun blogundan okuyalım...

Bütün Flash programcıların ve onlarla beraber çalışan diğer programcıların baş belası ve korkulu rüyası Flash içerisinde HTML için bir plugin geliştirmişler. Ne kadar başarılı olduğunu bilemem, deneyemem de açıkçası :)

Pazartesi günü bir bilene danışmak için sabırsızlanıyorum...

Buyrun: http://code.google.com/p/htmlwrapper

XMLHttpRequest, same-origin-policy bünyesinde olduğu için farklı domainlerden Ajax isteklerini çağıramıyorduk. Bir süre önce bütün tarayıcılar bununla ilgili yamalar yayınladı ve bu özellik kullanılamaz hale geldi.

Ancak same-origin-policy'e dahil olmayan CSS'i unutmuşlardı :)

http://nb.io/hacks/csshttprequest

Özellikle web tasarımcılarının ve hatta programcılarının çok işine yarayabilecek bir araç. Kullanmaya alışık olduğumuz bir çok web aracı, bileşeni ve sistemi için hazır nesneler içeren bir taslak tasarım sistemi diyebiliriz MockFlow için.

Oldukça güzel çalışılabiliyor. Ücretsiz sürümünde tek sayfa tasarlamaya izin veriliyor ve resim olarak kaydettiğinizde bir imza basıyor. Ama kullanılabilir :)

http://www.mockflow.com

Site tarafından hazırlanmış kısa video için:

MockFlow - Video Demo from Produle on Vimeo.

Son zamanlarda benim gibi bağlantı problemleri ile boğuşuyorsanız, ilgisiz operatörünüz sizi günlerce uğraştırıyorsa, akşam iş yapmak veya internette gezinmek için ayırdığınız zamanı modemin başında, bir kulağınızda telefon modemin orasına burasına teller sokup resetlemeye çalışırken geçiriyorsanız çok işinize yarayacak, emin olabilirsiniz:

Test your Internet connection speed at Speedtest.net  Test your Internet connection quality at Pingtest.net

SQL Server'da bugüne kadar, tabloların DROP edilip tekrar CREATE edilmesine sebep olan yapısal değişikliklerde (örneğin sütun tipi değiştirilmesi) herhangi bir uyarı almadan işlem gerçekleşiyordu. Ancak genel olarak DBMS'lerde bu işlem manuel olarak yapılır ve otomatize edilmez.


SQL Server 2008 Management Studio'da da buna yakın bir geliştirme yapılmış. Artık özel bir ayar yapmadığınız sürece, DROP-CREATE gereken tablo değişikliklerine izin verilmiyor, uyarı alıyorsunuz. Alışkanlıklarınızdan vazgeçmek istemiyorsanız ve eski şekilde çalışmaya devam etmek istiyorsanız:

Tools > Options... > Designers > Prevent saving changes that require table re-creation
işaret kutusunu temizleyin ve kaydedin...

Bütün web yazılımcılarının en büyük sorunu, geliştirdikleri AJAX-enabled uygulamaların, arama motorlarında gerekli şekilde indekslenmemesidir. Bunun için çeşitli workaround'lar üretmeye çalıştık hep.


Google konuyu biraz daha temelden alarak bir çalışma başlatmış. Lütfen okuyun: http://googlewebmastercentral.blogspot.com/2009/10/proposal-for-making-ajax-crawlable.html

Internet Explorer, underscore (_) karakteri içeren subdomainlerde, cookie'leri yönetemiyor ve doğal olarak session problemleri baş gösteriyor. Diğer hiç bir tarayıcıda bu sorun meydana gelmiyor.


Visual Studio 2010 (FW4.0) Beta kurulumu sonrası, IIS üzerinde hiç bir virtual directory için framework değiştirilemiyor. Daha doğrusu değiştirildiği söyleniyor ama tekrar FW4.0'a dönüyor.


Problemi command line'dan şöyle çözmek mümkün:

aspnet_regiis -s W3SVC/1/ROOT/virtual_dir_adi

Burada kullanılan aspnet_regiis'in, v2.0 altındaki olmasına dikkat edilmelidir...

Bütün tarayıcılarda çalışan bir resim efekti olan Liquid FX'in demolarına şu adreslerden ulaşabilirsiniz:



Kaynak kod ise şu adresten alınabilir:

Resimlerin yeniden boyutlandırmasında, içeriğe göre karar veren bir algoritma ile yeniden boyutlandırma.
Ne kadar yayılır belli değil ancak örnekleri buradan bulabilirsiniz:
http://labs.pimsworld.org/wp-content/uploads/2009/04/demo-content-aware-image-resizing-2

Altyapıda "Sobel Convolution" denen bir matematiksel mantık kullanılıyor. Bununla ilgili detayu için de: http://en.wikipedia.org/wiki/Sobel_operator

Güncellenmeye devam etmekte olan HTML 5 ile ilgili bir makale...
http://diveintohtml5.org

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