Tuesday, 8 September 2009

Agile Metodoloji Tanımı

Agile kelime manasıyla çevik,atik manasına gelmektedir. Yazılım geliştirmede ise bu kavram değişen ihtiyaçlara hızlı cevap verbilen pratikleri ifade eder. Bu kavram aslında 1950’lerde üretim alanında verimliliği artırmak için geliştirilen yalın yaklaşımlarda ortaya çıkmış, daha sonra bu yaklaşımların yazılım sektöründeki uzantısınada çevik yazılım süreçleri denmiştir. Bu yaklaşıma yazılım sektöründe 1970 lerde rastlanmaya başlanmıştır. Yaklaşıma rastlansada şimdiki manada çevik metodolojilerin kullanımı biraz daha artmış 2000 lerden sonrada tüm dünyada başarısını kanıtlayarak yaygın hale gelmiştir. Çevik süreçler klasik süreçlerdeki riskleri önlediği ve rekabetçi avantaj sağladığı için şu anda dünyadaki Google, Microsoft, IBM, Yahoo gibi birçok şirkette birçok yazılım projesi bu yöntemle geliştirilmektedir. Günümüzde artan rekabet koşulları, şirketlerin IT projelerine yaptıkları yatırımların sonucunu hemen görmek istemeleri ve çevik sürecin bunlara hemen ceap verebilmesi nedeniyle agile yazılım geliştirme en popular metodoloji olmuştur.

Olay Tasarlama

Olay Tasarlama(Event Scheduling)
  • Tasarlayıcı oluşturma: set ns [new Simulator]
  • Olayı Tasarla: $ns t e
t=olayin gerçekleseceği zaman
e= gerçekleşecek olay
  • Tasarlayıcıyı başlat: $ns run

1. Node Oluşturma

Simulasyonumuzda yeni bir node oluşturmak için simulator node nesnesi kullanılır. Aşağıda iki adet node oluşturma komutu görülmektedir.

set n0 [$ns node]

set n1 [$ns node]

Çok fazla node oluşturacaksak bir döngü içinde dizi elemanı olarak da tanımlayabiliriz.

for {set i 0} {$i<5}>

Set n($i) [$ns node]

}

Node’ları oluştururken özelliklerini dışarıdan atayabiliriz. Belirleyebileceğimiz özellikler çizelgede görülmektedir.

Monday, 10 August 2009

SVN Keyword Substitution

  • SVN commitlerinde revision,date, author gibi değerlerin otomatik eklenmesi için
  1. Kullanıcının root dizini altında Subversion dizini altındaki config dosyasında yer alan(./subversion/config) "enable-auto-props = yes" satırı eklenmelidir.
  2. Yine aynı konfigurasyon dosyasında .java uzantılı dosyalar için Date,Author,Revision gibi etiketler verilerek bunların karşılığının commit sırasında var olan değerlerle değişmesi için "*.java = svn:keywords=Date Author Revision Id HeadURL" satırı eklenmelidir. (Not:Önceden eklenmiş dosyalar için bu değişikliğin etkisi yoktur,Otomatik değişim için etiketleri ekledikten sonra "add" veya "import" çalıştırılmalıdır. )
  3. Örneğin Foo.java idosyasının içeriğinde aşağıdaki gibi bir kullanım sonrası yeni Foo.java elde edilecektir.

//Foo.java (commit öncesi)

package aa;

/**
* @author: Bekir Sıtkı Ertuğrul
* @author: XXXX YYYY
* @author: Last modified by $Author: $
* @version: $Revision: $ $LastChangedDate: $
*/
public class Foo {
}

//Foo.java (commit sonrası)

package aa;

/**
* @author: Bekir Sıtkı Ertuğrul
* @author: XXXX YYYY
* @author: Last modified by $Author: Bekir $
* @version: $Revision: 19 $ $LastChangedDate: 2009-08-06 11:25:57 +0300 (Per, 06 Ağu 2009) $
*/

public class Foo {
}

  • SVN'de bulunan dosyalara daha önce eklenmemiş olan Date,Revision gibi değerlerin eklenmesi

(Not: Yapacak olduğumuz bu ayarı TortoiseSVN ilede yapabiliyoruz.)

  1. Yazdığımız java classlarına istediğimiz etiketleri ekliyoruz.

package aa;

/**
* @author: Bekir Sıtkı Ertuğrul
* @since: Last modified at $Date: $
*/
public class Foo {
}

2. Sonra aşağıdaki scripti çalıştırıyoruz.

svn up
find . -type f | grep -v '/\.svn/' | egrep "\.(java)$" > list
for FILE in `cat list`
do
svn propset svn:keywords "Date Author Revision Id HeadURL" $FILE
done
svn commit -m "Adding Date property to some files"

Thursday, 30 July 2009

Network Simulator-2 (NS2)

NS-2 UC Berkeley tarafından gelistirilmis çesitli IP tabanlı networkleri simüle edebilen olay tabanlı network simülatorüdür. NS-2 ile TCP, UDP gibi network protokolleri ve FTP, Telnet, WEB, CBR ve VBR gibi trafik kaynaklarını ve Drop Tail, RED, CBQ gibi router kuyruk yönetimini ve Dijkstra gibi routing algoritmalarını gerçeklestirilebilir. NS aynı zamanda LAN simülasyonları için bazı MAC katmanı protokollerini de gerçeklestirme imkanı sunar. NS-2 ayrık olay simülatörüdür. NS2 3 tip ayrık olay dağıtıcısı bulunmaktadır: list, heap ve hash tabanlı takvim. NS2 aynı zamanda default olarak network node'larının gerçeklestirimi, network node'larının bağlanması, yönlendirme algoritmaları, bazı tasıyıcı seviye protokolleri(özellikle UDP ve TCP’nin çok farklı çesitleri) ve bazı network trafiği üreticilerini sağlar. Ayrıca simülatöre ekstra fonksiyonlarla genisletilebilmektedir.


Şekil-NS ile Lan simulasyonları için bazı MAC katmanı programları

NS2 aynı zamanda gerekli tcl derleyiciler, simülasyon senaryo üreteci ve simülasyon topoloji üreteci gibi utilityler içermektedir. Tcl derleyiciler tcl scriptlerini derlemek için kullanılmaktadır ve eğer simülasyonu gerekli genis bir script ile kontrol edilmek isteniyorsa gereklidir. Tcl derleyicisi eğer otomatik olarak kurulmadıysa, NS2 tarafından içerilmez, fakat daha sonra kurulabilir. Tcl derleyicisinin bir dezavantajı, kullanılan tcl versiyonuna bağımlı olması ve aynı
zamanda NS2 versiyonuna da bağımlı olmasıdır.



Şekil- OTCL Yorumlayıcısının Yapısı

Yukarıdaki şekilde NS'in basitlestirilmis bir görüntüsüdür. Burada görüldüğü üzere NS OO TCL (OTCL) script yorumlayıcısı içermektedir. NS kütüphanesinde olay tasarlayıcı(event schedule) nesneler, ağ bileseni(network component) nesneleri ve ağ kurulum yardım menüleri vardır. Diğer bir deyisle NS i kullanmak için yapmak istediklerinizi Otcl script dilinde yazmanız gereklidir. Yapacağımız simulasyonu OTCL ile yazarken kullanıcı olay tasarlayıcısı ilklendirilir ve ağ nesneleri ve plumbing fonksiyonlarını kullanarak ağ topolojisini olusturur, son olarakta trafik kaynağına paketleri ne zaman göndermeye baslayacağı ve sonlandıracağı zamanı söyler. Plumbing terimi ağın ayarları manasında kullanılmaktadır.
NS'in en büyük bilesenlerinden biriside olay tasarlayıcısıdır(event schedular).NS te olay bir paket ID sidir. Bu ID NS nesnesinin isleyebilmesi için belirli bir zamanla birlikte her paket için tekil olarak tanımlanır. Olay tasarlayıcısı simulasyon sırasında olan bütün olayları kaydeder ve olay kuyruğundan o an olan olayı gerekli network nesnesini uyararak olay kuyruğundan çıkarır.Bir paket bir network nesnesine geldiği zaman o nesnenin olay kuyruğuna seçer.Sonra sırası geldiğinde zaman kuyruktan çıkarılıp islenir ve ilgili nesneye yönlendirilir. Yazdığımız scripti çalıstırdığımızda olaylar sıraya konur ve sırayla çalıstırılır.
NS sadece Otcl ile değil C++ ilede yazılabilir.Fakat etkinlik amacıyla veri yolu ve kontrol yolu birbirinden ayrılmıstır. Paket ve olay isletim süresini düsürebilmek için olay tasarlayıcısı ve basit network bilesenleri C++ ile yazılır. Bu derlenmis C++ ile yazılmıs nesneler Otcl yorumlayıcı tarafından Otcl nesnelerine dönüstürülürler. Bu yolla C++ nesnelerinin kontrolü de Otcl nesnelerine verilir.
Nesneler direkt olarak Otcl ile de olusturulabilir. Sekil-3.3 C++ ve Otcl nesne
hiyerarsisini göstermektedir.


Şekil- C++ OTCL Nesne Hiyerarşisi


Şekil- NS'in genel mimarisi

Yukarıdaki şekilde NS'in genel mimarisini göstermektedir. Normal bir kullanıcı Otcl kütüphanelerini kullanarak TCL ile bir simülasyon dizayn ederken veya çalıstırırken kendisinin sol alt kösesinde bulunan tcl8.0 yazan kısımdadır. Olay tasarlayıcı ve diğer network bilesenlerinin çoğu C++ ile gerçeklestirilmistir. Otcl ve Otcl bağlantıları ise tclcl kullanılarak gerçeklestirilmistir.
Topoloji üretimi için 4 seçenek var: NTG, RTG, GT-ITM ve TIERS paketleridir. En azından GT-ITM NS2’nun bir parçasıdır. NS2 ile birlikte çalısabilmesi için Knuth’un cweb ve SGB yazılımı gerektirir, fakat bu yazılımpaketleri zaten NS2’un parçasıdır. Bu topoloji üreteçleri ile tüm topolojileri el iletanımlama ihtiyacı olmaksızın genis network topolojileri olusturabilir.

Simülasyon senaryo üreteci düğümleri arasında trafik olusturmak için kullanılabilir. Wireless Network’leri simüle ederken, senaryo üreteci aynı zamanda düğümlerin hareketlerini tanımlayan dosya olusturur.

OTCL Yapılarının Tanımlanması



NAM Editörü
NS-2 ortamında bir network birbirine linklerle bağlanmıs nodelar ile yapılandırılırlar. Nodelar ve linkler birbirlerine çok değisik özelliklerle ilistirilirler. Mesela “agent ” adı verilen bir bilesen vardır. Bu herhangi bir node ile iliskilendirilerek, farklı network paketleri(TCP agent, UDP agent) üretmekle sorumludur. Network üzerinde paket tipleri belirlenince trafik olusturmak için
gerekli bir kaynak vardır. Trafiğin kaynağı ise uygulama(application) olarak isimlendirilir. Bu kaynak belirli bir agent ile iliskilendirilir. Bu yapı asağıdaki şekilde görülmektedir.



Şekil-Kaynağın Agent ile ilişkilendirilmesi

Yukarıda basit bir NS-2 network simülasyonu gösterilmektedir. Simdi basitçe bu simülasyon yapısını olusturmayı anlatalım.
1-NS-2 simülasyonu için önce nodelar olusturulur. Sekil-3.6'de Node-1 ve Node-2 olarak görülmektedir.
2- Sonra bu nodeları birbirine bağlamak için bir link olusturulur. Link olustururken bandwith, gecikme süresi, kuyruk tipi gibi değiskenler belirlenir.
3-Sonra nodelara UDP,TCP gibi agentlar atanır. Bu agentlar gidecek paket tipleri gibi node'un özelliklerini belirtir. Bu agentlar her bir node için ayrı olmalıdır.
Eğer node paket göndermeyecekse bile paket alımını gerçeklestirecek “null(sink)” agent olusturulur. Olusturulan agentlarla hangi node diğerine paket gönderecekse o nodelara ait olusturulan agentlar birbirine bağlanırlar.
4-Sonra bu agentlar için paket üretimini yapacak yani trafiği olusturacak uygulamalar olusturulup agentlara bağlanırlar. Ve bu uygulamalara baslangıç zamanları göndereceği paket büyüklükleri gibi parametreler set edilerek paket gönderimi sağlanır.
Asağıdaki yapılar bütün Otcl scriptlerinde olmalıdır.

NS-2' ya Giriş

NS kurulduktan sonra var olan bir Tcl scripti çalıstırmak için 'ns tclscript_adi'
yazmanız yeterlidir. Burada tclscript_adi sizin yazdığınız tcl dosyasının adı yerine kullanılmıştır. Eğer terminalinizden sadece 'ns' komutunu çalıstırırsanız size koduyazabilmeniz için tcl shell sunar. Çok kullanıslı bir ortam değildir. Yazmış olduğunuz scripti çalıstırdıktan sonra size stout üzerinde bir output olusturur. Bu oluşan dosya NAM gibi editörlerle açılabilir.

XGraph

Ns-allinone paketinin bir parçası da xgraph, simulasyon sonuçlarının
grafiksel sunumunu olusturan bir çizim programıdır. Orijinal programı herhangi bir X11 görünümü üzerinde çizmeyi destekler ve zoom yapabilmeyi sağlamak gibi bazı ekstra faydalı özelliklere sahiptir.
Orijinal koda 2 yeni özellik eklendi. Birincisi, ilk ham animasyon dataseti
yapar ve sadece bu yüklenen dataseti anime eder. Eğer dosyadaki veriler zamana göre sıralı ve düzenli ise bu yöntem faydalı. Ayrıca kod senin datanı nümerik olarak isletir ve yeni XGraph ekranında gösterir.
Fakat bazı sıkıcı problemler bulunmaktadır. Expose eventler meydana geldiğinde ekranı 4-5 kere refresh etmeye zorlar.