29 Eylül 2009 Salı

Web Uygulamaları İçin Kullanılabilirlik Standartları

Kullanılabilirlik, kısa bir tanımla, kullanıcıların etkileşim içinde olduğu sistem arayüzlerinin "öğrenilebilir", "etkin", "hatırlanabilir", "az sayıda hatadan oluşan" ve "beğeni hissi veren" özelliklerde olmasını kapsar. Web sitelerinin bu kriterlere uygunluğunu değerlendirmek için farklı değerlendirme yöntemleri ve kriterleri geliştirilmiştir. Her yöntemin farklı üstünlükleri, zayıflıkları, uygulama zamanları ve kullanım durumları vardır. Web uygulamaları için daha sık kullanılan, kullanılabilirlik standartları aşağıdaki gibidir;

1. Kullanıcı Tecrübesinin Optimize Edilmesi
1.1
Ekranda gösterilen alanlar formatlanmalıdır (Ondalık, grup, TL, telefon, web adresi, tc kimlik no)
1.2
Sayfa yükleri azaltılmalıdır. Her sayfa tipi için ebatlar belirlenmeli ve bu ebat kesinlikle aşılmamalıdır.
1.3
Time-out olmadan önce mutlaka uyarı verilmelidir.
1.4
Kullanıcı bir işlem için bekleyecekse mutlaka görsel olarak uyarılmalıdır; kum saati, ajax iconu gibi…
1.5
Uygulama tarafından yönetilemeyen hatalar için standart hata sayfaları çıkmalıdır.
1.6
Sayfalar print edilebilmelidir.
2. Donanım ve Yazılım
2.1
Sık kullanılan tarayıcıların desteklenmelidir.
2.2
Sık kullanılan kullanıcı ekran çözünürlüklerinin desteklenmelidir.
2.3
Farklı kullanıcı internet bağlantı hızlarına göre çalışabilirlik sağlanmalıdır.
3. Login/Ana Sayfa
3.1
Login sayfası kullanıcıda ilk pozitif etkiyi bırakacak seviyede olmalıdır.
3.2
Ana sayfa, gerçekten ana sayfa gibi olmalıdır. (Menüler, haberler, önemli bilgiler, çıkış, logout)
3.3
Diğer sayfalardayken ana menüye dönüş imkanı olmalıdır.
3.4
Yapılan değişikliklerin duyurusu buradan yapılabilmelidir.
4. Navigasyon/Scrolling/Paging
4.1
Menüler arası navigasyon yapıldığında kullanıcıya bulunduğu yer ile ilgili bilgi verilmelidir.
4.2
Navigasyon yeteneği olmayan sayfalar yaratılmamalıdır.
4.3
Ekranlardaki tablar arası navigasyonlar efektif tasarlanmalı ve bir tabdan diğerine geçerken ekranla ilgili Unique bilgiler ortak olarak görülebilmelidir.
4.4
Yatay scroll’lar önlenmelidir.
4.5
Uzun scrolling yerine paging kullanılmalıdır.
5. Ekranlar/Bileşenler
5.1
Başlık bilgileri ayıt edici olmalıdır.
5.2
Kritik datalar özellikle highlight edilmelidir.
5.3
Grid satırlarında renklendirme yapılmalıdır (altarnate row color)
5.4
Önemli grid kolonları ayrıca renklendirilmelidir.
5.5
Font, renk, stil kullanımları sayfalar arasında tutarlı olmalıdır.
5.6
Liste içeriklerinde cümlenin ilk kelimesinin ilk harfi büyük olmalıdır.
5.7
Zorunlu ve opsiyonel veri girişlerinin ayrımı yapılmalıdır.
5.8
Hata durumunda, kullanıcı işlem sonunda değil, olabilecek en erken zamanda uyarılmalıdır.
5.9
Kullanıcının gireceği veri miktarı olabildiğince az olmalıdır.
5.10
Ekranlardaki labellar ve textboxlar arasındaki mesafeler olabildiğince az olmalıdır.
5.11
İşlem butonlarının ne yapacağı açık olarak üzerine yazılmalıdır.
5.12
Kontrollerdeki default değerler mutlaka set edilmelidir.
5.14
Çoklu seçimlerde checkbox list kullanılmalıdır.
5.15
Veri girişleri tutarlı şekilde yaptırılmalı, farklı veri girişleri olmamalıdır.
5.16
Büyük veri girişlerinde yük dağıtılmalı, partitioning tasarlanmalıdır.
5.17
Kullanıcı tarafından girilen veriler case insensitive olmalıdır.
5.18
Tablar doğru çalışmalıdır.
5.19
Kısa yol tuşları desteklenmelidir.
5.20
Herhangi bir çift tıklamada problem olmadığına emin olunmalıdır.
5.21
Ekran ilk açılışlarında ilk kontrole fokus olunmalıdır.
Deniz KILINÇ

28 Eylül 2009 Pazartesi

ASP.NET Session Timeout Bilgilendirme/Tidy Logout

Web projeleri içerisinde Web.Config dosyasında timeout süresi belirleyerek kullanıcının belirli bir süre işlem yapmaması sonucunda onun otomatik olarak log out olmasını sağlarız:
<sessionState mode="InProc" cookieless="false" timeout="1"/>
timeout özelliği session ile ilgili özelliklerin belirlendiği sessionState tag’i içerisinde belirlenir. Timeout zamanını sessionState içerisinde timeout elementine dakika olarak yazıp belirleyebiliriz.  Bu değer 525,601 (bir yıl)’ den büyük olamaz ve açılan yeni projelerde default 20 dakika olarak gelir.
Kullanıcının timeout’a düşeceği zamanı belirlemek isteyebileceğimiz gibi timeout olmadan önce kullanıcının uyarılması ya da bazı işlemlerin (ekrandaki bilgileri kaytdetme, log tutma gibi) yapılmasını da isteyebiliriz. Bunun için timeout süresi dolmadan belirlenen kadar süre önce bir fonksiyonun çalışması ya da bir exception oluşması gereklidir.
Javascript fonksiyonları olan “setTimeout” ve “setInterval” timeout süresi dolmadan belirlenen kadar süre önce belirlenen bir işlemin yapılmasını sağlar.
1. setInterval;
Fonksiyon:  setInterval(expression, interval);
  • expression : Belirlenen süre dolduğunda çalıştırılacak kod.
  • interval: Timeout süresi dolmadan kaç milisaniye önce expression’ın çalıştırılacağını belirten parametre.

function Reconnect(){ 
    var img = new Image(1,1); 
    img.src = 'Default.aspx'
    window.status = 'Link to Server Refreshed ' + count.toString()+' time(s)' ;
}
window.setInterval('Reconnect()',30000);
Yukarıdaki javascript kodu içerisinde çağrılan setInterval fonksiyonunda expression olarak “Reconnect” fonksiyonu timeout süresinden 30 sn önce çalıştırılıyor. Bu fonksiyon içinde Default.aspx sayfasına request yapılarak timeout engellenir.
2. setTimeOut;
Fonksiyon: setTimeout(expression, timeout);
  • expression : Belirlenen süre dolduğunda çalıştırılacak kod.
  • timeout : Timeout süresi dolmadan kaç milisaniye önce expression’ın çalıştırılacağını belirten parametre.
function alertTimeout(){
    alert('Timeouta 30 sn kaldı!');
}
window.setTimeout('alertTimeout',30000);
Yukarıdaki kod içerisinde çağrılan setTimeout fonksiyonunda expression olarak “alertTimeout” fonksiyonu timeout süresinden 30 sn öncesinde çağrır. Bu fonksiyon da mesaj vererek time out süresinin dolmakta olduğunu ekranda gösterir.
İlk bakışta bahsi geçen iki fonksiyon da aynı işi yapıyormuş gibi görünüyor. Ancak setTimeout fonksiyonu time out için geriye sayma işlemini bir kez yaparken, setInterval bir döngü içerisinde sürekli geri sayma işlemini yapıyor.

Örnek Kod:
Örnek kod içerisinde iki tane aspx sayfası bulunmaktadır;
  • Default.aspx
  • KeepAlive.aspx
Web.Config içerisinde timeout süresi 1 dakika olarak ayarlanmış durumdadır. Program çalıştırıldığında, ilk olarak KeepAlive.aspx sayfası ekrana gelir. Ekranda aşağıdaki javascript kodu register edilir;
Dim strScript As String = "<script type='text/javascript'> " & _
"var count=0; " & _
"var max = 5; " & _
"function Reconnect(){ " & _
"count++; " & _
" if(count<max) " & _
"{" & _
" var img = new Image(1,1); " & _
" img.src = 'Default.aspx'; " & _
" window.status = 'Link to Server Refreshed ' + count.toString()+'time(s)' ; " & _
"}" & _
"} " & _
"window.setInterval('Reconnect()'," & _
int_MiliSecondsTimeOut.ToString() & "); " & _
"</script> "
Ekran açıldıktan sonra 30 sn boyunca işlem yapılmazsa, sayfa Default.aspx’e request gönderir ve timeout’u engeller. Bu işlemi her yaptığında da sol alt tarafta ekran status’unde işlemi yaptığına dair bilgiyi gösterir.
image
Şekil 1. setInterval statü güncelleme
Ekran içerisinde soldaki butonu kullanarak da Default.aspx sayfasına geçiş yapılır. Ekranda aşağıdaki javascrript kodu register edilir;
Dim strScript As String = "<scripttype='text/javascript'> "&_
"function alertTimeout(){" & _
" alert('Timeouta 30 sn kaldı');}" & _
"window.setTimeout('alertTimeout()'," & _
int_MiliSecondsTimeOut.ToString() & "); " & _
"</script> "
Bu sayfa çalıştırıldıktan sonra 30 sn boyunca işlem yapılmazsa uyarı mesajı ekrana gelecektir.
image
Şekil 2. setTimeout bilgilendirme
Kaynak kod indir
Nimet SÖZERİ

26 Eylül 2009 Cumartesi

Team Foundation Server – Genel Bakış

Team Fondation Server (TFS); farklı disiplinler gerektiren Yazılım, Test, Destek, Proje Yönetimi gibi tüm yazılım süreçlerinde kullanılmak üzere tasarlanmış, Microsoft’un geliştirmiş olduğu yazılım süreç yönetimi uygulamasıdır. Team Foundation’ın ilk amacı, takım içerisindeki işbirliğini arttırarak ürün gelişimini kolaylaştırmak ve verimlilik sağlamaktır.
Genel olarak TFS, kurumsal projeler için tasarlanmıştır. Takım içerisindeki iletişimi ve buna bağlı olarak verimi arttırmayı hedeflemiştir. İş durumunu izleme, takım rollerini yönetme, iş süreçlerini çıkartma ve sundugu bir çok araçla proje yönetimini kolaylaştırmada etkin rol oynar
TFS’in Mimari Yapısı
image
Uygulama Katmanı
TFS; Service oriented bir mimariye sahiptir. Temel uygulamalar için oldukça geniş bir service seti sunmaktadır. Build, Services, VersionControl, Warehouse, WorkItemTracking gibi bir çok web service kütüphanesini barındırmaktadır. Ayrıca SharePoint alt yapısı üzerine inşa edildiğinden bir çok web ve Windows service leri uygulama katmanının tamamını oluşturmaktadır.

Veri Katmanı

TFS, Sql Server üzerinde dosya ve bilgileri depolamaktadır. Bu sayede Transaction yönetimi ve bilgilerin yedeklenebilmesi gibi güçlü özellikler sunmaktadır. Ayrıca Sql Server Reporting Service aracılığı ile basit raporlardan çeşitli veri madenciliği tekniklerinin uygulanıp proje yönetiminde kullanılmak üzere karmaşık analizler yapılabilmesine olanak sağlar.

İstemci Katmanı

TFS'e erişim sağlayarak kullanıcı ile etkileşim sağlayan herhangi bir uygulama TFS'in istemci katmanı olarak gruplandırılabilir. Yaygın olarak kullanılan araçlar Visual Studio Team Suite, Team Explorer, Microsoft Office, Web Access ve diğer bir çok uygulama sayılabilirimage

TFS’e Geçiş Süreci

1. Team Project Oluşturulması
TFS içersinde yazılım süreçlerini nasıl yöneteceğinize göre belirlemeniz gereken süreç şablonları bulunmaktadır. TFS kurulumları ile birlikte CMMI ve Agile süreç şablonları gelmektedir. İstenildiği taktirde internetten farklı süreç şablonları bulunabileceği gibi kendi süreçlerinize göre yeni bir süreç şablonu tanımlayabilirsiniz. Yada yazılım süreçlerinizi kullanmaya karar verdiğiniz sürece uygun olarak revize etmeniz gerekmektedir.
2. Branch Merge Modelin Oluşturulması
TFS içersinde gerekli görüldüğü durumlarda kodun bir kopyasını alabilmenize olanak sağlayan Branch işlemi bulunmaktadır. Ayrıca farklı kopyalardan kodun diğer bir brange’e taşınabilmesi için de Merge işlemi.
İhtiyaçlarınıza göre bir çok branch merge model oluşturulabilir. Ancak çok fazla branching yapılması Merge maliyetlerini çok arttıracağından gerçekten gerekli değilse tercih edilmemelidir.
Farklı branch oluşturulmasının 2 farklı amacı vardır. Birincisi geliştirme yapmakta olduğunuz kaynak kod ile yayınlamış olduğunuz set’e ait kaynak kodun ayrılması. Bu amaca uygun olarak Dev, Main ve Release olmak üzere en az 3 farklı branch açılması önerilir. Bir diğeri de aynı projede farklı takımların bir birini etkilemeksizin çalışabilmesi.
Kullanılan bazı branch merge modeller aşağıda gösterilmiştir.
    • Basic Branch Plan
image
    • Standard Branch Planimage
    • Advanced Branch Plan
image
    • Concurrent Branch Planimage 
3. Assembly Reference yaklaşımı belirlenmeli;
    1. Öncelikle team project içersinde her bir branch için solution seviyesi oluşturulmalıdır.
    2. Aynı team project ve aynı solution içersindeki projeler bir birini proje referansı olarak göstermelidir.
    3. Aynı team project ve farklı solution’daki projeler dosya referansı olarak yada proje referansı olarak eklenebilir. Ancak proje referansı tercih edilmesi önerilir.
    4. Farklı team project içersindeki bir projenin assembly’si için dosya referasnı önerilir. İki yaklaşım vardır.
      1. Branch yaklaşımı; tüm solution’lar için tek bir kütüpane eklenmesi ve buradan dosya referansı olarak eklenmesi.
      2. Workspace mapping yaklaşımı; her bilgisayara ortak bir klasör oluşturulup mapping oluşturulması. Bu yöntem tüm bilgisayarlara kurulum yapılmasını yada manuel yönetilmesini gerektirdiğinden önerilmemektedir.
    5. 3. Şahıs assembly lerin dosya referansı olarak eklenmesi önerilir. Bir önceki maddedeki yaklaşımlar tercih edilebilir.
    6. Web Service ve Database bağlantıları kod içersinden static olarak belirlenmesi önerilmez. Dinamik referans kullanılması önerilir.
      1. App.Config’ten alınmalı.
      2. User.Config’ten alınmalı.
    7. Projelerin output dizininin ortaklaştırılması önerilir.
4. Team project içersindeki tüm solution’lar gerekli şekilde düzenlendikten sonra Main Branch oluşturulur, Main ve Dev Branchleri içersinde Source isminde yeni bir klasör daha oluşturulur bunun temel nedeni Releases Branch’i içersindeki farklı kaynak kodlarla aynı derinlikte olmasıdır. Bu bağıl referans eklemelerinde önemli olacaktır. Sonrasında Main Branch’ten Dev ve Releases branchler oluşturulur. Releaeses branch altında sahada yaşayan version sayısı kadar branch oluşacaktır.
Uygar MANDUZ

25 Eylül 2009 Cuma

SQL Server 2008 Yenilikler – Bölüm 3 (Loglama/CDC)

Bir önceki yazımızda, SQL Server 2008 ile gelen Auditing ile loglama mantığını anlatmıştık. Bu yazımızda, diğer bir loglama özelliği olan CDC (Change Data Capture)’den bahsedeceğiz. CDC özelliği ile row bazında yapılan tüm işlemler tarihsel bilgilerle saklanabilmektedir. Yani hangi kayıtlar üzerinde hangi tarihler arasında ne gibi işlemler yapıldığı raporlanabilir. Tüm CDC işlemleri T-SQL komutları ile yapılır.
imageŞekil 1. CDC akışı
1.  Database seviyesinde CDC nin açılması
Exec sys.sp_cdc_enable_db
2.  İstenilen tablo için CDC nin aktif hale getirilmesi
EXEC sp_cdc_enable_table 'dbo', 'TBLILCE', @role_name = NULL, @supports_net_changes =1
Tablo için CDC aktif hale getirilince, tablo yapısıyla aynı olan ve ilave olarak 5 tane sahanın eklendiği yeni bir tablo yaratılır. Tüm DML işlemlerinde (Insert, update, delete) buraya yeni bir kayıt atılır. Yeni açılan tablonun isimlendirmesi şu şekildedir.
cdc.dbo_<TABLOADI>_CT
Örnek: TBLILCE tablosu için  cdc.dbo_TBLILCE_CT

3.  Hangi tablolar için CDC nin aktif olduğunun izlenmesi 
SELECT * FROM sys.tables where is_tracked_by_cdc=1
4. CDC tablosundan hangi işlemlerin yapıldığının izlenmesi
$start_lsn
$end_lsn
$seqval
$operation
$Mask
KOD
AD
0x0001C9C400009E570005
NULL
0x0001C9C400009E570002
2
0x03
4
d
0x0001C9C400009E610005
NULL
0x0001C9C400009E610002
2
0x03
5
e
0x0001C9C400009E660005
NULL
0x0001C9C400009E660002
2
0x03
6
f
0x0001C9C400009E680006
NULL
0x0001C9C400009E680002
3
0x02
6
f
0x0001C9C400009E680006
NULL
0x0001C9C400009E680002
4
0x02
6
fffff
0x0001C9C500001C770005
NULL
0x0001C9C500001C770002
2
0x03
7
gggg
0x0001C9C500001C7E0006
NULL
0x0001C9C500001C7E0004
1
0x03
6
fffff
0x0001C9C500001C830006
NULL
0x0001C9C500001C830002
3
0x02
5
e
0x0001C9C500001C830006
NULL
0x0001C9C500001C830002
4
0x02
5
eee
Listede gelen ilk 5 kolon CDC sistemi tarafından otomatik olarak eklenir. Sonraki kolonlar ise ilgili tablonun kolonlarıdır. $stat_lsn ve $end_lsn parametreleri ile değişiklikleri sorgularken LSN (Log Sequence Number) aralığına göre sorgulanabilir. $operation kolonu şu değerleri alabilir :
  • 1 = delete
  • 2 = insert
  • 3 = update (Update öncesi)
  • 4 = update (Update Sonrası).
Seçkin KARABACAKOĞLU, Serap PARLAK, Deniz KILINÇ