Remote Method Invocation (RMI)

Bu yazımızda Client üzerinden uzak sunucuda bulunan uygulamamıza ait metodları kullanmayı göreceğiz. Uygulama client ve server olmak üzere 2 bölümden oluşmaktadır. Client tarafında kullanıcıya sunulan gui ile kullanıcı www.imdb.com üzerinden istediği film araması için gerekli anahtar kelimeleri girmektedir. Kullanıcı aramayı başlattığında client uygulama server uygulamaya gerekli parametreleri geçirmekte, server uygulamada bu parametrelerle sorgulama, html parse gibi işlemeleri gerçekleştirerek client uygulamaya sonucu döndürmektedir. Dönen sonuç yine gui içerisinde kullanıcıya sunulmaktadır. Film aramasının yanı sıra gui içerisinde 3 sn’de bir güncellenen bir alanda www.foreca.com‘dan alınan İzmir için hava durumu bilgisi görüntülenmektedir.

Client: RmiApp.java: Netbeans tarafından render edilen bir class’tır. Bir desktop (gui) application’ı başlatmaya yarayan fonksiyonları içerir.

RmiInterface.java: Server’da override ettiğimiz fonksiyonları içeren Interface class’ı.

RmiView.java: Gui uygulamamızın kodlarını içeren class. Ayrıca server’a istekte bulunduğumuz (parametre gönderme vs.) fonksiyonları da içeriyor.

UpdateWeather.java: Weather bilgisini aldığımız ve gui’yi güncellediğimiz Thread class’ı. Server: RmiInterface.java: Server’da override ettiğimiz fonksiyonları içeren Interface class’ı.

GetInfo.java: Server üzerinde yaptığımız işlemleri (http post, get, parse vb.) ayrı bir class olarak burada gerçekleştirdik. RmiServer.java içerisinden bu fonksiyonları çağırıyoruz.

Uygulamanın çalıştırılması: Server dosyalarının bulunduğu klasörün içinden rmiregistry çalıştırıldıktan sonra java RmiServer komutu ile server uygulaması başlatılır. (Not: Server uygulaması localhost’ta çalışacak şekilde şu anda başka bir bilgisayarda çalıştırılacaksa o bilgisayarın ip’si RmiServer içerisine girildikten sonra RmiServer.java dosyası tekrar derlenip, stub tekrar oluşturulduktan sonra server başlatılmalıdır.)

Server uygulaması başlatıldıktan sonra bin/client içerisinde client uygulamasının .jar dosyası olarak paketlenmiş java -jar rmi.jar komutu ile client uygulaması başlatılır. Daha sonra gui’de gerekli alana server uygulamasının çalıştığı bilgisayarın ip’si girilerek bağlantı sağlanır.

Stub dosyasını oluşturma: server klasörü içerisinde bulunan RmiServer dosyası derlenerek .class dosyası oluşturulur.

javac RmiServer.java

Daha sonra oluşturulan derlenmiş dosya Rmi Stub Compiler ile tekrar derlenerek stub dosyası oluşturulur.

rmic RmiServer.class

Uygulamanın kodlarını buradan indirebilirsiniz.

Kalın sağlıcakla.

Adam asmaca

Uzuuun bir aradan sonra tekrar birlikteyiz. Buraya her yazdığımda utanıyorum nedense. Bir önceki yazının üzerinden uzun bir süre geçmiş oluyor çünkü. Ama utanıyorum bu size bir anlam ifade ediyordur umarım :)

Tezimin içinde kullandığım bir oyundu adam asmaca. Kodu satır satır açıklamayacağım. Önemli gördüğüm yerlerde açıklama satırları kullandım. Uygulamayı Nokia 6300′da denedim sorunsuz çalışıyor. Kendi telefonunuzda canvas çizimlerinde kaymalar olursa (-ki olacağını sanmıyorum oranlama yapacak şekilde ayarladım) koordinatları ona göre değiştirirsiniz.

Kullandığım teknolojiler:

  • IDE: NetBeans (mobil pack)
  • OS: Pardus
  • Dil: Java(J2Me)

Kodlar çok uzun olduğu için buraya koymayacağım, jar dosyasını (telefonunuza kuracağınız dosya) buradan, kaynak kodunu (ek dosyalarla birlikte) buradan indirebilirsiniz.

j2me için ne gerekli?

Merhaba. Ne zamandır j2me ile ilgili bir şeyler yazmak istiyordum. Bugün tam yazmaya karar verdim daha sonra j2me ile ilgili giriş seviyesinde bir şey yazmadığımı fark ettim. Bu yazıyı da o açığı gidermek için yazıyorum. Ancak fazla uzun tutmak niyetinde değilim. J2me ile programlama yaparken neleri kullandığımdan bahsedip asıl yazmak istediğim yazıya uzun bir atlama yapmak istiyorum.

J2me ile program yazarken NetBeans idesini kullanıyorum.

Kullandığım temel özellikleri:

  • Görsel tasarım (visual design)
  • Hata ayıklama (debugger)
  • Kod tamamlama (code completion)

Buradan son sürümünü indirip kurabilirsiniz.

* Pardus kullanıyorsanız ve kurulumda hata ile karşılaşıyorsanız, kuruluma geçmeden önce konsolda

LC_ALL=C

komutunu verip kurmayı deneyin.

Girişi yaptık ya gerisi gelir artık, zor olanı hallettik :)

Diğer yazıda görüşmek üzere, bu arada siz de Özgür Kalın..

Bitirme projesi taslağı

j2mecdc_logoMerhaba. Daha önceden de belirttiğim gibi bu siteyi açma amacım bitirme projemi ve gelişimini paylaşmaktı. Bir şeyler öğrendikçe bunu sitede anlatıp bu konuyla ilgilenen insanların da bir nebze olsun gelişimine katkıda bulunabilmekti. Bunu şu ana kadar çok iyi yaptığımı söyleyemem. Bunun sebebi de bitirme projeme tam olarak vakit ayırıp da başlayamamamdı. Zaman konusunda sıkıntı yaşadığım bir dönemin ardından bitirme projeme tam olarak başlıyorum. Buradan da şu an itibariyle yapacaklarımı içeren taslağı sizinle paylaşmak istedim. Belki de biraz da kendimi kontrol etmek adına böyle birşey yapıyorum. Taslağı sadece ben bildiğim sürece tam olarak yapılıp yapılmadığını sorgulayacak benden başka kimse olmayacaktı, sizlerle de paylaşıyorum ki bunu kontrol eden birilerinin olduğunu bilmek beni tembellikten alıkoyar diye umuyorum. Taslakta var olanların durumunu, gelişimini çekinmeden sorgulayınız :)

Öncelikle bu yazıda java logosunun ne işi var ondan bahsedeyim biraz. Bildiğiniz üzere bitirme tezimi mobil ortamlara eğitim yazılımı geliştirmek konulu seçmiştim ve bu uygulamayı Python’da yapmayı düşünüyordum. Ancak projeyi yapmaya başladığım şu günlerde Python’un halihazırda mobil ortamlar için tercih edilebilecek durumda olmadığını farkettim. Elbette ki her proje için geçerli değil bu ancak kendi projem açısından bu yeterliliği bulamadım. Nelerin yeterli olmadığı kısmına kısaca değinecek olursam, Python’un Nokia S60 bağımlılığı en büyük problem. Yaptığım uygulamanın yalnızca S60 telefonlarda çalışacak olması, harcayacağım emek için sıkıntı olacaktı. Çünkü yapmak istediğim uygulama basit bir uygulama değil ve her platformda çalışmasını istiyorum. Python’un S60 bağımlılığını daha önce de biliyordum ancak biraz daha içine girince sorun olacağını düşünmeye başladım.

Bir diğer önemli sorun ise Java’nın kütüphane,ide,emülatör kolaylığı. Bu üçlü maalesef Python için yeterli düzeye ulaşmış değil.

Tüm bunları göz önüne aldığımda tezimi Java ile geliştirmeye karar verdim. Her ne kadar sitenin adı Pythonturk’te olsa bundan sonra Java kodları da göreceksiniz. Amaç bilgi paylaşmak olduğu için bu sorun olmayacaktır.

Tabi bu söylediklerim Java ve Python’un mobil kısmıyla ilgili. Python hala sevdiğim ve öğrenmeye devam etmek istediğim/edeceğim bir dil. Python’la ilgili öğrendiklerimi, sorularınızı elimden geldiğince yanıtlamaya devam edeceğim.

Taslak şöyle:

  • Dersleri modüler olarak programlamayı düşünüyorum, başlangıç olarak bir ders olacak ama program modüler olarak tasarlanacak ve yeni bir ders eklemek için oluşturduğum form çerçevesinde bir class yazmak yeterli olacak.
  • Programa dil desteği koymayı düşünüyorum, buton isimleri, menü isimlerini bir dil dosyası oluşturup oradan çekmeyi düşünüyorum. Başlangıç olarak İngilizce ve Türkçe yeterli, ancak ihtiyaç durumunda başka bir dil desteği eklemek de sorun olmayacak.
  • Derslerin uygun yerlerinde sesli anlatım düşünüyorum (mesela ingilizce dersi için cümlelerin okunuşu olabilir). Programın her bölümüne seslendirme desteği koymayı düşündüm, görme engelliler için de çok kullanışlı olacaktı ancak daha sonra fazla konu dışına çıkmak istemediğimden vazgeçtim. Bu ayrı bir proje olarak ekleme yapılarak sağlanabilir.
  • Dersin sonunda test ve oyun tarzında ölçme yapmayı düşünüyorum.Mesela ingilizce dersi için konu testi olacak ve kelime tahmin oyunu olacak. Bulunamayan kelimelerde ipucu seçeneği ile yardım alınabilecek, yine bulunamazsa cevaba bakabilecek. Oyunda ayrıca kullanıcı adı,skor ve süre bilgilerini de tutmayı düşünüyorum.
  • Yazacağım bir web servisle siteye koyduğum videoların (konu anlatımı olabilir) telefonda izlenmesini sağlamayı düşünüyorum. Bağlantı açısından sorun çıkabilir, henüz bir deneme yapmadım ancak videoları düşük kalitede ve kısa süreli tutmayı düşünüyorum.

Benim düşündüklerim şimdilik bu kadar. Başlangıç için biraz fazla şey eklenmiş olabilir, özellikle tercih ettim bunu. Beklentiler ne kadar yüksek olursa sonuçta ona göre başarılı olur diye düşünüyorum.

Burada sizin de eklemek istediğiniz, “şu da olsa çok iyi olur” veya “yok bu olmasın şöyle şöyle sorun çıkarabilir” dediğiniz şeyleri buradan paylaşırsanız benim için çok iyi olur.

Ayrıca projeme isim bulmadım henüz, isim önerilerinize de açığım.

Kalın sağlıcakla..