Mobil Uygulamalar ve Titanium Gerçeği

Phonegap ile ilgili daha önce bir giriş yazısı yayımlamıştım. O yazımda mobil uygulama geliştirme çatılarının birden fazla mobil platformda iyi sonuçlar verebileceğini ve denemeye değer olduğunu yazmıştım. Açıkçası Phonegap i değil ama Titanium u gerçek bir uygulama ile denedim ve izlenimlerimi sizlerle paylaşmak zorundayım.

  1. Titanium Javascript ile kendi kütüphanelerini kullandırarak size yazılım geliştirtiyor. Bunu da hem Android in hem de IOS un karışık çatılarını ezberlemeyelim diye yapıyorlar. Burada dikkat edilmesi gereken bir nokta var ki, Android i de IOS u da böyle güzel ve kullanışlı yapan şey bu karmaşık yazılım çatıları. Yani demek istediğim şey şu ki, bu adamlar keyfiyetten bu çatıları karmaşık hale getirmiyorlar, gereksinimleri karşıladıkları zaman uygulama çatısı kendiliğinden karmaşık bir hale gelmiş oluyor. Ama Titanium burada ne yapıyor, bu adamların özenerek ürettikleri bu karmaşık çatıları, tek bir çatı altına almaya çalışıyorlar, yani denkleme bir problem daha katıyorlar, ve çözümü iyice karmaşıklaştırıyorlar yada tam aksine basitleştirmek için sistemleri budamak zorunda kalıyorlar.
  2. Bu mobil çatı aynı zamanda Java ve Objective-C öğrenmek zorunda kalmayalım diye hazırlanıyor. Diğer yandan burada bizim Javascript kullanmamız gerekiyor. Bu dili bir çok web geliştiricisinin bildiğini düşününce gerçekten mantıklı bir sonuç değil mi? İşte kazın ayağı öyle değil ne yazık ki: Bir çok web geliştiricisi Javascript i sadece basit Jquery metodlarını çağırabilmek için kullanır, yani esasında kullandıkları şey web metodları olan bir C dilidir. Diğer yandan her ne kadar ciddiye alınmasa da Javascript çok ciddi bir dildir. Hatta ana akım olmayı başarmış en yakın Lisp özellikli dildir. Bu da ne demek, öyle herkes Javascript bilmiyor demek(şahsen ben adeta bilmiyorum). Bayağı bir özelliği var demek (ki kötü özellikleri de var ve adeta bunları öğrenmemek gerek, hatta sırf bunun üzerine yazılmış kitaplar bile var.). Dolayısıyla amatör bir şekilde tüm uygulamayı Javascript te yazarsan işlerin çığrından çıkma ihtimali yüksektir. Önce function scope nedir, global namespace nedir bilmek gerekir.
  3. Bu adamlar bu kadar güzel özelliği beleşe veriyorlar biliyor musunuz? E peki nasıl para kazanıyor bu amcalar? Şimdilerde marketplace uygulaması başlattılar. İlk maddede bahsettiğim budanmış sisteme bu sefer o budanan nesneleri satıyorlar. E peki daha önce ne yapıyorlardı? Sonuçta ortada ne olduğu belli olmayan bir uygulama çatısı mevcut. Kullanmak istiyorsan nasıl çalıştığını bilmek zorundasın, e dökümantasyon da olmadığına göre gelip bu amcalardan eğitim alacaksın ve sertifikanla beraber yazılım geliştirmeye devam edeceksin. Yani sonuç, dökümantasyona güvenme! Çünkü adamlar bilerek ve isteyerek çok az dökümantasyon yayınlıyorlar, projeye baslamana yetecek kadar ama biterecek kadar değil!
  4. Hata varsa ne yapacaksınız? Sonuçta bu Titaniumu yazan amcalar da insan ve onlar da hata yapabiliyorlar. Tamam kabul ediyorum google ve apple daki elemanlar da insan onlar da hata yapabilirler. Ama burada dikkat edilmesi gereken elemanların böyle bir durumda tepki hızları olacaktır. Forumlardan siz de görebilirsiniz, bir hata herhangi bir uygulama çatısında kesin olarak belirlendikten ne kadar süre sonra çözülmüş. Titanium forumlarında ise bir ıssızlık, bir umursamama kol geziyor. Projenizde güvendiğiniz çatının hatası yüzünden müşteriye geç kalınca ne demeyi düşünüyorsunuz?
  5. Diğer yandan bu adamlar bu işi bırakırlarsa ne olacak? Bu projeye bundan sonra kim bakacak? Google ve Apple ın daha uzun süreler buralarda olacağı kesin(batacaklarsa veya bırakacaklarsa da çok önceden kokusu çıkar ve siz önleminizi alabilirsiniz) ama ya yarın Apple Titanium u satın alırsa ne yapacaksınız? Siz müşterilerinize destek vermeye devam edeceksiniz ama adamlar çatıya gerekli değişiklikleri yapmayabilirler. Misal Facebook satın aldığı start-up şirketleri kapatıp, elemanlarına şirket bünyesinde görev veriyor. Titanium a da bu olursa ne olacak? Mesela yanlış bilmiyorsam PhoneGap i Adobe satın aldı. Ee ne olacak şimdi? Onlara ne söyleceksiniz bu durumda? Kullandığınız uygulama geliştirme çatısının piyasa desteğinin bittiğini mi söyleceksiniz? Bu projenin kendi evanjelist programcıları var mı? Lisp gibi yıllarca kendi kendini devam ettirebilecek mi?
Sonuç olarak tabii ki ortak bir çatı fikri her zaman mantıklı geliyor, ama teknoloji ve fikir dünyası böyle yürümüyor. Eğer bu adamların taktiği işe yarıyor olsaydı şu anda herkes en fazla C++ ile işini halledebiliyor olacaktı. Monarşi de dünyanın tek yönetim sistemi falan olurdu heralde : ). Böylelikle diyebiliriz ki, Titanium gibi projeler şimdilik daha orta ve küçük ölçekli projelerde tercih edilmeliler, daha ciddi işlerde teknolojinin kendi çatısı kullanılmalı.
Herkese iyi çalışmalar, iyi kodlamalar.

PhoneGap ve Mobil Geliştirme

Herkese merhaba,

Geçenlerde bir projenin analizini yaparken ne kadar çok farklı mobil client desteklemek zorunda olduğumuzu fark ettim. Buna çözüm olarak da XHTML kullanmaya karar verdik. Fakat daha sonra XHTML in bile hangi mobil cihaz browserı kadar desteklediğinden emin olamadığımızın farkına vardık.

Sonrasında aslında uzun zamandan beri geliştirmelerine devam eden bir gruptan haberimiz oldu. Bu grup (Nitobi Software adında www.nitobi.com) PhoneGap isimli bir proje üzerinde çalışıyor. Peki nedir bu PhoneGap?

HTML 5 ve CSS3 ün ortama salınması ve über gelişmiş Javascript kütüphaneleri ile herkes biraz çalıştıktan sonra çok güzel görünen web uygulamaları yazabilir. Bunlar neredeyse dünyada en çok uyulan standartlar bildiğiniz üzere. Fikir basit: Biz oturuyoruz güzelce bir HTML/CSS/Javascript uygulaması (diğer bir deyişle web sitesi) yazıyoruz. Sonrasında adamların wrapper fonksiyonlarını kullanıyoruz ve bu yardımcı sınıf ve metodlar sayesinde uygulamamız istediğimiz (istediğimiz dediğim şimdilik IOS/Android/Symbian/Blackberry vs ile sınırlı) mobil ortamda çalışabilecek özellikleri kazanıyor.

Esasında çok temiz olan mevzu şu ki, adamlar native uygulama çalıştırıyorlar. Amaa, bu büyük bir ama, bu native uygulama esasen sadece cihazın native browser ını çağırıyor ve sonrasında orada sizin hazırladığınız HTML uygulamasını çalıştırıyor.

İşin enteresan kısmı başlamak  oldukça kolay olmasına rağmen, adamlar parayı support kısmından bulma fikrinde olduklarından, kaynak bulmakta oldukça zorlanıyorsunuz. Ben de bu yüzden Android kısmında bir Hello World nasıl çıkartılıyor, kısaca bahsedeyim..

İlk olarak projemizi normal bir şekilde oluşturuyoruz :

Daha sonra projenin kok dizininde /libs ve /assets/www klasörlerini oluşturuyoruz. Bu klasörlere phonegap ile ilgili kütüphane ve dosyaları atacağız. phonegap.js dosyası /assets/www klasörüne, phonegap.jar dosyası da /libs klasörünün altına atılıyor. Ayrıca xml klasörünü de res klasörünün altına kopyalamanız gerekiyor.

Sonraki adımlarınızda ilk olarak activity sınıfını extend etmistik, oradaki Activity sınıfı DroidGap sınıfı ile değiştirmeniz,

setContentView metod çağrısını “super.loadUrl(“file:///android_asset/www/index.html”);” ile değiştirmeniz,

import.com.phonegap.*; cümlesini eklemeniz ve karşılığında Activity sınıfı ile ilgili import cümlesini çıkarmanız gerekiyor. Son görüntünün şuna benzer bir şey olmuş olması gerekiyor :

javaSrc

Bundan sonrası biraz daha düz gideceğiniz bir kısım, AndroidManifest.xml dosyamızı açıyoruz ve aşağıdaki bilgileri versionName kısmından sonra giriyoruz :

 

manifest

 

Şimdi gerçekten kodumuzu yazacağımız yere geldik, demin oluşturduğumuz assets/www dizininde index.html dosyamızı oluşturuyoruz. HTML dosyasında istediğiniz herşeyi koymakta serbestsiniz ama üstünde çalıştığınız telefonun özelliklerine erişmek istiyorsanız phonegap in javascript kütüphanesini şu satırla eklemeniz gerekiyor :

<script type=”text/javascript” charset=”utf-8″ src=”phonegap.js”>

Bunu da tamamladıktan sonra geriye sadece Android uygulamasını emülatörde çalıştırmak kalıyor. İyi kodlamalar! (Bu blog girdisini yazmaya başladıktan hemen sonra Titanium framework ünü keşfettik. Bu elemanların kodlarını öğrenmek başta ne kadar da zor olsa, hem tüm görseller native nesnelere çeviriliyor ve hem sadece javascript kodlayarak geliştirme yapıyoruz, tek dezavantajımız şimdilik sadece İOS ve Android desteği mevcut. Kim sallar zaten Blackberry i : p)