Son iki-üç ay neredeyse çalışarak geçti diyebilirim. Bu zaman zarfında arada bulduğum boş zamanları uyuyarak değerlendirdim. Durum bu kadar vahim olmasada buna yakın geçti. Bu kadar yoğun bir çalışma temposunda çalışmamızın en önemli nedeni yeni bir projeye başlamamızdı. Şimdiye kadarda çok fazla dillendirmeden olabildiğince iş üretmeye çalışarak geçirdik zamanımızı.
Bu süre zarfında Sinan Kaplan, Nurettin Özdoğan ve ben yeni bir girişimin temellerini atmakla meşguldük. Kariyergenc.com adında yeni bir oluşuma başladık ve bununla ilgili hem çevrimiçi tarafta hemde sahada çeşitli girişimlerde ve çalışmalarda bulunduk ve bulunuyoruz. Bu proje kapsamında çok güzel insanlarla ve gençlerle birlikte hareket ediyoruz. Zamanı geldiğinde burdan hepsine tek tek teşekkürlerimi iletiyor olacağım.
Hayatta bu kadar heyecanlandığım nadir anlar olmuştur. Bu projeye yürekten inanarak yola çıktık ve inancımızı arttırarak devam ediyoruz. Biliyorumki çok güzel günler bizleri bekliyor.
İçimdeki heyecanı birazcık olsun dizginlemek için bu paylaşımda bulunmak istedim.
Çok nokta girişini algılayan cihazlar günlük hayatımızda yavaştan da olsa belirmeye başladı. Apple; iphone, ipod touch, mac book air gibi cihazlardaki teknolojisi ile bu alanda öncülüğü çekiyor gibi görünsede bir çok şirketin geliştirdiği ve geliştirmekte olduğu ürünler bulunmaktadır. Bakir bir alan olarakta kabul edilebilir. Kullanıcı hareketlerinin standartlaştırılmadığı, zamanla kullanıcı-bilgisayar etkileşiminin netleşeceği bir ortam.
Mitsubishi araştırma labaratuvarları (MERL) iki binli yılların başından itibaren bu alanda araştırma ve geliştirme faaliyetlerine başlamış bir şirket. 2001 yılınında DiamondTouch adını verdikleri çok nokta girişini algılayan ilk cihazlarını geliştirmişler ve ürettikleri 100 kadar cihazı çeşitli kurumlara ve ünivesitelere göndermişler. 2006 yılından itibaren ise ticari olarak üretilmeye başlanmış. Bu senenin başında ise “Circle Twelve” şirketini kurarak bu cihazın ticari getirisine olan inançlarını bir kez daha göstermişlerdir.
32” ve 42” olmak üzere iki farklı ekran boyutlu modeli bulunkatadır. Cihazın dünyadaki çok nokta girişi üzerine yoğunlaşmış bir çok arge projesinde kullanılmasının nedenleri arasında aşağıdaki maddeler gösterilebilir.
Çoklu kullanıcıları algılyabilmesi ve her hareketin kime ait olduğunu bilmesi
Geniş bir yelpazede dokunma hareketlerini giriş verisi olarak alabilmesi
Sadece el hareketlerini değil, önceden tanımlanmış objeleride kullanıcı veri girişi olarak algılayabilmesi
Cihaz hem linux hem de windows işletim sistemlerini desteklemekte ve her iki işletim sistemi içinde yazılım sürücüleri bulunmaktadır. Belkide cihazı bu kadar popüler kılan en önemli neden, farklı dilleri destekleyen sağlam bir yazılım kütüphanesi barındırmasıdır. Yazılım geliştirme kiti: C, C++, Java, C#, Actionscript dillerini desteklemektedir. Bu kütüphaneyi kullanarak kendinize özgü el hareketlerinden oluşan bir arayüz tasarlayabilirsiniz.
DiamondTouch tanıtım ve teknik dökümanınına buraya tıklayarak ulaşabilirsiniz.
Cihazın kullanılabileceği alanları gösteren video çalışması.
Bilgisayar Mühendisliğini bitirmiş biri olarak sanat fakültesine bağlı interaktif medya ve tasarım bölümünde yüksek lisans yapmak açıkcası benim için çok farklı deneyimler edinmemi sağladı. İnteraktiviteye karşı hobi düzeyinde olan yaklaşımımın biraz daha akademik bir hal almasını sağladı. Bölümde aldığım derslerden biride “Tipografik Animasyon” dersiydi. Dersin iki temel hedefi vardı. Birinci amaç piksel ve vektörel tabanlı animasyonların hangi uygulamalarla ve hangi tekniklerle yapılabileceğini öğretmekti. Flash üzerinde daha öncede ufak tefek animasyonlar yapmış biri olarak bu tarafı pek cezbetmemişti. Diğer amacı ise bir hikaye etrafında şekillenen farklı görsel efektlerin kullanıldığı yaratıcı işler çıkarmaktı. Yazılı bir metni yada düşünceyi görsel bir harekete çevirmek düşüncesiyle oldukça heyecanlanmıştım. Derste yaptığım çalışmaları paylaşmak istedim.
————————————-
Birinci çalışmada amaç seçilen bir şiirin animasyonunu hazırlamaktı. Turgut Uyar’ın “Acıyor” adlı şiirini seçmiştim. Mutsuzluktan söz etmek istiyorum
Dikey ve yatay mutsuzluktan
Mükemmel mutsuzluğundan insansoyunun
sevgim acıyor
————————————-
İkinci çalışmamda ise amaç bir şarkının animasyonunu yapmaktı. Doktor Zoil’ in “Spooky lyrics” şarkısını seçmiştim. In the cool of the evening
When everything is getting kind of groovy
You call me up and ask me
Would I like to go with you and see a movie?
First I say no, I’ve got some plans for tonight
And then I stop and say all right
Love is kind of crazy with a spooky little boy like you
————————————-
Birinci animasyon üzerine çok fazla eleştiri almamıştım. Hatta bu kadar sade ve yalın olması çok beğenilmişti. Beğenilmesinin en önemli nedeni ise hikaye ile çok fazla bağdaşıyor olmasıydı. Siyah bir alanda beliren ufacık bir beyaz daire aslında mutsuzluğun içinde kıvranan bir insanı temsil ediyordu. Daha sonra bu insanın mükemmel mutluluğu ararkenki çabaları, farklı yönlere doğru şuursuz hareketleri beliriyor animasyonda. Mükemmelliği ararken aslında mükemmel olanın kendisi olduğunu farkediyorki burdaki insanı daire ile bağdaştırmamın nedenide, daire her zaman mükemmel bir cisimdir. Yaşadığımız evrende asla varolamayacak kadar mükemmeldir. Animasyonun sonunda ise çekilen acıyı anlatmak istediğim, daireden çıkan karanlık göz yaşları bulunmakta.
Fakat 2. animasyon üzerine çok fazla tepki ve öneri gelmişti. Bu tepkilerin en başında animasyonda kullanılan efektin tek düze olması geliyordu. Animasyonun ilk karesinden son karesine kadar tek bir çeşit hareket vardı. Bir diğer eleştiri ise animasyonda izleyicileri heyecanlandıracak, düşündürecek yada etkileyecek yaratıcı geçişlerin ve karelerin olmayışıydı.
Aslında birinci animasyon için bir saat, ikinci animasyon için ise nerdeyse tam bir gün uğraşmıştım. Fikrin uygulamadan önce geldiğini kavradığım anlardan birine daha tanıklık etmiş oldum.
Bir yazılım geliştirme ortamı hayal edin ve size sadece 25 satırlık bir alan veriyor. Bir satıra birden fazla satırlık kod yazmanızıda engelliyor. Birde bu kadar kısıtın yanında hiç bir kütüphane kullanma hakkınızda yok. Böyle bir dünyada oyun yada uygulama geliştirmek. Çok gerçekçi gelmiyor kulağa.
Aslında 25lines.com sitesinde actionscript kullanarak 25 satırda neler yapılabileceğine dair bir yarışma düzenlenmekte. Yarışmanın kuralları oldukça basit. bir kaç tanesini belirtmekte fayda var
Noktalı virgül yada süslü parentez bir satırın kullanıldığı anlamına gelmektedir.
Tek bir kütüphane bile import edemessiniz.
Hiç bir görsel obje kullanamaz yada dışardan yükleyemessiniz. Tüm uygulama kodlardan oluşmalı. Görselliğide bu kod satırlarını kullanarak ekrana çizmelisiniz.
Tek satır döngüler yaratabilirsiniz şayet tek bir ifade içeriyorsa.
Bu kurallardan sonra oluşturacağınız kod satırlarının bir flash dosyasının ilk karesine yerleştirilip derlendiğinde çalışması beklenmekte. Ayrıca yarışmaya katılacaklar için bir şablon da belirlemişler.
Kasım-Aralık yarışmasının finalistleri ve kazananları açıklanmış. 12 adet proje finale kalmış ve oylamaya sunulmuş. Finale kalan projelerden seçtiğim 5 tanesini aşağıdaki ekran görüntülerine tıklayarak ulaşabilirsiniz. Tüm listeye ise burdan ulaşabilirsiniz.
Birinci olan proje gerçekten inanılmaz. 25 satır kodla yapılabilmesi imkansız gibi durmakta en sağlam yazılımcıların bile kafasını uzun süre kurcalayabilecek derecede güzel bir iş çıkarmış Marius Heil. 25 satırda bir platform oyunu yazmış. Oyunun kodlarına buradan ulaşabilirsiniz.
Bir sonraki yarışma ise 1 Ocak 2009 da başlıyacak ve 2 haftalık bir başvuru sürecinden sonra değerlendirme ve oylama aşamalarına geçilecek.
Yaratıcı ve yenilikçi işlerin / projelerin hep kısıtlı imkanlarla ve zor ortamlarda ortaya çıktığına inanan birisi olarak bu tarz yarışmaların herzaman desteklenmesinden yanayım.
Actionscript 3 dilinde actionscript 1 ve 2 de alışık olduğumuz bir çok fonskiyonun adı ve kullanış biçimi değiştirilmiş ve çok daha kullanışlı hale gelmiştir. Yeni gelen sınıflardan biride flash.net kütüphanesinin altında bulunan URLLoader sınıfıdır. As2 de loadVariables fonksiyonunu kullanarak dinamik sayfalardan verileri yüklüyorduk. Artık bu fonksiyonun yerini URLLoader sınıfı almıştır. Yazmış olduğum NetLoader sınıfı URLLoader sınıfından türemektedir ve verileri yüklerken kod tekrarını azaltmaktadır.
//NetLoader.as sınıfıpackage myProject {importflash.net.URLLoader;importflash.net.URLRequest;importflash.events.*;publicclass NetLoader extendsURLLoader{public static var ON_LOADER_SUCCESS:String = "on_loader_success";public static var ON_LOADER_ERROR:String = "on_loader_error";privatevar successEvent:Event;privatevar errorEvent:Event;publicfunction NetLoader(){addEventListener(Event.COMPLETE, completeHandler);addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);}publicoverridefunctionload(request:URLRequest):void{super.load(request);}publicoverridefunctionclose():void{removeEventListener(Event.COMPLETE, completeHandler);removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);}privatefunction completeHandler(event:Event):void{
successEvent = newEvent(ON_LOADER_SUCCESS,true);dispatchEvent(successEvent);}privatefunction securityErrorHandler(event:SecurityErrorEvent):void{
errorEvent = newEvent(ON_LOADER_ERROR,true);dispatchEvent(errorEvent);}privatefunction httpStatusHandler(event:HTTPStatusEvent):void{if(event.status == 404){
errorEvent = newEvent(ON_LOADER_ERROR,true);dispatchEvent(errorEvent);}}privatefunction ioErrorHandler(event:IOErrorEvent):void{
errorEvent = newEvent(ON_LOADER_ERROR,true);dispatchEvent(errorEvent);}}}//Bu sınıfı şu şekilde kullanabilirsinizvar myLoader:NetLoader = new NetLoader();
myLoader.addEventListener(NetLoader.ON_LOADER_SUCCESS, dataLoaded);
myLoader.addEventListener(NetLoader.ON_LOADER_ERROR, dataLoadedError);privatefunction dataLoaded(evtObj:Event):void{trace("Yükleme başarıyla tamamlandı");}privatefunction dataLoadedError(evtObj:Event):void{trace("Yükleme sırasında hata oluştu");}
//NetLoader.as sınıfı
package myProject {
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.*;
public class NetLoader extends URLLoader {
public static var ON_LOADER_SUCCESS:String = "on_loader_success";
public static var ON_LOADER_ERROR:String = "on_loader_error";
private var successEvent:Event;
private var errorEvent:Event;
public function NetLoader() {
addEventListener(Event.COMPLETE, completeHandler);
addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
public override function load(request:URLRequest):void {
super.load(request);
}
public override function close():void {
removeEventListener(Event.COMPLETE, completeHandler);
removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
private function completeHandler(event:Event):void {
successEvent = new Event(ON_LOADER_SUCCESS, true);
dispatchEvent(successEvent);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
errorEvent = new Event(ON_LOADER_ERROR, true);
dispatchEvent(errorEvent);
}
private function httpStatusHandler(event:HTTPStatusEvent):void {
if(event.status == 404) {
errorEvent = new Event(ON_LOADER_ERROR, true);
dispatchEvent(errorEvent);
}
}
private function ioErrorHandler(event:IOErrorEvent):void {
errorEvent = new Event(ON_LOADER_ERROR, true);
dispatchEvent(errorEvent);
}
}
}
//Bu sınıfı şu şekilde kullanabilirsiniz
var myLoader:NetLoader = new NetLoader();
myLoader.addEventListener(NetLoader.ON_LOADER_SUCCESS, dataLoaded);
myLoader.addEventListener(NetLoader.ON_LOADER_ERROR, dataLoadedError);
private function dataLoaded(evtObj:Event):void {
trace("Yükleme başarıyla tamamlandı");
}
private function dataLoadedError(evtObj:Event):void {
trace("Yükleme sırasında hata oluştu");
}