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 ürünlerin pahalliligindan ve yeterli sistemlere sahip olamamalarindan yakiniyordur. Bir ögrenci olarak yada maasli çalisan bir kimse olarak gerçektende bu fiyatlari karsilamak pek mümkün degil. Fakat kisitlida olsa bazi imkanlar var. Öncelikle .NET Framework SDK (Software Development Kit)’i Microsoft’un sitesinden indirmeniz gerekiyor. Bu ücretsiz fakat çok büyük bir dosya. Indirip kurduktan sonra www.asp.net/webmatrix sitesinden ASP.NET ile kod yazmak için ücretsiz bir editör indirebilirsiniz. Bunlardan sonra sisteminizde bir IIS5.0 (Internet Information Server), SQL Server Developer Edition (SQL Server’in bir basit versiyonu) gerekiyor. Tabii ki WinXP yada Win2000 isletim sistemi (tercihen service pack1 ile) veya .NET Server 2003 ailesinden herhangi bir sunucu isinizi görür. Microsoft 360 günlük deneme sürümlerini veriyor bu sunucularin. Yeni, hizli ve hard-diski büyük bir bilgisayar içinde anne babaya biraz yalvarmak gerekiyor.

Merhaba bu yazımda sizlere temel konulardan bahsetmek ve programlamaya yeni adım atacak arkadaşlar için yol gösterici olacak bir kaç fikirden söz etmek istiyorum. Amacım yeni başlayan pek çok kişinin sorduğu sorulara cevap vermek ve cesaretlendirerek yollarına devam etmelerini sağlamaktır.

Programlama Dili Seçimi

Nasıl tek bir dil bilmek yetmiyorda insanlar İngilizce, Almanca ögreniyorsa bilgisayar dünyasında da tek bir dil bilmek yetmiyor. Günümüz programlama ortamlarında farklı dillerle yazılmış parçaları beraber çalıstırabilmek mümkün olduğu için, en az iki programlama dili bilmeniz iyi olur. Dilinizi seçerken soracağınız sorular:

1- Ürününüz birden fazla işletim sistemini destekleyecek mi?
2- Ürününüz web, istemci/sunucu, tek başına calışabilecek biçimde dizayn edilecek mi?
3- Ürününüz en son yazılım tekniklerini ve teknolojilerini uygulayabilir mi?
4- Kullanmayı düsündüğünüz veritabanlarını destekliyor mu?
5- Yazılım aracı/dili için eğitim verecek kuruluş var mı?
6- Diploma, sertifika veriliyor mu?
7- Dünyada başka kimler kullanıyor?
8- Örütbağında arama yaptığınızda kaç tane sonuç dönüyor?
9- İş bulma sitelerinde, sizin düşündüğünüz yazılım aracı/dili ile ilgili ne kadar iş ilanı var.
10- Ürününüzü dünya genelinde satmayı düşünüyor musunuz?
11- Araç/dil bu dizayna izin veriyor mu?
12- Yazılım aracı/dili üreten firma ile birlikte başka hangi firmalar bu araca/dile destek veriyor.
13- Ne kadar para harcamayı düşünüyorsunuz?

Buradaki araştırmaların hepsini Türkiye çapında değil dünya çapında yapın. En son sürümleri ve teknolojileri satın almaya bakın.

İkinci dil ile ilgili olarak tamamen karşıt bir firma/teknoloji seçin. Mesela VB ve Delphi, Java ve C++, C# ve Perl, PHP ve XML vs. İşletim sistemini de değiştirebilirsiniz. Mesela Linux/Kylix ve Windows/C++, Unix/Python ve Windows/XML, Linux/PHP ve Windows/HTML vs. Listeleri uzatmak mümkün.

Nasıl Başlanır

Dilinizi seçtikten sonra ilk yapacağıniz iş, ortama olan göz alışkanlığınızı kazanmak için menülerde ve ekranlarda gezinmeniz olacaktır. Burada ortam dedigimiz programlama yaptığınız dilin arayüzü olan IDE (Integrated Development Environment, Tümleşik Geliştirme Ortamı) hakkında bilgi sahibi olmak ve menülerde ne nerede bilgisini oluşturmaya çalışıyoruz. Eğer İngilizce biliyorsanız menüler üzerindeyken F1 tuşu ile yardım alabilir ve ne işe yaradığını öğrenebilirsiniz. Bundan sonra baslangıç seviyesi kitapları ile yola çıkarak adım adım dili öğrenmeye başlarsınız. Kitap dişinda deneme-yanılma yolu ile küçük projeler yapıp, dilinizin nelere imkan verdiğini ögrenebilirsiniz. İlk başlarda cok fazla zaman harcayarak mümkün olan her şeyi deneyin. Belli bir seviyeye geldikten sonra, belli konuları daha derin öğrenmeye başlarsınız. Dili biraz ögrendikten sonra bıranşlaşma için, veritabanı, donanım, sistem, ticari programlama gibi konulara eğilebilirsiniz.

Kitaplar

Her yeni başlayana tavsiye ettigim yazarlar, İhsan Karagülle, Memik Yanık, Zeydin Pala dışında kullandığınız dilin üreticisinin kitapları yada 3. parti firmaların kitapları çok yararlı olabilir. İlgilendiğiniz konularda referans kitaplarınızın bulunması ve ihtiyacınız olduğunda konu başlıklarını kullanarak yardım almanız çok iyi olur. Eger merkezlere uzak yerlerde oturuyorsanız örütbağ üzerinde sipariş verebileceğiniz yerler oldukça fazla. Aldığınızın kitapların yayinevlerinin sitelerinden kitapla ilgili düzeltmeler var mı kontrol edin. Kitapların pek çoğuna pdf formatında da erişebilirsiniz. Benim tercih ettiğim bir yöntem çünkü yerden tasarruf sağlıyor.

Örütbağ Üzerinde

E-posta listeleri çok yararlıdır ve teknolojileri günlük takip etmenizi sağlar. Özellikle Microsoft, Rational, IBM, CA, Inprise gibi büyük firmaların gazete e-postalarına üye olmanızı tavsiye ederim. Bu sayede yeni ürünler çıktığında veya seminerler olduğunda hemen haberiniz olur, ayrıca gidip bu firmaların sitelerinde debelenmekten kurtulursunuz. Haber sunucuları, programlamaya özel siteler'de işinizi görür. Önemli olan bir şekilde teknolojileri takip etmek ve güncel konulardan haberdar olmak. Yahoo, Google gibi sitelerin gruplarına da bakabilirsiniz. Hangisinde daha fazla üye ve mesaj varsa ona üye olun.

Teknolojiler

Seçtiginiz programlama dili ile son teknolojileri uygulamak mümkün mü? Fazla kod değişikliği yapmadan hem internet ortamnı hem istemci/sunucu yapılarını destekleyebiliyor musunuz? Yada daha da önemlisi seçtiginiz dil ile, bitmek tükenmek bilmeyen müşteri isteklerine cevap verebilecek misiniz. Platformlar arası veri alışverişi konularına destek veriyor mu? Hangi veritabanlarını destekliyor? Yada sizin istediğiniz veya kullanmayı düşündüğünüz veritabanını tam olarak destekliyor mu? Teknoloji demekle neyi kastediyoruz. ActiveX, SOAP, COM, DCOM, COM+, .NET, Web Services, RMI, IIOP, TCP/IP vs. gibi pek çok metod bahsettigimiz teknoloji alanına girer. Seçtiginiz dil ile bu teknolojilerden bazılarını desteklemek istiyor musunuz?

Analiz

Program yazarken kullanacağınız analiz metodolojileri en az kodlama yapmak kadar önemlidir. İster yolun başında bir programcı adayı olun ister programlama konusunda uzman olun metodoloji ve o metodolojiyi doğru uygulamak çok önemlidir. İyi yazılım, iyi bir analiz ile başlar. Analiz sizin programınızla neler yapacağınızın ve müşterinin problemlerine nasıl çözüm getireceğinizin bir taslağıdır. Analiz iş senaryolarınızı ortaya çıkarmanızı ve müşteri isteklerine daha iyi cevap vermenizi saglar. Analiz Metodolojileri nelerdir? Örneğin Modül Tabanlı Analiz (CBD, Component Based Development), Nesne Tabanlı Analiz (OOA, Object Oriented Analyse), Unified Modelling Analiz (bunun Türkçe'sine UM Analiz diyelim, pek iyi olmadı ama!), eXtreme Programming (Yazılım dünyasında XP olarak biliniyor fakat Windows XP ile karıştırmayın). Bu metodolojileri doğru biçimde projelerinizde uygularsanız verimlilik ve zamanında yetiştirmek açısından pek sorununuz olacağını zannetmiyorum. Yukarıda bahsettiğim konuları tek tek açıklayan makaleler de yazacağım.

Düzenli Çalışma

Kendinize bir hedef vermeden bilgisayarın başına oturmayın. Hedefinizi belirleyip ona göre yol alın. Projelerinize hep bir isim verin ve anlamlı bir isim verilmiş bir dizine kaydedin. Formlarınızın isimlerini ve başlıklarını muhakkak değiştirin. Bu sayede farklı formları farklı projelerde kullanmak istediğinizde isim çakışmaları olmaz. İsimlerden formlarınızın ne işe yaradığını kolayca anlayabilirsiniz. Her yiğidin bir yoğurt yiyişi olduğu gibi yazılım gruplarınında uyulması gereken kuralları vardır. Bir yazılım firmasında çalışmaya başladığınızda, ilk yapacağınız şey firma standartlarını öğrenmektir. Bu sayede ekip içi bilgi aliş verişi hızlı ve kesin olur.

Dökümantasyon

Yaptığınız çalışmaları, ufak projeleri kısacası ileride kullanabileceğiniz her kod parçasını yazıya dökün ve ne işe yaradığını, nasıl calıştığını, amacının ne olduğunu ister kodun içine yorum satırı olarak, ister bir Word dosyasına yazarak saklayın. Hangisi pratik geliyorsa. Bu tür bir çalışma ileride bir kod parçasına ihtiyacınız olduğunda kolayca bulmanızı sağlar.

İngilizce Kaynaklar

Yabanci dil bilmek pek çok konuda işimize yaradığı gibi, programlama konusunda da işimize yarayacaktır. Fakat öyle sular seller gibi bilmeye veya konuşurken aksanlı konuşucam diye ağzımızı burnumuzu bükmeye gerek yok. Sonuçta bizler Türk'üz ve konuşurken yabancı olduğumuzun anlaşılmasıda gayet doğal ve gereklidir. Yabancı dil bilgimiz, konumuzdaki yabancı yayınları takip edecek ve derdimizi anlatabilecek kadar olsa yeter. Bu nasihatlerden sonra gelelim yabancı yayınlara, örütbağı üzerinde bir arama ile pek çok yayına ulaşabilirsiniz. Bunların dışında Microsoft yayınları ve kitapları, Wrox yayınevinin kitapları, Visual Studio ile gelen MSDN (Microsoft Developer Network, Microsoft Geliştirici Ağı) tıkızları çok işinize yarayabilir. Inprise ürünleri ile birlikte gelen yardım dosyalarıda çok yararlı olabilir. Ek olarak firmaların sitelerinde her zaman deneme sürümlerinin tıkızlarının adresinize postalanması için gerekli formları bulup doldurabilirsiniz. Ayrıca pek çok teknik dökümanı, gerçek projeleri, egitimle ilgili yazıları bilgisayarınıza indirebilirsiniz. Firmaların Türkiye temsilciliklerinden birer bağlantıya sahip olmanızda iyi olur.

Kurslar

Kursların piyasa tarafından tanınmış ve verdikleri sertifikaların dünya çapında geçerli olmasına dikkat edin. Çalışmalarınızın kurs ile sınırlı kalmaması için, evinizde de bazı projeler geliştiriyor olmanız gerekir. Türkiye'de çoğu büyük şehirlerde pek çok kurs mevcut. Kurs ile birlikte çevrenizde oluşacak arkadaş grubu iyi bir yönlendirme ile birlikte iyi projelere imza atabilir. Unutmayın çevrenizdeki grup ileride iş arkadaşlığına dönüşebilir.

Amatör Ruhu

Hangi işle uğraşıyor olursanız olun, dünyanın en kötü şeyi, ugraştığınız alanda her şeyi bildiğinizi iddia etmek olacaktır. İşte bu tür adamlardan uzak duracaksınız. Hayat zaten kendi içinde bir okul bizlerde bu okulun ögrencileriyiz. Her zaman öğrenecek yeni şeyler olacak. Bazen hiç ummadığıniz bir çıraktan bir şeyler kapabilirsiniz. Yada artık kendinizi programlama hakkında ermiş olarak gördüğünüz anda bir çırak çıkıp algoritmalarınızın şöyle şöyle yaparsanız daha hızlı çalışacağını söylemesi sizi yerin dibine sokabilir. Ne yapmak gerekir, çırağı karşınıza alıp teoremleri hakkında konuşursunuz ve sonuçta gerçekten haklıysa dediklerini uygulayıp dersinizi alırsınız. Daha sonra bu dersi baska çıraklara aktarmak üzere tabii. Ögrenmekten ve doğru bildiğiniz şeylerin aslında yanlış olduğunu anladığınızda değiştirmekten çekinmeyin. Yanlışları bulan kişileri tebrik edin ve daha fazla yanlış bulmaları için yönlendirin. Ancak bu şekilde ilerleme kaydedebiliriz.

Ben Neler Yapıyorum

Gelelim bu kadar bilgiden sonra ben bunları ne kadar uyguluyorum. Dil olarak seçimlerim VB.NET ve C#. Bunlarla birlikte XML ve SOAP, Web Services gibi teknolojileri öğrenmeye çalışıyorum. İşletim sistemi olarak, Windows ve Red Hat Linux ortamlarını seçtim. Web Sunucu için Linux üzerinde Apache Web Server, Windows üzerinde IIS kullanıyorum, bir yandan ASP.NET ile takılırken diğer yandan Linux üzerinde Java Bean ve EJB nasıl yayınlanır araştırıyorum. İlerde Java dilini de oğrenme planım var. Veritabanı olarak Linux/IBM DB2 ve Windows/SQL Server kullanmaya çalışıyorum. UML, OO, CBD metodolojilerinde de calışmalarım var. Araç olarak, Rational, CA, Microsoft, IBM, BEA ürünlerini kullanıyorum. Tabii ki tek bilgisayar yetmiyor. En az 3 adet lazım, bir tanesi çift işletim sistemli ve hepsi ağ ile birbirine bağlı. Bilgisayarlardan birini çöpten buldum.

Sizde böyle bir sistemi bir kaç arkadaş birleşip kurabilirsiniz. Birde rahatça girip çikabileceğiniz bir oda buldunuz mu, iş proje bulmaya kalıyor. Mahallenizdeki esnaf ile hiç bu konuları konuştunuz mu? Toplumumuzun gelişmesi ve yeni şeyleri ögrenmesi birazda size bağlı. Mahalle esnafına bilgisayardan ve özel yapıışlmis programların yararlarından bahsettiniz mi? E-posta, internet, işletim sistemi gibi konularda onları bilgilendirmeyi hiç düşündünüz mü? Biraz da misyonerlik gibi bir göreviniz var aslında. Etrafınızdaki insanlara bildiklerinizi aktarmayı hiç düşündünüz mü?

Sonuç

Yukarıda anlattığım yöntemler her yazılımcının alet çantasını geliştirmesi için çok güzel yöntemler. Fakat nasıl evinizde bir tamirata giriştiğinizde alet çantasındaki her aracı kullanmıyorsanız, yazılımcı olarak alet çantanızı da o şekilde kullanacaksınız. Öğreneceğiniz her bilgi alet çantanızda yerini alacak ve yeri geldiğinde çıkarıp kullanmaktan çekinmeyeceksiniz. Bu arada aletlerinizde gelişmeler de olabilir, zaman içerisinde bazıları yok olabilir. Önemli olan sürekli devinim içinde ögrenmeye ve gelişmeye açık olmaktır.

Hepinize kolay gelsin.

Otobüsle işe giderken hep fantastik düşüncelere dalarım. Program yazmanın geleceğini, bugün emekleme aşamasında olan teknolojilerin ileride nasıl olacağını tahmin etmeye çalışırım. Yeni çıkan Microsoft’un ağ hizmetleri veya Sun Microsystems’in Java teknolojileri gibi sistemler yazdığımız programların farklı platformlar üzerinde çalışabilmelerini sağlıyor. Ayrıca farklı teknolojiden sistemlerin ortak dillerle konuştuğunu ve veri alışverişi yaptığınada tanık oluyoruz. Yazdığınız programlardaki fonksiyonlar zaten başkaları tarafından biryerlerde yazılmış ve sizin kullanmanızı bekliyor. Bir gün gelecek ve program yazmak artık şema çizer gibi mevcut ağ hizmetlerini yada java bean programlarını birbirlerine bağlamaktan ibaret olacak. Kullandığınız yazılım aracı örütbağ üzerinde mevcut her web-service’in veya java-bean’in yerini ve nasıl kullanılacağını gösterecek ve ayrıca bu iki sistemi birbirine bağlamak için gerekli kodu da araç kendi üretecek. Siz sadece şematik olarak modülleri birbirine bağlayacak ve ortaya sadece bir kaç fonksiyon çağıran ve geri dönen hata mesajlarını derleyen bir program çıkacak.

Örneğin özel bir firma için hayat sigortası modülü yazıyorsunuz. Hizmetlerini kullanacağınız birimler SSK, Nüfus müdürlüğü, diğer sigorta firmaları, bankalar ve yabancı ülkelerin sosyal güvenlik birimleri. Kullandığınız yazılım aracı tüm bu birimlerdeki kullanılabilir modülleri gösteriyor. Hayat sigortası için gerekli müşteri bilgilerini SSK’nın sunduğu ağ-hizmetinden alıp kendi veritabanınıza kayıt edeceksiniz ve kişinin ödediği tüm SSK primlerinide SSK fonlarından alıp özel şirketin fonlarına aktaracaksınız, bu arada da kişinin diğer bir özel sigorta firmasındaki tüm sigorta bilgilerini kendi tarafınıza alacaksınız tabii ödediği primleri de. Nüfus müdürlüğünün hizmetlerini kullanarak kişinin ailesinde bir hastalık varmı araştıracak ve ödenecek primleri ona göre otomatik ayarlayacaksınız. Çalıştığınız bankanın servislerini kullanarak para transferleri gerçekleştireceksiniz. Modüllerini kullandığınız birimler sundukları hizmetin ücretini otomatik olarak firmanın hesabından trasfer edecekler. Yabancı ülkelerin sosyal güvenlik modüllerinden kişinin yurt dışında çalışma günlerini ve ödediği primleri görüp kendi primlerinizde parametre olarak kullanacaksınız. Tüm bu sistemi yazmak (modelleme + yazılım) 1 gününüzü alacak. Kağıt, mürekkep, iş gücü kaybı, gibi masraflar ortadan kalkacak ve çevre korunmuş olacak. Bu bir avantaj ama her türlü bilginin sanallaştırılması ve tüm sistemin bilgisayar ortamına sokulması da bir dezavantaj. Bir firmayı yada ülkeyi ortadan kaldırmak istediğinizde sunucularını uçurmanız yeter.

Tüm bilgi sanallaştığında orjinalliğide bozulabilir. Örneğin tüm tarihi bilgiyi sanal ortama kaydettiğimizi düşünelim. Çoklu ortam -ses ve görüntü ile- öğrenilebilme kapasitesi oldukça artar fakat değiştirilebilmesi çok kolay olacağından, bilginin orjinalliğini koruması çok zor hatta imkansızdır. Ancak tek bir yolla bilgi bozulmayabilir. İyi bir bilgi koruma algoritması ile. Kuran-ı Kerim’in şifrelendiği 19 sayısını duymuşsunuzdur. 200’e yakın farklı yolla yapılan hesaplamaların sonuçları hep 19’un katları olmaktadır. Böylece içerik üzerinde oynama yapıldığında kolayca anlaşılmaktadır. Buradan yola çıkarak bilginin hem herkes tarafından kolayca ulaşılabilmesini hemde değişmeden hayat sürecine devam edebilmesini sağlayacak şifreleri geliştirebiliriz. PGP gibi programlar ile bilginin içeriğini şifrelemiyoruz sadece bilgi içine yerleştirdiğimiz bazı kelimeleri veya harfleri sayarak elde edeceğimiz sonuçların doğruluğunu karşılaştırıyoruz. Var mı böyle bir program yazacak bir arkadaş. İşte size çok güzel bir proje.

İnsan ilişkilerinin diğer ülkelere göre daha yakın ve samimi olduğu ülkemizde bu tür bir sanallaşma pek mümkün gözükmüyor. Gözükmesin de. Ben örütbağından alış veriş yapmayı hiç sevmem. Zaten yapamamda çünkü kredi kartı kullanmaya karşıyım. Örneğin bir gitar alacaksam, gitar satan dükkanları bir gezmek ve beğendiklerimi çalmak isterim. Dükkan sahibi ile oturup bir çay içmek ve gitar hakkındaki görüşlerini almak isterim. Bir kaç tane reklama kanıpta kafamda belirli bir marka yada model ile yola çıkmam yani. Bu kadar sosyalleşmeyi monitör karşısında yaşayamayacağım için sanal alışverişi tercih etmem. Bence firmalar sanal alışveriş sitelerine harcadıkları yatırımı elemanlarına ve dükkanlarını geliştirmeye harcasalar daha fazla kazanırlar.

“Bu kadar konuşuyorsun da sende bu mesleğin içindesin” dediğinizi duyar gibiyim. Bu düzen içerisinde yaşıyoruz ve düzenin gereklerine göre hareket etmezsek elde edeceğimiz deneyim azalır. Tapınaklara kapanıp dünya malından elini eteğini çekip ruhunu Allah’a erdirebilirsin ama önemli olan bu savaşı şehir hayatı içinde otobüsle işe giderken vermek.

Durak geldi ben iniyorum.

Kalın sağlıcakla.

Çevik Modelleme Scott W. Ambler tarafından Extreme Programming değerleri göz önüne alınarak geliştirilmiş ve içine alçakgönüllüğün eklenmesi ile son halini almıştır. Extreme Programming değerleri iletişim, basitlik, geribildirim ve cesaret değerlerinden oluşur.Çevik Modelleme yazılım geliştirme açısından uyulması gereken kuralları ortaya koyar ve destekler.

Şimdi bu değerlere bir göz atalım:

İletişim

Projede yer alan herkes arasında çok iyi bir iletişim olmalıdır. Başarılı yazılım geliştirme'nin birinci gerekliliği budur. İletişim, sözlükte yazdığı kadarı ile kişiler arası belli işaret, hareket veya sembollerle bilgi alışverişi yapılan genel sistemin adıdır. İletişim iki yollu bir sistemdir. Her iki tarafta bilgi sunar ve kazanır. İletişimde aksamalar ortaya çıktığında problemler de ortaya çıkar. Örneğin, bir yazılım uzmanı kendi yazdığı bölümün henüz tam olarak bitmediğini iş arkadaşlarına söylememesi başka bir yazılım uzmanının bu problemi ortaya çıkartmak için ekstra zaman harcamasına neden olabilir. Yazılımcılar yazacakları sistemin prototipini müşteriye sunarlar ama müşteri onun prototip olduğundan haberdar değildir ve gerçek sistemin hazır olduğunu zanneder.

Durup düşündüğünüzde modelleme işleminin aslında iletişimi arttırmak ve geliştirmek için yaptığımızı görürüz. Müşteriniz, pek çok iş kuralından oluşan karmaşik bir iş yapısını anlatırken sizin mantığı anlatan bir veri akışı şeması çizmeniz, işlemi anlamınızı kolaylaştıracaktır. Genellikle, konu hakkında beş dakikada cizeceğiniz bir model, o konu hakkında 5 saat okumaktan veya tartışmaktan cok daha fazla sey öğretecektir. Modelleme, kendi fikirlerinizin daha rahat anlaşılmasına, başka kişilerin fikirlerini daha rahat anlamanıza ve en sonunda genel olarak tüm iş hakkında genel bir kanı oluşmasına neden olur.

Basitlik

Pek çok yazılım kitabı basitlikten söz eder fakat içerisinde geçen konulara ve metodlara baktığınızda, yazılım geliştirme işini zorlaştırdığını görürsünüz. Genellikle yapılan yanlışlar şunlardır.

Karmaşık yapıları erken uygulamak: İhtiyaç olmadan modellenen karmaşık yapılar, yazılım uzmanlarının fazla mesai yapmalarına neden olur. Karmaşık yapıların yavaş yavaş sindirilerek ve parçalara bölünerek modellenmesi ve en gerekli kısmının ilk olarak yazılması gerekir. Müşterinize vereceğiniz ilk sürümde, hayati önem taşıyan modüllerle ve en az hata ile ortaya çıkmalısınız. Gereklilikler ortaya çıktıkça, müşteri de ne istediğini daha net görecek, belkide karmaşik bir modülü programlamaktan kurtulacaksınız.

Gelecekte kullanılacak bölümler için fazladan modelleme/kodlama yapmak: Şu anda üzerinde calıştıgınız bankacılık sisteminin, hayat sigortalarını destekleyebilmesi için belkide sadece bir günlük bir modelleme gerekiyor, Neden yapmayalimki? Evet, bu sistemi modellemek oldukça zevkli olacaktır fakat yazılımınızı bugün olduğundan daha karmaşik bir yapıya sokmayacak mı?Yada yazılım uzmanlarınız gelecekte olacak değişikliklere cevap verebilmek veya her isteğe cevap verebilecek en iyi yazılımı yapma egosu ile çok fazla modelleme ve kodlama yapma eğiliminde olabilirler. Müşteri isteklerini anlayarak, olabilecek en basit, en verimli, en ucuz çözümü sunmak hedefimiz olmalıdır. Yarının problemlerini yarın çözmeliyiz. Eger bugünden en basit çözüm üzerinde çalışırsak, yarın yeni bir fonksiyon eklemeye kalktığımızda elimizdeki sistem çok basit olacaktır.

Karmaşik altyapılar geliştirmek: Proje ekiplerinin yaptiği genel hata ilk asamada gelecekte kullanmak üzere geliştirdikleri modüller, sınıf kütüphaneleri ve iskelet yapılardır. Amaç bu parçalar lazım olduğunda elimizin altında olmasıdır. Fakat bu amacin ciddi zararları vardır. Öncelikle müşterinizin kaynaklarını, onlara elle tutulur bir ilk sürüm vermeden harcamış oluyorsunuz. Müşteriniz sizden bazı işlerini kolayca yapabileceği bir sistem istiyor fakat sizin ilk verdiğiniz şey hata-yakalama alt yapısı. Projenizi, hızlı ve kullanilabilir bir fonksiyonellik sunmadığınız için riske atıyorsunuz. Ayrıca hata-yakalama gibi alt-sistemleri projenin gidişati içerisinde zamanlada geliştirebilirsiniz. Sadece ihtiyacınız gerçekten ortaya çıktığında.

Geribildirim

Yaptığınız işin doğru olup olmadığını anlamanın tek yolu farklı kişilerin geliştirdiğiniz sistem hakkında test yapmaları ve sonuçları paylaşmanizdir (geribildirim). Testi yapan kişilerden sonuçları doğru zamanda alıp sebeplerini kısa zamanda bulmak çok önemlidir. Analizler sonucu ortaya çıkan modellerinizin doğru olup olmadığını nasıl anlayacaksınız.

Modellemeyi takım halinde yapın. Yazılım geliştirme işi yüzme gibi değildir. Tek başına yapmak tehlikelidir. Diğer kişilerle beraber çalıştığınızda sonuçlara daha hızlı ulaşır, sebeplerini bulmak için zaman kaybetmemiş olursunuz.

Modelinizi doğru kişilerle inceleyin. Modellediğiniz işin, o işten anlayan kişilerle birlikte incelenmesi gerekir. En güzeli modelleme sırasında bu kişilerin işin içinde olmasıdır. Gereklilik modelleri son-kullanıcı ile beraber yapılmalı, detaylı dizayn modelleri ise programlamayı yapacak kişiler ile yapılmalıdır.Resmi toplantılar halinde düzenlenmesi ve proje başında ayda veya haftada bir yapılmalıdır. Eğer bu mümkün değilse (organize etmesi zaman alır)gayri resmi hızlı toplantılar ile yapılacak incelemeler modellerinize çok şeyler katabilir.

Modelin uygulanması. Eğer hiç bir şekilde bir toplantı ayarlayamıyorsanız, modelinizi doğrudan koda döker ve ilk sürümden sonra gelecek sonuçları beklersiniz. Önemli olan testlerin zamanında yapılabilmesi ve hataların hızlı olarak sebeplerine ulaşabilmektir.

Kabul testleri. Esas olarak modellerinizin müşteri isteklerini yansıtıyor olması gerekir. Müşteriniz kabul testleri sırasında bu isteklerini değerlendirir ve geri dönen hatalar ile gene modellerinizi test etmiş olursunuz.

Geribildirim olayında zaman kavramıda çok ilginçtir. Bir takım halinde çalıştığınızda, geribildirim saniyeler yada dakikalar içinde olabilmektedir. Gayriresmi toplantılarda ise geribildirim dakikalar yada saatler alabilmektedir. Resmi toplantı geribildirimleri toplantı sırasında gelsede zaten organize etmesi haftalar, aylar alabilmektedir. Uygulamayı yapıp ilk sürümü verdiğinizde geribildirim saatler yada günler içinde olur. Kabul testlerinden sonra geribildirim bir kaç hafta yada ay içerisinde gelir.

Zaman ne için önemlidir? Çünkü kısa zamanda gelen geribildirim, sizin modellerinizden sapma olasılığınızı düşürür. Takım halinde çalışmanın en büyük yararı geribildirimlerin hızlı olmasıdır. Yada kağıt üzerinde mükemmel görünen modelin kodlanması ve ilk sürümden sonra gelecek geribildirimlerin işlenmesi de metod olarak düşünülebilir.

Cesaret

Arkanıza rahatça yaslanıp genel durumu kabul etmek ve bir şeyleri geliştirmeyi, düzeltmeyi denememek yada birisinin çıka gelip hataları düzeltmesini beklemek çok kolay bir işdir. BT endüstrisinin bugünkü aksayan taraflarında cesaretsizliğin büyük payı vardır. Çevik Metodolojisi size diğer insanlarla beraber çalışmanızı, onlara güvenmenizi ve kendinize güvenmenizi öğütler. Bu cesareti arttırır. XP veya Çevik Modelleme, yapabileceğiniz en basit modeli yapmanızı söyler, çünkü yarının problemlerini yarın çözmek gerekmektedir. Çevik Modelleme, gerçekten dökümantasyona ihtiyacınız olduğunda döküman yaratın der. Beyaz tahta yada not defteri gibi en basit araçları kullanarak modelleme yapmanızı öğütler. Karmaşık yazılım araçlarını ancak olabilecek en yüksek yararı elde edebileceğiniz zaman kullanmanızı öğütler. Modelerimizin daha iyi görünmeleri için zaman harcamamızı öğütler. Birlikte çalıştığınız kişilere güvenmenizi, yazılım uzmanlarınında dizayn aşamalarında karar verebileceğini söyler. Tüm bu söylediklerimizin hepsi cesareti arttırır. Cesaretli ekipler, denemekten ve yanılmaktan korkmaz. Sonuçlara daha hızlı ulaşılır ve kat edilen yol daha uzun olur.

Düşünün, firmanızda Modul Tabanlı Analiz ve Geliştirme kurallarını uygulamak istiyorsunuz fakat endişeleriniz var. Seçim için cesaret gerekir. Her işin her sektörün belirli riskleri vardır fakat risklerden kaçmak olsa olsa daha büyük risklere yakalanmanıza neden olur (yağmurdan kaçarken doluya tutulma kuralı). Cesaretli olmak sizinde hata yapabileceğinizi anlamanıza yardımcı olur. Denemekten, yanılmaktan ve deneyim kazanmaktan korkmayın.

Alçak Gönüllülük

En iyi yazılım uzmanı her şeyi bilmediğini kabul edecek kadar alçak gönüllü olandır. Gelmiş geçmiş en iyi Java yazılımcısı olabilirsiniz fakat her bir Java API'sinin detaylarını tek tek bilmiyor olabilirsiniz. Çok iyi Java bilmeniz, çok iyi arayüz tasarımlama yada mükemmel veritabanı tasarımcısı yada en iyi müzisyen olduğunuz anlamına gelmez. Sadece çok iyi Java bildiğiniz anlamına gelir. Çok iyi Java bilmeniz, yeni başlayan çıraklardan hiç bir şey öğrenemezsiniz anlamına da gelmez.

Çevik Modelleme ve programlama yapan kişi proje ekibindeki herkesin bir uzmanlık alanı olduğunu bilir ve ancak diğer kişilerin yardımı ile kendi işlerinin başarılı bir biçimde biteceğini görür.Alçakgönüllülük, diğer kişiler ile birlikte çalışmayı imkan dahilinde kılar. Çevik Modelleme yapan kişi diğer proje elemanlarının farklı deneyimlerinin olduğunu, kişisel pek çok farklılıklar olduğunu bilir ve saygı ile hareket eder. Patronları "yüksekte oturan kargalar", son kullanıcıları "aptal kullanıcı", diğer departmanları "kafayı yemiş" olarak değerlendirmek iletişim problemlerine yol açar, iletişimsizlik projenizi sekteye uğratabilir. Zaman ve kaynak kaybından başka bir şey olmadığı sizde görüyorsunuz.

Bu yazının amacı

Burada anlatılan modelleme kültürü CBD, UML ve eXtreme Programming ile analiz ve modelleme yapan projeler tarafından benimsenmeye başlamıştır. Çok yeni olması nedeni ile tamamen geliştirmeye ve deiştirmeye açık bir konudur.

Bu yazıyı Scott W. Ambler'in Agile Modelling (ISBN 0-471-20282-7) isimli kitabından, sizin bu konuları duymanızı sağlamak ve hafızalarınızda birer ışık yakmak amaçlı olarak çevirdim.

Bir kaç yararlı link:

  1. http://www.xprogramming.com/

  2. http://www.extremeprogramming.org/

  3. http://www.ambysoft.com/ Scott Ambler'in web sitesi


Herkese kolay gelsin.

Ülkemizde tonlarca Muhasebe ve Personel Yönetim programı yazan firma var. Bu firmalar yazdıkları programlarda bir firmanın ihtiyacını karşılayacak muhasebe işlemleri ile hiç bir yerde doğru dürüst uygulanmayan personel yönetimi konularında hizmet veriyorlar. Peki soruyorum bir maliye denetçisi/müfettişi bu programların hepsini en ince ayrıntısına kadar biliyor ve denetliyor mu? Yada bir firma denetlenmeye alındığında kullandıkları veritabanları ve programları en kıyıda köşede kalmış inceliklerine kadar denetleniyor mu? Bu programlar maliye tarafından onaylanmış, lisans verilmiş programlar mıdır? Yada böyle bir uygulama var mıdır?

Başka bir konuda müşterilerin program satın aldıkları bilgisayar firmalarından istekleri. -Şimdi herkes olur mu öyle şey diyecek ama- bu müşteriler ne kadar gayri resmi yol varsa aldıkları paket programlarda bunları uygulamak ve kayıtlarını tutmak, bu yüzsüzlük yetmezmiş gibi birde bunların gizli şifreler ile korunmasını ve maliye müfettişleri geldiğinde o bölümlerin görünmemesini istiyorlar. Zaten şu anda piyasadaki tüm muhasebe programları veya özel sektör için yazılmış pek çok paket programda alavere dalaverenin binbir türlüsü, bir malı 3, 5 kere satmalar, muhasebe hesaplarının resmi-gayri resmi olarak ikiye ayrılması, faturasız çalışmalar, SSK ödemelerinin en düşük ücretlerden görünmesini sağlamak, SSK’lı çalışanları ayda sadece 15 iş günü çalışıyor göstermek gibi daha akla gelebilecek binbir türlü şeytana pabucunu ters giydirme oyunu. Bütün bu gayri resmi işlemlerin sonucunda devletin kaybettiği vergi, SSK’ya tam olarak ödenmeyen primler sonucu emekli olduğunuzda alacağınız maaşın azlığı, firmanın kaçırdığı faturası bile olmayan kazançlar, haksız elde edilmiş pek çok gelir, acaba bizlerden yani birey olarak her vatandaştan bir şeyler koparıp götürmüyor mu?Üstüne üstlük maliye müfettişleri tarafından tesadüfen! ortaya çıkartılan bu işlemler sonucu firmanın zarar görmesi ve sicilinde kara bir lekenin bulunması da cabası.

ÇÖZÜM ÇOKMU ZOR?
Belki düşüneceksiniz - halledilmesi gereken bir sürü başka konu varken, önce bu konudan mı başlanır- yada -adam sende, tonla yazılım firması yazmış muhasebe paketi şimdi onların ekmeğine taş mı koyacağız- diye. Gerekirse koyacağız! Müşterinin yüzsüzleşmesini ve tavizler verilmesini önlememiz lazım. -Yok kardeşim bizim paketimizde gayri resmi satışlarını tutacak bir yapı yok yapmayı da düşünmüyoruz. -Ama olur mu X firmasının muhasebe paketinde var bu olay. Misler gibi kaçırıyoruz vergiyi.-Yıkıl, gözüm görmesin.Tarzında Erdener Abi muhabbetleri çekicez belki ama, eğer tüm firmalar belli kurallara uyarsa eminim bir kaç sene içinde taviz alamadığını gören müşteri bu üç kağıtlardan vaz geçecek ve doğru neymiş vicdanının sesiyle karar verdiğinde hem kendisi hemde vergi gelirlerini sosyal hizmetler için kullanan devlet refah seviyesini arttırmış olacaktır.

NEDİR BENİM ÖNERİM?
Bu yazımdan sonra gelecek yorumları merakla bekliyorum. Bilirsiniz, padişahlardan biri vezirlerine savaşa gidelim mi gitmeyelim mi, karar veremez tarzda bir soru sorar, vezirlerden bazıları hemen sazan gibi atlayıp gitmeyelim yüce devletlüüüüm derler kimileride gidelim tabi ne olacak der. Gitmeyelim diyenlerin boynu vurulur ve savaşa gidilir.

Şimdi gelelim çözüm önerisine. Bu işin Maliye bakanlığı eli ile yapılması gerekir. Maliye bakanlığı 30 kişilik usta mali müşavir/muhasebeci/müfettiş/personel bordro işlerinden anlayan bir analiz ekibi ve 100 kişilik daha önce muhasebe ve personel yönetim paketi yazmış, yazılım firmalarında çalışmış, muhasebe ve personel yönetiminden anlayan programcı, 10 kişilik yüksek matematik bilgisine sahip uzman, 100 kişilikte gene muhasebe ve personel bordro modüllerini kullanmış, piyasadaki programlarda tecrübeli, test ekibi.Bu 30 kişilik uzman takım bir muhasebe/personel bordro programı nasıl olmalı, tüm ayrıntıları ile oturup bir analiz yapacaklar, Analizler tamamen ayrıntılı Modül Tabanlı Geliştirme (MTG/CBD Component Based Development) <a href="http://www.cbd-hq.com/">CBD Head Quarter</a> kurallarına göre yapılacak. Hiç bir gayri resmi işleme izin verilmeyecek. Tabii ben sadece Muhasebe ve Personel Bordro üzerinde durdum ama bu modüller çoğatılabilir.

Ekip, kendi içinde bölümlere ayrılarak yazılacak modülleri belirleyecek Örneğin muhasebe için olacak ufak modüller: Hesap planı, Hareketler, Defter Basımı vs. Gibi modüller...10 kişilik matematik ekibi programların ürettiği sonuçları matematik olarak ele alıp doğru sonuçların ortaya çıkıp çıkmadığını kontrol edecek. Programı kullanacak firmanın, önünü görebilmesi için gerekli analiz raporlarını hazırlayacak.100 kişilik test ekibi MTG kurallarına göre test yapacaklar ve programların doğruluğunu ortaya koyacaklar. 20 kişilik uzman takım ve 10 kişilik matematik takımı ile koordineli çalışacaklar.

100 kişilik programcı ekibi de oturup bu programı geliştirecekler. Özellikleri neler olacak? Bu projeye seçilen kişiler özel güvenlik taramalarından sonra seçilecek. Güvenilirliği nasıl kanıtlanacak? Öncelikle gelen başvurular değerledirilerek içlerinden yukarıdaki şartlara uygun olanlar seçilecek. Daha sonra bu kişiler yakın takibe alınacak. Bu iş için MİT’ten yardım alınabilir. 3 yada 4 ay boyunca hem kişinin geçmiş sicil kayıtları hemde yaşam tarzından tutunda, arkadaşları ile ilişkilerine varıncaya kadar irdelenmesi gerekiyor. Her aday için atanacak bir MİT görevlisi, adayın yakın çevresindeki herkes ile görüşmeler yapacak, çeşitli anket formları doldurtulacak ve mümkün olan en fazla bilginin elde edilmesi sağlanacak. Tüm bu işlemlerin sonucunda MİT bünyesindeki psikologlar ve İnsan Uzmanları ile (eminim vardır) toplanan bilgiler tartışılacak ve kişiye bir rapor verilecek. Bu rapor kişinin yüksek derecede sır tutabileceğini, güvenilir olduğunu, yüksek güvenlik gerektiren işlerde çalışabileceğini onaylayan bir rapor olacak. (kahkahaları duyar gibiyim, gülmeyin bu işler yabancı ülkelerde böyle dönüyor. Bkz. Security Clearance) MTG yapısında programlanan bu programlar belli arayüzleri sayesinde herhangi bir ticari paket programa tak-çalıştır yöntemi ile entegre olabilecek. Devlet tarafından yazılacak bu modüller tamamı ile ücretsiz verilecek ve her yazılım firmasının bu modülleri kullanması teşvik edilecek veya zorlanacak. (Tamam biraz sert oldu ama çıkar çevrelerinin cepleri boşalmaya başladığında ne kadar çatlak ses varsa su üstüne çıkacağından emin olun.)Programın kaynak kodu sadece 100 kişilik uzman programcı takım içerisinde olacak ve hiç bir şekilde firmalara verilmeyecek. Sadece yazılan modüller, arayüzleri açıklayıcı bir döküman ile birlikte verilecek.

Bankalar ve SSK/Bağkur veritabanları ile ilişkili programlar olacak. SSK/Bağkur prim ödemeleri direk banka hesabından SSK yada Bağkur’a yapılabilecek. Firmaların SSK ödediği çalışanları hiç bir şekilde kredi kartı sahibi olamayacak onun yerine hesabındaki parayı özgürce harcayabileceği bir kartı olacak.

Maaş ödemeleri otomatik olabilecek, çalışanların banka hesaplarına otomatik ödenecek ve şirket muhasebe kayıtlarında otomatik olarak muhasebeleştirilecek. Çalışan hesabına yatan maaşını internetten zaten kontrol edebiliyor, Personel Bordro modüllerinde tüm bilgiler SSK veritabanında tutulacak ama Muhasebe tarafı firma içinde bulunabilir. Tek bir muhasebe paketi olduğundan maliye müfettişlerinin işi oldukça kolaylaşacak. Kontrol mekanizmaları için kurulacak maliye müfettişleri takımı bu modülleri en ince ayrıntısına kadar bilecek ve bir firma göz altına alındığında gerekli raporlar çok hızlı bir biçimde ortaya çıkacak. Yada her firma on-line olarak denetlenebilecek. Çeşitli alt ve üst limitleri aşan firmalar anında olaya müdahale ile ortaya çıkabilecek, nedenleri araştırılıp, çözümler sunulabilecek. 10 kişilik matematik ekibi burada devreye giriyor.

İşe giriş çıkış gibi işlemler on-line olarak olacağından ve SSK ödemeleri tam olarak yapılacağından hem devlet hemde sosyal güvenlik açısından bize yarar sağlayacaktır. İşe girişlerde evrak yetersizliğinden dolayı SSK’ya geç kayıt olma ortadan kalkacak, daha sağlıklı ve düzgün bir işleyiş ortamı sunulacak.

İşe giriş çıkışlarda sadece yanınızda taşıdığınız bar-kodlu SSK kartınızı Muhasebe bölümüne vermeniz yetecek. Geriye kalan tüm evrakların hepsi on-line olarak (ya şu on-line kelimesine türkçe bir karşılık bulmak gerek) bulunacak ve tekrar adliye, sağlık ocağı, muhtarlık, gibi makamlar boş yere meşgul edilmeyecek. Zaten Mernis Projesi ile başlayan vatandaşlık numarası gibi olaylar bu tür alt yapılara hazırdır. Sağlık ocağı konusu ise şöyle halledilebilir. Sağlık ocağından alınan belgenin süresi altı aydır ve her altı ayda bir sağlık ocağına gidilip kontrolden geçmek gerekiyor. Böylece Sağlık ocağı veritabanlarında her zaman güncel bir sağlık raporunuz olacak. Aslında bu Sağlık Ocağı ayrı bir proje olarak ele alınması gerekir fakat SSK tarafında yapılacak ufak değişikliklerle bu kayıtlar SSK’da tutulabilir.Yazılım firmaları muhasebe ve personel bordro paketleri ile uğraşmayacağı için başka konularda kendilerini daha çok geliştirebilir, bu iki pakete harcanan kaynak ve zaman ile daha başka işlerde çok daha başarılı olunabilir.

Tabii bu arada geliştirme yapılacak ortamın tasarlanması, MTG alt yapısına uygun araçların seçilmesi, bilgisayar alt yapısının sağlıklı ve yeterli olması gerekiyor.Yazılan programlar ücretsiz verileceğinden gelir yokmuş gibi görünüyor fakat modüllerin ortaya çıkması ve kullanılmaya başlanması ile ülkenin kazanacağı geliri bir düşünün. Vergi kaçırma ortadan kalkmış, gayri resmi tüm işlemler yok edilmiş, SSK ödemeleri tam olarak yapılıyor. Bence sırf İstanbul’da kullanılsa ve %50 civarında bir kaçak önlense, yazılan programların tüm maliyetleri 2 sene içinde amorti edilir. Ondan sonrada devletin kaçakları önlemedeki bu başarısı kâr yapmaya başlar.

İleriye dönük ve uzun vadede kâr yapacak bir proje fakat bir yerlerden başlamak lazım. Günlük politikalarla ve yönetimlerle bu işlerin olmadığı aşikâr.

Personel Bordro modülünde devlet tarafından yapılan yasa değişiklikleri sonucu değişen kurallar hemen uygulanabilecektir. Örneğin Nema uygulaması kalktığında, yasanın çıktığı gün herkesin bu yasayı uygulaması sağlanabilir.

Daha bunun gibi pek çok yasa çıkarıldığı gün uygulamaya konulabilir.

Fena uçtum değil mi? Aslında hiç de değil. Siz buna uçmak diyorsanız bide benim öteki projelerimi dinleyin.

Arama



Hakkımda

Merhaba, ben Gürkan Yeniçeri. 10 yılı aşkın süredir özel sektör ve hükümet iştiraklerinde yazılım mühendisliği yapıyorum. Bu sitede 2005 Mart ayından beri genelde yazılım mühendisliği ve hobilerim hakkında yazmaktayım. Profesyonel iş geçmişim hakkında daha fazla bilgiyi aşağıdaki Linkedin.com linkinden alabilirsiniz.
Gürkan Yeniçeri'nin profilini görmek için tıklayın

Kontak

Soru sormak veya öneride bulunmak isterseniz buradaki kontak formunu kullanın. Mesajlarınıza en kısa zaman içinde cevap vermeye çalışacağım. Ayrıca Windows Live Messenger kullanarak gyeniceri {AT} hotmail {DOT} com adresinden bana ulaşabilirsiniz.

Eğer İngilizce blogumu okumak isterseniz buraya buyrun.
Blogumu RSS Bandit gibi bir RSS okuyucusu ile de takip etmek için kullanın.
Ayrıca aşağıdaki linklerden hakkımda ayrıtılı bilgi alabilirsiniz.
Twitter
Friendfeed
Facebook

RSS 2.0

Reklamlar


Vezir

Vezir Proje Danışmanı
Sitede birde Vezir isminde wikimiz var. Bu wikiyi yazmayı düşündüğüm bir kitap için oluşturmuştum daha sonra herkese açmaya karar verdim. Vezir yazılım firması kurmak isteyenlere tavsiyeler vermek için hazırlandı. Ayrıca UML ve Modül Tabanlı Geliştirme hakkında da bilgiler mevcut. Vakit buldukça yeni eklemeler yapıyorum. Değişikliklerden haberdar olmak için RSS çıktısına üye olabilirsiniz.

Tag Bulutu

Tüm taglar...
www.flickr.com
This is a Flickr badge showing public photos from gurkanyeniceri. Make your own badge here.
Bu blogda 265 yazı ve 509 yorum var. Diğer sitelerden 26 adet link gelmiş.

Reklamlar