Saturday, November 17, 2012

Programcılık tavsiyelerim

Uzun bir süredir yazmak istediğim şeylerden birisi, şu ana kadar programcılıkla ilgili edindiğim tecrübelerim. Çook çok tecrübeli ve bilgili bir programcı değilim. Ama bu, temel meslekî tavsiyeler veremeyeceğim anlamına gelmiyor. Burada okuyacaklarınız da genellikle "Tekerleği yeniden icat etmeyin", "Kodunuzu okunaklı kılın" seviyesindeki basit, bilindik tavsiyelerin tekrarı olacak.

Yanlış bildiğim kavramlar, hatalı olduğumu düşündüğünüz konular olabilir. Bu yazıyı asıl zenginleştirecek olan, sizlerden gelen yorumlar. Mesela esnekliği sağlamak için tam olarak neler yapılması gerektiğini halen bilmiyorum, o benim listelediklerim dışında.

Yedeklerinizin isimlendirilmesi

Çalışmanızın yedeklerinin ismini MUTLAKA tarihe göre isimlendirin (veya versiyona, ama ben tarihi tercih ederim). Bir gün içerisinde birden fazla yedeği alınacaksa o tarihe saat bilgisini de ekleyin. Bilgisayarda görülen son değiştirilme tarihine sakın bu konuda güvenmeyin; çeşitli nedenlerden dolayı o gördüğünüz tarih, sizin gerçekten yedeği aldığınız tarihten sonrasını gösterebilir.

Yedeklerin isimlerinin tek bir formata göre ve Yıl-Ay-Gün formatına göre düzenlenmesi, yedeklerin listesini okumanızı kolaylaştırır. İsimlerin alfabetik sırası, kronolojik sırayı verir. (Tabi ki, ayların rakamla gösterilmesi ve 10'dan küçük sayıların yazımının 0'la başlaması düzgün bir alfanümerik karşılaştırma için önemli.)

Benim tarih formatını versiyon numarası formatına tercih etmemin nedeni, özellikle takım çalışmasındaysanız, "Biz geçen cuma neyi yapmıştık?" sorusunun "Biz v0.1256'te ne yapmıştık?" sorusuna göre daha kolay olması.

İngilizce

Tutorial okuyabilecek kadar İngilizce bilmek çok önemli. C++, Java gibi en temel konular için Türkçe kaynak bulabilirsiniz, ama daha spesifik konular için pek şansınız yok. Yabancı dil bilgisi sadece kitap ve tutoriallar için gerekli değil; ama karşılaştığınız bir sorunu Google'da arattığınızda bulacağınız çözümler büyük ihtimalle İngilizce çıkacak. Eh, üyesi olduğunuz yabancı forum, maillistlerde soru sorabilmek için de yine, ... 


İngilizce demişken, değişken ve fonksiyon isimlerini İngilizce yapmak bence Türkçe'den daha hoş bir görüntü sunuyor. maasArtisi, indirmeSikligi, carpim, vs.... Bunun nedeni malum, değişken ismi içinde Türkçe karakter verilememesi.

Dev-C++'tan uzak durun

İlla kullanmak zorunda değilseniz, Dev-C++'tan uzak durun. Belki zamanına göre kral bir ücretsiz IDE'ydi, bilmiyorum, ama günümüze göre demode. Windows 7, Vista gibi yeni (?!) işletim sistemlerinde Dev-C++'ı başlatmakta sorun yaşayabilirsiniz, bu karşılaşacağınız sorunların henüz başı.

Windows için ücretsiz bir IDE arıyorsanız, Code::Blocks'ı önerebilirim. Parantezlerin nerede açılıp kapandığını görmek bile yeterli benim Code::Blocks'ı tercih etmem için. Visual Studio kullanmaya başlamadan önce onu kullanıyordum. Burada not düşeyim; Visual Studio kullanmaya başlamamın nedeni, iş hayatına girdikten sonra VS gerektirecek projelere dahil olmam. Ve sonrasında da VS'ya alışmış olmam.

VS Express Edition, CodeBlocks veya başka ücretsiz IDE'leri birbirleriyle mukayese edecek kadar tecrübe ve bilgi sahibi değilim. Ama Dev-C++ hariç.

İki milisaniyede kapanan C programları

Programcılığa yeni başlamış, okuduğu kitaplardaki C++ kodlarını çalıştırmaya çalışan insanların karşılaştığı genel bir sorun var: Yazdığınız programın, birkaç milisaniyeliğine görünüp ortadan kaybolması. Bazen kitap, herhangi bir tuşa basılana kadar programın bekletilmesi için ne yapılması gerektiğini anlatmaz.

Yapılabilecek şeylerden birisini burada söyleyeyim (Windows için): "conio.h" isimli bir header'ı include etmek, programı nerede bekletmek istiyorsanız o satıra getch(); komutunu yazmak. Bunun örneğini şuradan okuyabilirsiniz.

Pekii, getch() gibi bir "Klavyeden tuş al" komutunu kullanmayan örnekler hatalı mı? Eğer o programa Command Prompt (Komut İstemi) içerisinde erişirseniz, programın düzgün çalıştığını (yani "Hello world" yazdırıp hemen kapanmadığını) göreceksiniz. Bana sorarsanız, tek işlevi ekrana yazı yazdırmak olan bir Windows programının ne yazdırdığını görmek için illa onu Command Prompt'ta filan açmak zorunda kalmamalıydık.

Tekerleği icat etmek

Eğer çok temel, sık kullanılan bir fonksiyona ihtiyacınız varsa, ilk önce sizin kullandığınız kütüphanede (veya oyun motorunda) o fonksiyonun olup olmadığını bir araştırın. Özellikle de kendisini ispat etmiş, oturmuş bir kütüphane/oyun motoru kullanıyorsanız. Mesela bir vektörün, belirli bir uzunluğu geçmemesi için kırpılması fonksiyonunu oturup kendiniz yazabilirsiniz. Ama oyun motorunun kendi VClamp fonksiyonu kadar optimize ve güvenilir çalışmayabilir. Bu araştırmayı yapmak zaman alır, doğru, ama size daha fazlasını geri kazandırır. İki gününüzün sırf o kendi yazdığınız fonksiyonun verdiği hatalı bir sonuç yüzünden heba olduğunu düşünsenize...

Bu araştırmayı yapmanın bir faydası da, mesela mutlak değer fonksiyonunu ararken arada diğer fonksiyonları da görüp "Vaaay, demek bunu da yapabiliyormuşuz? Bunu aklımda tutayım" diyebilmek.

Bu araştırmayı sadece şu an kullandığınız sistemin çapı içerisinde gerçekleştirmeyin. Mesela belirli bir tip collision detection'a ihtiyacınız varsa, bu konu hakkında daha önceden yapılmış çalışmaları incelemelisiniz. Tamam, belki bu tip fonksiyonları en baştan geliştirmekten keyif alıyor olabilirsiniz, ben de alırım. Araştırma işi pek keyifli değil, benim için en azından. Ama verimli bir çalışma için bazen bu şart. Bir örnek daha vereyim.

Ben üniversitedeyken, konsola Türkçe karakterleri bastırabilmek için kendi fonksiyonumu yazmıştım (printf("ĞÜŞİÖÇ"); problemi işte). Sizin girdiğiniz  bir metindeki Türkçe karakterlerin sayısal değerini, konsolda görülebilecek karşılıklarına çeviriyordu. Ama kullanışı zor bir sistemdi. Geçenlerde Zombie Chess'i yaparken yine o fonksiyona ihtiyaç duydum, ama harddiskimde bulamadım. Sonra "Acaba başkası yapmış mıdır?" diye internette araştırma yapmaya karar verdim, bu problemin aslında çok basit bir şekilde halledildiğini o zaman gördüm.

C/C++ ile MS-DOS konsolunda Türkçe karakter çıkarmak

Önceki paragrafta bahsettiğim problemin çözümünü burada  buldum (real_digital'e buradan ++rep). Belki o sayfa şu an siz bunu okurken servis dışıdır, bu yüzden oradan buraya copy+paste edeyim.
1. <locale .h> isimli dosyayı include edin
2. main'in içine setlocale(LC_ALL, "Turkish");  satırını ekleyin.


#include <stdio.h>
#include <locale .h> /* Bu başlık dosyası bizi kurtaracak... */

int main()
{

   setlocale(LC_ALL, "Turkish"); /* Türkçe karakter desteği sağlanıyor */

   printf("Bu yazı düzgün yazıldıysa\n");
   printf("programınız doğru çalışıyor demektir.\n");

   return 0;
}

Convention

"Kodunuzun bakımını yapacak kişi, sizin nerede yaşadığınızı bilen tehlikeli bir psikopatmış gibi kod yazın."

Okunabilirlik, sizin kod yazma alışkanlığınız olsun. Ekibinizdeki tek programcı siz olsanız bile, kodunuzun ileride kimler tarafından görüleceğini bilemezseniz. Bu tavsiye, sadece grup projeleri için geçerli değil. Sadece kendinizin göreceği bir kod yazıyor olsanız bile, o koda 4 ay sonra geri döndüğünüzde "ahmet", "s", "dgshgs" gibi değişkenlerin neyi ifade ettiğini hatırlamıyor olacaksanız.

Birbirlerine karşılık gelen kıvırcık parantezlerin aynı hizada olması, değişken ve fonksiyonların sistematik bir şekilde isimlendirilmesi (mesela tüm değişkenlerin buSekildeIfadeEdilmesi) kodun okunabilirliğini yükseltecektir. Bu sadece göz zevki için değil, ama kodu okuduğunuzda tek odaklanacağız şeyin sadece önünüzdeki algoritma olması için önemli.



Bir de private/protected değişkenlerin alt çizgi ("_") ile başlaması alışkanlığı var. Eğer değişkenlerin public veya private olup olmadığının gösterilmesi önemliyse, eh, alt çizgi kullanılması gerekir. Ama zaten bütün değişkenlerin private olduğu (veya daha komiği, public/private diye bir ayrımın zaten mümkün olmadığı) bir sistemde bütüün isimlerin _alt _çizgi _ile _başlaması, _okunduğunda _insanı _çok _mutlu _eden _bir _görüntü _sunmuyor. _Bunu _ciddi _ciddi _ yapmış _olan _insanlar _var, _bu _yüzden _bu _konuya _değinme _ihtiyacı _duydum.

Sadelik ve esneklik

En önemli prensibin sadelik olduğuna inanıyorum.

Benim programcılık metodolojileriyle ilgili okuduklarımda karşıma en sık çıkan tavsiyelerden birisi KISS prensibi. "Keep it simple, stupid", "Keep it simple, sir", "Keep it short & simple" gibi çeşitli açılımları var. Bir sistem ne kadar karmaşık olursa, çıkan hataları düzeltmek, sistemde değişiklik yapmak da o kadar zorlaşır. Şuna inanıyorum: Sade bir tasarım; esneklik, optimizasyon gibi diğer önemli kriterleri de beraberinde getirir.

Yaptığınız şeyin esnekliği de önemli bir kriter. Tamam, eğer hazırlaması 3-4 saatinizi alacak bir ödeviniz varsa, yazdığınız kodun ileride başka bir amaca hizmet edeceği ihtimali çok yüksek değil. Ben bu tip ödevleri bodoslama bir şekilde başarıyla yerine getiriyordum. Ama aylarca sürecek bir iş yapıyorsanız, başlangıçta size verilen "Bu ürün şunu şunu yapmalı" listesi zamanla değişecektir. Hatta belki ilk başta sizden bir Windows formu yaratmanız istenip, sonra onu sürekli arkaplanda çalışacak bir uygulamaya dönüştürmeniz bile istenebilir. Şu an üzerinde çalıştığınız şeyin ileride nasıl bir değişim geçirmek zorunda kalacağını önceden sezmek zor. Ama bunun önlemi alınabilir.

Esneklik nasıl sağlanır, size kesin bir tavsiye verecek kadar bilgili değilim. Benim yaptığım şey; programın yapacağı bütün işleri ayrı ayrı alt fonksiyonlara bölmek (mümkün olduğunca birbirlerinden bağımsız), verileri hard-code etmekten kaçınmak (mesela bir sürü kameranın bağlı olduğu simülasyon sistemindeki kameraları dolaşan bir döngü 8'e kadar değil, MAX_CAMERA_AMOUNT'a kadar ilerlemeli) (bazı verilerin de kullanıcı tarafından configure edilebilir olması da önemlidir).




Saturday, October 27, 2012

Till the siren come calling, calling






Are you my family?
Can I stay with you a while?
Can I stop off in your bed tonight?
I could make you smile

In the morning I'll make you breakfast
In the evening I'll warm the bed
And I'll always be happy to kiss you
Promise I'll never get sad

Till the siren come calling, calling
It's driving me evil, evil
I was a heart breaker, I loved you
The same way I do
But I've got so much wickedness and sin

My name is Pearl
And I'll love you the best way I know how
My blond curls slice through your heart
And the siren come calling
In the night, till the light

Help you dress yourself up fancy
Bathe you when you get sore
I'll be good, I think I could be all
You would want and more and more

Be proud when you dazzle the wondrous
Glitter your eyes for the town
Tell every last boy that you're my man
Try not to let you down

Till the siren come calling, calling
It's driving me evil, evil
I was a heart breaker, I loved you
The same way I do
But I've got so much wickedness and sin

My name is Pearl
And I'll love you the best way I know how
My blond curls slice through your heart
And the stars are exploding in the night

It won't be long until you'll break
No, it won't be long until you break
It won't be long until you break
It won't be long until you break
Cause I'm evil, 'cause I'm evil

Tuesday, October 16, 2012

Tuhaf rüyalar

Madem bu blogun adı Reverie River (en azından Blogger'daki ismi), biraz da tuhaf rüyalarımdan bahsetmesem blogun ismine ayıp ederdim.
---

Ben, Nihilanth

Rüyalarımda kendisini en sık tekrar eden şeylerden birisi, Erzurum'daki eski evimiz. 3 yaşımdan 7 yaşıma kadar, Erzurum'daki askerî lojmanda yaşamıştık, sonra babamın tayini tekrar Ankara'ya çıkmıştı. Neyse. Dün geceki rüyamda, bu eve tekrar geri dönüyorduk ailecek. Diğer rüyalarımdaki gibi.

Bu rüyayı özel kılan şey, geride bıraktığımız bir Varlık'tı (o kadar tuhaf ve eşsiz bir varlık ki, ondan 'Varlık' diye bahsedeceğim). Hem Half-Life'taki Nihilanth'a, hem de bir deniz atına benzeyen, yaklaşık 20 santim boylarında bir canlı düşünün. Kolları ve bacakları yok, kafasının şekli bir insanın kafasına benziyor. Havada süzülebilme, bir insan gibi düşünebilme ve konuşabilme yetisi var.

Varlık'ı hayal etmekte zorlandınız, değil mi? Rüya da gayet absürd? Ama absürdlük henüz yeni başlıyor: O Varlık, benmişim.

Rüyadaki durumu mantıklı bir şekilde açıklamanın hiçbir yolu yok. Rüyamda ben bir insandım, o eve insan olarak geliyordum. Varlık ise benim çocukluğumdaki formum. Bir çocuk gibi düşünebilen, konuşabilen bir kertenkelemsi yaratık. Kendisine alınmış parlak, güzel giysiler bile var! Çocukluğunuza ait bir fotoğrafa, kamera kaydına baktığınızda kendinizi ne kadar özümserseniz aynı şekilde ben de o Varlık'ı özümsüyordum. Artık ne olduysa, ben bir şekilde bu insan formuna bürünmüşüm, evde kalan şey ise pulları kurumuş, donmuş, yirmi santimlik bir yaratık. Yaklaşık 20 yıl boyunca karanlık bir odada bırakılmış, onun ölmüş olduğunu sanıyoruz.

Ama biz eve geldikten, onu incelemeye başladıktan sonra yeniden canlanıyor. Karanlık odada sadece onu ve bizi aydınlatan low-key ışıklandırma var. Öksürüyor, konuşmaya başlıyor, soğuk odada ağzından çıkan buharları görebiliyoruz. Kendisine ne olduğunu, kaç yıldır burada kapalı kaldığını soruyor. Vurucu olan şey, Varlık'ın sesinin, benim sesimle birer aynı olması. Onunla aynı kişi olduğumu biliyoruz.

O şekilde soğukta kurumaya bırakıldığı için öfkeli. Benim insan formumu kıskanıp beni yok etmek istiyor. Ve Bu Varlık'ın aslında çok güçlü olduğunu görüyoruz; birdenbire onun Nihilanth'la aynı cüsseye sahip olduğu bir boyutta kendimizi buluyoruz. Bana dokunmamasına rağmen (zaten kolu molu yok ki) beni telekinetik şekilde havaya kaldırmayı başarıyor, yine telekinetik bir pençenin avucu içinde yavaşça eziliyorum. Ev yıkılmaya başlıyor.

Ama sonra beni/ailemi affediyor. Ben bu Varlık'la yine aynı kişi oluyorum; hem insan, hem de Nihilanth formunda. İki form da aynı anda var, yani bir shapeshifting söz konusu değil. Ve o evde mutlu bir şekilde yaşıyoruz, yıkılan kısımlar bir şekilde geri geliyor.

--

Temizlik malzemesi: Evcil yılan

Yine Erzurum. Çocukluğuma dair şöyle bir anıya sahipmişim rüyamda: Bizim eskiden bir tane evcil yılanımız varmış. Şöyle yirmi-otuz santim çaplarında, on metre kadar uzun, yeşil ve siyah pullu bir yılan düşünün. Bu yılanın görevi, evi temizlemekmiş. Yılan evde dolandıkça ev temizleniyormuş. Çok kullanışlı bir yılanmış, hatta bir ismi bile varmış, "Süheyla" mı, "Süreyya" mı ne. Şunun altını çizeyim; benim tanıdığım o isimlerde hiçbir insan yok, yani burada kesinlikle kimseye "Hahahaha yılaaan!" diye gönderme yapmıyorum)

Bodrum, Bodrum

Şimdi deniz kıyısına gelelim, bu temaya da ait ilginç rüyalarım var. Ege Denizi'nin açıklıklarında McDonald'slar varmış. Açık denizin ortasında yüzen, normal bir McDonald's şubesi kadar yer kaplayan plastik platformlar düşünün. Oralarda sadece tavuk ve balık burger satılıyormuş (hoş, sanki Türkiye'de McDonalds'ta balık burger var da gerçekte...).

Bodrum'da bir otelde kaldığımızı görmüştüm. Şöyle bir otel ki, tam denizin içine gömülü. Kaldığım odanın pencereden baktığınızda pencerenin alt yarısı denize ait, diğer yarısında da gökyüzünü, gün doğumunu görüyorsunuz.

Bir rüyamda yazın ortasında birden bire bir kar fırtınası başlıyordu. Plajda güneşlenen insanlar odalarına kaçışıyordu, karlar üzerlerine yağarken. Plaj hemen beyaza bürünmüştü.

Bilinçaltı hackerları

Bu rüyamı zaten Ağustos sonunda Facebook'ta anlatmıştım, buraya da copy+paste edeyim.

Ozan Korkmaz, Güçhan Alkan, Uğurcan Orçun'un da içinde bulunduğu bir ekip, bir websitesi yayınlamıştı. Öyle bir site ki, sitenin bir sayfasına girdiğinizde, sizin sinir sisteminizi ve psikolojinizi etkileyecek görsel ve işitsellere maruz kalıyorsunuz. Ve bu etki, sizin gerçeklik algınızı birdenbire değiştiriyor. Mesela vücudunuzun belli bir yerinin gıdıklanması veya yanıbaşınızda bir küpün belirmesi!

Sizin bu gerçekçiliği yaratmanız için bir editör var, sizin yarattığınız şeyler compile edilip insanların beynini etkileyecek formata getiriliyor. Ve her gerçekliğin kendi sayfası var. Bu site DeviantArt gibi, ürettiklerinizi paylaştığınız bir ortam olarak tasarlanmış.

Tabi ki, insanların gerçeklik algısını hacklemeniz için illa ki onların bu sayfalara bilinçli olarak girmeleri gerekmiyor. Gayet masum görünüşlü bir yazının içine (mesela bir blog yazısına), bu derlenmiş olan sübliminal kodları yerleştirebiliyorsunuz.

Kötü niyetli çalışmaların yapılması uzun sürmüyor. Örneğin, sinir sisteminize çok şiddetli bir ağrı hissetmesi emredilebiliyor. Bazı kodların etkisi, siz sayfaya baktıktan saatler sonra kendisini gösterecek şekilde tasarlanıyor. Sizi, gece yattığınız yatağa zincirle bağlı olduğunuza ikna edecek sayfalar da çikabiliyor. Çoğu insan, bu halüsinasyon esnasında kolunu kaldıramıyor, çünkü sinir sistemleri de bedenin engellendiğine ikna edilmiş. Etraf sübliminal kodlarla doluyor, internetin de dışına çıkıp sokak yazılarına, billboardlara bile taşıyor.

İnsanlar kafayı yiyor. Annesini hayalet olarak algayan bir çocuk da rüyamdaydı. Kitlesel halüsinasyonlar başlıyor; şehir merkezindeki insanlar, bir gökdelenin tepesinde dev bir örümcek görüyor.

Bu siteyi yapan ekibi televizyona çıkarıyorlar. Ekip, "Lütfen bize yardım edin, bu kodları etkisiz kılmanın bir yolunu bulmalıyız!" diye insanlardan yardım istiyor. Ben Ozan'ı arayıp, ekibe yardım etmeyi, o derleyiciye erişmek istediğimi söylüyorum.

Ama Ozan kabul etmiyor. Benim bu kodları alıp tüm insanlığı kontrol etmek için kullanacağıma inanıyor (ve haksız mıydı, emin değilim). Ve onunla savaşmaya başlıyoruz. Chronicle'ın sonundaki savaş gibi ilk başta, birbirimize hayali bir şeyler fırlatıyoruz, roketler yağdırıyoruz (yani düşünün Chronicle'dakinden bile daha epik). Sonra rüya iyice saçmalıyor, The Matrix'teki gibi yumruklaşarak dövüşüyoruz, güneş gözlüklerimiz bile var.

Sonra neyseki uyandım, rüya daha da saçmalamadı.

Sunday, October 7, 2012

Self'ten haberler

Benim yeni korku oyunları çıkarmamı bekleyen herkese güzel bir haberim var: Son birkaç haftadır, Reverie River: Self isimli kısa oyunumda önemli gelişmeler kaydettim.

"Self" mi? O nedir?

Self hakkında bilgi vermeden önce Düşnehri (Reverie River) serisi hakkında bilgi vereyim. Birbirinden bağımsız, ufak oyunlardan oluşan bir seri. Kesin olarak yapılan/yayınlanacak iki adet oyun var bu seride. Birisi Crimm's Son, öbürü de bu.

Self çook kısa bir oyun. Hatta "oyun" bile sayılmaz, daha çok bir "interaktif hikaye", çünkü sizi zorlayacak bir bulmaca yok. Ama korku severleri tatmin edecek bir atmosfer yarattığıma inanıyorum, zira beni bile korkutan sahneler var.

2008'te, ağır bir depresyon geçirdiğim bir dönemde bu oyuna başladım. O zamandan beri çok şey değişti, bu oyunu tasarlarkenki duygularım dahil olmak üzere. Bu oyun artık benim duygularımı yansıtmıyor, ama şimdiye kadar ürettiklerimden o kadar memnunum ki, Self'i bitmemiş oyunlar mezarlığına gömmeye kıyamadım.

Bunun yerine, oyunu "kabul edilebilir" bir şekle getirip, kısa bir oyun olarak yayınlayacağım.

Oyunun konusu ne?

Oynayınca göreceksiniz.

 

Grafikleri nasıl yapıyorsun?

Half-Life 2 motoruyla 3 boyutlu sahneler yaratıp onlardan ekran görüntüleri alarak. Kabusta Kaybolmak (Lost in the Nightmare)'takiyle aynı teknik. Bu ekran görüntülerini 2D bir oyun motoru olan Adventure Game Studio'daki oyunuma aktarıyorum.

Monday, September 10, 2012

Biraz iç dökmece...



Uzun bir süredir metinsel içerikli bir yazı yazmamıştım buraya, biraz konuşmaya ihtiyacım var. Hoş, bir blog sayfasına sahip olup da "Acaba bu yazacaklarım beğenilir mi?" gibi bir kaygıyla içimi dökmekten kaçınmak gerçekten garipti. Çünkü bir blogu özel, benzersiz kılan şey, yazarının kişisel düşünceleridir, onun çalışmalarının kıldığından da fazla.







Son bir-iki yıldır fotoğrafçılığa saldım, belki buradaki postlardan fark etmişsinizdir ("You don't say?", agsfghfasghsafh). Eskiden fotomanipülasyonla uğraştığımı hatırlayan, bilen çok fazla insanın kaldığını bile sanmıyorum etrafımda. Belki ben artık eskisi kadar duygusal bir çocuk değilimdir, bilmiyorum...



Yukarıdaki fotoğrafları 850 nm'lik infrared filtremle çektim. Bu dalgaboyundaki filtrenin etkisini gerçekten çok seviyorum, ama net bir fotoğraf yakalama konusunda başarısızım halen. En üstteki fotoğraf tam istediğim gibi net, ama o da şans eseri. Diyafram açıklığını (aperture) yüksek tutmam pek bir şeyi değiştirmiyor (güzel bir resim çekebilmek için çok daha uzun bir süre boyunca objektifi uzun tutmanın gerekliliği dışında), iki resim de neredeyse aynı aperture'da çekildi.

Uzun pozlama gerektiren resimlerle ilgili en nefret ettiğim şey, birilerinin dikkatini çekmenizin uzun sürmemesi. Özellikle Altınpark gibi bir yerdeyken illaki birileri gelip sizin ne yaptığınızı merak ettiğini söylüyor. Tamam, ilgiyi seven bir insanım, ama bu kadar da değil! İnsanlar genellikle iyi niyetle, kibar bir şekilde yaklaşsa da bu rahatsız olmamı engellemiyor.



Bu üsttekiler de, o ilk fotoğraflardaki kompozisyonların farklı çekimleri. Birisi 720 nm'lik filtremle, öbürü de filtresiz çekim.



 

Düşnehri (Reverie River) oyunlarına devam ediyorum. Bilmeyenler için kısaca özet geçeyim; birbirinden bağımsız, iki tane kısa korku-macera oyunu üzerinde çalışıyorum. Birisi "Crimm's Son", öbürü "Self". Self'le ilgili ekran görüntüsü koymak istemiyorum henüz; ama üstteki resim, Crimm's Son'dan bir ekran görüntüsü. İkisinin de görsellerini machinima tekniğiyle yapıyorum; yani var olan bir oyun üzerinde hayvan gibi modifikasyon yaparak bir yönetmen gibi, istediğim sahnelere ait ekran görüntüsü, video yakalayarak. Lost in the Nightmare'da Half-Life 1'i kullandığım gibi. Self için Half-Life 2'yi, Crimm's Son için de The Sims 3'ü baz alıyorum.

Eskiden "Bu oyun serisi mükemmel olmalı!" gibi bir kaygım vardı. Sanki beni ben yapan şey, hobilerimde ne kadar başarılı olduğum. Ama bu kaygımı kaybetmeye başladım. Ahmet Kamil Keleş'i Ahmet Kamil Keleş yapan şey iki tane kıytırık macera oyunundan fazlası olmalı. Ve bu iyi bir şey. Odaklandığım şey, iyi ya da kötü bir şekilde bu ürünlerin ortaya çıkabilmesi.


Lost in the Nightmare'ı (daha doğrusu, bir korku oyunu yapımcısı olarak beni) kimsenin hatırlamaması beni üzüyor. Eskiden şuna inanırdım: Eğer çok daha iyi, daha kaliteli bir oyun yaparsam yeniden hatırlanacağım/z. Yıllarca aklımda mükemmel fikirlerin şekillenmesini bekledim (tamam, elimde Self ve Crimm's Son var, ama ikisinin de çok eksik yanı var, tasarım bakımından). Self için yarattığım ilk odanın çekimlerini tekrar tekrar yaptım, mükemmeliyet peşinde. Ama şunu gördüm: Ben mükemmellik peşinde koştukça, oyunlar da bitmekten uzaklaşıyor. Yıllarca fikir kıvılcımları bekliyorum. Ve sonra Google'a "Lost in the Nightmare" yazınca çıkan şey, Resident Evil: Lost in Nightmares oluveriyor.

Slender Man ve Anna gibi, prodüksiyon bakımından çok kaliteli olmayan, ama yine de insanları korkudan altlarına sıçtıran oyunları gördükçe bu fikrim de pekişmeye başladı. Ben bu oyunlarımı mutlaka çıkartacağım, çünkü insanları hiç olmazsa ürkütebileceklerini biliyorum, aşırı basit bulmacalara ve oyun mekaniklerine sahip olsalar da.

Hoş, bu konu hakkında eskisi kadar endişeli değilim. Ücretsiz korku oyunu çıkarma konusunda hüsrana uğrasam bile bu benim hayatımı çok değiştirmeyecek, çünkü hayatım buna bağlı değil. Eğer bu işten para kazanıyor olsaydım (hele de tek gelir kaynağım bu iş olsaydı!) kafayı yerdim belki. Mühendislik mesleğini sanatçılığa tercih etmemin mantıklı nedenlerinden birisi buydu.





Bu üsttekiler Crimm's Son için ekran görüntüsü değil. The Sims 3'ü kendi oyunum için kurcalarken arada çektiğim enstantaneler.




Doğumgünümde Aslı'dan aldığım bu güzide hediyeyi burada paylaşmam için de güzel bir fırsat oldu bu iç dökme postu. Resimdeki göz, gerçekten de benim gözüm referans alınarak çizilmiş. Gözümden bahsetmişken, ....





Makro mercek alıp da bu resmi (resimleri, daha doğrusu) çekmeseydim bir şeyler eksik kalacaktı. Resmi ilginç kılan şey, göz bebeğimin ortasında kameramın ve evin perdesinin görünmesi. Makineyi burada pencereye dayadım, çünkü güneşli bir havada evin penceresinden müthiş bir ışık geliyor.


Göz demişken; böyle tek, üzüm tanesi gibi kendisini belli eden gözler bana neyi anımsatıyor, biliyor musunuz? Evet, tahmin edebiliyorsunuzdur. İsterseniz benim için "şakirt", "Ahahaha, salak salak şeylere inanıyor! Kendini hayal dünyasına fazla kaptırmış!" deyin, ama özellikle pop kliplerinde bu "tek göz" veya keçi sembollerini görmemizin sadece tesadüf olmadığına inanıyorum (aslında dünyanın ilk agnostik şakirti olarak tarihe geçebilirim belki, eğer şakirt olduğum iddia edilirse). Sadece bu gördüklerimizinden (bize gösterilenlerden), dünyayı kimlerin yönettiğine dair kesin bir sonuca varmak çok mantıklı değil, doğru. Belki de her gördüğümüzün arkasında öyle bir şey var ki, bizim başka bir noktaya odaklanmamız için ortaya kendilerinden çok farklı, daha ilgi çekici bir olta atıyorlar. Belki de "Şimdi bizim sanatçıya kliplerinde tek gözünü kapattıralım, millet tartışıp dursun!" diyorlar, kendileri satanist matanist olmadıkları için. İşin aslını hayatım boyunca asla kesin bir şekilde bileceğimi sanmıyorum. Benim inandığım şey, bu gördüklerimizin tesadüf eseri ortaya çıkmadığı. Bad Romance'in klibinin tesadüfen "sanatçıların Monarch beyin programına tutulması" geyiğiyle paralellik taşımadığı. Konuyla ilgili daha fazla konuşmayacağım, dünya kadar kaynak var bu teoriyle ilgili.



Her neyse, yazıyı sonlandırayım. Sonra başka bir yazıda söyleyeceklerime devam ederim.

Thursday, August 30, 2012

Ağustos fotoğrafları

Bu ay çektiğim ilginç fotoğrafları ve teknikleri sizlerle paylaşacağım.

Kendimi tekrar ediyorum, farkındayım. Önceki kompozisyonlarımın biraz daha iyi, tekrar çekilmiş versiyonları. Ama ne yapayım, bu figürleri gerçekten seviyorum!





Bu ay, makro ve genişaçı mercekleri aldım. Bu aparatlar birer objektif değil de, objektifin önüne takılan mercekler. Birlikte satılıyorlar, ürünün ismi "FOTGA Dijital High Definition 0.45X Super Wide Angle Lens with Macro". Memnun kaldım.



Aldığım diğer ürün de 720 nanometrelik kızılaltı filtreydi. Yukarıdaki, "Güneş" isimli yıldız. Teleobjektif sahibi olmadığım için net, çok büyük bir resmini çekemedim (sadece bu iş için de teleobjektif almayacağım. alsam bile o kadar uzaktaki şey ne kadar net çekilir?), ama bu da fena olmadı.Güneşli bir havada, çok düşük bir enstantane süresiyle çektim. Gökyüzünün maviliğinin tamamen siyaha dönüşmesi, resme astronomik bir etki verdi (arkada yıldızlar da görülebilse, nefis olurdu).



Bu filtreyi çok sevmedim. Veya şöyle diyeyim: "Henüz dişe dokunur bir resim çekmeyi beceremedim." Görülebilir spektrumun kızıl sınırı 750 nm'dir; 720 nm'lik filtrem, görülebilir o 30 nm'lik aralığı da içerecek şekilde ışığın geçmesine izin veriyor. Filtreyi beğenmememin nedeni, filtreyle çekilmiş fotoğraflarda, nesneler arasında gerçeküstü bir tonlama farkını yakalayamamış olmam. Bitkilerin bembeyaz, gökyüzünün de kapkara görünmesini dilemiştim. Hoş, elin adamı bu filtreyle manyak güzel resim çekebiliyor, demek benim henüz denemediğim bir şey var. Neutral density filtresini de deneyeceğim, infraredle birlikte.

Bu arada, şu yukarıdaki üç fotoğrafı elde etmek için RAW dosyasının beyazlık ayarıyla oynamam gerekti. Normalde çektiğiniz resim, sağdaki gibi kırmızı-turuncu görünüyor. Temperature'ı en düşüğe getirip tint değerleriyle oynadığımda fotoğrafları daha renkli hale getirebildim.

Ve Photoshop'ta Adjustments/Levels'tan otomatik ayarları seçmek de harika sonuçlar getirebiliyor.




Bu köpeciği çekmek için çok ilginç bir teknik uygulamadım. Gittiğim "Son Pazar: Kahramanların Ziyafeti" etkinliğinde rastladığım bir köpek. RAW'ın vibrance'ini yüksek tuttum.

Saturday, August 4, 2012

Sprint: Challenge HD çıktı!




Lamagama olarak, ilk iOS oyunumuz Sprint: Challenge'ı piyasaya çıkardık! Aslında bu çok yeni bir haber değil, oyunun ilk versiyonu iTunes'ta yerini bir ay önce almıştı. Bu duyuruyu yapmak için oyunun HD sürümünün de (yani çözünürlüğü özellikle iPad için derlenmiş olanın) yayınlanmasını bekledim.







Oyunu ücretsiz olarak aşağıdaki iTunes bağlantılarından edinebilirsiniz.
iPhone/iPod versiyonu
iPad versiyonu (HD)

Oyundan bahsedeyim kısaca: Siz bir samuraysınız, sürekli koşuyorsunuz. Önünüze engeller çıkıyor, zıplayarak veya eğilerek onları atlatıyorsunuz. Arada bir üzerinize bomba geliyor, bombayı parmağınızla keserek etkisiz hale getiriyorsunuz (veya üzerinden atlıyorsunuz). Toplayabileceğiniz altınlar ve power-uplar var. Biriktirdiğiniz altınlarla sonra upgradeler satın alabiliyorsunuz, bu upgradeler de oyun boyunca karşınıza bazı power-upların çıkma ihtimalini yükseltiyor.

Kontrolleri çok basit. Ekranın solunda ve sağında iki tane tuş var, bu tuşlarla eğiliyor veya zıplıyorsunuz. Önünüze bomba çıktığında da bombayı parmağınızla kesiyorsunuz.


Otobüste motobüste oynamaktan keyif aldığım basit bir casual oyun oldu, aldığımız incelemeler de genellikle olumlu yönde. Unity motoru kullanıldı.

"Bizim oyunumuz" desem de, tüm Lamagama ekibinin görev aldığı geniş kapsamlı bir proje değildi. Mesela benim ismim credits'te yer almaz; çünkü tek yaptığım şey, altınların "SPRINT", "--->" gibi dizilimlerde gelmesi için hazırlanmış olan resim dosyalarını "0" ve "1"'lik matrislere çevrilmesini sağlayacak bir MatLab fonksiyonu yazmaktı (sonra bu "0" ve "1"leri ASCII olarak text formatında kaydediliyordu, bu sayede Güçhan'ın Unity koduna kolay bir şekilde hardcode edilebiliyordu).

Saturday, July 14, 2012

Bodrum 2012

Geçen hafta Bodrum'daki tatilimden çektiğim fotoğraflar.


Askerî kamptaki bu denizkızı heykelinin fotoğrafını o kadar çok çektim ki, heykel artık canlanıp isyan edecek. 2009'daki bu çekimimi aşacak kadar güzel bir kare yakalayamamıştım bu 3 yıl boyunca, sanırım bu üstteki kareyle bunu başardım.











Tuesday, June 19, 2012

Güven Park'ta dinazor paniği! (Fotoğraflar)

Ankara'da arada bir güzel şeyler oluyor. Bunlardan birisi, Shopping Fest kapsamında Güven Park'a kurulmuş olan dinazor maketleriydi. Şahsen ben bir dino-sever olarak bu maketleri çok beğendim, böyle bir atraksiyonu düşünmüş olmalarına sevindim. Tahmin edebileceğiniz gibi, bu blog yazısında bu maketlerin çektiğim fotoğraflarını göreceksiniz.






Eoraptor'müş bu yukarıdaki vatandaş.



İlk günlerde bu maketler hareketli ve sesliydi. Şöyle bir video çekme fırsatım olmuştu, maketler ilk geldiği gün. O gün yanımda sadece telefonum olduğu için video biraz dandik, ama idare edin işte.

Aslında daha fazla maket var Güven Park'ta, ama diğerleriyle henüz şık bir ışıklandırmanın altındayken karşılaşamadım. Eğer onların da güzel fotoğraflarını çekersem onlar için ikinci bir blog yazısı hazırlarım.