14 Mart 2013 Perşembe

Biyoinformatik Projelerinde Programlama - 3 (Arayüz Geliştirme)

Bir konu hakkında yazı dizisi oluşturmanın en gıcık tarafı, aklınızın sürekli oraya takılı kalması bence. Aklımdaki diğer yazıları bir türlü yazamıyorum; ne zaman yazmaya niyetlensem, bu yazı dizisine kayıyor zihnim. Neyse, sonlara geliyorum :)

Arayüz Geliştirme

Biyoinformatik projelerinde büyük verilerle karşı karşıya kaldığımızda problemleri genel olarak iki kategoriye ayırabiliriz demiştik: metin işleme ve hesaplama. Problemi çözmek kadar önemli bir diğer konu ise arayüz geliştirme. Yani, kullanıcının (küçük projelerde bu kişi programı geliştiren kişidir çoğu zaman) verileri kolayca girebileceği, veriye yapılan işlemleri basamaklar halinde görebileceği veya bu konuda bir geribildirim alabileceği, ve son olarak da işlenmiş verileri kullanılabilir halde bir dosya olarak bilgisayarına kaydedebileceği veya kopyalayıp yapıştırabileceği etkileşimli bir yazılımdan bahsediyoruz aslında. 

Arayüz denince insanların aklına genelde grafik arayüzler (GUI) geliyor, yani fareyle bir yerlere tıklayabileceğiniz ve yukarıda bahsettiğim adımları bir ekran üzerinde geniş geniş gösteren arayüzler. Temel motivasyon, kullanıcının programı çalıştırmak için bilmesi gerekenleri bir arada sunup, bilmesi gerekmeyen şeyleri ise izole etmek. 

Cytoscape
Her ne kadar biyoinformatik projelerini metin işleme ve hesaplama olarak iki kategoriye ayırmışsam da, aslında 2,5 kategori var diyebilirim; bu buçuklu kategori, ağ [network] analizi. Yani, herhangi iki molekül veya durumun birbirleriyle olan etkileşimini [interaction] ortaya koymak ve görüntülemekten bahsediyorum. Biliyorsunuz bu etkileşim olayına takmış durumdayım, bu nedenle daha detaylı olarak ayrı bir yazıda düşüncelerimi paylaşmayı planlıyorum.

Etkileşim verisinin (örneğin, protein-protein etkileşimi) görüntülenmesi teoride ve pratikte biraz karmaşık ve bir çok farklı yaklaşımı içeriyor. Bu nedenle, bir ağı görüntülemek istediğinizde işin görüntüleme algoritmasıyla uğraşmak tüm odağınızı kaybetmenize ve de ortaya başarısız bir arayüz çıkmasına neden olabilir. Neyse ki Cytoscape var. Etkileşim verilerinizi Cytoscape ile 3 farklı seviyede  görüntüleyebilir ve kullanıcıların istifadesine sunabilirsiniz. İlki, Cytoscape'in görüntüleme algoritmalarından yararlanacak bir eklenti [plugin] geliştirmek; JAVA'da kod yazmalısınız bunun için. İkincisi, mevcut görsel eklentileri kullanarak yumru [node] ve bağlantıları [edge] şekillendirmek: farklı kategorileri farklı renkler ve büyüklüklerle göstermek, ve hatta yumruları grafiklerle çeşitlendirmek. Üçüncü seviye ise, bu yaptıklarınızı bir web sayfası üzerinden paylaşabilmek. Mutlaka bir göz atın ve zihninizin içindekiler kısmında yer edinsin.


Gelelim programlama dillerine. Bir çok alternatif olmasına rağmen, kendi deneyimlerim doğrultusunda en faydalı ve kullanışlı olduğunu düşündüğüm iki [aslında 2.5:)] programlama diliyle bu listeyi sınırlandıracağım.

Matlab
Matlab'ın sayısal problemlerin çözümünde çok iyi bir seçenek olduğundan önceki yazımda bahsetmiştim. Bence bir diğer mükemmel özelliği, arayüz geliştirme olayını gayet basitleştirmiş olması. JAVA'da swing vb. kütüphanelerle arayüz geliştirenler, işin doğası gereği basit olması gereken birçok şeyin ne kadar da bunaltıcı olduğuyla sık sık karşılaşmıştır; özellikle öğrenme eğrisi çok diktir. Fakat Matlab'da bu durumu çok kolaylaştırmışlar. Örneğin, bir grafikte bir genin farklı mikrodizi çalışmalarındaki gen seviyesini göstermek istiyorsunuz; ancak bu genin ne olacağını da gerçek zamanlı olarak kullanıcının seçimine bırakmayı hedefliyorsunuz. En fazla yarım saat içerisinde böyle bir arayüz geliştirebilirsiniz Matlab GUIDE ile. Tek sıkıntı, bu arayüzü bir başkası ile paylaşamıyor olmanız (karşı tarafta Matlab'ın olması lazım). Bir laboratuvar veya kurum içi kullanılacak yazılımlar için Matlab'ı kullanmak pratik bir çözüm olacaktır. 

R maalesef etkileşimli arayüzler konusunda pek de başarılı değil, yine de web tabanlı arayüzlerin geliştirilebilmesi için bir paket üzerinde çalışılıyor diye biliyorum.

JavaScript (ve HTML)
Temel motivasyonumuz şu: geliştirdiğimiz yazılımı teoride tüm dünyayla, pratikte ise web tarayıcısı kullanabilen herhangi biriyle paylaşmak istiyoruz. Yani, geliştirdiğim analiz yazılımını bir arkadaşım kendi evindeki bilgisayardan da kullanabilsin. Web teknolojileri bu yüzden var, ve iyi ki var :) Böylece, örneğin Perl'de geliştirdiğiniz bir yazılımı bir web sunucusu üzerinden başkalarının da kullanımına sunabilirsiniz. Ya da, R'da geliştirdiğiniz ve  kullanıcının tercihlerine göre farklı şekiller oluşturabilen bir yazılıma web tabanlı bir arayüz hazırlayabilirsiniz.

Bunun bir adım ötesi ise JavaScript. Farkını şu şekilde özetlemeye çalışayım; web tabanlı araçlar, arkaplanda çalışan kodları sunucuda çalıştırır. Yani siz bir gazetenin web sitesine girip de bir bağlantıya tıkladığınızda gelen sayfa, çook uzaklardan sizin bilgisayarınıza yüklenir. Ancak JavaScript'le daha farklı bir paradigma gündeme gelmiştir; bazı tarayıcı işlemlerini kullanıcının bilgisayar kaynaklarını kullanarak yapmak. Yani, siz bir bağlantının üzerine farenizle geldiğinizde çeşitli animasyonlar başlıyor veya bazı kutular renk değiştiriyorsa, işte bunlar JavaScript'le yapılmıştır. Son teknolojiler bunu bir adım daha ileri götürerek, neredeyse her şeyi kullanıcı tarafında yapmayı mümkün kılmıştır; bu da çok hızlı etkileşim anlamına gelir. Böylece, sunucuyla olan veri trafiğini ortadan büyük ölçüde kaldırarak tipik bir masaüstü uygulamasından farksız ancak tamamen web tarayıcısı tabanlı  bir arayüz geliştirmiş oluyorsunuz. En güzeli bir örnekle göstermek.


Sözün özü:
Geliştirdiğiniz yazılımın kullanıcıyla buluşması anlamına gelen arayüz için kullanabileceğiniz birçok seçeneğin arasından Matlab ve JavaScript kullanım kolaylığı ve pratiklikleri ile ön plana çıkıyor. Etkileşim verileriyle çalışırken ise Cytoscape isabetli bir tercih olacaktır.



Proje:
JavaScript'in nasıl bir dil olduğunu görmek üzere, Codecademy sitesini ziyaret edin ve birkaç dersi tamamlayın. İngilizce bilgisi gerektiriyor ancak kastırmıyor [daha uygun bir kelime bulamadım:)].

Meraklısına:
Cytoscape'le benzer yaklaşıma sahip bir proje yürütülüyor Bilkent Üniversitesi'nde, adı Patika. Ülkemizde kıymeti pek bilinmiyor ancak uluslararası bir üne sahip; BIND'ın geliştiricisi Gary Bader ile tanışmama ve beraber çalışmama vesile olmuştu.