Elbetteki Kürkçü Dükkânıdır.
Bazılarınızın bildiği üzere şu anda yeni bir oyun geliştiriyorum ve geliştirdiğim oyun için seçtiğim motor Unity. Oyun geliştirmek isteyen insanlar arasında FPSMaker seviyesine düştüğünün farkındayım elbette. Ne var ki, bir bilgisayar mühendisi olarak seçtiğim araç, en iyi kullandığım, işime en çok yarayan ve yapmak istediğimi en iyi şekilde yapmama olan veren bir araç olmalıdır. Bu bağlamda, Unity bir çok oyun motorunun aksine Nesne Yönelimli yaklaşım yerine Pattern Oriented yaklaşım sergilemekte ve bu da istediğim şeyi çok daha rahat yapmama olanak vermektedir.
Tabi burada ayrı bir mesele var: Ekip çalışması.
Ekibin ayrı ayrı iş yapıp en son birleştirmesi anca okul çağındaki tırt projelerde yapılır, ki onlarda da ne kadar sıkıntılı bir iş olduğunu anlatamam. O yüzden genelde kendim oturur yazardım tüm kodu. Kodu mun kodu. Versioning kullanmayı bana bir arkadaşım öğretti; ama ben kimselere öğretemiyorum maalesef.
Neyse, Unity ile çalışırken herkesin kendi elinde proje dosyası var, ayda bir kere herkes proje dosyasını bana yolluyor, ben de tüm bu dosyaları birleştirip tek proje dosyasında toplayıp herkese geri gönderiyordum. Herkes dediğim de iki kişi ha, Zia ve ben. En son prototip aşaması için proje birleştireceğimiz zaman Probuilder isimli plugin öyle bir sıkıntı çıkardı ki delirdim. Eleman C#’ın kütüphanelerinden veri çekiyor ve Directory (Klasör / Liste) isimli sınıf bana sürekli “şunu bulamadım”, “böyle bir fonksiyon yok”, “bu değişkene erişemiyorum”, “karnım aç” gibi hatalar verip verip duruyor, derleme yapmamı engelliyordu.
Sonradan farkettim ki benim yazdığım sınıflardan birinin adı Directory. Meğer gerizekâlı ona referans vermeye çalışıyormuş. E benim yazdığım Directory sadece listeleme amaçlı, C#’ın klasör sınıfı ile alâkasız. Ben de Directory’mi PhoneDirectory diye değiştirip durumdan kurtuldum. Ama kafaya koymuştum bir kere, versiyon kontrol sistemine geçecektim!
Sonra başladım araştırmaya. İlk akla gelen GitHub oluyor haliyle. Ama ben Bitbucket kullanıyorum ve Bitbucket ücretsiz bir şekilde private repository açmanıza imkân sağlıyor. Manyak mıyım ben onca aylık emeğimi public yapacağım? Değilim tabi ki, o yüzden Bitbucket’a girmeye çalıştım. Amma ve lâkin, git tabanlı sistemler binary dosyaları handle edemiyor. Hele ki proje büyükliği 800 MB’a ulaşınca hepten yırtıyorlar.
Sonra gördüm ki Unity’nin kendi Asset Server‘ı varmış! Yahu madem böyle bir şey var, kaçırır mıyız? Kaçırmadım elbette, ofisteki serverdan kendime 5GB yer ayırdım ve kurdum. Bir kere Linux versiyonu garip, ya açılmıyor, ya başlamıyor, ya da hiç derlenmiyor. Araştırdım ettim, o kütüphane, bu satır derken baktım neredeyse sıfırdan yazmaya girişeceğiz. Baktım olmuyor, ben de kendi Windows bilgisayarıma kurdum Asset Server şeysini. Ama o da ne? Hacettepe’nin altyapısında izin verilen portlar sadece standart portlar. Yani 21, 3306, 80 vs. Asset Server’ın ihtiyaç duyduğu port kapalı. Arayıp port açtırma girişimlerim de boşta kalınca severler böyle işi dedim ve başka arayılşara girdim.
Derken Unity 4.3’ü çıkardı ve Plastic SCM eklentisini duyurdu. Baktım ki, Plastic SCM oldukça kaliteli bir binary revisioning veriyor. Ayrıca ücretsiz katılım sağlayabileceğim lisansı da mevcut. Ben de giriştim bu işe. Server’ı gene kendi Windows makineme kurdum. En başta yine port sıkıntısı yaşarken bir baktım, server ayarlarında portu değiştirebiliyorum. Ben de bastım MySQL portunu, nasıl olsa kullanmıyorum diye. Başladık bunu kullanmaya…
Bir sabah kalktım evde, bağlanmaya çalışayım dedim ofise. Yok? Bağlantı kurulamıyor. Zia haber verdi, o da bağlanamıyormuş. Ofise git, yeniden kur falan filan derken baktım bu böyle olmayacak. Hiç para yatırmayacağım diyordum; ama sanırım pamuk eller cebe girecekti… Ben de pamuk elleri cebime attım. Asset Server Hosting diye bir şey buldum. Buldum bulmasına da, tasarıma bakıyorum tırt. Ödeme PayPal ile kişiye. E internette kullandım, memnun kaldım diyen de yok? Ulan olur mu olmaz mı derken ilk ay ücretsizmiş, sıkıntı yaşarsak çeker gideriz dedim ve gittim. Mail geldi “15 dakka verin bize, sisteminizi hazır edeceğiz” diye, 15 saat geçti yok! PayPal hesabıma girip iptal ettim ben de otomatik ödemeyi. Adamlar para kazanacağı işe el atmıyor, bir kere parayı aldıktan sonra ayvayı yedik demektir.
Ne yapacağız, ne yapacağız derken ben yine kendin pişi kendin ye Asset Server olayına geri döneyim dedim ve şöyle bir şey buldum. Amazon’un EC2 web servislerine ücretsiz üye olabiliyormuşuz. Ben zaten zırt pırt alışveriş yapıyorum Amazon’dan, sürekli müşteriyim yani, bir güzellik yaparlar bana da dedim. Dedim ve bir girdim, yarım saat sonra çatır çatır çalışan bir Asset Server’ım oldu. Portları, güvenlikleri vs de ayarladıktan sonra işi iyice azıttım ve Cache Server da kurdum üstüne!
Dedim Zia beni dinle, böyle böyle. 5 saat sonra elimdeki tüm projeyi server’a upload etmiştim ilk commit olarak. Tek sıkıntı Zia’ya versioning sistemleri nasıl kullanacağını öğretmekti. Onu da yavaş yavaş yapıyoruz işte.
Böyle bir görüntüsü var. En başlarda çok acemiliğime geldi; ama dünya varmış be. Adam dünyanın öbür tarafında (US, Tennessee), ben bu tarafındayım. Arada 8 saat fark var. Ben uyuyorum, adam açlışıyor, update diyor commit ediyor, ben uyanıyorum kendi dosyalarımı güncelleyip adamın kaldığı yerden devam ediyorum. Bazen bir işi o beceremiyor, commit et kapat diyorum, giriyorum yapıyorum düzenliyorum, commit edip kendi işime devam ediyorum, o da kaldığı yerden devam ediyor. Hakikaten oyun geliştirici filan değilmişim ben, amatör acemi zıpçıktıymışım.
Bence yüzyılın icadı bu versiyon kontrol sistemleri. Post it filan yalan. Commit yorumlarına eklenecek şeyler cabası. Bu da bitbucket ekran görüntüsü:
Yaşasın Version Control.
Super bir yazi olmus. Tebrikler.
Unity ile versiyon kontrol sistemleri arasindaki farklar, artilar, eksiler vs. ararken (Unity Asset Server mi yoksa Perforce mi yoksa Plasticscm mi? -in English, come on!;) -) blog yazisini gordum.
Bu versiyon kontrol sistemlerini okulda ders diye okutmalari lazim. Zira, sirketler icinde bile GIT kullanimi bile cok farklilik gosteriyor.
Her yiğidin yoğurt yiyişi farklıdır.
Ne var ki, insanları önce yoğurdun varlığından haberdar etmek gerekiyor.
Okul bitirip de bırakın Linux’u, Windows bile kullanamayan, iki satır kod yazamayan (tasarım, doküman hak getire zaten) insanlar olduktan sonra öğretilse de bir şey değişmez kanısındayım.