Pages

Datagridview Kullanarak Access’ e bağlanma Örnek

C# ve Nesne Yönelimli Programlamanın 3 Prensibi

Kapsülleme (Encapsulation)
Nesne yönelimli programlamanın ilk prensibi kapsülleme (encapsulation) olarak adlandırılır. Bu özellik, dilin nesne kullanıcısından gereksiz uygulama ayrıntılarını saklayabilme yeteneği olarak ifade edilebilir. Örnek olarak .Net Framework temel sınıf kütüphanesi içerisinde yer alan ve Open() ve Close() metotlarına sahip SqlConnection sınıfını ele alalım.
  //SqlConnection, veritabanına yapılan bağlantının detaylarını kapsüllemektedir.
SqlConnection baglanti = new SqlConnection("server = London; database = AdventureWorks; integrated security = true");
baglanti.Open();
  //Burada veri yönetilir.
baglanti.Close();

SqlConnection sınıfı, veritabanına açılan bağlantının sağlanması, yüklenmesi, yönetimi, kapanması gibi içsel detayları gizlemiştir. Nesne kullanıcısı kapsüllemeyi sever; çünkü programlama görevlerini daha kolay hale getirir. SqlConnection sınıfında olduğu gibi, nesnenin görevini yerine getirmesi için arka tarafta çalışan onlarca satır kodu düşünmeye gerek yoktur. Tek yapılması gereken nesne örneğinin oluşturulması ve uygun metotların çağrılmasıdır.

Kapsüllemenin diğer bir işlevi ise veri korumadır. Bir sınıf tasarımında doğru olan, nesnelerin durum verilerini private erişim belirleyicisi ile koruma altına almaktır. Bu yolla dış dünya, alanın değerini elde etmek ya da değiştirmek istediğinde bir kontrolden geçmek zorunda kalır. Dış dünyaya açık, yani public erişim belirleyicisine sahip alanların sorunu, ait oldukları sınıfın iş mantıklarını algılayabilme yeteneklerinin olmamasıdır. Dolayısıyla atanan değerin iş mantığına (business logic) uygun olup olmadığına dair herhangi bir kontrolün sınıf içerisinde yapılabilmesi mümkün olmamaktadır. Nesne kullanıcısı genelde sınıfı yazan kişi olmakla birlikte harici birisi de olabilir; dolayısıyla böyle bir kontrolü nesne kullanıcısı tarafında yapmak akla gelse de ; bu çok efektif bir yol olmaz. Sınıfların durum verileri olarak anılan alanlar, private erişim belirleyicisi alarak dış dünyaya kapatıldıklarında başlangıç değerleri, sınıf içerisinde tanımlandığı yerde ya da yapıcı metot yardımıyla verilebilir. Böyle bir kapsülleme tercih edilebilir; ancak bazı durumlarda alanın değerinin dışardan okunması, değerinin sadece içsel olarak sınıf üyeleri tarafından atanması, durum verileri üzerinde yapılacak değişikliklerin dışarıya açılması gerekebilir. Burada değişiklikle birlikte gelen verinin kontrol edilerek istenmeyen durumların önüne geçilmesi gerekliliği ortadadır.
Kapsülleme, durum verilerinin tutarlılığını sağlamak için bir yol sunmaktadır: public eirşim belirleyicisine sahip alanlar tanımlamaktansa, alan verilerini private olarak tanımlamak alışkanlık haline getirilmelidir (Herhangi bir iş kuralı olmasa da). Bu durumda alanlar nesne kullanıcısına iki teknikle açılabilir:


- Nesne yönelimli diğer diller için geleneksel yol olan Erişen ve Değiştiren (Accessor and Mutator) metotlar tanımlamak.
- Bir özellik (property) tanımlamak.

Hangi teknik kullanılırsa kullanılsın iyi kapsüllenmiş bir sınıf, ham verisini (yani alanlarını) ve onu nasıl yönettiğinin ayrıntılarını dış dünyanın kem gözlerinden gizlemelidir. Bu yaklaşımın güzel ve faydalı olan yanı, sınıfı yazan kişinin, çalışan kodu bozmadan kapalı kapılar ardında metodun ya da özelliğin uygulanışını değiştirmekte serbest olmasıdır. .NET Framework temel sınıf kütüphanesi, geleneksel Erişen/Belirleyen metotlar yerine tip özelliklerini tercih eder. Bu yüzden sınıf kütüphanesi ile sağlıklı bir şekilde etkileşen programlar için kendi tiplerimizi yazarken özelliklerden faydalanmak doğru bir davranış olacaktır. Ayrıca özelliklerin bir alanın değerini işaret edip alana değer atamaları zorunlu değildir. Bir alan olmadan da özelliklerden faydalanılabilir.  
Kalıtım (Inheritance)
Kapsüllenmiş bir sınıf geliştirmeyi analiz ettikten sonra, şimdi sıra birbirleriyle ilişkili sınıf aileleri oluşturmaya geldi. Nesne yönelimli programlamanın ikinci prensibi olan kalıtım (inheritance), dilin varolan sınıf tanımlamalarının üzerine yeni bir sınıf tanımlaması inşa edilmesine izin verme yeteneği olarak ifade edilebilir. Kalıtım, bir türetilen sınıfın (base class ya da parent class) özellik ve davranışlarını, bir alt sınıfın miras alarak sanki kendi üyeleriymiş gibi kullanmasıdır.   

image
Yukarıdaki şekil, şöyle yorumlanabilir: Kare bir şekildir, şekil ise bir object’dir. Sınıflar arasında bu tarz bir ilişki oluşturulduğu zaman, tipler arasında bir bağlılık inşa edilmiş olur. Kalıtım fikrinin altında yatan en basit fikir, yeni sınıfın varolan bir sınıfın fonksiyonelliklerine sahip olması ve muhtemelen genişletmesidir. Kalıtım konusu ile ilgili belirtilmesi gereken bir ayrıntı vardır: .NET dünyasında her tip, eninde sonunda ortak bir temel sınıftan (base class) türer: System.Object. Object sınıfı, .NET ekosisteminde yer alan bütün tipler tarafından desteklenen üyeler kümesini tanımlamaktadır. Herhangi bir temel sınıf belirtmeden tanımlanan bir sınıf, bilinçsizce Object sınıfından türer. 
Kalıtıma başvurmak için şu iki sebepten birisi olmalı : (1) Var olan bir tipe yeni fonksiyonellikler eklenmek istendiğinde. (2)Birbiriyle ilişkili sınıfların birçok ortak üyesi bulunması durumunda . Kalıtımın uygulandığı yerde, bir temel sınıftan türeyen sınıflar, bütün temel sınıf üyelerini miras alırlar.
.NET Framework içerisinde örnek vermek gerekirse System.Windows.Forms.Control sınıfı, kendi yazacağımız bir windows kontrolünün ve System.Windows.Forms.Button, System.Windows.Forms.TextBox gibi var olan windows kontrollerinin temel sınıfı olarak kullanılmaktadır. 
Altı çizilmesi gereken bir diğer ayrıntı ise şudur: Kalıtım, kapsüllemeyi korur. Dolayısıyla türeyen sınıflar, temel sınıfın private erişim belirleyicisine sahip üyelerine erişemezler. 
Temel sınıflar (base classes) hakkında konuşmak gerekirse C#’da, bir sınıf direk olarak sadece tek bir temel sınıfa sahip olabilir. Dolayısıyla tek bir tipin, birden fazla temel sınıfının olması mümkün değildir. Buna karşın C#, bir sınıfın istenilen sayıda arayüzü (interface) uygulamasına izin vermektedir. Yani C#’da çoklu kalıtım (multiple inheritance) ancak arayüzler (interface) ile sağlanabilir.


Çok Biçimlilik (Polymorphism)
Nesne yönelimli programlamanın son prensibi, çok biçimlilik (polymorphism) olarak adlandırılır ve şu soruya cevap verir: Türeyen sınıflar, temel sınıfta yer alan bir üyeyi nasıl farklı şekillerde uygulayacaklardır? Çok biçimlilik, temel sınıfta yer alan bir üyenin (metot, özellik, indeksleyici ya da olay), türeyen sınıf tarafından nasıl değiştirileceğine dair bir yol sunmaktadır. Bu yoldan ilerlemek için öncelikle virtual ve override anahtar kelimelerinin çalışma mekanizmalarının anlaşılması gerekmektedir.
Bir temel sınıf, tanımlayacağı üyenin uygulanışının -yani içerisindeki kodların-, kendisinden türeyen sınıflar tarafından değiştirilebilmesini istiyorsa bu üye virtual anahtar kelimesi ile işaretlenmelidir. 
Türeyen bir sınıf, virtual anahtar kelimesi ile işaretlenmiş bir üyenin uygulanışını kendi sınıfına ait bir iş mantığıyla değiştirmek isteyebilir; ancak zorunda değildir. Üyenin başına override anahtar kelimesi yazılarak yeniden kodlanması ile böyle bir değişiklik mümkün olmaktadır. Ayrıca ezilen (overriden) her üye, ihtiyaç duyulması halinde temel sınıfta yer alan uygulanışı yeniden çağırmakta serbesttir: Kod içerisinde istenen herhangi bir yerde temel sınıfın bir üyesi base anahtar kelimesi ile çağrılabilir.

PHP ile gelistirilmis Turkce Takvim Uygulamasi

 Merhabalar, 

Uzun zamandir belki de php ciktigindan beri asp ile karsilasitirilmis, ustun yonleri
zayif yonleri bulunmaya calisilmistir hep.

Bana kalirsa php'nin asp'den en ustun yanlarindan biri bircok seyin sizin
insiyatifinize birakilmis olmasi.
Php, her turlu uygulamayi gelistirmekte temel olarak kullanabilecegimiz fonksiyonlari
hizmetimize sunmus, bizeyse bunlari uygun bir sekilde harmanlayip
uygulama gelistirme imkanini tanimis. Dedigim gibi en onemli ustunluklerinden biri
de bu bana kalirsa.

Ornegimizde de inceleyecegimiz takvim uygulamasi asp.net' te surukle birak islemiyle
cok bir kisa surede yapilabiliyor fakat phpdeki gibi her satirina sizin yon
verdiginiz bir uygulama yazma imkani tanimiyor bu sebep nedeniyle. Hersey standart,
kaliplasmis sizin takvime mudahele edip kendinizce birseyler eklemeniz oldukca guc.
Phpde yazdigimiz bu takvim uygulamasinda ekleyeceginiz iki satir kod ile ajandanizi
olusturabilirsiniz mesela.

Bunun yaninda bu belirttiklerimin sadece benim goruslerim oldugunu Asp.net' inde
kendine gore ustun yonlerinin oldugunu belirtmek isterim. php, asp.net, jsp, cfm vs.
bunlar arasindaki secimi yapmak tamamen uygulama gelistiriciye ve tabi ki kosullara
bagli.

Simdi uygulama icinde gecen mktime fonksiyonunun islevine kisaca deginelim:

mktime : Bu fonksiyon date fonksiyonuyla birlikte kullanilarak ilerideki tarihlerde
yada gecmis tarihlerdeki degerlere ulasma imkani tanir.

Genel Kullanimi:

//bu sekilde bir kullanimla belirtilen ileri

veya gecmis tarihle ilgili ayin kac gun cektigini dondurur.


date("t",mktime(0,0,0,month,day,year))

seklindedir.

mktime () fonksiyonunun islevini uygulama icerisinde daha iyi gorecegiz.


Türk-php de bulunan  Örnek uygulama,
Program Kodlari : (Renklendirilmis)

http://www.turk-php.com/ornekler/takvim_uygulamasi/kodgoster.php?Yol=index.php

http://www.turk-php.com/ornekler/takvim_uygulamasi/kodgoster.php?Yol=style.css

Programin Calisan Hali:

http://www.turk-php.com/ornekler/takvim_uygulamasi/index.php

Tum Dosyalar:

http://www.turk-php.com/ornekler/takvim_uygulamasi/takvim_uygulamasi.zip

Not:

Turkce karekterlerin duzgun cikmasi icin etiketinden once asagidaki iki satiri index.php
dosyasi icinde ekleyiniz:

Nasıl Açık Kaynak Kod Yazılımcısı Olunur?

Bu yazının amacı çeşitli programlama tekniklerini anlatmak değil, genelde başlangıçta göz ardı edilip daha sonra hayal kırıklıklarına ve hatta projenin başarısızlığına yol açan çeşitli faktörleri sıralamaktır.

Açık Kaynak Kod Yazılımcısı Olmak İçin Ne Gerekli?

Aslında öğrenme yeteneği, merak ve sabırdan başka hiç bir şey gerekli değil. Bir bilgisayar, üzerinde açık kaynak kod geliştirmeniz için gerekli araçlar minimum gereksinimler. Internet'e erişim bunlardan sonra gelen ikinci en önemli gereksinim. Geriye kalan teknik bilgileri (çeşitli programlama dilleri, teknikleri, işletim sistemleri vb) bilmeniz elbette faydalı olur, fakat bunları öğrenebilme imkanı da açık kaynak kodlu sistemlerin iyi taraflarından birisi.

Nereden Başlanır?

En iyi başlama yöntemi, ihtiyaç duyduğunuz bir şey olmasıdır. Bu, ne kadar ufak olursa, o kadar iyi. Çok büyük projelere başlamak, bunları tasarlamak elbette güzel, fakat özellikle başlarda yapılabilir minimumlarda gezinmek en doğrusu. Öbür türlü işin yükünü kaldıramayabilir, yarı yolda bıkıp bırakabilirsiniz. Eğer iş ve özel hayatınızda açık kaynak kodlu sistemleri (örneğin Linux) kullanıyorsanız, "şu da olsaydı" dediğiniz noktalar olmuştur. Buralardan başlamak en doğrusudur. Gerçek bir ihtiyacınıza cevap veren bir yazılım, hem sizin ilginizi uzun müddet çeker, hem de sistem analizini doğru yapma fırsatınız olur.

Kendi İhtiyacınıza Cevap Veren Bir Konu Seçin

Bir kaç sebepten dolayı açık kaynak kodlu yazılım geliştirebilirsiniz: Bir şeye ihtiyacınız vardır ve bulamazsınız, çözüm yoktur. Veya bir hobi olarak bu işle uğraşmak istersiniz. Burada zor olan şey aslında hobi olarak uğraşmak. Çünkü yazılımı geliştirmek ve daha sonra ayakta tutarak devam ettirmek uzun soluklu bir iş. Dolayısıyla gerçekten kullanacağınız, ihtiyaç duyduğunuz bir şey bulmaya gayret edin. Sizin yazıcınız Linux üzerinde desteklenmiyor olabilir. Kurban ve Ramazan Bayram'larının tarihlerini şaşırıyor ve "iki hafta önce haberim olsa da kart atma imkanım olsa" diyor olabilirsiniz. İlk Internet üzerinde kamera yayını (webcam), yazılımcıların laboratuarın öbür tarafında duran kahve makinasına kadar gidip boş bulduklarından dolayı yazılmıştı ve kahve makinasını Internet'te gösteren bir kamera düzeneği idi. Sizin ihtiyacınıza cevap verdikten sonra gerisinin önemi yok. Eğer bankacı değil iseniz, banka sistemleri ile uğraşmıyorsanız, ilk açık kaynak kodlu projeniz için Linux üzerinde bir banka sistemi yazmayı tercih etmek, %99 başarısızlıkla sonuçlanacak bir projeye başlamak demektir. Hem proje fazla büyük (bankacılık sistemleri milyonlarca satır kod içerir), hem de sizin bu projenin sistem analizini yapacak bilginiz eksiktir.

 Ama Benim Hiç Bir İhtiyacım Yok?

Emin misiniz? Muhakkak vardır, biraz düşünün. Yok sahiden aklınıza hiç bir şey gelmiyor ise, en sık kullandığınız yazılımın geliştirildiği web sitesine gidin ve yapılacak işler listesine (TODO List) bakın. Oradaki işlerden birini yapmayı deneyin. Mevcut bir yazılım üzerinde değişiklikler yapmak tecrübe kazanmak için iyi bir yoldur.

Konumu Buldum

Tebrikler. Şimdi lütfen Google, SourceForge ve Freshmeat'e gidin ve bu konudaki yazılımları arayın. Yazmak istediğiniz yazılım birileri tarafından zaten yazılmış ve yaygın kullanımda olabilir. Veya doğru başlamış ve doğru yolda (sizin gitmek istediğiniz yolda) giden bir çalışma grubu olabilir. Konunuzla ilgili bulduğunuz yazılımları gözden geçirin. İsteklerinize az değişiklik ile cevap verebiliyorsa, o projeye katılın ve yazılıma o değişiklikleri katın. Türkçe olması, ufak tefek görüntü değişiklikleri, hatta ciddi değişiklikler katkı olarak verilebilir. Bu şekilde katkılarda bulunmak sizi küçültmez. Aksine, mevcut bir yapı içerisinde ciddi katkılarda bulunmak, sıfırdan bir proje geliştirmekten çok daha kolaydır ve ilerideki projeleriniz için ciddi tecrübe edinirsiniz.

Mevcut Projelerin Hiç Biri Benim İstediğimi Yapmıyor

O zaman siz bir proje başlatacaksınız. Uzun, bir hayli yalnız ve sıkıntılı bir yoldur, ama yapılamaz bir şey değildir.

Hemen Bir Proje Kurup Gönüllü Arayayım

Bulamazsınız. Daha önce ciddi başarılara imza atmış (C dilini geliştiren yazar vb) kişiler bile sıfırdan ve planlama aşamasında ciddi bir gönüllü grubu toplayamazlar. Gönüllüler ne yapacak? Hiç beyni olmayıp çok sayıda midesi olan tek canlı komitelerdir. :-) Komite ile dizayn yapılmaz. Protokol oluşturan konsorsiyumlar bile bireysel olarak protokol örneklerini hazırlar, bu örneklerin üzerinde çalışıp hepsinin iyi taraflarını toplayarak protokolü oluştururlar. İlk başta kendiniz oturup yazılımınızı iyi kötü yazacaksınız. Herşeyi hemen yapması gerekmez, fakat en azından yapmak istediği şeylerin bir kısmını yapar hale getirin. Yapmak istediğiniz diğer şeylerin mümkün olduğuna emin olun - bazen yazılımın yapısı bazı şeyleri imkansız kılabilir. Yazılımınız en azından bir "beta" kalitesine gelsin.

Yazdım, Şimdi Ne?

Kullanıyor musunuz? Bir ihtiyacınıza cevap vermek üzere yola çıkmıştınız. İyi kötü kullanmaya başladıysanız, artık bunu bir proje haline getirmeyi düşünmeniz gerekebilir.

Proje Oluşturmak

Neden Internet'e Koyayım? Bunun çok açık seçik nedenleri yok. Eğer sizin işinize yarayan bir şey ise, başkalarının da işine yarayabilir. Bir kullanıcı kitlesi oluşturmak hem proje gelişiminde size yardımcı olacak gönüllü grubunu bulmak için, hem de yazılımınız hakkında hata raporları gibi sizin tek başınıza kullanışınızda bulmanız zor olan şeyleri bulmakta işinize yarayabilir. Daha önce faydalandığınız açık kaynak kodlu yazılımlara bir karşılık olarak bunu kullanıcılara sunmak isteyebilirsiniz. Belli bir miktar "şan şöhret" kazanabilirsiniz.

Bir Lisans Seçtiniz Mi?

Yazılımınızı dış dünyaya sunduğunuz zaman hangi lisans altında sunacağınıza karar vermeniz gerekli. Benim tavsiyem GPL. Bir yazılımı GPL altında nasıl yayınlayacağınız hakkında İngilizce bilgi burada mevcut. Kısaca, yazılımın her dosyasına bir telif hakkı ibaresi, ve bu yazılımın GPL altında yayınlandığına dair bir iki paragraf koymanız ve GPL'i paketinizin içerisine ayrı bir dosya halinde koymanız gerekli. Bunlar İngilizce olmak zorunda. Yani her dosyanıza: /* Copyright 2002 Adım Soyadım This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ şeklinde bir telif hakkı ve lisans bildirim ibaresi eklemeniz gerekli. Ayrıca, GPL'in orjinal metnini yazılımınızın içerisine ayrı bir dosya olarak koymanız gerekli. GPL'in Türkçe çevirisini okumak isteyebilirsiniz, fakat bağlayıcı olan İngilizce metindir, yazılımlarınız içerisine İngilizce metni koymanız gereklidir. Bu işlemleri yaptığınız zaman yazılımınız için telif hakkı almış ve yazılımınızın dağıtımını GPL'in koruması altına sokmuş olursunuz.

Yazılımınız Derlenebilir mi?

Yazılımınızı rahatça derlenip kurulabilecek hale getirin. Kimse sizin yazılımınızı derlemek için gereken seksen adımı yapmaz. ./configure ; make ; make install en fazla bekleyebileceğiniz işlemdir. Bunları nasıl yapacağınızı bilmiyorsanız, autoconf ve make paketleri hakkında bir şeyler öğrenin. Eğer yazılımınızı yaygın dağıtımlardan birinin paket sistemi (RPM, apt vb) şeklinde dağıtabiliyorsanız, bunu tercih edin. Eğer yazılımınız derlenmeyen bir dilde yazılmış ise - perl, PHP vb, yine de uygun ve anlaşılır bir kurma yöntemi olmalıdır. Genelde paketlerin içinden README (benioku) ve INSTALL (kurma) dosyaları çıkar, bu dosyalarda paketin ne olduğu, ne iş yaptığı, nasıl kurulacağı hakkında bilgiler bulunur.

Yazılımınıza Sürüm Numarası Verin

Bunu ilk başta yapın ki, daha sonra sorun olmasın. Yazılımınıza ilk başta 0.1 veya 0.9 (ne kadar kullanılabilir vaziyette Internet'e çıkarıyorsanız) vermek faydalıdır. Oturmuş olan ilk sürüm 1.0 olur, ufak tefek değişiklikler noktadan sonra olur. Yani 1.2, 1. sürümden yapı olarak çok farklı değil, ufak tefek değişiklikler içeriyor manasına gelir. 10 yıllık Linux çekirdeğinin 2. sürümde olduğunu düşünerek sürüm numaralarınızda fazla bol keseden davranmayın..

Web Siteniz var mı?

Yazılımınızı başkalarının kullanmasını istiyorsunuz. Bunu sağlamanın ilk adımı yazılımınızın Internet'te bir sayfası olmasını sağlamak. Yazılımınızın Internet'te kendine ait bir sayfası olmaması için hiç bir neden yok. Sourceforge veya Savannah'ta bir proje açmak size bir web sitesi de sağlar ve maliyeti sıfırdır. Üstelik, ihtiyaç duyacağınız e-posta listesi, CVS sunucusu, FTP sunucusu gibi hizmetleri de veriyorlar. Veya Türk kaynaklı gruplardan yardım alabilirsiniz: Linux Kullanıcıları Derneği, AçıkKod Org gibi gruplar Türk açık kaynak kod projelerine yardım ediyorlar. Size de bir web sitesi ve ihtiyaç duyduğunuz diğer imkanları sağlayabilirler. Temasa geçin. Eğer tamamen kendinize ait olmasını istiyorsanız, Internet'te bir alan adını kaydettirmenin maliyeti yaklaşık 35 USD, web hizmetlerini bir yıllık kiralamanın bedeli ucuzunda yıllık 36 USD'dir. Geocities vb gibi bol miktarda reklam barındıran ve esas olarak kişisel web siteleri için hazırlanan bedava hizmetleri kullanmayın. Proje bağlamında olacak olan indirme (download) trafiği bu siteler tarafından hoş karşılanan bir şey değil. Size web hizmeti ve hatta daha fazlasını bedava verecek olan bir sürü grup var Internet'te, onlarla temasa geçin. Web sitenizin süslü püslü olması, arka planında kullanıcı girişleri, chat sunucusu vb olması gerekmiyor. Kolay okunabilir, sade, amaca yönelik bir web sitesine ihtiyacınız var. Amacınız ise, bir şekilde buraya ulaşan bir potansiyel kullanıcıya sizin yazılımınızın onun derdine nasıl deva olacağını anlatmak. Bu amaca yönelik olarak web sitenizde yazılımınızın ne iş yaptığını, eğer başka paket/yazılımlara gereksinim duyuyorsa bunların ne olduğunu anlatmalısınız. Eğer çeşitli standartlar, protokoller ile uyumlu iseniz bunlardan bahsetmelisiniz. Çoğu yazılım web sitesi, kendi konusundaki diğer alternatif yazılımlar hakkında da bilgi ve link verir. Yazılımınızı indirmeleri için kolayca anlaşılır bir link vermelisiniz.

 Bir Posta Listeniz Var Mı?

Yazılımınızı kullananlar için ilk başta bir tek e-posta listesi açın. Buranın fazla suskun/sessiz olmasına aldırış etmeyin. İkide birde "madem kullanıyorsunuz, insan bir haber verir yahu" tarzında e-posta atmayın. Yazılımınızın yeni bir sürümü çıktığı zaman web sitenize yerleştirdikten sonra buraya bir duyuru geçin. Kullanıcılardan gelen soruları cevaplayın. Yazılımda değişiklik taleplerini en azından okuyun. Bu değişiklik taleplerinin hepsini hemen yapmak zorunda değilsiniz, fakat kullanıcılarınızın ne istediğini bilmek, yazılımın nasıl şekilleneceğine karar vermek için faydalıdır. İleride posta listelerinizi çoğaltabilir ve anonslar (yeni sürüm vb anonslar), kullanıcı listesi (yeteri kadar popüler bir yazılım olursa, kullanıcılar birbirlerine yardım ederler, bırakın etsinler), ve geliştirme listesi (gönüllüleriniz) olarak ayrı listelere bölünebilirsiniz. Baştan bunları uygulamak listelerin hiç birisinin hayata geçmemesine sebep olabilir. Trafik çok artıp insanlar farklı listeler talep edene kadar tek listede kalın.

Yazılımınızı Duyurun

Bir web sitesi hazırladınız, bir posta listesi açtınız. Şimdi yazılımınızı duyurmalısınız. Eğer konu ile ilgili bir newsgroup var ise oraya bir duyuru yapın. Freshmeat'e duyurun. Linux Kullanıcılar Derneği'nin web sitesine bir haber yollayın. Türk Linux Listesi'ne yazın. Eğer benzer yazılımlar için Google'da bir kategori var ise, o kategoriye DMOZ'dan ekleme yapın. Eğer yazılımınız KDE veya GNOME kullanan bir grafik yazılımı ise, onlara duyurun. Yeteri kadar yaygınlaşırsa, KDE veya GNOME'un "desteklenen" yazılımlarından biri haline gelebilirsiniz. Yazılımınız her derde deva bile olsa, kullanıcılar varlığını bilmez ise kullanamazlar. Bunların

Hepsini Yaptım ve Bir Şey Olmuyor

Bu işler zaman alır. Genelde bir yazılımın kullanıcı kitlesine yayılmaya başlaması neredeyse bir yıl sürüyor. Yani siz yukarıdaki adımları yapıp duyurduktan bir yıl kadar sonra geniş kitle tarafından "bu işi yapan bir yazılım vardı" diye bilinmeye başlar. Yazılımınız yaklaşık 2-3 bin defa indirildikten sonra bir iki tane gönüllü yardımsever çıkar ve "şurasına şunu ekledim, kabul eder misiniz" diye sorar. Hemen gönüllülerin oluşup heykelinizin bir meydana dikilmesini beklemeyin. Siz bu güne kadar kullandığınız yazılımların kaçına gönüllü olarak bir katkıda bulundunuz? Bir veya iki yıl kadar bir süre yazılımınızın bütün geliştirmesini yalnız başınıza siz yapacaksınız. Bu zaman zarfında yavaş yavaş bir iki kişi ortaya çıkar. Bunlar genelde projenize destek olayım diye ortaya çıkmaz, hata bildirir. Siz bu hatayı çözersiniz. Daha sonra bir hata daha bildirir, çözümünü beraberinde yollar. Siz bunu eklersiniz. Yavaş yavaş aranızda bir ilişki oluşur. Bu ilişki zaman içerisinde "gel beraber geliştirelim"e gidebilir. Sabırlı olun.

 Sıkıldığınız Zaman Devredin

Yazılımınız sizin bir ihtiyacınıza cevap vermek için hayata başlamış idi. Bir gün bu ihtiyacınızın üzerinde yeteri kadar uğraştığınızı düşünebilirsiniz. O ihtiyacınız kalmamış olabilir. Eğer yeteri kadar paylaşımcı davranmış iseniz, gönüllüleriniz arasında yazılımı sizin kadar bilen, sizin güvendiğiniz birileri olacaktır. Kendisi ile temasa geçin ve yazılımınızın proje liderliğini devredin. İlginizi kaybettiğinizden dolayı ölmesine müsaade etmeyin. Bugüne kadarki çabalarınız, sizin bireysel emeğinizden doğan bir şeyin yaygınlaşması ve kendi başına bir hayat kazanmasını sağlamak için idi. Bu hayatın devam etmesini sağlayın. Bırakın, sizden daha iyi yapan birisi çıkarsa, o devam ettirsin.

Visual Studio 2008 ve Sql server kurulum problemi

Sql Server Kurulumunda Management Studio ve Sql Profiller gibi araçların kurulmaması gibi bir problem oluyor genelde.

Bunun Sebebi Visual Studio 2008 i SqlServer 2005 den önce kurduğunuzda sqlserver sunucu olarak bilgisayarınıza kurulmuş olsada beraberinde gelen bileşenler kurulmuyor. Bunun İçin önce Sql server kurup daha sonra Visual Studio kurmalıyız.