20 Ağustos 2013 Salı

Word Painter ( Kelime Artisti ) | Facebook'da Online Çizim Tahmin Oyunu

Word Painter ( Kelime Artisti ), Facebook'da Online Çizim Oyunu. Oyunda odalar var ve oyun odadaki 1 kişiye bir kelime veriyor. Çizer kelimeyi çizmeye çalışırken odadaki diğer oyuncularda kelimey bilmeye çalışıyor.  Oyun, acayip çizimler ve acayip tahminler ve dönen geyikler ile çok eğlenceli bir hal alıyor ve bir kere girip alışınca 3-4 saatte çıkılmıyor. Ben çizemem diyen çok arkadaş gördük. Geldiler ve oyuna bağlandılar hatta sonradan çizim yeteneklerinin geliştiğini gördük. Hatta bizzat kendimden biliyorum ablam "Burak sen bu kadar güzel çizim yapar mıydın?" diye sordu çünkü lisede resimlerimi genelde ablama çizdirirdim :). Bir çizim tahmin oyunu olarak  word painterin web adresi http://www.kelimeartisti.com  , direk online olarak oyuna başlamak için http://apps.facebook.com/wordpainter/ adresine girebilirsiniz. Oyun facebook üzerinden oynanıyor. 

Hacettepeden 8 arkadaş bu oyunu yapmaya başladık. İlk başladığımız zamanlarda draw something ortalıkta yoktu. Ciz bakalım ve isketch siteleri vardı. Biz başladıktan bir kaç ay sonra draw someting çıktı ve 8 ay sonunda 210 milyon dolara satıldı. Biz çok geç kaldık, bu aşamadan sonra şevkimiz kırıldı ve projeyi askıya aldık. Daha sonra Sanayi Bakanlığının desteği ile Amerika'ya giden 10 girişimci içerisinde yer aldım orada tanıştığım bir Umut abi projenin hala değerli olduğunu söyledi ve ben amerikadayken ilk sürümünü çıkardık. Şimdilik bir getirisi olmadı fakat olursa buradan yazarım :).

İşte size birkaç çizim :

 Röntgen çizimi :)

Arkadaş burada ne anlatşmış ben de bilmiyrum ama çok eğlenmiş :)
 Sence bu ne?
 O gülücük yandaki muhabbete yapılmış :)
 Ezan
 Sahne
 Yagmur Duası
Zeytinyağlı fasulye. Bunu ben çizdim işte :) Nasıl olmuş?

Oyuna buradan ulaşabilirsiniz Çizim Oyunu

8 Nisan 2009 Çarşamba

Yeni İşler Yeni Fikirler 2009

Yeni işler yeni fikirler yarışması Odtunun üniversite ögrencilerinin teknolojik tabanlı iş fikirlerini hayata gecirmeleri için sundugu bir imkan. Yarışmayı tanıtırken kullandıkları cümle "Girisimci bir ruha sahipseniz ve üniversite ögrencisi iseniz. Teknoloji tabanlı bir fikrinizi "iş"e dönüştürmek istiyorsanız. Destege, finansmana ve danışmanlıga ihtiyac duyuyorsanız " iste bu yarışma tam size göre. Yarışma ile ilgili detaylı bilgiye www.yfyi.info adresinden ulaşabilirsiniz.

Bu sene kayıtlar normalde 11 Nisanda bitiyordu ama 18 nisana kadar uzattılar bundaki en büyük etken bu haftanın odtude sınav haftası olması diye dusunuyorum. Yarışmanın bana göre en kötü yani eger teknoloji tabanlı bir iş fikriniz varsa kuracagınız ekibin %50 si odtulu olmak zorunda. Juri projeyi incelerken ekipin yetkinligine de bakıyor. Bu işi bu insanlar yapabilir mi, disiplinler arası calışmışlar mı? gibi.

YFYİ 2008 e robot atolyesi fikri ile 4 arkadaş olarak katıldık. Ön elemeyi geçip ilk 12 e seçildik fakat devamını pek getiremedik ama bu yarışmanın bana çok şey kattıgını düşünüyorum. Çünkğ yarışma bir para yarışması degil bir iş kurma yarışması yani kazandıgınızda da o paranın hepsinin anında hesabınıza yatacagını düşünmeyin siz ihtiyac duydukca iş planında yazdıgı dogrultuda size verecekler. İşinizi kurmanız için size egitimler veriyorlar, kendi işini kurmuş insanların başarı hikayelerini dinliyorsunuz, sunum teknikleri hakkında bilgi veriyorlar ve bir sunum yapmanızı istiyorlar ( karşınıza akademisyen ve patronları koyuyorlar ve 10 dakka içinde onlara iş fikrinizi begendirmenizi istiyorlar. Salon kücük bu yüzden insanlar ile çok yakın oluyorsunuz bu da insani biraz geriyor. )

Proje ön basvurusunda sizden ön eleme basvuru formu doldurmanızı istiyorlar. Burada fikrinizin bir özetini, daha sonra teknolojik olarak ne gibi yenilikler içeriyor onlardan bahsetmenizi ( bu cok yeni bir teknoloji de olabilir veya mevcut bir teknoloji üzerinde iyileştirme olabilir veyahut yurtdısından ithalat maliyeti cok yuksek bir ürünü ülkemizde daha ucuza mal etmek olabilir. ), Pazar ve rekabet burada hedef kitlenizden, bunlara nasıl ulaşacagınızdan, insanların neden diger ürünü degil de sizi tercih edeceginden falan bahsetmenizi , Finansman kısmında ise iş fikrinizi hayata geçirmek için ne kadar paraya ihtiyac duydugunuz yani gerekli sermaye, iş fikriniz ne kadar para kazandıracak ürün kacıncı ayda piyasaya cıkacak ve nasıl bir talep ile karşılaşacak siz bu talebi ne kadar karşılayabileceksiniz ve fiyat olarak ne kadar biciyorsunuz, yarışma haricinde bir yerlerden para bulabilirmisiniz ( babam cok zengin benim gibi bir ifade bile olabilir ) bunlardan bahsetmenizi , Yonetim kısmında ise ekip olarak yetkinliginizi, görev paylaşımının nasıl oldugundan, bu görevleri yerine nasıl getireceginden falan bahsetmenizi bekliyorlar. Yazarken genel olarak somut seyler yazmaya calısın.Bu ürün cok ucuza mal olacaktır ve pahalıya satılabilecektir yerine Bu ürün katma degeri yüksek bir üründür maliyet olarak sadece insana ihtiyac duyulur ve 6 adam/ay gibi bir sürede ürünümüz cıkabilecektir. Katma degeri yüksek ve taklit edilmesini önleyecegimiz için yüksek fiyata satabilecegimizi düşünüyoruz. Karsınızdaki insanların sizin fikrinize para yatırmak isteyen para babaları oldugunu düşünün ve onlara fikrinizin uygulanabilir ve cok para kazandıracak bisey olacagını ispat etmelisiniz yani burda insanlık yararına cok sizin yararınıza olacak seyler olması onemli ama geçmiş senelerde körler için yapılan bir uygulamanın 1. oldugunu biliyorum. İş fikrinizin hayata gecirilebilir olması da onemlidir yani cok guzel birsey düşünmüssunuzdur fakat bu yapabileceginiz bisey degildir ki bizim projemiz böyle bir proje oldugu için yukselemedik.

Yarışmada savunma sanayi katagorisi de bulunmaktadır burda aslında para kazanmaktan cok cıkaracagınız ürünün savunma sanayine katkısı onemli. Ostim özel ödülü iseiş fikrinin sanayiye katkısı göz önünde bulundurularak teknolojik tabanlı katılımcılar arasından secilecek.

Bu yarışma cok güzel bir deneyim katılmanızı siddetle tavsiye ederim. ( pazarlama egitimleri işe yaramaya başlamış :) reklam kokan bir bitiriş oldu. )

7 Nisan 2009 Salı

Bir Gzip Hikayesi

Yaz stajı yaptıgım argela firmasinda bana verdikleri proje sipp programının sun sparc solaris makinalar üzerinde derlenmesi idi. Birkaç proje içinden kendim seçmiştim hem sparc makinalar hemde solaris ile ugraşmak beni çekmişti kendine. Bu sevgi dolu yaklaşısıma ragmen sipp programı bana dikenlerini göstermisti.

İlk olarak solaris yüklü sparc sunucu makinede uzaktan baglatı ile baglanıp derlemeye çalıştım. Benim için stajer kullanıcısı yarattılar gayet düşük yetkiler ile kendi çapımda takılıyordum. İlk olarak programın makefile dosyasına baktım. Orda gereken kütüphanelerin bizde olup olmadıgına baktım. Program Openssl e bagımlılık duyuyordu. Openssl kurmaya calıştım o da başka bir programa bagımlılık duyuyordu. Onu kurmak için yola cıktıgımda o da başka bir programa bagımlılık duyuordu. Onu indirdim onu kurarken bu seferde hafıza dolu hatası aldım. Bunun orada derlememin zor olacagına karar verince capraz derleme ( cross compile ) yapalım dedik.

X86 mimarideki bir bilgisayar için sparc sanal makinesi bulmak hiç kolay olmadı. Kurmak için sparc makinenin kütüphaneleri gerekti. Once kendi yetkisiz kullanıcım ile girip almaya calıştım fakat olmadı daha sonra murat abinin yanına en masum halimi takınıp root sifresini istedim. O da dikkatli olmamı soyleyip verdi. İlk basta sparc makinenin bütün kütüphanelerini çekmeye çalıştım fakat olmadı bende bari zipleyim dedim. Bunun için de "gzip -rcv lib" dedim. Bekledim bekledim bitmedi sürekli çalısıyordu. Bugra abiyi cagırdım sordum oo cok surer dedi. Bende başka bir yol aramak için ctrl + c ile sistemi durdurdum. Ondan sonra anladım ki gzip komutu sıkıstırdıgı dosyaların orjinallerini siliyormuş. Root sifresi elime gectikten 1 saat sonra sunucuyu bozmayı başarmıstım. Neyseki kurtarıcılarım vardı Bugra ve Murat abi bir ogleden sonra ugraşıp sistemi kapatmadan ayaga kaldırmayı başardılar.

Sirketteki herkese teşekkür ederim bana gayet anlayışlı davrandılar olur böyle seyler her genc mühendisin başına gelir bazıları kendi yaptıkları hataları anlattılar beni teselli etmeye calıştılar.

Sistem kurtarıldıktan sonra tekrar programı derlemek için ugrastım. Normalde derlenmeyen programı derlemeye calıştım bu sefer hafıza dolu hatası vermedi fakat kurmak için kullanıcı yetkimin olmadıgını soyledi. Murat abiden tekrar istedim verdi ama bu sefer işi saglama almak için Murat ve Bugra abi başımda beklediler. İlk programı derledim. Ondan sonra diger programı ondan sonra da diger programı başarı ile derledi sistem. Sıra sipp ye gelmişti. O da bir sorun yaratmadan derlendi.

Benim için bircok noktadan cok guzel bir hayat tecrubesi olmuştu. Sirketteki herkese sevgilerimle.

Makefile

Makefilelar toplu komutlar iceren dosyalardır.Bu toplu komutlar yazdıgın programdaki C/C++ komutlarını derlemek icin gereken komutlardır. Belli bir yazım kuralı vardır ( girintileri tab ile vermek , iki nokta ust uste kullanmak vb. )ve yazarken en onemli seylerden biri hangi dosyanın hangisine bagımlılıgı oldugunu bilmektir.

hedef: bagımlılıkları
command
command

Basitce bi makefile yazmak gerekirse

all: makarna

makarna: makarna.o sos.o
gcc makarna.o sos.o -o makarna

makarna.o: makarna.c makarna.h su.h tuz.h yag.h
gcc -c makarna.c

sos.o: sos.c sos.h salca.h yogurt.h
gcc -c sos.c

clean:
-rm *.o *.~ core makarna

Bu dosyayı makefile adı ile ( herhangi bi uzantısı yok ) diger kaynak dosyalarınızın yanına korsanız daha sonrada "make all" komutunu calıstırısanız calıstırılabilir bir makarna elde etmis olursunuz."make clean" komutunu calıstırırsanız da olusan butun ".o" ve ".~" uzantılı dosyaları silmis olursunuz.

Yazdıgımız makefile i biraz acıklamak gerekirse oncelikle all komutu ile sonucta olusacak calıstırılabilir programın adını belirttik.Daha sonra bu calıstırılabilir makarna dosyamız icin nelerin olması gerektigini soyledik ve bunlarla birlikte makarnayı nasıl olusturacagının komutunu girdik.Makarna calıstırılabilir dosyasını olusturmak icin makarna.o ve sos.o olusturmak gerekiyordu fakat bunlar ortamda bulunmadıgı icin bunları olusturacak satırları yazdık.Makarna.o yu olusturmak icin makarna.c makarna.h su.h tuz.h ve yag.h dosyalarına ihtiyacımız oldugunu belirttikten sonra makarna.o nun nasıl olusturulacagını girdik.Tabi iyi bir makarna icin sos da sarttır bunun icin sosumuzu da olusturduk sos olusturmak icin de ihtiyacımız olanlar sos salca ve yogurttu bunları belirttikten sonra nasıl olusturulacagını girdik.

Artık makefile en basit hali ile bu kadar tabiki daha fonksyonel yapmak icin sabitler tanımlayabilirsiniz ve de acıklama satırları girebilirsiniz.
Sabit tanımlamak icin

DERLEYICIM=gcc seklinde tanımlarsınız
$( DERLEYICIM ) diye de kullanırsınız.

Acıklama satırı yazmak icin de diyez isaretini kullanabilirsiniz
#ben bir acıklama satırıyım

Kolay gelsin.

Hubit Bilişim Günleri '09

Hacettepe Universitesi Bilgisayar Toplulugu olarak 8-9-10 Nisan 2009 tarihlerinde bilişim günleri duzenliyoruz. Amacımız katılımcılara farklı bakış acıları kazandırmak. Bunun için farklı konulardan farklı cevrelerden ( akademik ve iş dünyasindan ) insanları konugumuz olarak Hacettepe Universitesi Beytepe Kampusu Mehmet Akif Ersoy salonunda agırlıyoruz. Katılanlara cok seyler katacagını düşündügüm bir etkinlik. Etkinlige kayıt yaptırmak için www.hubit.org adresini kullanabilirsiniz. Kayıtlı kullanıcılar sertifika alabileceklerdir ve eger universite dısındansanız kapodan girişlerde sorun yaşamamanızı saglayacaktır. Etkinligin afisi



Reklam kokan kısımdan sonra ben biraz daha işin pişirilmesi kısmından bahsetmek istiyorum.

Universitemizde bilişim günleri düzenleyelim fikri toplulukta ilk olarak gecen sene ortaya çıkmıstı. Bu konuda tecrubemiz olmadıgı için organizasyon zafiyetleri vardı. Seminerlerin kalitesi iyiydi fakat reklam kısmını iyi yapamamıştık. Düzenlemede bazı seylerin son dakkada belli olması yüzünden duyuruyu yapamamıstık. Sponsor gibi bir fırsatımız olmamıstı. Katılımcı sayısı acısından sorun olsa da katılan insanlara çok şeyler kattıgını düşünüyorum.

Bu sene çalışmalarımıza daha erken başladık. Daha kalabalık, daha heycanlı bir ekip olduk. Ekip çalışmasının meyvelerini topladık. Her kafadan bir ses cıkması bizi daha ileriye en iyiye götürdü. Herkes kendini ortaya koyunca birlikteligin kuvveti ile işler daha kolay halloldu. İşlerimizi erkenden bitirdigimiz için duyuruları daha erken yaptık. Sponsorlarımız sayesinde afiş, el ilanı, sertifika, cay kuru pasta gibi hizmetleri de yapabildik.

Beraber çalıştıgım bütün arkadaşlarıma sonsuz teşekkürlerimi iletiyorum. Çok şeyler ögrendim. Beraber güzel bir iş cıkardıgımızı düşünüyorum.

Görüşmek dilegi ile...

17 Aralık 2008 Çarşamba

3 Boyutlu Görüntüleme Araçları

Bu yazı 3 boyutlu görüntüleme araçları hakkında giriş niteliğinde bir bilgi sunmaktadır. Bazı teknolojilerden bahsedilmiştir fakat ayrıntıya inilmemiştir.

3 boyutlu görüntüleme araçlarını anlatmadan önce gözün nasıl görüntüyü 3 boyutlu olarak algıladığına bakalım. Algılama diyorum çünkü gözler 3 boyutlu olarak görmez. Eğer insanoğlu tek bir göze sahip olsaydı 3 boyutlu göremezdi. Bir objeye baktığımızda bunu 2 farklı açıdan görürüz. Beynimiz bu 2 farklı görüntüyü birleştirir. Bu sayede 3 boyutlu olarak algılarız. Bilgisayar sistemlerinde de 3 boyut yaratmak için iki ana yöntem kullanılır. Bunlardan biri göze 3 boyutlu görüntüyü sunmak yani görüntüyü 3 boyutlu ortamda göstermek, diğer yöntem ise 2 farklı açıdan çekilmiş görüntüyü sağ ve sol göze iletmek yani 2 boyutlu ortamda görüntüyü göstermek fakat buna 2 farklı görüş acısı kazandırarak gözün 3 boyutlu olarak algılamasını sağlamak.

İlk yöntem için geliştirilen çözümler, ışık demetleri ile havada görüntü oluşturmak veya hacimli bir cisimde yani 3 boyutlu bir ortam içinde görüntüyü oluşturmak. Bu sayede ekrana 3. boyutu da kazandırmak. Bu tarz görüntüleme araçları Hacimsel görüntüleme araçları (volumetric display device ) olarak geçiyor.

İkinci yöntem için geliştirilen çözümlerde ekranda sağ ve sol göz için iki farklı görüntü oluşturmak ve bunları birbirlerine karıştırmadan her bir göze iletmek. Bunun için çeşitli teknolojiler bulunmaktadır. Stereoscopic ve AutoStereoscopic teknolojiler bunlardan 2 tanesidir. Autostereoscopic teknolojilerin stereoscopic teknolojilere göre avantajı herhangi bir gözlüğe ihtiyaç duymamalarıdır dezavantajları ise sadece belli bir noktadan bakıldığında 3 boyutlu görüntü sunmalarıdır.

Stereoscopic teknolojide farklı yöntemler kullanılmaktadır. Bunlardan biri direk olarak göze takılan video oynatıcıları sayesinde. Kullanıcılar bu oynatıcıları giyerler. Bu oynatıcılarda da 2 tane küçük lcd veya oled ekran vardır. Bu ekranlardan biri sağ göz için diğeri sol göz için görüntü üretir. Diğer yöntem ise 3 boyut gözlükleri kullanmaktır. Kullanıcı bu gözlükleri giyer ve ekrana bakar. Ekranda 2 tane görüntü aynı anda gösterilir(Zaman bölümleme ile). Gözlük camları bu görüntülerden birini geçirmek diğerini süzmek için özel olarak geliştirilmiştir. Sinemalarda dağıtılan 3 boyutlu gözlükler bunlara örnektir. Bu gözlüklerin bir camı mavi diğer camı da kırmızıdır. 2 görüntü 2 farklı dalga boyunda ekrana yansıtılır. Bunlardan biri kırmızı dalga boyundadır ve mavi cam bu görüntüyü filtreler, diğeri ise mavi dalga boyundadır ve kırmızı cam bu görüntüyü filtreler. Bunların mavi ve kırmızı seçilmesinin nedeni birbirinden uzak iki farklı dalga boyu olmasıdır.





Autostereoscopic teknolojide ise kullanıcı herhangi bir ek araca ihtiyaç duymamaktadır fakat en büyük dezavantajları görüş acılarının olmamasıdır 3 boyutlu görüntüyü yakalamak için önceden belirtilen noktadan ekrana bakmak zorundasınızdır. Autostereoscopic teknolojide birçok yöntem kullanılmaktadır. Bunlardan en meşhurları mercek (lenticular lens) ve paralaks bariyerdir (parallax barier). Mercek yönteminde ekranda mercek dizileri vardır ve iki farklı görüntü bu merceklerin arkasında oluşturulur ve merceklerin yarattığı kırılmalar sayesinde kullanıcının sağ ve sol gözüne iletilir. Paralaks bariyerde ise görüntünün önünde bariyer vardır ve bu bariyerde belirli aralıklar ile delikler oluşturulmuştur. Bu delikler sayesinde kullanıcının her bir gözüne farklı görüntüler gösterilmiş olur.








Kaynakça :

Computer Graphic with OpenGL
Prentice Hall
Donald Hearn & M. Pauline Baker

http://en.wikipedia.org/wiki/3D_display
http://www.reviewspring.com/3d-lcd-monitors-a80.php

6 Şubat 2008 Çarşamba

Web Projeleri Gelistirme Yöntemleri

Günümüzde yaygınlasan teknolojilerin de sayesinde web projesi yapmak kolaylaştı bu yüzden de bir cok web projesi piyasaya çıkmaktadır fakat bunlardan pek cogu gereken kaliteyi yakalayamamıştır.Bunun cesitli nedenleri vardır biz burda web projeleri geliştirme yöntemi kullanarak nasıl daha iyi web projeleri üretebileceğimizden bahsedeceğiz.

Web projeleri gelistirme yöntemi dediğimizde aklımıza izlenecek yol haritası gelmelidir.Web projeleri gelistirme yöntemleri bize bir plan ve disiplin icinde web projeleri gelistirmemizi saglar.Bu plan ve disipiln sayesinde ortaya daha az maliyetli ve daha kaliteli işler çıkar.

Yazı Planı

1. Giris
1.1. Neden Web Geliştirme Yöntemlerine İhtiyac Duyarız?
1.2. Web projeleri gelistirme yöntemlerini secerken ve uygularken nelere dikkat etmek gerekir?
2. Proje Gereksinimleri
2.1. İşlevsel Gereksinimler
2.2. İşlevsel Olmayan Gereksinimler
2.3 Yazılım Gereksinim Belgesi
3. Web Projesi Gelistirme Yöntemi
3.1. Projeyi Tanımlamak
3.2. Planlama ve Arastırma
3.3. Ön Gerçekleştirim
3.4. Gercekleştirim
3.5. Test
4. Teşekkürler
5. Kaynakca
6. Sözlük

1. Giriş

1.1. Neden Web Geliştirme Yöntemlerine İhtiyac Duyarız?


Bir proje gelistirirken en önemli olan iki sey zaman ve paradır.Web projeleri gelistirme yöntemleri bize bu ikisinden de kar etmemizi saglayacaktır.Bunu da getirmis oldugu plan ve disiplin sayesinde yapacaktır.Bir web projeleri gelistirme yötemi ile sisteme kazandırmaya calıstıklarımız

- İş ve işlemlere hız kazandırmak
- İs ve işlemlerin dogrulugunu sınamak
- İş ve işlemlerin tutarlılıgını saglamak
- Bilgi erişimini hızlandırmak
- İş ortamı ile bütünleşmek
- Giderleri düşürmek
- Kapasite artisi saglamak
- Rekabet üstünlügü saglamak
- Hizmet ortamları ile iletisimi iyilestirmek

Zamanında ve öngörülen bütce ile bitirilmeyen projeler hem maddi yönden hem de manevi yönden büyük kayıplar doğurur.Sirket maddi acıdan sarsıldıgı gibi güvenilirligi de sarsılır bu da yeni iş almada sorunlar yaşatır. Bunların önüne geçmek için bir web projeleri geliştirme yöntemi benimsemeniz iyi olur.

1.2. Web projeleri gelistirme yöntemlerini secerken ve uygularken nelere dikkat etmek gerekir?


Projeniz icin bir geliştirme yöntemi seçmeden önce geliştirme yönteminin projenize ve proje takımınıza ne kadar uygun olduguna dikkat etmeniz gerekir.Dikkatsizce seçilmiş bir geliştirme yöntemi sizi basarısızlığa sürükleyebilir onun icin gelistirme yöntemi secmeden önce bazı seyleri iyi analiz etmek gerekir.

Web projeleri gelistirme yöntemi ilk basta uygulanabilir olmalıdır yani kagıt ustundeki basarısını uygulama zamanında da göstermesi gerekir. Eger bundan sakınmak istiyorsanız geliştirme yönteminin ne kadar ayakları yere basan bir yöntem oldugunu sorgulayın veya daha önceden uygulanmış bir gelistirme yöntemi secin.

Web projeleri gelistirme yönteminin uygulanması icin ne kadar paraya ihtiyac var? Kac kisinin calısması lazım? Ayırdıgımız bütce, proje giderlerini ve calısan ücretlerini karsılar mı?Sectiğiniz web projeleri gelistirme yöntemi bu sorular icin kabul edilebilir cevaplar veriyor mu?

Web projeleri geliştirme yönteminin uygulanması ne kadar karmaşık veya ne kadar anlaşılabilir? Bizim ekibimiz bu yöntemi anlar mı? Bu yöntemi benimser mi? Sececeğiniz web projeleri gelistirme yönteminin daha onceden basıraya ulasması kadar önemli olan sey sizin calışma gurubunuzda başarıya ulaşır mı onun iyi degerlendirilmesi lazım.

Bir web projeleri gelistirme yöntemi secerken yukarıdaki kosulları göz önune almanız ve bu kosulları saglamak icin çalışmalar yapmalısınız.Bir web projesini fidana benzetirsek, bir fidan almadan once onu yetistireceğiniz yerde yetisip yetismeyeceğini sorarsınız sonra da guzelce dikersiniz ve emek harcayarak onun daha da buyumesini ve çiçek acmasını saglarsınız.

2. Proje Gereksinimleri


Proje gereksinimleri dendiginde anlasılması gereken yazılımın hangi hizmetleri karşılayacağı ve olası kısıtlamaları ortaya koyan tanım ve açıklamalardır.Proje gereksinimleri işlevsel gereksinimler ve işlevsel olmayan gereksinimler olmak uzere iki gruba ayrılır.Yazılım gereksinimleri tasarım fikirleri , olası çözümler , işletmeci sorunlarını veya herhangi baska bir bilgi barındırmaz sadece kullanıcının programdan bekledikleri yazılır.Daha sonra bu bilgiler ile programcının yani yazılım gereksinimleri listelenir.

İyi planlanmıs ve yazılmıs bir proje gereksinimleri listesi size bazı avantajlar saglar bunlardan bazıları

- Kullanıcılardan geri dönüşler almanızı saglar.
- Sorunların oluşmadan öngörülmesini saglar
- Tasarım yaparken size yardımcı olur.
- Proje uzerinde denetim kurmanızı saglar.

Proje gereksiminleri belgesi hazırlanırken dikkat edilmesi gereken özelliklerden biri de dilidir. Anlatımlar icin neler kullanacağınız ve nasıl bir dil kullanacağınız.Özellikle kullanıcı gereksinimlerini yazarken kullanıcının söylediklerini tırnak isareti içinde yazmak onun kullanıcı tarafından soylendiğini göstermek icin guzel olur bunun yanında cizelgelerden , tablolardan , akış cizelgelerinden yararlanabilirsiniz.Bunları kullanmak gereksinimler listenizi daha anlasılır yapacaktır.

Proje gereksinimlerinde iki farklı bakış açısı vardır biri kullanıcı acısından bakış yani kullanıcı gereksinimleri ikincisi yazılım açısından bakıs yazılım gereksinimleri.Bunların kendine özgü bazı özellikleri vardr.Kullanıcı gereksinimleri dogal dil ile yapılmıs cizim ve cizelgelerden gösterimsel amaclarla yararlanılmıs, yazılımdan beklenen hizmetlerin neler oldugunu ve hangi kısıtlar altında calışmasının öngörüldügünü ortaya koyan tanımlardır. Yazılım gereksinimleri ise yazılımca saglanacak hizmetleri ve yazılımın kısıtlarını ayrıntılı olarak ortaya koyan ve bicimsel ozelliklerini taşıyan tanımlardır.Kullanıcı gereksinim tanımları daha genel , yazılım gereksinim tanımları ise daha ayrıntılıdır.

Proje gereksinimlerini iki ana baslığa ayırabiliriz bunlar
- İşlevsel olan gereksinimler
- İşlevsel olmayan gereksinimler

2.1. İşlevsel Gereksinimler

Bu gereksinimler yazılımın her bir davranışını açıklar bunlar hesaplamalar , proje hileleri, veri bilgisi, işlemler ve diger özel işlevlerdir.Kullanıcı gereksinimleri ve yazılım gereksinimleri işlevsel gereksinimlere girer.

Gereksinim tanımları iyi yapılmazsa basarısızlıklar olur.Net ve anlaşılır olmalıdır eger dogru algılanmazsa yazılımda karısıklıklara ve aykırılıklara yol açabilir.Tutarsızlık ve çelişen cümleler olmamalıdır bu belirsizlikere yol acar.Kullanıcı ve yazılım gereksinimlerini tam olarak karsılamalıdır.Eksiksiz bir sekilde listelenmelidir.

Büyük ve karmaşık projelerde gereksinimlerin listelenmesi zorlaşır tam ve tutarlı bir gereksinimler listesi hazırlamak zordur onun icin proje ilerledikce gereksinimler listesi tekrar kontrol edilmeli gereken yerlere ilaveler veya gereken yerlerden cıkartmalar yapılmalıdır.

2.2. İşlevsel Olmayan Gereksinimler

Bu gereksinimler sistemin çalışması icin kritik önem tasıyan gereksinimlerdir.Bu gereksinimler yazılıma özgü belli bir işlevsel gereksinimin özü ile dogrudan ilgisi olmayan yazılımın bütününü ilgilendiren gereksinimlerdir.Bu yuzden kritik sayılırlar.İşlevsel bir gereksinim karsılanmadığında sistem belki çalısabilir ama işlevsel olmayan bir gereksinim karsılanmadığında sistemin tümünün çalışmaması manasına gelir.

+ İşlevsel olmayan gereksinimler
- Ürün ile ilgili olanlar
o Kullanılabilirlik
o Etkinlik
o Güvenilirlik
o Tasınabilirlik
- Örgütle ilgili olanlar
o Teslimat ile ilgili olanlar
o Gerçekleştirim süreci
o Standart gereksinimler
- Dış ortamla ilgili olanlar
o Birlikte calışılabilirlik
o Etik Gereksinimler
o Yasal Gereksinimler
 Kisiel bilgilerin guvenilirligi
 Güvenli olma gereksinimleri ( yetkilendirme )

İşlevsel olmayan gereksinimleri listelerken cogu zaman gerektiği kadar detaya inilmez kabaca bir tanım yapılır fakat yapılan bu tanım cogu zaman karışıklıklara yol açar.Soyut anlatımlar yerine somut anlatımlar seçilmelidir.Örnek olarak “Yazılımda veri tabanında baglantıda sorun yaşıyorsanız yetkililere basvurun” yerine “Yazılımda veri tabanına baglantıda sorun yaşıyorsanız oncelikle hata kayıtlarına bakın orda size hangi hatanın olustuğunu ve nasıl giderildiğini gösterir eger çözemezseniz hata kayıt numarası ile yetkililere basvurun.”

2.3 Yazılım Gereksinim Belgesi

Yazılım gelistiricilerinden ne beklendiğini ortaya koyan resmi belge.Bu belgede hem kullanıcı gereksinimleri hem de yazılım gereksinimleri ayrıntılı bir biçimde yer alır.Bunun yanında yazılım geliştirme belgesi yazılımın dış davranışlarını belirtmeli , gerceklestirim sırasında soz konusu olacak kısıtları belirlemeli, yazılımın bakımını yapacak kisilere bir basvuru kaynağı olabilmeli, beklenmedik olaylara karsı yazılımın vereceği tepkileri açıklamalı.

Yazılım gereksinim belgesi icin bazı standartlar olsa da her firma için her proje için geçerli bir yazılım gereksinim belgesi bulamayız ama tekerlegi yeni bastan keşfetmek gibi surekli yazılım gereksinim belgesi taslagı keşfedecek degiliz onun icin piyasadaki yazılım gereksinim belgelerini inceleyip ve onları özümseyip kendi yazılım gereksinim belgenizi oluşutrun.

Assagıdaki taslak IEEE nin standart olarak sundugu yazılım gereksinim belgesi taslagıdır.

1. Giriş
1.1 Amaç.
1.2 Belge yazım tarzı
1.3 Hedef Kullanıcı
1.4 Ek Açıklamalar
1.5 İrtibat Bilgileri/Proje calışanları
1.6 Referanslar
2. Detaylı Açıklama
2.1 Ürün görünüşü
2.2 Ürün fonksyonları
2.3 Kullanıcı sınıfları ve özellikleri
2.4 İşletme ortamı
2.5 Kullanıcı ortamı
2.6 Tasarım/Gerceklestirim kısıtları
2.7 Varsayımlar ve bagımlılıklar
3. Harici Arayüz Gereksinimleri
3.1 Kullanıcı Arayüzü
3.2 Donanım Arayuzu
3.3 Yazılım Arayüzü
3.4 Baglantı protokolleri ve arayüzler
4. Sistem Özellikleri
4.1 Sistem özellikleri A
4.1.1 Tanımlamalar ve oncelikler
4.1.2 Olay/sonuç
4.1.3 Fonksyonel gereksinimler
4.2 System ozellikleri B
5. Diger işlevsel olmayan gereksinimler
5.1 Performans gereksinimleri
5.2 Güvenilirlik gereksinimleri
5.3 Güvenlik gereksinimleri
5.4 Yazılım kalite ozellikleri
5.5 Proje dokümantasyonu
5.6 Kullanıcı dokümantasyonu
6. Diger Gereksinimler
Ek A: Teknik Terimler/Sözlük/Tanımlamalar
Ek B: Ekler

3. Web Projesi Gelistirme Yöntemi


Benim burda anlatacağım yöntem genel olup siz bunu kendi ihtiyaclarınıza gore uyarlayabilirsiniz.Zaten web projeleri gelistirme yöntemini ana hatları ile anladıktan sonra ister aynısını uygularsınız isterseniz kendi ihtiyaclarınıza gore uyarlarlayabilirsiniz.

Burda sunacagım web projesi gelistirme yöntemine genel olarak bir bakarsak 5 basamaktan olusur bunlar projeyi tanımlamak, planlama ve arastırma, ön gerçekleştirim, gerçekleştirim ve test. Bu basamaklar sadece web projelerinde degil butun projelerde vardır fakat içeriklerinde farklılıklar gösterebilir.Bu basamaklardan her biri bir sonraki kısıma ön ayak olmaktadir ve bilgiler sunmaktadir onun icin dikkatlice gecilmelidir.

3.1. Projeyi Tanımlamak

Bu basamak projenin meydana geldiği yani düşünüldüğü ve kagit uzerine döküldüğü basamatır.Proje iki şekilde meydana gelebilir ya düşünürsünüz ya da başkasından dinlersiniz.Onun icin ilk adım “Düşünmek ve Dinlemek”tir.Bu kısımda onemli olan sizin düsünme becerinizin veya dinleme becerinizin ne kadar iyi oldugudur.Eger dinleyici pozisyonundaysanız karsınızdakinin kafasındaki bütün projeyi anlatmasını saglayın. Karşınızdakini dinlerken ufak notlar almaya dikkat edin eger cok fazla not alırsaniz konusmanın etkisi azalır.Ses kayıt cihazi kullanırsanız anlatan kisi kendini tedirgin hisseder ve de kasetten tekrar dinleyip çözümlemesi zaman alır.Düşünür veya dinlerken “kabadan inceye” dogru bir yol izleyin.Yani önce ana hatlari ile projeyi şekillendirin sonra da her bir ana hat uzerindeki ayrıntıları şekillendirin. Dinledikten sonra sira “Soru Cevap” kısmına geliyor. Burada düşünürken veya dinlerken önce eksik gördügünüz yerleri sorun, sonrasında ise proje hakkında bazı bilgileri sorun bunlar “Kullanıcı Kitlesi” yani yapacagımız projeyi kimin icin yaptıgımız. İkincisi “Amacı”, bu proje sayesinde neyi hedefliyoruz, nelere cözüm getirecek veya ne faydası var.Ücüncüsü “Teknik detaylar” yapacağınız projenin herhangi bir platform bagımlılığı veya istenilen bir gelistirilme ortamı var mı.Dördüncüsü “Bütce” proje icin ne kadar para ayrıldığı ve bunlarin hangi zaman aralıklarında alınacagı gibi sorular ve benzerleri.

Bu sorulardan sonra “Projenin alanı ve sınırlarnının belirlenmesi” gerekir yani bu proje ne kadar büyüklükte daha ne kadar genişleyebilir.Projenin kullanıcı kitlesi ve amacı dogrultusunda eklenmesi veya cıkartılması gereken kısımlar nelerdir. Bu bütce ile bu proje yapılabilir mi ve yapılabilmesi icin neler gerekli hangi kısıtlamaların yapılması gerekli.
Bütün bunlardan sonra “Kullanıcı gereksinimleinin listelenmesi” gelir.Kullanıcı gereksinim listesinde, kullanıcıların programdan neler bekledigi listelenir.

Projeyi tanımlamak kısmı daha cok beyin fırtınası seklinde geçer ekip olarak projenin nasıl birsey olacagı , neye benzeyecegi gibi sorulara yanıtlar bulmaya çalısırsınız.


+Projeyi Tanımlamak
- Düşünmek ve Dinlemek
o Ana Hatları ile
o Detaylari ile
- Soru Cevap
o Kullanıcı Kitlesi
o Amacı
o Teknik Detayları
o Bütce
- Projenin alanı ve sınırlarının belirlenmesi
- Kullanıcı gereksinimlerinin listelenmesi


3.2. Planlama ve Arastırma


Bu basamak, projenin planlanlandıgı ve gerekli arastırmaların yapıldıgı basamaktır. Planlama ve arastırma kısmı ile amaclanan proje ilgili detaylarda herhangi bir sorunun kalmaması artık yapılmaya hazır oldugunun kararlaştırılmasıdır. Bu basamakta projeyi gerçekleştirmeden önceki yapmanız gereken işlemleri yaparsınız. İlk olarak “İşlevsel olmayan Gereksinimler” listesinin yapılması gerekir. Bu özellikler yazılıma özgü belli bir işlevsel gereksinim ile dogrudan iliskisi olmayan yazılımın bütününü ilgilendiren özelliklerdir. Bu asamadan sonra “Piyasadaki benzer projelerin incelenmesi” gerekir ve bu incelemeler sırasında diger projelerin “eksileri ve artıları bir liste” seklinde yazılır.Daha sonra belki de üzerinde en cok düşülmesi gereken kısım olan “Yazilim gereksinimlerinin listelenmesi” kısmıdır bunu yaparken titizlikle calışılması ve ayrıntılı bir sekilde listelenmesi gerekir cunku daha sonra burda listelenen her bir adım gerceklestirim safhasında yapılacaktır. “Projeye ileride eklenebilecek özelliklerin listelenmesi” bize projeyi gelistirirken daha bir modüler gelistirmemizi saglar. ”Risklerin belirlenmesi” ile olabilecek riskler tahmin edilir ve bunlara karsı önlem alınır.Bu sayede ileride olusabilecek sorunlar daha önceden tahmin edilmis olur ve önlemini alınmış olur. Bundan sonra proje ile ilgili bazı hesaplamaların yapılması gerekir bunlar “Performans ve maliyet hesapları”dır.Öngürülen zaman ve butce ile örüşüp örtüşmedigi kontrol edilir eger örtüşmüyorsa projede kısıtlamalara gidilir veya ilk basamaktan yani projeyi tanımlamaktan tekrar başlanır. Daha sonra projenin mantıklı parcalara ayrılması ve ne kadar zamanda bitirileceğinin hesaplanması gerekir bu da “İsin parcalara ayrılması ve zaman cizelgesinin oluşturulması” seklinde özetlenebilir.Planlama ve arastırma işlemi bittikten sonra “Yazılım gereksinim belgesi” hazırlanır.


+ Planlama ve Araştırma
- İşlevsel olmayan gereksinimler
- Piyasadaki benzer projelerin incelenmesi
o eksileri ve artıları listelenmesi
- Yazılım gereksinimlerinin listelenmesi
- Projeye ileride eklenebilecek ozelliklerin listelenmesi
- Risklerin belirlenmesi
- Performans ve maliyet hesapları
- İşin parcalara ayrılması ve zaman cizelgesinin olusturulması
- Yazılım gereksinim belgesi


3.3. Ön Gerçekleştirim

Bu asamada, projenin artık sekil buldugu prototipinin gerceklestirildigi bir basamaktır.Bundan sonraki asama artık projenin gerceklestirimi oldugu icin bu basamak bittiginde proje ile ilgili herhangi bir belirsizligin veya sorunun kalmaması iyi olur.Ön gerceklestirim kısmı projenin tasarımının yapıldıgı kısımdır ve bu tasarım genelden ayrıntıya dogru yapılır.Ön gerceklestirim kısmını bir insanın anne karnındaki olusumu gibi düşünülebilir. İlk olarak projenin “Mimari Tasarim” kısmı yapılır bu projenin en kaba hali ile tasarlanmasıdır.Bu insanın anne karnındaki embriyo donemi , canli taslagi gibidir.Daha sonra “Bilesen Arayüz Tasarimi” yani mimari tasarımdaki kabaca tasarımın parcalara ayrılaması kısmı.“Bilesen ( Modul ) Tasarimi” bu kısımda ise her bir parca kendi icinde tasarlanır yani uml diagramları olusturulur.Bu Bilesen arayuz tasarımını ve bilesen tasarımını bebegin ic organlarının olusması olarak düşünülebilir.Daha sonraki asama “Veri Tabani Tasarimi” kısmıdır burda verilerin nasıl tutulacagı nerede saklanacagı gibi teknik detaylar sekillenir.Bunu bebegin gelisimindeki beynin gelismesine benzetebiliriz. Daha sonra “Kullanıcı Arayüz Tasarimi” gelir burada artık projenin son kullanıcıya nasıl gösterileceği belirlenir. Bunlar belirlenirken iki tane önemli kıstas vardır bunlar “Bilginin veya kullanıcı isteklerinin nerede gosterilecegi veya karşılanacagı” digeri ise “Görsel kısımdaki dolaşımın nasıl yapılacağıdır”. Bu kısım bebegin kafa, kol ve ayaklarının olusum evresi olarak dusunulebilir.Arayuz tasarımı da yapıldıktan sonra projenin ilk prototipi gelistirilmistir. Artık bu “prototipin proje sahiplerine ve kullanıcılara gösterilerek onların tatmini saglanana kadar gelistirilmeye” devam edilir. En son asamada ise “Veri yapısı ve Algoritma tasarımı” gelir.Burada her bir kullanılacak sınıftaki işlevlerin nasıl yazılacagı ve nerelerde hangi veri yapısının kullanılacagı kararlaştırılır.

+Ön Gerceklestirim
- Mimari Tasarım
- Bilesen Arayuz Tasarımı
- Bilesen ( Modul ) Tasarımı
- Veri tabani tasarımı
- Kullanıcı Arayüz Tasarımı
o Bilginin ve kullanıcı isteklerinin nerede karsılanacagı
o Görsel kısımdaki dolasımın nasıl olacagı
- Prototipin proje sahiplerine ve kullanıcılara gosterilerek onların tatmini saglanana kadar gelistirilmesi
- Veri yapısı ve algorithma tasarimi


3.4. Gercekleştirim

Bu basamak projenin artık oluşumunu tamamladığı evredir yani gercekleştirimin yapıldıgı basamaktır.Bunun icin oncelikle “Parcalanmıs ve zamanlanmıs projenin adımlarının yapılması” gerekir.Burada daha onceden zamanlanmıs olan proje adımları teker teker gerceklestirilir ve bunlar yapılırken de ön gerceklestirim asamasındaki tasarımlardan yardım alınır. Daha sonra bu yapılanlar “Projenin gorsel kismi ile entegre” edilir.Eger projenin herhangi bir kısmında yani arka plan veya gorsel kısmında eksiklik görülürse onlar giderilir ve proje gerçekleştirilmis olur.

+ Gerceklestirim
- Parcalanmıs ve zamanlanmıs projenin adımlarının yapılması
- Projenin gorsel kısmı ile entegre


3.5. Test

Artık yazım kısmı bitmiştir fakat yinede huzura erişilmemistir asıl zor kısım olan test ve geri dönüşleri beklemek kalmıstır. Test asaması ürünün güvenligi icin gayet önemli bir aşamadır. Test olarak ilk önce “Yazılımın kodları gözden geçirilir ve kontrol edilir” burada herhangi bir hata veya artık kod var mı diye bakılır.Bir sonraki aşama “Gereksinimler listesi ile yazılım karsılastırılarak istenilenler saglanıyor mu kontrol edilir”. Eger yazdıgınız program bütün platformlarda çalısacaksa her patformda denenmelidir yani “yazılım degisik platformlarda ve tarayıcılarda test edilir”. Bütün bunlardan gectikten sonra proje “test amaçlı kullanıcıya sunulur ve geri dönüşler alınır” burdan gelen bilgilere göre programda gereken degişiklikler yapılır. Kullanıcılar tatmin edildikten sonra artık proje sonuca ulaştırılmış olur. Artık oluşan ürünün“Ürün belgesinin hazırlanması” gerekir. Bu belge kullanıcılar icin kullanım klavuzu ve urunun beklenmedik olaylara karsı nasıl tepkiler verecegini yazılı olduğu belgedir.

+ Test
- Yazılımın kodları gozden gecirilir ve kontrol edilir
- Gereksinimler listesi ile yazılım karsılastırılarak istenilenler saglanıyor mu kontrol edilir
- Yazılım degisik platformlarda ve tarayıcılarda tes edilir
- Test Amaclı kullanıcılara sunulur ve geri dönüşler alınır.
- Urun belgesinin hazırlanması

4. Teşekkürler

Bu yazıyı yazmam icin beni teşvik eden ve sonrasında destek olan Ali Özkan ÖZEREN hocama teşekkürlerimi sunarım.

Ayrıca yazıyı kontrol eden ,eleştiren bütün arkadaşlarıma ve dostlarıma da minnettarlıgımı sunarım.

5. Kaynakca

Prof. Dr. Ersin Töreci
Sistem Çözümleme ve Gelistirme Ders yansıları
ftp://ftp.cs.hacettepe.edu.tr/pub/dersler/BIL3XX/BIL346_SGM/05-06/

Martin Bauer
Successful Web Development Methodologies
http://www.sitepoint.com/article/successful-development

Donn Le Vie
Writing Software Requirements Specifications
http://www.techwr-l.com/techwhirl/magazine/writing/softwarerequirementspecs.html

Wikipedia
Unified Process
http://en.wikipedia.org/wiki/Unified_Process

6. Sözlük


Arayüz : Interface
Gerçekleştirim : implementation
İşlev : function
Kullanıcı Gereksinimleri : User Requirements
Yazılım/Sistem gereksinimleri : System Requirements
Yazılım Gereksinim Belgesi : Software Requirements Specifications
Web Projeleri Gelistirme Yöntemi : Web Development Methodologies