21 Eylül 2012 Cuma

Scrum Nedir

Scrum, kısa döngüler ile çıktı üretme ve sürekli iyileştirme felsefesi üzerine oturan “çevik” proje yönetimi uygulamalarından biridir. Diğer çevik metodlojilere; eXtreme Programming, Adaptive Software Development, Crystal Clear, Feature Driven Development ve Lean Software Development örnek olarak verilebilir. Bunlar arasında en popüler olanları Extreme Programming ve Scrum’dır. Microsoft Solutions Framework Agile metodolojiler için de süreç kılavuzları sunmaktadır.

Scrum Jeff Sutjerland ve Ken Schawaber tarafından 1990’ların ortalarında geliştirilmiştir. Kapsam perspektifinden bakıldığında yüksek seviyede belirsizlik arzeden projelerde son yıllarda yoğun biçimde uygulanan ve başarılı sonuçlar üreten bir tür metololidir. Scrum, küçük takımlarda (20 kişiden az) uygulaması kolay olan bir proje yönetimi yöntemi olup, büyük projelerde takımların küçük parçalara ayrılması ile etkinleştirilir. Scrum değişimi bir istisna olarak görmeyen, adaptif sistem geliştirme hayat döngüsü perspektiflerinin genel özelliğine paralel olarak proje kapsamının proje boyunca sürekli değişeceğini en baştan kabul eden bir yöntemdir. Bu kabul doğrultusunda Scrum, fazla dokümantasyon yapmadan, kısa periyotlarda geliştirme yapılıp, sonuçların müşteriye sıkça gösterildiği ve geribeslemeler doğrultusunda geliştirmelerin yönünün sürekli değiştiği, gereksiz geliştirmelerin minimuma indirilmeye çalışıldığı bir sürecin yönetimini üstlenir.

Scrum’ın süreçlerini kısaca ifade etmekte fayda var. Bu bağlamda Product Backlog, Sprint Backlog, Sprint ve Scrum toplantılarına kısaca değinelim. Scrum projelerinde ilk yapılan proje sponsorları ile bir masaya oturulup projenin kapsamını ifade eden “Product Backlog”u çıkartmaktır. “Product Backlog” proje sonunda üretilmesi beklenen sistemin özellik ve fonksiyonlarının önceliklerine göre yazıldığı bir liste dokümanıdır. Bu dokümanda, sponsorun ihtiyaçları ve istekleri öncelik sırasına konarak listelenir. Proje süresince bu doküman proje sponsoru tarafından sürekli güncellenir; yeni fonksiyon ve özellikler listeye eklenir, mevcut fonksiyon ve özelliklerin öncelikleri değiştirilebilir.

Scrum yöntemi ile yönetilen projeler “sprint” denilen fazlara ayrılır. Herbir “sprint”in süresi genellikle (en fazla) 30 gündür. İdeal olan proje boyunca boyunca tüm “sprint”ler aynı süreli olur. Proje takımı (scrum team), proje yöneticisi (scrum master) ile her sprint başlangıcında masaya oturarak yeni “sprint” dahilinde geliştirilecek özellik ve fonksiyonları belirler. Bu süreçte seçilen fonksiyon ve özellikler daha önceden oluşturulmuş ve sürekli güncellenen Product Backlog listesindeki sıra ile en öncelikli olanlardır. Hiçbir zaman önceliği düşük bir özellik veya fonskyon önceliği yüksek bir özellik veya fonskyiondan önce geliştirilemez. Bu bağlamda bazı “sprint”lerde proje takımı, Product Backlog’dan 4 eleman, bazı sprint’lerde 25 eleman seçebilir. Seçilen özellik ve fonksiyonlar Sprint Backlog denilen ikinci bir listeye aktarılır. Proje takımı bir sonraki sprint başlangıcına kadar bir daha Product Backlog’a bakmaz, o sprint dahilinde sadece ilgili Sprint Backlog listesine odaklanır.

Sprint Backlog dahilindeki her özellik veya fonsksiyon için maksimum 3 günlük geliştirme süresi verilir. Bu sürede sözkonusu elemanın geliştirmesinin tamamlanmasına çalışılır. Scrum takımı her sabah Scrum Master eşliğinde “Scrum” denilen günlük toplantısını yapar. Bu toplantıya tüm takım üyeleri katılmak zorundadır. Scrum toplantısına proje takımı dışındaki diğer proje paydaşları da katılabilir; ancak onların toplantı sırasında kesinlikle konuşma hakları yoktur; sadece dinleyici olabilirler. Konuşan paydaşlar bir sonraki “Scrum” toplantısına alınmaz. Scrum toplantılarında kimse oturmaz; herkes ayaktadır. Scrum toplantısında bir önceki gün yapılanlar, o gün yapılacaklar, karşılaşılan ve karşılaşılabilecek riskler tartışılır. Scrum toplantısı en fazla 15 dakika sürer.

Her sprint sonunda sprint raporu çıkarılır. Bu rapor dikey ekseni kalan Sprint Backlog’da bulunan ve daha geliştirilmemiş özellik ve fonskyion sayısını, yatay ekseni sprint gün sayısını gösteren iki eksenli basit bir rapordur. Her sprint için bir adet sprint raporu çıkarılır ve günlük olarak Scrum Master tarafından güncellenir. Sprint’in ilk günü yatay eksendeki değer en yüksektir, sprint sonuna doğru aşağıya doğru eğimli bir çizgi oluşur.

9 Ağustos 2012 Perşembe

YouTube’da Yılan Oyunu Nasıl Oynanır ?

Youtube’da videolarınız geç yüklendiği için canınız mı sıkılıyor? Sorun değil. İlginç ve yaratıcı şeylerin uzmanı google, bu probleme de bir çözüm üretmiş. Hemde çok eğlenceli bir çözüm :) Video yüklenirken, sadece bir iki tuşa basarak hemen bir yılan oyunu açabilir ve oynayabilirsiniz. Siz bu oyunu oynarken bırakın video arkada yüklensin. Peki hangi tuş kombinasyonuyla bu eğlenceli yılan oyununu açabiliriz? Cevabı tabikide bu yazımızın devamında.
Peki youtube’da yılan oyunu nasıl oynarız?
Yılan oyununu oynamak için herhangi bir video sayfasına girin. Daha sonra video’nun üzerine tıklayarak video’yu durdurun. Klavyedeki yön tuşlarından sol yön tuşuna beş saniye kadar basılı tutun. Hemen ardından elinizi çekmeden yukarı yön tuşuna basın ve yılan oyununun keyfini çıkarın :)

24 Mayıs 2012 Perşembe

C# Reflection Field Example


You have a class with instance or static fields of any type in your C# program and want to loop through those fields and display their names and values. The System.Reflection namespace in the .NET Framework provides a powerful and maintainable way to enumerate fields and properties. We see how you can loop through fields using reflection.

Example

In the .NET Framework, every program is compiled into an assembly containing metadata, which is an abstract binary representation of the program's structure. This improves the options you have when executing your program, as you can explore the string data stored in the executable to access field and property names.
This example demonstrates a static class with four fields of type Int32 and String. It obtains the FieldInfo objects for those fields and then displays them in a public method.

This C# example program uses reflection on fields in a static class.
Program that uses reflection on fields [C#]

using System;
using System.Reflection;

static class ReflectionTest
{
    public static int Height;
    public static int Width;
    public static int Weight;
    public static string Name;

    public static void Write()
    {
 Type type = typeof(ReflectionTest); // Get type pointer
 FieldInfo[] fields = type.GetFields(); // Obtain all fields
 foreach (var field in fields) // Loop through fields
 {
     string name = field.Name; // Get string name
     object temp = field.GetValue(null); // Get value
     if (temp is int) // See if it is an integer.
     {
  int value = (int)temp;
  Console.Write(name);
  Console.Write(" (int) = ");
  Console.WriteLine(value);
     }
     else if (temp is string) // See if it is a string.
     {
  string value = temp as string;
  Console.Write(name);
  Console.Write(" (string) = ");
  Console.WriteLine(value);
     }
 }
    }
}

class Program
{
    static void Main()
    {
 ReflectionTest.Height = 100; // Set value
 ReflectionTest.Width = 50; // Set value
 ReflectionTest.Weight = 300; // Set value
 ReflectionTest.Name = "Perl"; // Set value
 ReflectionTest.Write(); // Invoke reflection methods
    }
}

Output

Height (int) = 100
Width (int) = 50
Weight (int) = 300
Name (string) = Perl

20 Nisan 2012 Cuma

A potentially dangerous Request.Form value was detected from the client

"A potentially dangerous Request.Form value was detected from the client" hatası .NET Framework 1.1 ile gelen ve .NET Framework 2.0 da da bulunan "Request Validation" özelliğinden kaynaklanmaktadır. Kullanımındaki amaç script kodları yada html kodları aracılığıyla yapılabilecek script injection'larına engel olmaktır. Mesela bir textbox'ın içersinde "<" yada ">" işaretleri yerleştirecek olursanız form submit edildiği an hata ile karılaşırsınız.

Ancak bazı durumlarda kullanıcının bunu yapmasına müsade etmemiz gerekebilir.

Bu sorunu çözmenin 2 yolu var
1) web.config de Request Validation'ı disable etmek (tüm uygulama için geçerli olacaktır)
2) Bu sorunu çözmek istediğiniz sayfa için @Page yönergesine validateRequest=false yazmak.

Ref http://kb.seekdotnet.com/ViewArticle/42data.aspx