1 - Açık Cezeri Kütüphanesi çalışma mantığı nedir ne işe yarar ve kimler OCL'yi kullanmalıdır?

   Open Cezeri Library (OCL), Java programlama dili ile hazırlanmış, açık erişimli matris, veri görselleştirme, sinyal ve görüntü işleme, makine öğrenmesi ve derin öğrenme alt konularını ve modüllerini kapsayan başta öğrenciler, akademisyenler, bilim adamları ve araştırmacılar için geliştirilen bir yazılım kütüphanesidir. 

 Asıl ortaya çıkış hikayesi, El-Cezeri Sibernetik ve Robotik Laboratuvarında geliştirilen projelerde kullanılmak üzere ortak bir yazılım çatısı ve tekrar kullanılabilir (reusable) sınıf ve metodlar'dan meydana gelen alan spesifik dil (Domain Specific Language DSL) geliştirmek olarak özetlenebilir. OCL tasarım deseni olarak, FactoryMethod, Facade, Singleton, Observer, ve Fluent Interface veya method chain kalıplarını kullanmıştır. 

   Java programlama dilinde vektörizasyon işlemleri Matlab, R veya Python dillerine göre belirgin ölçüde zor ve zahmetlidir. Özellikle matris ve vektör tabanlı aritmetiğin yoğun olarak kullanıldığı makine öğrenmesi, sinyal ve görüntü işleme, bilgisayarlı görü uygulamaları ve grafiksel işlemlerde  Matlab, R, Python ve benzeri dillerde geliştirilen uygulamalarda matris ve vektörel işlemler harici for döngülerine ihtiyaç duyulmaksızın dilin kendi yorumlama özelliğini kullandığından daha az satırla çözülmeye çalışılır. Örnek vermek gerekirse, Matlab'de sin() fonksiyonu parametre olarak tek bir değişkeni aldığı gibi, tek boyutlu veya n boyutlu bir matrisi de alabilir mahiyettedir. Java'da Math sınıfında statik olarak tanımlı metodlar ise sadece tek bir değişken üzerinde işlem yapılacak şekilde tasarlanmıştır. Bir vektör (tek boyutlu dizi) veya bir matris (iki boyutlu dizi) üzerinde işlem yapabilmesi için sırasıyla tek seviyeli ve iç içe çalışan ikili for (nested for) döngüsü yapılarına ihtiyaç duyulur. Birçok işlemde tekrarlayan for döngüleri yazmak geliştirici açısından kodun denetiminin azalması, kod karmaşıklığına sebebiyet vermesi ve hatalı kodlama riskini netice vereceği için tasvib edilmez. OCL'yi geliştirirken aynen Matlab'da olduğu gibi n-boyutlu dizilerle çalışmaya imkan verebilecek bir framework geliştirmeye çalıştık. Şu an için OCL en fazla 2 boyutlu dizilerle çalışabilecek şekilde tasarlandı. Sadece bazı durumlar için örneğin renkli bir görüntünün piksel değerlerine ulaşmak istediğinizde 3 boyutlu dizi üretebilmektedir.  

   OCL'yi tasarlarken geliştiricinin sadece probleme odaklanmasını ve belirli bir mantıksal akış çerçevesinde kodlama sistematiğini bölmeden metodlar arasına nokta notasyonu ile sonuca ulaşması hedeflenmiştir. Bunun neticesinde geliştiricinin farklı sınıf veya metodları ayrı değişkenlere atamasına ve programın bütünlüğünü bozmasına gerek kalmamıştır. Bu tarz yaklaşımın (Fluent Interface veya Method Chaining) diğer bir avantajı da geliştiricinin noktayı bastıktan sonra açılan popup menüden işi ile ilgili anahtar kelimeleri (keywords) yazarak ilgili metoda hızlı ve etkin ulaşabilme şansıdır. Bunun için birbiri ile alakalı metodlar semantik olarak öbeklenmiştir. Mesela, görüntü işleme ile ilgili metodların tümü aynen Matlab'de olduğu gibi im ön eki ile başlarlar (imread, imhist, imshow gibi). 

   Aslında OCL'yi tasarlarken iki geliştirici kitleyi (Matlab ve JAVA yazılım geliştiricileri) göz önüne alarak aynı işlemi yapacak iki farklı isimde metod tanımlaması yazmayı uygun gördük. Örneğin OCL'yi kullanacak kişi Matlab platformundan geliyorsa aşina olduğu fonksiyon isimlerini aynen muhafaza etmekle beraber, JAVA geliştiricilerinin sıklıkla kullandığı fiil önekli metod isimlendirmeleri (imread'in java karşılığı readImage gibi) de kullanıldı. Bu bağlamda, geliştiricinin ismini unuttuğu bir metoda daha hızlı ve verimli bir şekilde konumlanmasının da önü açılmış oldu. Bu özelliklerin dışında OCL'de geliştirici isterse CMatrix nesnesinin herhangi bir state'ine yeni bir değişken tanımlaması yapmadan prev() ve next() komutları yardımıyla ulaşabilmektedir. Bu yaklaşım program akışını sekteye uğratmadan geliştiricinin kullanımına açılmıştır. Kullanıcı isterse performans ve hızdan kazanmak için söz konusu özelliği kapatabilir.

   Çeşitli kullanım senaryoları ve belirli problemlerin OCL temelli çözümü ile ilgili yazı dizilerimiz devam edecektir. OCL'nin gelişmesi adına sizden gelecek geri bildirimler son derece önemlidir. Geri bildirimlerinizi, blogun alt kısmındaki yorum kısmına veya e-mail adresime gönderebilirsiniz. Blog sitemize ve youtube kanalımıza abone olmayın unutmayın. 

İyi çalışmalar.





Yorumlar

Bu blogdaki popüler yayınlar

4 - Açık Cezeri Kütüphanesi (rand ve randn komutları ile tek boyutlu sinyal işlemleri)

2 - Açık Cezeri Kütüphanesinin Kurulumu

3 - Açık Cezeri Kütüphanesi (tek boyutlu sinyaller nasıl üretilir)