Java ME ve olası yükseliş imkanı

____________________________________________________________________

Cep telefonları, cep bilgisayarları ve akıllı telefonlar günden güne hayatımızda daha fazla yer ediniyor. Trend metrelere göre de birçok gencin aklına bilgisayardan önce cep telefonu gelmeye başlamış durumda, yani bilgisayarım olmasa da cep telefonum olsun diyor. Tabi cep telefonlarının artan ilgi çeken yönlerinden biri de sahip oldukları fonksiyonları arttıran ve çeşitlendiren uygulamaları. Bu mobil araçlarda birçok mobil uygulama çalıştırılabiliyor ve bunlar ile yanımızda bir bilgisayar taşıma zorunluluğu olmadan çok farklı fonksiyona ulaşabiliyoruz. Ne var ki mobil platformlarda bol bir çeşitlilik var ki bir platform için geliştirilmiş bir uygulama başka bir platformda çalışmıyor. Bu platforma dağınıklığına platform bağımsızlığı iddiasıyla çözüm ise teknolojisi.

Önceden Symbian, Windows CE, Palm, BlackBerry gibi işletim sistemleri çok yaygınken bazı üreticiler de bunlar yerine kendi gerçek zamanlı işletim sistemlerini kullanırdı ki bunlara pek denmezdi. Java ME platformu ise tüm bu cihazlarda çalışmayı başararak hepsi için ortak bir uygulama ve oyun platformu oluşturdu. Mesela kendi işletim sistemlerini kullanan ve bu sebeple uygulama yükleme şansı pek olmayan işletim sistemlerine de Java ME yazılımı eklenerek uygulama desteği getirilmiş oldu ve bu da akıllı telefonlarla rekabetlerini sağladı tabii ki de.

Şu anda ise yukarıdaki işletim sistemlerine Google’ın geliştirdiği Android ve Samsung’un geliştirdiği Bada OS’ da ekleniyor. BlackBerry cihazlar için de tek uygulama geliştirme yolu Java ME mesela. Apple’ın iPhone’u ise kısıtlamalarına rağmen çok başarılı bir platform olsa da emülatör ve sanal makine uygulamaları yasak olduğundan konumuz dışında.

Sorun:

Öncelikle bu kadar işletim sistemi için ayrı ayrı programlar geliştirmek uygulama geliştirme maliyetini arttırıyor. Geliştirilen bir uygulama sadece bir platforma hitap ediyor ki bu da desteklediği mobil cihaz sayısını azaltıyor. Yazılan kodu farklı platformlara uyarlamak da zor olabiliyor ki programın başka bir platform için yeniden yazılması ile sonuçlanabiliyor. Sonuç da her mobil dili bilen az sayıda uygulama geliştiriciye yüksek maaş ile iş vermek, ya da çok sayıda birer dil bilen geliştiriciye maaş vererek aynı masrafı onlara da yapmak gibi çeşitli maaş kombinasyonları.

Çözüm Java ME!

Java ME platformu ise çoğu platform için bir kez geliştirilerek bu platformlara aynı kaynak koda sahip birçok uygulamanın bir kez yazılmasını sağlayabiliyor. Cihaza Java ME yazılımını hazırlama işini Sun, IBM, Esmertec, Aplix gibi sanal makine geliştiricileri ya da üreticiler kendi yazılım takımlarına Sun’ın Java ME standartlarına uyarak yapabiliyor. Java ME standardına uygun geliştirilmiş tüm sanal makinelerin geliştirilen Java kodlu uygulamalara vereceği tepkiler aynı. Uygulama geliştiriciler için kolaylık ise bir kez yazdıkları kodun birden fazla cihazda çalışması. Böyle olunca da bir şirkette farklı platformlar için çok sayıda uygulama geliştiriciye ihtiyaç kalmıyor. Az sayıda işlerini iyi yapan Java geliştiricileri yeterince iş görebiliyor.

Problemler de olmasa!

Ne yazık ki madalyonun diğer yüzü Java ME ile çalışmayı biraz zorlaştırıyor. Java ne kadar platform bağımsızlığı iddiaları ile yükselmiş olsa da mobil ortamda platform bağımsızlığı çok kolay bir şey değil. Bunun nedeni değişen ekran çözünürlükleri, veri giriş yöntemleri, sanal makine farklılıkları. Bir kez mobil ortamlarda ekran çözünürlükleri PC platformunda olduğundan çok daha fazla. 110 x 90 ekran çözünürlüğüne sahip mobil cihaz da var 840 x 480 ekran çözünürlüğü olan da. Bu problem neyse ki Java ME uygulama geliştiricisinin biraz daha fazla çabası ile çözülebiliyor. Giriş yöntemleri ise genellikle tuş takımından ve dokunmatik ekrandan olmak üzere ikiye ayrılıyor. Geliştiriciler iki giriş yöntemi için de kod yazmak zorunda. Ayrıca dokunmatik ekran desteği de Java ME’de çok kapsamlı değil ve uygulama geliştiricinin sanal klavye geliştirmesini de gerektirebiliyor. Bir de sanal makine üreticilerinin sebep oldukları farklılıklar var ki bunlar biraz daha çözmesi zor problemler. Mesela bazı cihazların Java sanal makinelerinin Java uygulamalarına ayırdığı nesne belleği 512 KB ve civarı. Başka cihazlar ise 1.5 – 2 MB’a kadar sabit ya da 4 MB’a kadar değişebilen dinamik bellek miktarlarına sahipti ki kod ve standart özellikleri olarak tüm cihazlarda çalışabilecek 3D oyunlar bellek problemi nedeniyle her cihazda çalışmıyordu. Bundan başka işlemci farklılıkları nedeniyle performans farklılıkları meseleleri de var. Ha kendi geliştirdiğim Cep Ingilizce ve TR Sözlük gibi uygulamalar ise son moda olan ama Java uygulama sınırları 1 MB olan uygulamalar yüzünden bu cihazlarda çalışmıyordu. Problemler ile biraz daha detaylı olarak Cep telefonunda Java yazısını yazmıştım.

Bu gibi problemler Java ME’nin Sun tarafından yeterince standartlaşmış olmamasının sonucu. Mesela Java ME MIDP 2.0 desteği olacak her cihazda 5 MB Java uygulaması yüklenebilmeli, uygulamanın bellekte oluşturacağı nesneler için 1.5 MB bellek olmalı, 200 MHz ARM işlemcisi ya da xxx işlemci gücüne sahip bir işlemcisi olmalı gibi sert standartlar olsa  Java ME uygulamaları çok daha başarılı olabilirdi.

Biraz rahatlama:

Bu problemler yüzünden Java’nın platform bağımsızlığı özelliğini tam olarak kullanmak imkansız değil. Ancak yine de bir çok uygulama bunlara takılmadan geliştirilebilir. Öncelikle geliştirilen uygulamalar video uygulaması ya da 3D oyunlar olmadıkça işlem gücü problemi pek de önemli olmayabilir. Zaten video uygulamaları platformun kendisinde de işlemciye çok fazla yüklenerek çalışıyor ve hatta işlemcilerin donanımsal video hızlandırıcılarını kullanarak çalışıyor. Bu sebeple video uygulamalarını Java ME ile yazmak sadece bir problem üretmekten başka bir şey değildir. 3D oyunlarda ise hızlanan cep telefonu işlemcileriyle işler biraz daha rahat. Çoğu yeni işlemci 500 MHz gibi hızlarda çalışıyor ki QVGA çözünürlükte 3D oyunları rahatça oynatabiliyorlar. Burada tabi mobil cihaz olduğnu düşünerek farklı optimizasyonlar da yapılabilir ki oyun rahatça oynanabilir. Bellek problemi için ise geliştiriciler biraz daha fazla dikkatli olmaz zorunda. Bellek meselesi için de uygulamalar aynı anda 500 KB üzerinde nesne oluşturmama fikri düşünülerek optimizasyonlar mümkün. Sanal makine ile ilgili diğer meseleler ise biraz çözümü zor olan şeyler.

Özetle, mobil platformlardaki artan çeşitlilik aslında Java ME uygulama geliştiricileri için iyi bir fırsat olabilir. Mobil uygulama geliştirmenin artan önemi karşısında mobil operatörler de bunları çeşitli yarışmalarla destekliyor. (ÖR; Turkcell.) Ancak Java ME’nin standart eksikliği işi zorlaştırıyor. Yani Java’nın platform bağımsızlığı özelliğini mobil alanda biraz etkisizleştiriyor ya da kısıtlıyor. Buna rağmen çok yüksek hıza ve belleğe ihtiyaç duymayan uygulamalar Java ME ile geliştirilip, diğerleri platform bağımlı uygulamalar şeklinde geliştirilerek buna bir çözüm sağlanabilir.

Not: Şu uygulama geliştirme yarışmasına ben de katılmak istiyorum ama aklımda fikir yok. 🙂 Fikir eksikliği çekiyorum. 😀