March 2005 Entries etiketi ile ilgili girdiler...
http://csharp-source.net/ adresindeki listede C# ile yazilmis açik kaynak projelerin bir listesi var.Yararli bir liste oldugu kanisindayim.

Asagidaki VS.NET eklentisi ile kodunuzu HTML olarak kopyalayabiliyorsunuz. Blog veya dökümantasyon için oldukça yardimci bir eklenti.

http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/

Eklenti, kod penceresi için otomatik olarak sag mouse menüsünde bulunuyor fakat XML gibi diger kod pencerelerinde yok. XML belgelerini HTML olarak kopyalamak için Tools/Customize menüsünden Commands sekmesine gidin ve listeden Addins seçenegini bularak sag taraftaki "Copy As HTML" seçenegini herhangi bir menüye ekleyebilirsiniz.

Iste bir örnek:

        private bool AlllowService(HttpContext context)

        {

            return    (

                        Config.Settings.AllowServiceAccess &&

                        (context.Request.RequestType == "GET" || Config.CurrentBlog(context).AllowServiceAccess)

                    );

 

        }

Google, masaüstü arama uygulamasini API olarak programcilarin begenisine sundu. Asagidaki linklerden gerekli bilgiyi ve API'leri indirebilirsiniz.

GenelBilgi http://desktop.google.com/?promo=hpp-gds-en-v1-1

Hakkinda sayfasi - http://desktop.google.com/about.html

Eklentiler - http://desktop.google.com/plugins.html 

SDK - http://desktop.google.com/downloadsdksubmit 

Nasil kullanilir - http://desktop.google.com/developerguide.html

Yillardir bilgisayarimdaki dosyalari tam olarak arayacak, içerik kontrolü yapacak ve tam olarak sonuçlari gösterecek bir araç aradim. Hiç kimsenin kullanmadigi Microsoft Indexing servisini bile denedim. Ama gelin görünki istediklerimi yapacak bir yazilim bulamamistim.

Bazen bir kod parçasini, bazen bir PDF belgesindeki bir kelimeyi aramak ve bu isleri sadece bir arama makinesinden yapmak istiyordum. Nihayet dualarim kabul oldu. Hemde fazlasi ile.

Microsoft simdi bir Desktop Arama motoru gelistiriyor ve IFilter arayüzü sayesinde genisleme imkani var. Örnegin PDF belgelerinde arama yaptirmak için bir IFilter var. Böylece PDF'lerde kelime aramak kolaylasacak. http://beta.toolbar.msn.com/ adresinden indirip kurabilirsiniz. Kurulumdan sonra gelen IExplorer sayfasinda PDF IFilter için bir link göreceksiniz.

Diger IFilter eklentilerini http://www.documentlocator.com/download/ifilters.htm adresinden takip edebilirsiniz.

Googleda da Google Desktop Search var. Çok hizli çalisiyor fakat en az 1gb yer istiyor. Kurup denemek için bakmaya deger.

Microsoft Security Summit

8:30 - 9:30 Keynote - Microsoft Technology Update

Microsoft Güvenlik Zirvesi, Ben English'in açilis konusmasi ile basladi. Ben internet üzerinde güvenlik açisindan son günlerde sikça rastlanan güvenlik açiklarina dikkati çekerek, korunmak için neler yapilabilecegi hakkinda bilgiler verdi.

Ben English - Security Lead at Microsoft Australia

Andrew Cunningham - Product Manager for Exchange, ISA & Management Server

Açilisdan sonra Raj Nataranan, Windows Server 2003 service pack 1 kurulumu hakkinda bilgi verdi. RC1 su siralarda çikti, esas sürümde yakinda çikacak. Kurulum sirasinda isinize yaramayan servisleri ve rolleri kapatarak belirli oranda bir koruma saglayabiliyorsunuz. SUS (Software Update Services) 'da artik WUS (Windows Update Services) ile yer degistirecek. WUS henüz beta ve ne zaman piyasaya çikacagi konusunda bir bilgi alamadim. Yakin gelecekte Microsoft ürünlerini güncellemek için MS'in sitesinde igne aramamiza gerek kalmayacak. Tüm MS ürünleri Microsoft Update hizmetinden yararlanilarak güncellenebilecek.

9:30 - 10:30 - MSDN Track - Visual Studio Team System Overview

Prashant Sridharan VS2005 ve VSTS (Visual Studio Team System) hakkinda konustu. Beta 2 2005 ilk çeyregi içinde (Mart sonu yada Nisan basi) çikacak. Enterprise Architect ve Enterprise Developer sürümleri ortadan kalkiyor. VSTS içinde 3 adet sürüm var bunlar:

VS Team Architect: Bu sürümü uygulama mimarlari kullanacak. Görsel olarak sunuculari, ag yapisini ve yazilacak Ag Hizmetlerini planlamak için olusturulmus. Ag Hizmetlerinin girdi çiktilarini ve sunacaklari metodlari da planlamak mümkün. Biraz BEA Weblogic Platform gibi olmus.

VS Team Developer: Bu sürümle gelistirme yapmak, statik ve dinamiik kod analizi, kod performansi yapmak mümkün.

VS Team Test: Her türlü test senaryosunun üretilip uygulanabilecegi bir ortam sunuyor. Senaryolari yönetmek te kolaylasiyor.

Bu arada eger VSTS'e biraz indirimli sahip olmak istiyorsaniz simdiden bir MSDN Subscription almanizi tavsiye ederim. Böylece bu sene içinde çikacak ürünlere sahip olabilirsiniz.

Gelelim resmin en altindaki VS Team Foundation bölümüne. VS Team Foundation bir Windows 2003 sunucu üzerine, SQL Server 2005 ve Sharepoint Portal ile birlikte kurulmasi gerekiyor. SQL Server 2005, VS Team Foundation ile birlikte geliyor. Ayrica bu modül MSDN Subcription ile gelmiyor ve ayri olarak satiliyor. Bir yazilim mühendisi olarak sadece VS Team Developer ile ilgilenecegiz. Eger çok gerekirse VS Team Foundation için bir istemci programi ücretsiz olarak dagitilacak. 30mb'lik bu programi kurdugunuzda VS Team Foundation sunucularina baglanabilecek ve ekibin bir parçasi olabileceksiniz.VSS neredeyse tamamen ortadan kalkiyor. VSTF herseyi bir SQL veritabani üzerinde tutuyor. Yazilim gelistirme asamalarinda kullanilan, belge takibi, görev takibi, hata takibi, raporlama, proje yönetimi ve islerin atanmasi ve takibi bu ortam ile rahatça yönetilebiliyor. Ayrica MSN Messenger veya Outlook Task sistemi ile entegre etmek için programlari koduyla beraber verecekler. VSTF ile bir proje yarattiginizda otomatik olarak bir Sharepoint siteside olusturulacak. Excel ve MS Project ile entegre olabilecek.

NProf, NUnit, NAnt gibi kullandigimiz açik kaynak ürünlerin bir karsiligi VS 2005 ile geliyor ama açik kaynak olanlar kadar fonksiyonel olacak mi görecegiz. Ag Hizmetleri gelistirirken kutular halinde UML gibi dizayn edilecek. Ben böyle olacagini söylemistim iste oldu.

VSTS ile belli bir metodoloji kullanarak gelistirme yapabileceksiniz. Örnegin metod olarak MSF Agile (bir çesit Agile Modeling fakat Microsoft gözü ile) seçerseniz, bu metod için uyulmasi gereken kurallar tanimli halde gelecek. Size sadece bu kurallara uymasi kaliyor. Metod olarak birde Formal Process Guidance var. Ayrica olan metodlari degistirmek yada yeni metodlar gelistirmek amaçli bir de editör var.

Prashant Sridharan - VS Team System Product Manager

ve Finula Crowe

11:00-12:00 - Tools For Quality Code

Nigel Watson ve Sean Salisbury bu sunumu yapti. Nigel kod yazarken kullanilacak VSTS içinde mevcut olan Kod Analizi, Kod Profilleme gibi araçlardan bahsetti. Sean ise Compuware ürünlerinden bahsetti. Compuware bu alanda 15 seneden beri hizmewt vermis bir firma ve araçlari gerçekten çok iyi. Özellikle Security Checker çok güzel bir ürün. Kod içindeki güvenlik açigi yaratabilecek kisimlari ortaya çikararak çözümler sunuyor. Bazi kurallar tanimlayarak check-in edilecek kodun belirli standartlara uymasinida saglayabiliyorsunuz. Örnegin check-in'den evvel tüm ünite testlerini geçmesi yada tüm güvenlik testlerinden geçmesi gerekliligi gibi. Bu durumda kontrol altindaki kodun bozulmamasi saglaniyor.

Sean Salisbury from Compuware

Nigel Watson - MS Australia

1:00-2:00 - Design for Operations

Bu sunumu David Lemphers ve Nigel Watson verdi. Pek aklimda bir sey kalmadi ama genel olarak Dizayn asamasinda yapilan dizaynin, yazilim uzmanlari tarafindan gelistirilirken zorlanmadan gelistirilmesi.

David Lemphers from TeamForce

2:00-3:00 - Source Control and Work Item Tracking

Bu sunumu Prashant verdi. Check-in kurallari, ünite testi, kod analizi gibi konulardan bahsetti. Shelving konusu çok ilgi çekici idi. Yazdiginiz kodu rafa kaldirip bir kotrol task'i yaratiyorsunuz. Sonra bu task'i yan masada oturan kontrolcü arkadasa gönderiyorsunuz. Kontrolcü arkadas raftan kodu alip kontrolünü yapiyor ve tekrar rafa kaldirarak task'i size geri gönderiyor. Sizde kaldiginiz yerden devam ediyorsunuz. Branching gibi fakat daha esnek bir yapiya sahip.

3:30-4:30 - ClickOnce Deployment

Bu sunumu Andrew Coates verdi. Özetle yazdiginiz bir Windows uygulamasini IIS üzerinde yayinliyorsunuz. Müsteri siteye girerek linke tikliyor ve programi kendi bilgisayarina kuruyor. Daha sonra her program çalistirildiginda yeni sürüm var mi yok mu kontrol ediyor. Eger varsa arka planda indirip kuruyor ve bir mesaj kutusu ile bildiriyor. Müsteri isterse Add Program bölümünden bir önceki sürüme dönebiliyor. Isterseniz System.Deployment isim alanini kullanarak bu islemi bir menü adimina baglayabiliyorsunuz.

Andrew Coates - Developer Evangelist

4:30-5:30 - Intro to SQL Server 2005 Programming

SQL Server artik o bildigimiz SQL Server degil. Köprünün altindan çok sular akmis akmaya da devam ediyor. Öncelikle CLR entegrasyonu göze çarpiyor. SQL Server, CLR için bir isletim sistemi görevi görüyor. Garip degil mi? Örnegin bir assembly'i SQl Server üzerine kurabiliyorsunuz. Veritabaninin bir parçasi haline geliyor ve T-SQL sorgulamalarinda kullanilabiliyor. Row_Number(), Rank(), Dense_Rank(), NTile() gibi yeni fonksiyonlar gelmis. Ayrica kullanici tanimli fonksiyonlar ve degiskenler de tam olarak destekleniyor.

Sonuç

Simdiye kadar gittigim seminerler içinde en ögretici olani idi. Pek çok yeni ürün hakkinda bilgi aldim ve önümdeki bir kaç seneyi bu dogrultuda planladim. Çok yararli oldu. Birde ismini bildigim ama kendisini hiç görmedigim kisileri artik simaen de taniyorum.

Cruise Control sürekli kod deponuzu kontrol eden ve değişiklik gördüğü projeleri depodan indirip derleyerek daima güncel, testleri yapılmış bir sürümün oluşmasını sağlayan bir programdır. Derleme için NAnt, testler için NUnit, kodlama standartları için FXCop, kodun ne kadarının ünite testine girdiğini test etmek içinde NCover projelerini kullanır. Piyasada mevcut açık kaynak yada ücretli pek çok Kod Kontrol sunucusu ile kullanılabilir.

Benim anlatacağım kısım Kruyz Kontrol ile Subversion kod deposunun nasıl kontrol edileceğidir. Eğer Subversion nasıl kurulur merak ediyorsanız Subversion hakkındaki yazımı okumayı ihmal etmeyin. Öncelikle gerekli uygulamaları kuralım.

  1. Subversion sürüm 1.1.3
  2. NAnt sürüm 0.85 rc2
  3. NAntContribute sürüm 0.85 rc2
  4. NUnit sürüm 2.2.0
  5. Visual Studio 2003 .NET
  6. Notepad2 (XML config dosyalarını yazmak için)
  7. TortiseSVN (komut satırı ile cebelleşmemek için)

NAntContrib zip dosyasını açtıktan sonra NAntContrib\bin dizinini NAnt\bin dizini içine kopyalayın. Ayrıca NAnt\bin dizinini Environment Variables\Path değişkenine eklemeyi unutmayın. Böylece nant.exe her yerden çağırılabilsin.

Kruyz Kontrol web kontrol modülü için IIS'e de ihtiyacınız olacak. Şart değil ama log dosyalarını çok daha rahat okumanıza yarıyor. Merkezi olarak logların herkes tarafından görülmesini sağlar.

.NET ortamı için framework 1.1 kullanılmıştır. NAnt build dosyası da 1.1 için hazırlanmıştır dikkat ediniz. NAntContrib sürümü bazen uyumsuz olabiliyor. NAntContrib komutları çalışmayabiliyor. NAnt ve NAntContrib için 0.85 RC2 sürümlerini indirirseniz beraberce mükemmel çalışıyorlar. Ayrıca NUnit içinde 2.2.0 sürümünü indirin, aksi takdirde "binding redirection" komutları ile boğuşmak zorunda kalırsınız.

Benim kullandığım dizin yapısını aynen kullanın. Buradaki tüm dosyalar için bu dizinleri kullanacağım. Benim tüm projelerim D sürücüsü altında, sizinki farklı olabilir, gerekli değişikliği yapmayı unutmayın. Aşağıda benim kullandığım dizin yapısını görüyorsunuz.

İlk iş olarak bir proje yaratalım. Aşağıdaki kodu Notepad2 içine kopyalarak deneme.cs ismi ile WorkBench\CCDeneme dizinine kaydedin. Dizin yapısı için benim kullandığımın aynısını kullanın ki karışıklık olmasın. Daha sonra istediğiniz biçimde değiştirebilirsiniz.

using System;
namespace KruyzKontrol
{
    public class Gurkan{
        static void Main(String[] args){
            Console.Write("Gurkan Deneme");
        }
    }
}

Şimdi bir NAnt build dosyası hazırlayalım. Bu build dosyası ile kodumuzu derleyeceğiz. Kruyz Kontrol derleme işini devralmadan evvel bu kısmın çalışıyor olması gerekiyor. Aşağıdaki kodu gene Notepad2 içine kopyalayıp cruise.build ismi ile Workbench\CCDeneme dizinine kaydedin.

<?xml version="1.0"?>
<project name="CCDeneme" default="build" basedir=".">
    <description>herhangi bir aciklama</description>
    <property name="debug" value="true" />
    <property name="defaultframework" value="net-1.1" />
    <target name="build" description="Kodu Derler">
        <csc target="exe" output="Deneme.exe" debug="${debug}">
            <sources>
                <include name="Deneme.cs" />
            </sources>
        </csc>
    </target>
</project>

deneme.cs dosyasının olduğu dizine bir komut satırı açıp aşağıdaki komutu girin. Böylece NAnt derleme yapıyor mu test etmiş olacağız.

D:\Workbench\CSharp\Deneme\>nant -t:net-1.1

Derleme işleminden sonra dos ekranında aşağıdaki gibi bir çıktı görmeniz gerekir.

NAnt otomatik olarak dizin içinde .build uzantılı bir dosya arayacaktır. Bulduğunda da içindeki bilgileri kullanarak kodu derlemeye çalışacaktır. -t parametresi ile .NET Framework 1.1. sürümünü kullanmasını istediğimizi belirtiyoruz. Eğer derleme başarılı olursa aynı dizinde bir exe ve bir de pdb dosyası oluşması gerekir. Bunları kontrol ederek derleme işleminin gerçekleştiğini teyit edin.

Eğer buraya kadar herşey başarılı oldu ise projedeki tüm dosyaları Subversion'a göndermek için TortoiseSVN'i kullanın. Benim Subversion kurulu sunucumun ismi YODA bu durumda TortoiseSVN ile svn protokolü kullanarak sunucuya ulaşmak için svn://Yoda yazmam yada YODA'nın IP adresini kullanmam gerekir. Örneğin svn://192.168.0.1 gibi. Proje için bir dizin oluşturmayı da ihmal etmeyin. Örneğin svn://Yoda/CCDeneme/ gibi

Şimdi geliyoruz esas dananın kuyruğunun koptuğu yere. Kruyz Kontrol sıkıştırılmış bir dosya halinde dağıtılıyor. Bu dosyayı yukarıda belirttiğim gibi OpenSource\CruiseControl dizinine açın.

Kruyz Kontrol'ün çalışabilmesi için bir config dosyası gerekiyor. Aşağıdaki kodu Notepad2 içine kopyalayarak ccnet.config ismi ile OpenSource\CruiseControl\server dizini içine kaydedin. Bu dosya ccnet.exe için bir konfigürasyon dosyasıdır ve neyi nerede bulacağını söyler.

<cruisecontrol>
<project>
    <name>CCDeneme</name>
    <webURL>http://Yoda/ccnet</webURL>
    <triggers>
            <intervalTrigger seconds="30" />
    </triggers>
    <sourcecontrol type="svn">
        <executable>svn.exe</executable>
        <trunkUrl>svn://Yoda/DotNet/CCDeneme</trunkUrl>
        <workingDirectory>D:\Workbench\CCDeneme</workingDirectory>
        <username>gurkan</username>
        <password>gurkanpass</password>
        <autoGetSource>true</autoGetSource>
    </sourcecontrol>
    <build type="nant">
        <executable>D:\OpenSource\NAnt\bin\nant.exe</executable>
        <baseDirectory>D:\Workbench\CCDeneme</baseDirectory>
<buildArgs>"-D:svn.executable=c:\program files\subversion\bin\svn.exe" 
  -defaultframework:net-1.1 </buildArgs>
        <buildFile>cruise.build</buildFile>
        <targetList>
            <target>build</target>
        </targetList>
        <buildTimeoutSeconds>300</buildTimeoutSeconds>
    </build>
    <publishers>
        <xmllogger>
            <logDir>D:\OpenSource\CruiseControl\web\log</logDir>
        </xmllogger>
    </publishers>
</project>
</cruisecontrol>

Buradaki önemli satırların açıklamalarını yapalım. projeleri birbirinden ayıran isimdir ve herhangi bir isim verilebilir. derleme işleminin örütbağ üzerinden takip edilmesi için kullanılacak adresi belirtir ve cctray uygulaması ile derlemeyi takip ettiğinizde işinize yarayacaktır. kaç saniyede bir deponun kontrol edilmesi gerektiğini belirtir. kısmında projenin Subversion deposunda nerede olduğunu belirtiyoruz. projenin lokal çalışma dizinini belirtiyor. ise Kruyz Kontrol'a eğer kodda değişiklik varsa Subversion deposundan indirmesi gerektiğini söylüyor. Aslında kodu indirme işini NAntContrib ile de yapabiliriz. kısmında esas derleme işlemini gerçekleştirecek olan cruise.build dosyasının yeri ve yer alıyor. Bir NAnt .build dosyası birden fazla içerebilir. Daha ayrıntılı bilgi için NAnt belgelerini inceleyin. kısmında proje derlendikten sonra oluşan log dosyalarının nereye yazılacağını belirtiyoruz.

CruiseControl\web dizini içine "log" isminde bir dizin yaratın. CruiseControl\Web altında web.config dosyasını Notepad2 ile açarak aşağıdaki satırı bulun:

add key="logDir" value="log" />

Ve bu satır ile değiştirin:

<add key="logDir" value="D:\OpenSource\CruiseControl\web\log\" />

Kruyz Kontrol dizini altındaki web dizinini IIS içinde virtual directory (sanal dizin) olarak kayıt edin. İsim olarak "ccnet" verin.

Artık ccnet.exe programını çalıştırabiliriz. Komut satırına geçip CruiseControl\server dizinine geçin ve ccnet.exe programını çalıştırın. ccnet, config dosyasını kullanarak Subversion içindeki projeyi kontrol eder, eğer değişiklik varsa indirip derleme işlemini başlatır. Derleme bitince komut satırında bir mesaj göreceksiniz. ccnet çalışmaya devam edecektir ve DOS komut satırına dönmeyecektir. Her 30 saniyede bir Subversion üzerindeki projeyi kontrol ederek değişiklik var mı bakacaktır. Her yapılan işinde bir kaydını tutacaktır. Log kayıtlarını görmek için IIS kullanacağız.

Şimdi http://localhost/ccnet adresine gidin. Eğer aynı isimleri kullandıysanız adres üstüne sağ tıklayıp "Open in New Window" diyebilirsiniz. Bu adresde aşağıdaki sayfayı görmeniz gerekir.

Eğer benim gibi bir kaç makineden oluşan bir ağınız varsa diğer bir bilgisayarda cctray uygulamasını kurup CruiseControl sunucusu üzerinde ki derleme işlemlerini takip edebilirsiniz. CruiseControl\cctray dizinini olduğu gibi diğer bilgisayara kopyalayın ve cctray.exe programını çalıştırın. Bu arada CruiseControl sunucusunda ccnet.exe'de çalışıyor olmalı. Böylece her derleme olduğunda bir mesaj ile uyarılacaksınız. Cctray uygulamasını eğer başka bir bilgisayarda çalıştırıyorsanız ayarlarını şu şekilde yapın. YODA yerine sizin ccnet.exe programını çalıştırdığınız bilgisayarın ismi yada IP adresi gelecek.

Server : tcp://YODA:21234/CruiseManager.rem

Project Name: CCDeneme

Buraya kadar başardığımız işleri bir sıralayalım.

  1. ccnet.config dosyasını düzenleyerek Subversion ile Kruyz Kontrol arasındaki bağlantıyı kurduk.
  2. ccnet.exe uygulamasını çalıştırarak Subversion kod deposunun kontrol edilmesini sağladık.
  3. Depoda bir değişiklik olduğunda KruyzKontrol kodu indirerek NAnt ile derledi.
  4. Derleme işlemini web üzerinden takip edebiliyoruz.
  5. cctray.exe uygulaması ile derleme işlemi hakkında haberdar olabiliyoruz.
NUnit Testlerini ekleyelim

Şimdi projemize bir de NUnit testi ekleyeceğiz ve NAnt ile derlerken testlerinde yapılmasını sağlayacağız. Bu işlemi hallettikten sonrada Kruyz Kontrol ile entegre ederek çıktıları görmeye çalışacağız. Bir süreliğine ccnet.exe uygulamasını kapatın. Öncelikle NAnt ve NUnit'i beraber çalışıyor hale getirmemiz lazım. Daha sonra tüm yaptığımızı Kruyz Kontrol ile görmeye çalışacağız.

Bu sefer Visual Studio ile bir Class Library projesi oluşturun. Namespace olarak KruyzKontrol verin. Projede class1.cs dosyasını aşağıdaki gibi değiştirin. Böyle yapmamızın sebebi NUnit assembly kütüphanelerinin Notepad kullanılarak yazılan C# kodlarından çağırılamaması. Visual Studio ile derleme yaparken .csproj dosyasındaki HintPath dizinlerini kullanarak NUnit assembly kütüphanelerine erişiyor.

using System;
using NUnit.Framework;
namespace KruyzKontrol
{
 

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    [TestFixture]
    public class Class1
    {
        public Class1()
        {
            //
            // TODO: Add constructor logic here
            //

        }
 

       [Test]
        public void BuTestHataVerecek()
        {
            Assert.Fail("Bu test hatalidir ve Kruyz Kontrol da cikacak");
        }

    }
}

Bu projeyi Workbench\CCDeneme altına Test isminde bir dizin açarak CCDenemeTest ismi ile kaydedin. Daha sonra TortoiseSVN kullanarak CCDeneme altına gene Test isminde bir dizin açarak Subversion'a gönderin. Repo-Browser ile baktığınızda Subversion içinde aşağıdaki yapıyı görmeniz gerekir.

Şimdi cruise.build dosyası üzerinde bazı değişiklikler yapacağız. Öncelikle NUnit testleri ile ilgili kısmı Subversion'dan indireceğiz. Böylece NAnt nasıl Subversion ile çalışıyor görmüş olacağız. İndirirken biraz temizlik yapacağız ve en sonunda da build kısmında NUnit testlerini çalıştırarak çıktıları Kruyz Kontrol ile görmek için XML olarak alacağız. Aşağıda cruise.build dosyasının yeni halini görüyorsunuz.

<?xml version="1.0"?>
<project name="CCDeneme" default="build" basedir=".">
 <record name="Buildlog.txt" level="Info" action="Start"/>
    <description>herhangi bir aciklama</description>
    <property name="debug" value="true" />
    <property name="defaultframework" value="net-1.1" />
    <target name="build" depends="get">
        <csc target="exe" output="Deneme.exe" debug="${debug}">
            <sources>
                <include name="Deneme.cs" />
            </sources>
        </csc>
<solution configuration="debug" solutionfile="Test\CCDenemeTest.sln" />
        <nunit2>
            <formatter type="Xml" />
            <test assemblyname="Test\bin\debug\CCDenemeTest.dll" />
        </nunit2>
    </target>
    <target name="get" depends="clean">
        <svn command="checkout"
            uri="svn://Yoda/DotNet/CCDeneme/Test"
            destination="D:\Workbench\CCDeneme"
            username="gurkan"
            password="gurkanpass"
            verbose="true"/>
    </target>
    <target name="clean" >
        <delete dir="Test" failonerror="false" />
        <mkdir dir="Test" />
        <delete file="Deneme.exe" failonerror="false" />
        <delete file="Deneme.pdb" failonerror="false" />
    </target>
 <record name="Buildlog.txt" action="Close"/>
</project>

Bir kaç hedeften (target) oluşan bu build dosyası önce gerekli dizinleri silecek, test projesini indirecek, CCDeneme ve CCDenemeTest projelerini derleyecek ve son olarak ta testleri yapacaktır. Komut satırına geçip NAnt ile derlemeye çalışın. aşağıdaki gibi bir mesaj alıyor musunuz?

D:\Workbench\CSharp\Deneme\>nant -t:net-1.1

 

Eğer yukarıdaki gibi hata mesajlarını alıyorsanız istediğimiz oldu demektir. Artık burada görülen hatayı Kruyz Kontrol ile web üzerinden görebiliriz. Önce ccnet.exe uygulamasını çalıştırın ardından http://localhost/ccnet/default.aspx adresine gidin. Aşağıdaki gibi hata mesajlarını görmeniz gerekir.

 

Bu yazıyı burada noktalıyorum. Vaktim olursa çoklu projeleri de bir ara anlatacağım.

Herkese kolay gelsin, yararlı oldu ise ne ala

Ne kadar kötü oldugumu gösteren testten sonra, simdide ne kadar inek oldugumu gösteren test ile huzurlarinizdayim. Valla ben bile %79'luk bir oran beklemiyordum. Sürpriz oldu. http://www.wxplotter.com/ft_nq.php?im adresinden sizde ne kadar inek oldugunuza bakabilirsiniz.

I am nerdier than 79% of all people. Are you nerdier? Click here to find out!

Blogun adresine göre yerini haritada buluyor. Ilginç bir proje
Ayrintili bilgi için http://www.csthota.com/blogmap/ adresine bakiniz.

my blogmap

Posta kodu olmadan ancak bu kadar buluyor. Ülke listesinden "Other" seçip Turkey olarak girin.
https://interaktif.ptt.gov.tr/postakod2/index.php3 adresinde posta kodunuzu ögreneceginiz bir sorgulama formu var. Fakat BlogMap bizim posta kodlarini tanimiyor.

Richard M. Stalman bizim evrenkentte bir seminer vererek Açik Kaynak (Open Source) felsefesi üzerine konustu. Söyledigi pek çok sey mantikli geliyor kulaga fakat ben hala Açik Kaynak program gelistirerek nasil para kazanacagimizi pek anlamadim. Linux üzerine Mono.NET kurdum, XSP ile ASP.NET bile yayinlayabiliyorum fakat bir yere kadar. Ben gene Microsoft ile yasayacagim sanirim. Zaten Microsoft ürünleri kullanilarak üretilen pek çok Açik Kaynak proje var, gerekirse onlari kullanabiliriz.

Richard M. Stalman

http://www.shawnburke.com/default.aspx?document=185 linkindeki bloga göre .NET Framework 2.0 Windows Forms kütüphanesinin kod olarak dagitilmasi düsünülüyor. Eger mümkün olursa Trace sirasinda hata ayiklarken Framework içindeki kodlara dallanabilecegiz. Tabii ki pdb debug dosyalarida beraberinde dagitilacak.

Her zaman bazi problemleri çözmek ve arka planda neler olup bitiyor görmek için trace sirasinda bu Framework içine dallanmak istemisimdir. Umarim yakin zamanda dagitima baslarlar.

Ne kadar rahat degil mi? Eee adamlarin kendi memleketi ve yayilmaya haklari var.

Subversion'i indirip kurduktan sonra bir veritabani yaratmaniz gerekiyor. Bu veritabani sizin projelerinizi saklayacaginiz deponuz olacaktir. Depoyu yaratmak için herhangi bir dizini kullanabilirsiniz. Önemli olan bu dizinin yedegini arada sirada almak.

C:\>svnadmin create C:\Depo

Dos komut satirinda bu komutu verdiginizde c:\Depo dizininde bir veritabani yaratilacak ve kullanima hazir hale gelecektir. C:\Depo\conf dizinine girin ve svnserve.conf dosyasini Notepad ile açin. Asagidaki iki satiri bulun ve bu sekilde degistirin. Bu degisiklik sadece kayitli kullanicilarin deponuza erismesi için gerekli. Satir baslarindaki # isaretlerini kaldirmayi unutmayin.

anon-access = none

auth-access = write

Daha sonra kullanicilari tanimlayacagimiz dosyanin burada kaydini yapmamiz gerekiyor. Satir basindaki # isaretini kaldirmaniz yeterli.

password-db = passwd

Ayni dizin altinda passwd ismiyle bir dosya olusturun. Notepad ile açip asagidaki satirlari girin. Buradaki düzen:
kullanici ismi = parola
biçimindedir.
 

[users]

gurkan = asdfgh

http://dark.clansoft.dk/~mbn/svnservice/ adresinden Subversion sunucu programini Windows Service olarak kurmak için gerekli dosyayida indirin. Zipli dosya içindeki SVNService.exe dosyasini Subversion\bin içine kopyalayin. Komut satirina geçip asagidaki komutu girin:

C:\>SVNService -install -d -r C:\Depo

Bu komut ile birlikte Windows Services içinde Subversion isimli yeni bir servis kurulacaktir. Asagidaki komutu girerek servisi baslatabilirsiniz.

C:\>net start SVNService

Bu isleri hata almadan tamamladiysaniz artik elinizde gönül rahatligi ile kullanacaginiz bir kod kontrol sistemi var demektir. Simdi bunu nasil kullanacagiz ona bir bakalim. Öncelikle erisim olayina bakalim. Demin yukarida verdiginiz komutlar ile 3690 portunda dinleme yapan bir servis kurdunuz. Size tavsiyem TortoiseSVN programini kullanmaniz yada VS.NET için AnkhSvn eklentisini indirip kurmanizdir. Komut satirinda cebellesmekten çok daha verimli çalisirsiniz. NetBeans ile Java yazanlar içinde bir modül mevcut.

svn://(Subversion kurulu bilgisayarin ismi yada IP adresi)

Bilgisayarin IP adresini yada ismini verirken parantez isaretlerini kullanmayin. Eger TortoiseSVN kullaniyorsaniz kullanici ismi ve parola soran bir ekran göreceksiniz. Yukarida passwd dosyasina girdiginiz degerleri burada kullanacaksiniz. Yani kullanici ismi gurkan ve parola da asdfgh.

Bundan sonrasi gene her zaman oldugu gibi size kalmis.

Kolay Gelsin

.NET ile yazilim gelistirirken kullandigim araçlari bir siralayayim dedim:

Proje Yönetimi
MasterListXL (ücretsiz)

IDE
MS Visual Studio .NET 2003
Sharp Develop (ücretsiz)
Web Matrix (ücretsiz)

UML
ArgoUML (ücretsiz)
MS Visio 2003

Patterns
DOF Design Patterns (ücretsiz)
MS Patterns Practices (ücretsiz)
MS Application Blocks (ücretsiz)

Kod Kontrol
Subversion (ücretsiz)
TortoiseSVN (ücretsiz)
AnkhSVN (ücretsiz)

Devamli Entegrasyon
CruiseControl.NET (ücretsiz)

Derleme Araçlari
NAnt (ücretsiz)
NAntContrib (ücretsiz)

Yardimci
Reflector (ücretsiz)
Reflector AddIn (ücretsiz)
CodeSmith (ücretsiz) (Pro sürümü ücretli)

Ünite Testi
NUnit (ücretsiz)
NUnit AddIn (ücretsiz)
NUnit için TestRunner (ücretsiz)
NUnit ASP (ücretsiz)
NUnit Forms (ücretsiz)

Kod Analizi
FXCop (ücretsiz)
FXCop AddIn (ücretsiz)

Belgeleme
NDoc (ücretsiz)

Kütüphaneler
Logidex.NET (ücretsiz)

Ayrica SourceForge ve Tigris üzerinde ise yarayacak tonla araç veya kütüphane bulabilirsiniz.

Her yazilim gelistirme metodu temelinde kullanilabilir, hatasiz ve müsteri gereksinimlerini tam olarak karsilayan bir ürün üretebilmek için ortaya çikmistir. Bir bakima dinler gibi hepsi temelinde iyiye ve dogruya yöneltmeye çalisir insanlari ve bu yolda uygulanmasi gereken bir dizi kuraldan bahseder.

Yazilim gelistirme metodlarinda sonradan eklenen çesitli yöntemler ile metod artik takip edilmesi ve ögrenmesi zorlasmis bir hal alir ki bu da projelerin uzamasina ve onaylama mekanizmalarinin çok zaman almasina neden olur.

Neyseki din degistirmek kadar kati olmadigi için kullanilan metodu degistirebilir veya farkli metodlarin çesitli kisimlarini bir araya toplayarak yeni bir olgu yaratabiliriz.

Yapisi oturmus bir firmada metod degistirmek zor olacaktir. Ve heleki yasi ilerlemis ve firmada masa, sandalye gibi demirbas listesine girmis elemanlar varsa isiniz daha da zor. Kendi istedikleri olsun da patrona “en çok ben biliyorum” gibi gözükeyim konusundan baska dertleri yoktur bunlarin. Birde tabii adamin dinini degistirmek istiyorsunuz bir bakima. Yillardir takip ettigi ve yazilim gelistirdigi metodu degistiriyormus gibi gelecektir ona. Aslinda farkina varsa sadece ufak eklentiler oldugunun, her sey daha kolay olacak.

Birden bire yazilim gelistirme metodunu degistirmek istediginizde direnislerle karsilasabilirsiniz. Bunun için ufak paketler halinde degisiklikleri sunmali ve ise yaradiginin ispatini diger çalisanlara kanitlamalisiniz.

Eski metodun bir kismini “tamami ile degistirmek” yerine (yada en azindan bu cümleyi kullanmak yerine) “degisiklikler ile güncellemek” daha iyi bir yöntem olacaktir. Yapilan isin ismini ayni birakin fakat isleyisini degistirin. Getirmeye çalistiginiz metodun ismini ise kesinlikle kullanmayin. “Ben burada Extreme Programming metodunu uygulayacagim artik” derseniz bastan kaybedersiniz. Bunun yerine sebep sonuç yasasini kullanin. Eger sebepler metodu degistirmeniz için bir sinyal veriyorsa, isleyisi degistirip sonuçlarinda yapilan kara bakin ve daha iyi bir metod oldugunu herkese kabul ettirin.

Extreme Programming ismi kulaga uzaydan düsme bir isim gibi gelsede içerik olarak uygulanan metodlarin günümüzde kullandigimiz metodlardan pek farki yok. Bir miktar da insanin kendi özverisi ile zaten uyguladigi seyler. Bu tip mevhumlari ögretemezsiniz zaten, insanin kisiliginden gelen seylerdir. Ama görsel olarak uygulayabileceginiz pek çok XP yöntemi mevcuttur.

Narsistlik yapip sadece kendini düsünen kisiler olacaktir. Onlara hak da veriyorum çünkü kendilerini satabilecekleri tek hünerlerini digerlerine ögretmesini istiyorsunuz. Kisinin aklina “acaba ilerde beni sutlayacaklar mi” sorusunu sokar ki bu kisi hiç çalismasa daha iyi olur. Verdigimiz seylerden daha çok aldigimiz seyler ile ilgilenip daha fazla nasil gelistirebilirim diye düsünmemiz lazim. Ilerleme ancak bu sekilde olur. Ama zor bir yoldur.

Neyse biz konumuza dönelim. Anlatacagim bir kaç XP metodunu ben deneyip gördüm ki gerçektende yazilim gelistirme asamasinda ise yariyor ve hizli bir biçimde sonuca ulastiriyor. Aslinda eski metod da hakkiyla uygulandiginda sonuca ulasilabilir fakat insanoglu yasayan bir organizma ve bir süre sonra rutin islerden sikilmaya basliyor, üstelik bir de yapilan is pek çok kontrol gerektiriyorsa ve “bunu yapmasak ta olur” gibilerinden suistimale açiksa hiç bir zaman hakkiyla uygulanmiyor. Bizim amacimiz yapilan isi basitlestirmek veya parçalara bölerek yapmak.

BENIM HIKAYEM
Bu bölümde benim basimdan geçen bir durumu aktaracagim. Uzun gelirse buradan sonrasini okumaniza gerek yok.

Ürün destek bölümüne ilk geçtigim zaman bir basibosluk sezinledim. Proje bitmis ve ben tek basima üründen sorumlu olarak tayin edilmistim. Bana yardimci olacak bir eleman verdiler fakat bu kisinin konu ile yakindan uzaktan alakasi yoktu. Birakin olayin isleyisini programciliktan anlamayan bir kisi idi.

Büyük problemin farkindaydim fakat proje müdürüm farkinda degildi ve bana verilen kisinin kisa zamanda benimle ayni seviyeye çikmasi bekleniyordu. Burada öncelikle kabul edilmesi gereken planlarin uzayacagidir. Proje müdürünü ve bana verilen arkadasi karsima alip bir toplanti yaptim. Ben her seyi aktarsam bile ürün destekte problemlere çözüm bulmak zaman alacaktir bu arkadas için, çünkü yeterli alt yapisi yok. Bunu kabul etmeleri 2 saat aldi fakat kabul ettiler. Insanoglu bazi tümsekleri görmezden gelir ya buda öyle birsey.

Benim esas problemim hem is akisini hemde programcilik konusunu bana verilen arkadasa nasil anlatmam gerektigi. Problemi parçalayip çözmek için programcilik konusunu egitimin disinda tutmaya karar verdim. Düsünecek olursaniz sizinle ayni seviyede çalisan birinin en az sizinki kadar bilgiye sahip olmasi gerekir. Bu yüzden arkadasa bazi kurslar tavsiye ettim, proje müdürü de onaylarsa kurslari ücretsiz alabilecek. Ben, sonuç olarak programcilik ögretmek için burada çalismiyorum.

MODEL DUVARI
Öncelikle tüm sistemin isleyis semasini büyük kagitlara çizerek duvara astim. Tüm kutulari isimlendirip anlattim. Tabii ilk anlatimda ancak %25 oraninda bir bilgi hafizada kalir. Daha fazlasi için tekrar gerekir. Semalari duvara asmam iyi oldu problem oldugunda hemen ilgili kutuyu gösterip anlatabiliyorum. Genel semalar disinda sinif yapisini ve veritabani yapisinida duvara astim. Böylece semalar arasinda baglanti kurarak anlatabiliyorum. Bir resmini çekip burada göstermek isterdim fakat yasa geregi göstermeyorum.

Burada kullandigim 3 çesit model tipi var. Birincisi sistemin isleyisi ile ilgili olan Is Nesneleri Modeli. Bu modelde hem bizim sistemin iç yapisi hemde diger sistemlerle olan baglantilari yer aliyor. Genel yapiyi kus bakisi görmek için ideal. Ikinci model Sinif Yapisi. Kendi sistemimiz içinde kullanilan tüm siniflar sahalari ve metodlari ile burada gösteriliyor. Üçüncü model ise Veritabani Modeli. Bunda da veritabaninin yapisi ve tablolar arasi iliskiler ile hangi “stored procedure” hangi tabloya erisiyor gibi bilgiler var.

SIK SÜRÜMLER VEREBILMEK
Ikinci olarak tüm projeyi derledim. Daha önceki sürümlerde sadece degisen kismi paketleyip kullanicilara göndermisler. Fakat tüm projenin derlenebiliyor olmasi gerekir. Visual Source Safe erisimlerini kapatip tüm projeleri indirdim ve derleme yaptim. Derleme sirasinda hatali modüller ve eksik modüller ortaya çikti bunlari temizlemek iki gün aldi. Daha önce NT4 üzerinde derlenmis ve MTS nesneleri eski idi, tüm bunlari yeni COM+ karsiliklari ile degistirmem gerekti. Tüm projeleri derledikten sonra test ekibinden test etmelerini istedim, bu arada bulduklari hatalarida düzelttim. Sonuç olarak eskisinden daha hizli çalisan ve tamami derlenebilen bir ürüne sahip olduk. Artik küçük sürümler halinde projeyi derleyebiliyorum ve her ay yeni bir sürüm kullanicilara gönderebilirim.

VSS ORGANIZASYONU
VSS organizasyonu çok kötü yapilmisti. 45 adet ufak projeden meydana gelen bir istemci uygulamasi, 18 COM+ uygulamasi ve 4 adet sürekli çalisan daemon uygulamasi var. Fakat derleme sirasinda hangi dll’in hangi projede kullanildigini anlatan bir belge bulamadim. 45 projenin her birini tek tek VB ile açarak References kismindan hangi dll veya ocx’lere erisim yapildigini yazdim. Daha sonra her projeyi numaralandirarak bir derleme sirasi olusturdum. Örnegin:
01-ErrorLog
02-DbAccess
03-BRCheck

Bu sirada derleme yapildiginda proje sifirdan derlenebiliyor. VSS’de de proje isimlerini degistirdim. Böylece her bakan bu siranin ne oldugunu tahmin edebilir.

Ilk basta var olan Development, Test, Production gibi VSS dizinlerinide teke indirip hepsini bir dizin altinda topladim. Anlamiyorum neden böyle bir yola basvuruyorlar. VSS zaten eski sürümleri tutuyor birde 3 farkli dizin açip her seyi tekrar ediyorsun. Tamami ile gereksiz bana göre. Etiketleme diye bir sey var. Eski sürümden bir dosya istiyorsan “History” kismindan indirebilirsin.

VSS için yaptigim diger bir olay ise Shadow dizinleri. Shadow dizinlerini kullanarak en son sürümün sabit disk üzerinde bir dizine toplanmasini saglayabilirsiniz. Bunun için srcsafe.ini dosyasina asagidaki satirlari eklemek gerekiyor. Admin aracindan da yapilabilir Tools-Options menüsünden Shadow Folder sekmesine gideceksiniz. Köseli parantez içindeki kisim kopyasini almak istediginiz VSS dizini. Benim 1-Builds olarak adlandirdigim dizin 45 ufak projenin exe’lerinin “Share” edildigi dizin. Bir projenin exe dosyasini sag klik ile tasiyip baska bir dizin üzerine biraktiginizda bir menü göreceksiniz. Burada “Share” seçerseniz, o dosyanin bir kopyasi bu dizinde de var olacaktir ve siz projeyi üzerinde degisiklik yapip VSS’e geri yolladiginizda bu “Share” edilmis dosya her iki dizinde de güncellenecektir. NAnt gibi bir lüksümüz olmadigi için bu yolla projenin exe, dll, ocx gibi çiktilarini bir dizinde bu sekilde toplayip daha sonra “Shadow” yöntemi ile VSS disinda normal bir dizine atabiliriz.

 


[$/1-Builds]
Shadow = \\Yoda\Builds
Shadow_SetTime = Current


Shadow_SetTime için 3 adet deger var. bunlar Current, Mod ve Update. Ne zaman projeyi VSS’e geri yollarsaniz bu “Shadow” dizinindeki ilgili dosya da güncellenecektir.

Tahmin edeceginiz gibi veritabani da VSS’de mevcut degildi. Tüm veritabanini script olarak alip VSS içine yerlestirdim ve her güncelleme için ayri bir script dizini yarattim. Böylece veritabaninda yapilan degisiklikleri takip etmek kolaylasti. Ayrica programin çalisabilmesi için gereken konfigürasyon verisi için de scriptler hazirlayip bu dizinde tutuyorum.

VSS ile isim bittiginde artik güvenilir bir kod kontrol sistemimiz oldugunu söyleyebilirdim.

ISTEK ve HATALARIN YÖNETIMI
Program için gereken degisiklik ve istekleri takip edecek bir access uygulamasi gelistirerek herkesin kullanmasini sagladim. Bu sayede kullanicilarin ne gibi problemleri oluyor veya istedikleri degisiklikler var mi kontrol edebildik. Gelen istekleri parçalara ayirarak sik sürümler içinde halletmeye çalistik. Kullanici isteklerinin hizli yapildigini görünce daha fazla degisiklikler istedi bunnlarida projelendirip yaptik. Hem kullanici kendini proje ekibinin bir parçasi olarak hissetti hemde bizim firma içindeki yerimiz saglamlasti.

Istek ve Hatalarin isleyisindeki bazi bürokrasileri ortadan kaldirdim. Bir degisiklik için 15 ayri yerden onay almak gerekiyordu. Alinacak onaylari 5’e indirip degisikligin merkezi olarak takip edilmesini saglayinca hem degisiklikler çabuk uygulandi hemde sirtinda imza atma yükü bulunan kisiler rahatladi. Imza atmak büyük sorumluluk istiyor, eger birde attiginiz imzanin ne için oldugunu bilmiyorsaniz daha da zor. Onay almak için geçen zaman uzuyor.

BELGELEME
Ilk projeyi devraldigimizda belgeleme açisindan çok fazla eksik vardi. Bu eksikligi gidermek için bir UML Case Tool ile tüm projeleri modelledim. Girdi/Çikti ve parametrelerine varincaya kadar tüm fonksiyonlari semalar halinde çizdim. Daha sonrada her fonksiyon için bir açiklama yazdim. Genel modüller içinde genis açiklamalar yazdim. Bir kere Case Tool ile bu isi yapinca, gerekli belgeleri kolayca rapor halinde yaratabiliyorsun. Ayrica tüm modelleri html sayfalari halinde yayinlayarak herkesin görmesini sagladim. Is analistleri modelleri inceleyip yorumda bulunabiliyordu.

Kod içine yerlestirdigim yorum satirlari ile daha iyi okunabilir hale gelmesini sagladim. Ayrica her public fonksiyon için “Tools/Procedure Attributes” menüsünden bir açiklama girdim. Bu dll kütüphanelerinin baska projelerde kullanilmasi halinde yardimci oluyor. Object Browser ile bir dll içindeki fonksiyonlari görüntülediginizde fonksiyonlarin açiklamalari da geliyor baska bir dökümana ihtiyaciniz kalmiyor.

XP VE BENIM YAPTIKLARIM
XP presiplerini benim yaptiklarimla karsilastirdigimizda nasil örtüsdügüne bir bakalim.
Iletisim – Proje içi iletisim ve kullanicilarla olan iletisim %70 oraninda artti.
Basitlik – Onaylama mekanizmasini basite indirgeyerek geçen süreyi %300 oraninda kisalttim. Ayrica VSS üzerindeki çalismam derleme islerinin çok kisa zamanda yapilmasina neden oldu
Geri Besleme – Kullanicilarinin kendini ifade edebilecekleri bir ortam hazirlayarak, istek ve hatalarin bize dogrudan gelmesini sagladim.
Cesaret – Tüm kodun yeniden derlenmesi ve VSS’in yapisinin degistirilmesi konusunda büyük risk aldim fakat degdi.
Agir Baslilik – Tüm bunlari yaparken insanlari bilgisizliklerinden dolayi asagilamak yada suçlamak gibi terbiyesiz girisimlerde bulunmadim.

Eger sifirdan baslamis bir proje olsa idi yapilacak çok sey vardi fakat bu proje zaten sonlanmis bir proje, yapilacaklarda kisitli oluyor. XP’nin sadece bir kismini uygulamak bile pek çok isin hizli ve tam anlamiyla yapilmasina yetti.

HiloWitz de bir test var ne kadar kötü oldugunuzu ortaya çikariyor. Iste benim sonuç:
I am 33% evil.

I could go either way. I have sinned quite a bit but I still have a bit of room for error. My life is a tug of war between good and evil. Are you evil? find out at Hilowitz.com


Testi yapin bakalim sizinki ne çikacak.

Hah bir bu eksikti. Bende merak ediyordum Microsoft ne zaman bu konuya el atacak diye. En sonunda GIANT AntiSpyware firmasini satin alarak bu alanda da bir ürünü yelpazesine katti.

http://www.microsoft.com/athome/security/spyware/software/default.mspx adresinden beta sürümünü indirip kurabilirsiniz.

Projelerde hata ve isteklerin yönetilmesi ve müsterilerin karsilastiklari hatalari firmaya iletebilecekleri Open Source bir uygulama olan Bug Tracker, kurulum ve kullanim kolayligi ile dikkati çekiyor. Küçük ve orta ölçekli projeler için ideal.

http://btnet.sourceforge.net/bugtrackernet.html adresinden en son sürümünü indirip kurabilirsiniz. Zip dosyasini herhangi bir yere açtiktan sonra IIS Manager ile virtual bir dizin yaratin. Daha sonra web.config içinde veritabani baglanti satirlarini bularak kendinize göre degistirin.

< add key="ConnectionString" value="Data Source=yoda;Database=BugTracker;uid=;pwd=;Trusted_Connection=True" />

SQL Server - Enterprise Manager ile bir veritabani yaratip ismine BugTracker verin. Daha sonra Query Analyzer ile zipli dosyayi açtiginiz yerde setup.sql dosyasini açin ve içerigini Query Anlayzer içine kopyalayin. Query Anlayzer'da BugTracker veritabaninin seçili olmasina dikkat edin. Query'i çalistirdiginizda BugTracker veritabani içinde tablolar olusturacaktir.

Son olarak ASPNET Windows kullanicisini veritabaninda bir kullanici olarak atayin ve BugTracker veritabanina dbo olarak atayin. Bu BugTracker'in veritabanina baglanip sorgulama yapmasina yarayacaktir.

Tüm bu islerden sonra localhost/BugTracker (yada ne isim verdiyseniz) baglanip kullanici ismi ve sifre girilen sayfayi görmelisiniz. Bu sayfada kirmizi yazan hiç bir sey olmamali. Eger varsa hata var demektir.

admin ve admin (kullanici ismi, sifre) girerek nasil birsey oldugunu görebilirsiniz.

Artik BugTracker ile hatalari ve istekleri takip etmeye baslayabilirsiniz.

Kolay Gelsin
 

Yazilim gelistirme projelerinin sonunda genellikle çalisir bir program elde edilmeye çalisilir. Müsteri isteklerinin kaçta kaçina cevap veriyor veya performans, ölçeklendirme ve gövenlik konularina ne kadar agirlik verilmis pek önemsenmez. Hal böyle olunca yazilimin; yukarida bahsettigim özelliklerinin test edilmis olmasi çok küçük bir ihtimal gibi geliyor bana.

Ürünün piyasaya çikis zamani ve özellikleri pazarlama ekibi için yeterli kistas olmamalidir. Ürün bu düsünceler ile satildiginda müsteriden gelecek sorular yanitsiz kalabilir. Örnegin, bu yazilim kullanici hatalarina karsi ne kadar dayanikli, sürekli büyüyen ve gelisen müsteri portföyüme göre ölçeklendirme yapilabilir mi, hangi güvenlik yöntemleri yazilimda uygulanmistir, bu yazilimi mevcut BT altyapimiza nasil entegre edebiliriz, destek anlasmasi ne kadar tutar gibi sorular sorulmasi ve çok iyi biçimde cevaplandirilmasi gereken sorulardir. Bu sorular ürününüzün kurumsal özelliklerini belirler.

Bu yazinin amaci ASP.NET uygulamalarinin performans açisindan ele alinarak gelistirilmesi ve NProf ile Microsoft’un Application Center Test uygulamalarinin nasil kullanilacagini anlatmaktir. Öncelikle genel bir yaklasim ile nicelik olarak performans degerlendirme islemine ve sonra da NProf ve ACT araçlarinin kullanimina bakacagiz.

Performans Yaziliminizin bir Özelligidir

Performans özelligi yaziliminizin kurumsal özelliklerinden bir tanesidir. Kaç kullanici ayni anda kullanacak, veri tablolarinin tutacagi veri miktari, ag yapisinin veri tasima hizi ve miktari, veritabanindan çekilecek verinin miktari, yazilimin kullandigi hafiza miktari ve disk alani nicel olarak sayilara dökülmelidir. Bir mühendis için subjektif ölçütlerin önemi yoktur bu yüzden dogru bir degerlendirme için bu rakamlarin belirlenmesi gerekir. Gelistirdiginiz uygulamanin ne kadar hizli oldugunu nasil ölçersiniz? Uygulamaniz PII 400Mhz bir bilgisayarda iki kullanici ile isik hizinda çalisabilir fakat Xeon 2Ghz bir bilgisayarda ve 2000 kullanici ile ne sonuç verecektir?

Müsteri isteklerini degerlendirme asamasinda kaç adet kullanicinin ayni anda uygulamayi kullanacagini ortaya çikarmaniz sarttir. Eger donanim gereksinimleri belli degil ise, yazilim gelistirme ekibi bunu göz önünde bulundurmalidir. Bu durumda performans degerlendirmede kullanilacak 4 ana unsuru ortaya çikiyor. Bunlar:

Yanit verme hizi
Kullanicinin donanim özellikleri
Ayni anda kullanan kullanici miktari
Gelistirdiginiz yazilim veya programlama algoritmasi

Örnegin uygulamanin yanit verme hizini 10 saniyeden 5 saniyeye düsürmek istiyorsunuz. Bu hedefe "Ayni anda kullanan kullanici miktarini" düsürerek ulasabilirsiniz yada ek donanim ekleyerek veya yazdiginiz kodu tekrardan gözden geçirerek. Yada bu üçünü bir kombinasyon halinde kullanabilirsiniz.

Ayni anda kullanan kullanici miktarini belirlemek

Yaziliminizi kullanan tüm kullanicilar ayni anda ayni islemleri yapmak için web gezgininin karsisina oturmayabilir. Eger bir firma için sadece iç-örütbaginda (intranet) çalisacak bir uygulama gelistiriyorsaniz ve firmanin 4000 adet çalisani varsa bu 4000 potansiyel kullanici demektir.

Genel olarak potansiyel kullanici sayisini bulduktan sonra bunlardan kaçinin bir gün içinde ASP.NET uygulamasini kullandigini bulmak gerekir. Örnegin uygulamaniz çalisma saatlerinin tutuldugu bir uygulama ve %25 oraninda her gün kullaniliyor. Bu durumda 1000 adet kullanici her gün uygulamanizi kullaniyor demektir. Bu kullanicilar günde kaç saat bu uygulamayi kullanabilir? Eger bahsettigimiz firmanin çesitli ülkelerde ofisleri varsa 24 saat boyunca herhangi bir an olabilir, sadece Türkiye içindeki ofislerde kullaniliyorsa günlük 8 saat gibi bir zaman ortaya çikar. Erken gelen ve geç çikan ofis çalisanlarini da göz önüne aldiginizda 3 saat daha ekleyebiliriz. Son olarak kullanicin uygulama ile geçirdigi zamani belirlememiz gerekiyor. Çalisma saatlerinin tutuldugu bir uygulamanin 15 dakikadan fazla kullanilacagini tahmin etmiyorum. Tabii ki bu veriyi müsteriniz ile görüsüp dogrulamaniz gerekmektedir.


Yukaridaki veriler isiginda asagidaki formülleri kullanarak tahmini ayni anda kullanan kullanici sayisini bulabiliriz.
Günlük toplam kullanici miktari g = 1000
Saat basina düsen kullanici miktari s
Günlük çalisma saati çs = 11
Her saat için desteklenen kullanici miktari hkm
Uygulama ile geçirilen zaman gz = 15dk
Ayni anda kullanan kullanici sayisi kk
Günlük kullanici sayisi gks

g = 4000*0,25 = 1000 kullanici
s = g / çs = 1000/11 = 90 kullanici\saat
hkm = 60dk / gz = 60/15 = 4 kullanici\saat
kk = s / hkm = 90/4 = 22,5 kullanici
gks =( (çs * 60dk) / gz) * kk = ((14saat * 60dk) / 15dk) * 22,5 = 1260 kullanici\gün

Her uygulamanin yogun olarak kullanildigi zamanlar vardir. Örnegin e-posta sabahlari daha çok kullanilir. Sizin uygulamaniz için yogun olabilecek zamanlari müsteriniz ile görüsüp belirlemeniz gerekir.

Genelde %300 oraninda yogunluk normal olarak karsilanabilir. Bu durumda kk degerini 3 ile çarparsak, 67,5 kullanici yogun zamanlarda uygulamanizi kullanmak isteyecektir.

Tüm bu kullanicilarin sürekli sayfalar arasinda gezineceklerini ve ag sunucunuzu mesgul edecegini düsünmeyin. Kullanici bir linke veya tusa tiklayacak ve sayfanin ag gezgini içinde görüntülenmesini bekleyecektir. Tekrar baska bir linke veya tusa tiklamak için önce sayfayi okuyacak ve tiklayacagi linke veya tusa karar verecektir. Endüstri standardi olarak her sayfa 5 ile 10 saniye arasinda ag gezgininde görüntülenmelidir. Kullanici 5 ile 15 saniye arasinda sayfada ne görüntülendigini kavrar ve tiklayacagi tus yada linke karar verir. Bu bilgiler isiginda diyebiliriz ki kullanici her 10 ile 25 saniyede bir sunucudan istekte bulunacaktir.

Bize gerekli olan 1 saniyede sunucudan istenen sayfa sayisini ve uygulamanin cevap verme hizini bulmaktir. Örnegimizde bir kullanicinin uygulama ile 15 dakika harcayacagini zaten biliyoruz. Bu durumda yukaridaki endüstri standartlarini kullanarak ayni anda aktif olarak kullanan kullanici sayisini daha gerçekçi olarak bulabiliriz.

Kullanici basina düsen sayfa istegi kbd
Iki sayfa arasinda geçen zaman sag = 10 ile 25sn arasi
1 saniyedeki sayfa istegi ssi
Yogun zamanlardaki kullanici miktari yzk = 67,5 kullanici

kbd = gz * 60saniye / sag = 15dk * 60 / 10saniye = 90sayfa
ssi = kbd * yzk / gz * 60saniye = (90sayfa * 67,5 kullanici) / (15dk * 60sn) = 6,75 sayfa\saniye
kk = (ssi * gz * 60sn) / kbd = (6,75 * 15dk * 60sn) / 90sayfa = 67,5 kullanici

Buradan çikan sonuçlar her mühendisin rahatlikla ACT yada baska bir performans test araci kullanarak test edebilecegi sonuçlardir ve kk degeri ile istenen performans kriterine ulasmak için gerekli donanim gücü de hesaplanabilir.

Application Center Test ile performans degerlendirme

Buraya kadar ev ödevimizi yaptiktan sonra ACT kullanarak performans degerlendirmesi yapabiliriz. Application Center Test, Visual Studio.NET Enterprise Developer yada Enterprise Architect sürümleri ile beraber geliyor ve kullanimi oldukça basit. "Programs / Microsoft Visual Studio.NET / Visual Studio.NET Enterprise Features / Microsoft Application Center Test" menüsünden çalistirabilirsiniz. Öncelikle File / New menüsünden yeni bir proje yaratin. Bir isim vererek kaydedin. Test senaryolarini Action / New Test menüsünden olusturacagiz. Bu menü seçenegini seçtiginizde karsiniza senaryo hazirlama sihirbazi gelecektir. Next tusuna tiklayip "record a new test" seçenegini seçin ve tekrar Next tusuna basin. Sonraki adimda script dilini seçin (simdilik sadece VBScript). "Start Recording" tusuna basinca karsiniza bir ag gezgini çikacak. Buradan sonra normal bir kullanici gibi sitenizi ziyaret edin. Eger varsa, uzun süren veritabani islemleri veya uzak sunuculardan veri çekme gibi islemleri yapin. Isiniz bitince ag gezginini kapatin ve "Stop recording" tusu yardimi ile islemi sonlandirin. Next tusuna bastiktan sonra olusturdugunuz test senaryosunu bir isim vererek kaydedin.

Kisaca ag gezgini ile yaptiginiz her islem VBScript olarak kayit edildi. Bu senaryoyu defalarca çalistirabilir ve hafizada neler olup bittigine bakabiliriz. ACT’nin ana ekranina geri döndügünüzde sol taraftaki bölümde "Tests" basamagini genisletin. Kayit ettiginiz test senaryosu bu basamagin altinda yer aliyor. Test senaryosu üzerine sag tiklayip "Start Test" seçenegi ile testi tekrardan baslatabilirsiniz. Sag taraftaki "Test Status" bölümü testin çalisma sirasindaki durumunu göstermektedir.

Sol kösede testin ne kadar zamandir çalistigini ve sag kösede de istek/saniye (requests/sec) ve toplam yapilan istekleri görebilirsiniz. Alttaki grafik ise islenen istekleri göstermektedir. Bu grafik, yukaridaki formüllerde geçen ssi degerini temsil etmektedir. Bitince "Stop Test" tusuna basarak testi durdurun ve test tamamlaninca da Close tusu ile ekrani kapatin.

Ana ekranda sol taraftaki agaç yapisinda "Results" dali altinda testin sonuçlarini görebilirsiniz. "Test runs" listesi size calistirilan tüm testleri listeleyecektir. Herhangi bir testin üstüne tikladiginizda o test ile ilgili bilgiyi ekranin sag tarafinda göreceksiniz. Sag üst kösedeki "Report" listesinden "Requests" seçenegini seçtiginizde "Time To First Byte" (TTFB) ve "Time To Last Byte" (TTLB) degerlerini göreceksiniz. Örütbag sunucusunun aldigi istekleri ve bu istek dogrultusunda ilk byte’in ag gezginine döndürüldügü zamanlari görebilirsiniz. TTFB zamani sayfanin islenme süresini göstermektedir. TTLB ise sayfanin web gezginine tamami ile döndürüldügü zamani gösterir.TTLB – TTFB ise sayfanin ag üzerinde harcadigi zamani verecektir. Ortalama TTFB ve TTLB zamanlari 10 saniyenin üstüne çikmamalidir.

Eger ACT’nin ürettigi VBScript’lere bakacak olursaniz fEnableDelays’in "false" oldugunu göreceksiniz. Bu sayfa istekleri arasinda bekleme olmadigi anlamina gelir. Yani kullanici hiç beklemeden bir sonraki sayfaya atlamis gibi. Gerçege yakin bir test yapmak istiyorsak her sayfa arasinda 5 ile 15 saniye arasinda bekleme zamani koymamiz gerekir. fEnableDelays degiskenini "true" yapin ve her fonsiyonun basindaki Test.Sleep() fonksiyonunu Test.Sleep(5000) olarak degistirin. Sleep fonksiyonuna geçirilen deger milisaniye oldugu için 5000 = 5 saniye olmaktadir. Sayfalarinizin büyüklügüne göre her sayfa için bir bekleme süresi tayin etmeniz testlerin daha gerçekçi olmasini saglar.

Biraz daha detaylandiralim

Gördügünüz gibi ACT kullanarak uygulamanin kaldirabilecegi ssi degerini görebiliyoruz. ACT her yazilim mühendisi için gerekli bir araç. Projenin basindan itibaren ve sikça kullanilmalidir. Ssi degerini görmenin disinda hangi metodlarin kaç defa çagirildigini ve ne kadar zamanin harcandigini da görmek isteyebilirsiniz. Burada NProf devreye giriyor. NProf ile uygulamaniz için bir çalisma profili çikarip analiz edebilirsiniz.

NProf’u sadece performans problemleri ile karsilastiginizda degil her zaman kullanmanizi tavsiye ederim. Hangi metodda ne kadar zaman harcandigini bulabilir ve performans problemlerinin gerçekte nerelerden kaynaklandigini bulabilirsiniz. ASP.NET sayfalariniz hizli bile olsa, kaynaklari serbest birakacak küçük bir degisiklik daha da hizli olmalarini saglayabilir.

http://NProf.sourceforge.net/Site/SiteHomeNews.html adresinden NProf’u indirebilirsiniz. Kurulum için asagidaki adimlari takip edin:
1- Zip dosyasini her hangi bir dizine açin
2- RegisterProfilerHook.bat batch dosyasini çalistirarak registration kayitlarini tamamlayin

VS.NET add-in'i içinde:
1- RegisterVSNetAddin.bat dosyasi ile registration islemini tamamlayin
2- VS.NET'i açin
3- Bir proje yada solution açin
4- Tools menüsünden NProf'u yükleyebilirsiniz.

Kurduktan sonra NProf.Application.exe ile çalistirin. File/New menüsünden profilini çikaracagimiz uygulama tipini seçin (ASP.NET). "Create Project" tusuna basin ve "Project/Start project run" menü seçeneginden uygulamayi baslatin. ASP.NET seçtigimiz için NProf IIS ve ASP.NET servislerini tekrar baslatacak, çünkü NProf CLR profiling API’lerine bagimlidir ve uygulama process’ine baglanabilmek için servisleri tekrar baslatmasi gerekmektedir.

NProf ASP.NET servisine profiling API’lerini kullanarak baglandigi için uygulamaniz 20 kat daha yavas çalisacaktir. Bunun sebebi ölçümlerin profiling API’ler yolu ile yapilmasi ve her nesne ve metod çagiriminda kayit edilmesidir.

NProf ile ASP.NET servisine baglandiktan sonra ASP.NET uygulamanizi normal olarak kullanmaya baslayabilirsiniz. Önceden hazirladiginiz test senaryolari dogrultusunda testlere baslayin. Eger senaryo bazli testleri tek tek test etmek isityorsaniz her test senaryosu sonunda NProf’u durdurmaniz gerekiyor. Test bitince NProf’a dönüp "Project/Stop project run" menüsünden profil yaratma islemini durdurabilirsiniz. Eger Windows 2003 ve IIS6.0 kullaniyorsaniz az önce seçtiginiz menü adimindan NProf durmayacaktir (bilinen bir hata, yeni sürümlerde düzelecek). IIS Manager’i açin ve uygulamanizin dahil oldugu application pool’u durdurun. Eger uygulamaniz "Default Web Site" altinda çalisiyorsa; Application Pools/DefaultAppPool üzerine sag tiklayip "Recycle" seçenegini seçin. Bu durumda IIS mevcut ASP.NET uygulamasini sonlandirarak yeni bir tane baslatir. Bu islem NProf tarafindan algilanir ve profilleme islemi durur.

Buraya kadar performans degerlendirmesinde kullanacagimiz veriyi toplamak ile ugrastik. Bundan sonra veriyi nasil analiz edecegimizi görecegiz.

Profil Verisini Analiz etmek

NProf ekraninda sol üst kösede "Thread" drop-down seçeneklerini göreceksiniz. Bu drop-down uygulamanizin yarattigi tüm threadleri gösteriyor. Her thread farkli bir nesne yada metod çalistirmaktadir. Buradan analiz etmek istediginiz thread’i seçiniz. Sol taraftaki agaç yapisinda seçilen thread’in "namespace" yapisi ve çalistirilan tüm tipleri görülecektir. Her namespace ve tipinin yaninda bir isaretleme kutusu bulunmaktadir. Bu isaretleme kutusu istediginiz nesne veya metod çagirimlarini süzmek için kullanilir. Kendi programiniza ait namespace veya nesneleri seçerek sadece size ait verinin görüntülenmesini saglayin. En tepede bulanan "All Namepsaces" isaretleme kutusundaki isareti de kaldirin böylece tüm namespace’ler görüntülenmeyecektir.

Sag üst panel çagirilan nesne veya metodlari gösterecektir. Diger bes kolonda her metod için profilleri gösterir:
# of Calls – Metodun kaç kere çagirildigini gösterir.
% of Totals – Toplam calisma zamaninin yüzde kaçinin bu metodda harcandigini göstermektedir. Toplam çalisma zamani tüm threadleri kapsadigindan burada gösterilen zaman rölativdir. Ayrica Profiling API yüzünden olusan yükü de unutmayalim. Eger metoddan baska bir metod çagiriliyorsa her çagirilan metodun çalisma zamani da buna eklenmektedir. Bir metodu seçtiginizde sag alt panelde metodun çagirdigi diger metodlar gözükecekdir.
% in Method – Bir metod için toplam çalisma zamanini verir. Çagirilan diger metodlarin çalisma zamanlari hariç tutulmustur. Eger bu kritere göre listeyi siralarsak, en fazla zamanin hangi metodda harcandigini buluruz. Buda bize iyi bir baslangiç noktasi verir.
% in Children – Çagirilan metodlarda geçen toplam çalisma zamanini gösterir. Yüksek yüzdeli metodlar gene bakilmasi gereken metodlardir.
% Suspended – Thread’in ne kadar zaman "suspended" konumunda bekledigini gösterir. Sifirdan farkli bir deger gösteren metodlar ilgilenilmesi gereken metodlardir.

Sag üst panelde bir metodu seçtiginiz zaman sag alt panelde de metodun çagirdigi diger metodlar listelenecektir. Bu listedeki ayrintilara bir bakalim.

# of Calls – Metodun kaç kere çagirildigini gösterir. Sadece ana metoddan çagirildigi degil uygulama boyunca kaç kere çagirildigidir.
% of Total – Çalisma zamaninin yüzde kaçinin bu metodda harcandigini gösterir. Yukaridaki gibi sadece ana metoddan çagirilma zamani degil tüm metodlardan çagirilma zamanidir.
% of Parent – Ana metodun harcadigi toplam çalisma zamaninin yüzde kaçinda bu metodun çalistigini gösterir. Bu kolonun genel toplami %100 vermelidir fakat yuvarlama hatlarindan dolayi 1 eksik veya 1 fazla çikabilir.

Her iki listeyide kolon basliklarina tiklayarak dizebilirsiniz. Elde ettiniz data ile biraz zaman harcadiginizda ve kavramlar oturmaya basladiginda daha iyi anlamaya baslayacaksiniz. NProf darbogaz yaratan metodlari veya nesneleri bulmak için çok yararli bir araç. Bir kere fazla zaman harcayan metodlari belirlediginizde, koda geçerek neden bu kadar fazla zaman harcandigini bulmaya çalisin. Gerçekten zaman harcayan ve uzun bir islem yapan metod olabilir. Yapilan uzun islemi parçalara ayirabilirseniz ayirin. Yada gerçekten bu metodda bu kadar uzun zaman harcanmasini ve gerekli oldugunu dogrulamak için kod içine bir kaç yorum satiri ekleyebilirsiniz.

Bir uyari olarak söylemek isterim ki; kodu optimize edecek bir yol buldugunuzda hemen uygulamaya geçmeyin. Bu optimizenin etkileyecegi diger programlari veya veriyi düsünerek hareket edin. Eger Degisiklik ve Istek Yönetimi ekibiniz varsa, yapilan degisikliklerin onaylanmasi ve maliyetinin çikartilmasi gerekir. Eger optimizasyon için kod üzerinde harcanacak zaman çok fazla ise ve geriye çok az bir performans kazandiracaksa, optimizasyonu yapmanin bir anlami yoktur.

Sonuç

Application Center Test ve NProf iki ücretsiz araç ve yazilimdaki performans darbogazlarini belirlemek için kullanilmasini tavsiye ediyorum. Performans problemlerini ne kadar önce belirlersek, düzeltmeside o kadar az maliyetli olur. Bu yüzden projelerin basinda ve sikça kullanilmalidir. En kötüsü müsteri tarafinda kullanilmaya baslayan üründe performans problemlerinin ortaya çikmasidir ki müsterinin is kaybina neden olur. Performans problemleri ürününüzde köklü degisikliklere neden olabilir ve önceden teshis çok önemlidir. Her yeni sürümle beraber bir performans degerlendirme raporuda ürüne eklenmelidir. Proje adimlarindan bir tanesi de performans da belirli kriterlere ulasmak olmalidir. Yada bir önceki sürümde ortaya çikan performans degerlerinden daha iyi bir sonuç elde etmek amaci olmalidir.

Önemli bir not olarak müsterinin veritabanina yükleyecegi veri miktarini iyi belirlemeniz gerekir. Eger müsteri 1 milyon veri yüklemeyi düsünüyorsa ve siz performans testlerini 1000 kayit ile yaptiysaniz, bulacaginiz performans degerleri gerçege yakin olmayacak ve belkide ürününüz müsteri tarafinda çökecektir.

Klaus Salchner'in NProf makalesinden kismen çeviridir. Kalus'a klaus _ salchner AT hotmail nokta com adresinden erisebilirsiniz.

Herkese kolay gelsin. Yararli bir çeviri oldugu kanisindayim.

Simdiye kadar kod kontrolü ve merkezi yazilim gelistirme konusunda Visual Source Safe, Vault, Clear Case, CVS gibi programlari kullandim. Subversion bu saydiklarim arasinda en fazla puani toplayan yazilim. Üstelikte ücretsiz.

Subversion ayni Visual Source Safe gibi bir kod kontrol programi. Ücretsiz olmasi ve kullanim kolayligi açisindan puan topluyor. Kurulumu oldukça basit. Kurulum programini http://subversion.tigris.org adresinden indirip kurabilirsiniz.


Subversion sunucu programi Windows Service olarak çalistirmak isterseniz Margus Nordahl'in sitesinden indireceginiz ufak bir program isinizi görecektir.

Ayrica TortoiseSVN adresinden SVN sunucularina baglanmak için bir istemci program da indirebilirsiniz.

VS.NET için bir plug-in de mevcut fakat web projelerinde sunucu üzerinde barinan dosyalari göremiyor. Bir web projesini SVN'e göndermeye çalistiginizda sadece .sln dosyasi gidiyor. Umarim AnkhSvn gelistiricileri bu probleme yakin zamanda bir çözüm bulabilirler.

SVN hakkinda pdf formatinda bir kitapta http://svnbook.red-bean.com/ adresinde indirilebilir. Kitap piyasada satilan sürümün aynisi. Open Source programin kitabida Open Source oluyor haliyle.

Subversion, CVS problemlerini gidermek amaçli baslatilmis bir proje. Hem CVS'in destekledigi her komutu barindiriyor hemde fazlasi var.

Ben kullaniyorum ve memnunum. Herkese tavsiye ederim.

.NET Gelistirme Ortami

.NET Gelistirme Ortami, 1993’te Windows NT 3.0 ile çikan WIN32 API’lerinden beri programlama ortami için yapilmis en büyük güncellemedir. Win32 API’leri Win16’dan daha iyi bir programlama ortami sunmasina ragmen .NET alt yapisi ile hem programlama teknigi hemde araçlari tamami ile degismis oldu.

Bu degisim yazilim uzmanlarina IIS web sunucusu ortaminda daha hizli uygulama gelistirmeye izin verirken ortaya çikan ürünlerinde daha güvenilir ve erisilebilir olmasini sagladi.

.NET gelistirme ortami asagidaki bilesenlerden olusmustur.

.NET Framework

.NET uyumlu tüm diller ayni alt yapiyi kullanarak program yazmamiza yardimci olur. Sadece Microsoft ürünleri degil farkli firmalarin ürettikleri diller ile de .NET için yazilim gelistirebilirsiniz. Tüm fonksiyonlar birer nesne olarak hazir halde .NET altyapisi içinde bulunur. Tamami ile nesne yönelimli bir ortamdir. Kullandiginiz dilin yazim yapisina uygun olarak bu fonksiyonlari çagirir ve kullanirsiniz. Her dil ayni alt yapiyi kullandigi için birbirlerine üstünlükleri de ortadan kalkmis olur.

Kullandiginiz dilin derleme araci kodunuzu MSIL (Microsoft Intermediate Language) koduna çevirir (Java Byte Code gibi). Bu kod islemciden bagimsiz bir koddur. Makine dili ile alakasi yoktur. Bu kodu çalistirmaya kalktiginizda CLR (Common Language Runtime) devreye girer ve JIT Derleyici (Just in Time Compiler) IL kodunu bilgisayarin anlayabilecegi makine diline çevirir. Bu arada programin kontrol altinda çalismasi için hafiza yönetimi, hata denetimi, güvenlik gibi unsurlarida kontrol eder. CLR altinda çalisan programlara kotrollü kod (managed code) denir.

Ayni isi yapan bir C# programinin IL kodu ile VB.NET programinin IL kodu arasinda hiç bir fark yoktur. Tek fark baslik kismindaki dil bilgileridir.

Farkli dillerde yazilmis ve IL kodu olarak derlenmis programlari tek bir çati altinda toplamak mümkündür (Cross Language Compatibility). Cobol gibi eski diller bile .NET sürümlerini çikartmaktalar. Böylece Microsoft teknolojilerini ögrenmek isteyen mainframe programcilari ek bir egitim ile Windows ortamlarinda yazilim gelistiriyor olacaklar.

CLR su anda sadece Microsoft isletim sistemlerinde çalisiyor. Fakat biliyorsunuz HoTMaiL’i aldiklarinda sistemi Free-BSD üzerinde sunmaya devam etmislerdi ve su anda Free-BSD üzerinde .NET programlarini çalistirabilmek için bir projeleri var. Yakinda Linux ortaminda bile .NET programlarini çalistirabilecegiz (bilgi için www.go-mono.com adresine bakiniz). Herhalde dünya globallesmeye dogru giderken bilgisayar sektörüde bir miktar etkileniyor. Tekellesmesin de globallessin ve herkese açik olsun.

.NET Yazilim Gelistirme Araçlari

Yazilim gelistirme araçlari Microsoft’un Visual Studio .NET sürümü ile gelen IDE (Integrated Development Environment, Tümlesik Gelistirme Ortami) ve buna bagli olarak Visual Basic .NET, Visual C#.NET, Visual C++.NET gibi dillerdir. Bu ortamda CLR altinda çalisacak biçimde gelistirme, test ve kurulum islemlerini yapacak araçlar mevcuttur.

Microsoft disinda RPG, Cobol, Fortran, Mercury, Perl, SmallScript, SmallTalk, Component Pascal, Eiffel gibi diller de .NET sürümlerini çikartmaktalar (ayrintili bilgi için www.jasonbock.net/dotnetlanguages.html adresinde bir liste bulabilirsiniz.).

ASP.NET

ASP.NET eski ASP’yi ortadan kaldirmak için gelistirilmis ve özellestirilmis bir sinif kütüphanesidir. Web sunucu uygulamalari ve dinamik web içeriklerini olusturmak için kullanilir. Genel örütbagi protokollerini (HTML, XML, SOAP) kullanarak baglanti kurar. Eski ASP gibi yorumlanan bir dil degil, derlenen bir dildir. Böylece hafizada derli biçimde bulundugu için ASP veya CGI’dan çok daha hizli çalisir.

ADO.NET

ADO.NET veritabani ile olan tüm iliskilerimizde kullanacagimiz sinif kütüphanesidir. Eski ADO’dan farkli olarak veritabanina sürekli bagli kalmaz. ADO.NET’in 3 adet katmani vardir. Bunlar:

Fiziksel veri kaynagi: Kaynak bir OLE veritabani, XML dosya yada SQL Veritabani sunucusu olabilir.
Veri Sunucusu: Connection (baglanti) nesnesi ve hafizada verinin bir kopyasini yaratacak komutlardan olusur.
Data Set: Hafizadaki tablolar ve aralarindaki iliskileri temsil eder.

Veri Sunucusu fiziksel veri kaynagi ile data set arasinda soyutlama yapar. Data Set olusturulduktan sonra nereden geldigi veya hangi biçimde saklandigi fark etmez. Bu mimari disconnected (baglantisiz) olarak isimlendirilir çünkü veri kaynagindan bagimsiz hale gelmistir.ADO.NET’te iki tür baglanti nesnesi vardir. Bunlar:
OleDbConnection: SQL Server 7.0 disinda baglanilacak veritabani sunuculari için kullanilir.
SQLDbConnection: SQL Server 7.0 ve üzeri sürümler için gelistirilmistir.

XML dosyalar için ADO.NET kütüphaneleri içinde ReadXML ve WriteXML metodlari vardir. Bu metodlar ile her türlü XML dosyasi bir veritabaniymis gibi kullanilabilir.

Veritabanina bagli olmadan çalismanin sebebi, örütbagi üzerinden çalisirken zamanin büyük bir kisminin veriatabani ile iliskili olmamasindan ileri geliyor. Güncelleme amaci ile bir veri okunduktan sonra veritabani baglantisi kesilir. Güncelleme için veriyi geri yolladiginizda dataset içindeki orjinal veri ile veritabani karsilastirilir ve fark varsa kullanici uyarilir. Eger yoksa güncelleme yapilir. Dataset içinde birden fazla iliskili tablo olabilir. Dataset’i istemci tarafinda hafizada barinan bir veritabani gibi düsünebilirsiniz. Fakat eger örütbagi üzerinde bir veritabani isleminden bahsediyorsak, dataset sunucu tarafinda barinacaktir.

Dataset’i XML dosya olarak saklayabiliriz. Diyelim ki bir müsteri temsilcisi olarak dizüstü bilgisayariniza isyerinizdeki veritabani sunucusundan bir dataset aldiniz ve 1 ay sirkete ugramayacaksiniz. Türkiye’nin her yerini gezip müsteri ziyaretleri ve yeni siparisleri alacaksiniz. Hafizadaki dataset’in kaybolmamasi için veriyi XML dosya olarak saklayabilir ve her sabah dizüstü bilgisayarinizi açtiginizda XML dosyayi okuyup hafizaya bir datasetmis gibi yerlestirebilirsiniz. 1 ay sonra sirketinize döndügünüzde dizüstü bilgisayarinizdaki dataset’i veritabani sunucusuna gönderebilir ve gerekli güncellemeleri yapabilirsiniz.

XML Web Services

Web Hizmetleri, örütbagi üzerinden kullanima sunulan programciklardir. Bir Web sunucusu yardimi ile yayinlanirlar. Herhangi bir web hizmetini kullanabilmek için metodlarini ve bu metodlarin parametrelerini bilmek gerekir. Web hizmetleri bir windows programindan da kullanilabilir. Gönderilen ve alinan her türlü veri XML formatindadir, SOAP (Simple Object Access Protocol) protokolünü kullanir ve html çikti sunabilir.

Smart Devices

Visual Studio .NET 2003 ile versiyon 1.0 “framework” yerine 1.1 “framework” geliyor. Çok fazla degisiklik olmamakla beraber sadece VB tarafinda çok küçük bir degisiklik var. Yeni eklenen seyler arasinda cep telefonlari veya el bilgisayarlari için yazilim yapabilecegimiz ortamlari sayabiliriz. Bu cihazlara sahip olmadan (smart devices) emülatörler yardimi ile gelistirme yapabiliriz. Daha önceki 2002 sürümünde bu ekleme için “plug-in” indirmek gerekiyordu artik kutudan çikiyor. C++ için 2002 sürümünde “windows forms” gelistirmek için proje yoktu bu sürümde buda geliyor. Ayrica ANSI/ISO uyumlulugu %98’e çikarilmis. Böylece Türkçe karakter kullanimi sorun olmaktan çikiyor(mu acaba). Ag hizmetlerinde (web services) yeni gelismeler de var (Web Services Enhancements,WSE). Bunlar arasinda gelistirilmis güvenlik ve yönlendirme standartlarini sayabiliriz.

2003 sürümü ile beraber dil olarak J#’ta artik piyasaya adim atiyor fakat daha çok evrenkentler de egitim amaçli kullanilacak. Ayrica Java projelerini veya kod parçalarini J# koduna çevirecek eklentilerde gene kutudan çikiyor. VB6 projelerini VB.NET’e çevirecek araçlarda daha gelistirilmis olarak yeni sürümde mevcut. Kod yazarken kullandigimiz “intelli sense” biraz daha akillanmis örnegin textbox1. yazdiginizda intelli-sense size textbox’in tüm özelliklerini alfabetik sirada bastan baslayarak gösteriyordu. Baska bir satirda tekrar textbox1. yazinca artik bir önceki kullandiginiz özellikten baslayarak gene alfabetik olarak siraliyor. Yani bir önceki kullandiginiz özelligi hatirlayip ona göre davraniyor.

Standard Kod Gelistirme

.NET ile beraber Microsoft’un hazirladigi standartlarda gelistirme yaptigimizda ve tüm testleri geçtigimizde “.NET Connected” logosunu kullanmaya hak kazaniyoruz. Tabii ben burada bir yazilim gelistirici olarak herkes bu logoyu alsin ve pazarda ürün alirken bu logonun bulunmasina dikkat edelim demiyorum. Sadece bu standartlara uyarak gelistirme yapalim diyorum. Böylece her seyin bir standardi olur ve tekrardan standart dökümanlari yazmak zorunda kalmayiz. Bu standartlarin adreslerini yakinda verecegim.

Yazilim Gelistirmek için Gerekenler

Evinde yazilim yapan arkadaslar sanirim