Tugas Akhir Tahap 1

Kelulusan sudah di depan mata. Tinggal satu yang perlu diselesaikan sebelum meraih gelar Bachelor of Computing (biar keren dikit). Tugas akhir. Momok seluruh mahasiswa dari Sabang sampai Merauke. Dari International Date Line West (GMT-12) sampai Nuku’alofa (GMT+13).

Dari pencarian yang serius ke berbagai website dan beberapa kata kunci seperti “skripsi”, “thesis”, “tugas akhir” (saran: “tugas akhir” lebih banyak hasilnya makanya judul blog ini memakai kata-kata tugas akhir), akhirnya diketemukan dua kandidat untuk diangkat menjadi topik skripsi saya.

1. J2ME dan Location Based Service (LBS)

Mengembangkan fasilitas Location Based Service pada mobile phone menggunakan teknologi J2ME. Location Based Service maksudnya memberikan layanan berdasarkan tempat kita berada sekarang. Bisa informasi jalan, tempat-tempat seperti restoran, atm terdekat, dan lain-lain. Jadi, saat eksekusi program, program akan mengambil lokasi kita (memakai GPS atau memakai Cell-based-apalah-itu-namanya) kemudian mengolah data dan menempatkan kita di peta yang bisa dilihat di mobile phone kita.

Teknologi yang dipakai J2ME ditambah JSR 179 (Location API).

2. J2ME dan VOIP

Mengembangkan aplikasi VOIP pada mobile phone menggunakan teknologi J2ME. Saya belum pernah mencobanya, tapi di gambaran saya sih cara pengembangannya sebagai berikut:

  • Capture audio dari speaker mobile phone
  • Olah menggunakan MMAPI (Mobile Media API-JSR 135)
  • Buat session SIP (Session Initiation Protocol) memakai SIP API (JSR-180)
  • Menggunakan session yang telah dibuat, transfer data
  • Convert kembali menjadi audio.

Kira-kira seperti itu. Idenya sih seperti itu. Apakah dapat diimplementasikan, saya tidak tahu.

 

Melalui berbagai pertimbangan, akhirnya saya memutuskan untuk mengambil topik pertama. J2ME dan Location Based Service (LBS). Tinggal mencari handphone yang ada GPS nya (sambil lirik-lirik housemate). Kalau sudah selesai akan saya post semua source code dan aplikasi jadinya di sini. Jadi, stay tune.

Ada yang mau ikutan topik ini?

SCJP 1.6 (CX-310-065)

Wow. SCJP 1.5 saja belum selesai dipelajari sudah muncul yang 1.6. Jadi bagaimana ini, yang mana yang saya harus ambil?

Jawabannya adalah : tergantung kesiapan anda.

SCJP 1.6 secara resmi diperkenalkan oleh SUN bulan Desember 2007. Jadi, belum banyak dokumentasi yang mengulas tentang modul-modulnya walaupun setelah saya membaca-baca pengalaman orang yang sudah mengambil exam, tidak terlalu banyak perbedaan dengan yang 1.5.

Pada intinya, perbedaan mendasar adalah dari segi waktu, passing grade dan tiga API yang baru diperkenalkan, yaitu: java.io.Console, java.util.NavigableSet, java.util.NavigableMap.

Berikut detil perbandingan kedua exam tersebut:

SCJP 1.5 (CX-310-055)

  • Pass score: 59% (43 of 72 questions)
  • Time limit: 175 minutes
  • SCJP 1.6 (CX-310-065)

  • Pass score: 65% (47 of 72 questions)
  • Time limit: 210 minutes
  • Perbandingan objectives kedua exam. (Copy-paste dari forum javaranch)

    • Section 3:
      1.5: Given a scenario involving navigating file systems, reading from files, or writing to files, develop the correct solution using the following classes (sometimes in combination), from java.io: BufferedReader,BufferedWriter, File, FileReader, FileWriter and PrintWriter.
      1.6: Given a scenario involving navigating file systems, reading from files, writing to files, or interacting with the user, develop the correct solution using the following classes (sometimes in combination), from java.io: BufferedReader, BufferedWriter, File, FileReader, FileWriter, PrintWriter, and Console.
    • Section 5:
      1.5: Given a scenario, develop code that declares and/or invokes overridden or overloaded methods and code that declares and/or invokes superclass or overloaded constructors.
      1.6: Given a scenario, develop code that declares and/or invokes overloaded methods and code that declares and/or invokes superclass, or overloaded constructors.
    • Section 6:
      1.5: Write code that uses the generic versions of the Collections API, in particular, the Set, List, and Map interfaces and implementation classes. Recognize the limitations of the non-generic Collections API and how to refactor code to use the generic versions.
      1.6: Write code that uses the generic versions of the Collections API, in particular, the Set, List, and Map interfaces and implementation classes. Recognize the limitations of the non-generic Collections API and how to refactor code to use the generic versions. Write code that uses the NavigableSet and NavigableMap interfaces.
    • Section 7:
      1.5: Given a code example, recognize the point at which an object becomes eligible for garbage collection, and determine what is and is not guaranteed by the garbage collection system. Recognize the behaviors of System.gc and finalization.
      1.6: Given a code example, recognize the point at which an object becomes eligible for garbage collection, determine what is and is not guaranteed by the garbage collection system, and recognize the behaviors of the Object.finalize() method.

     

    Jadi, harus pilih yang mana? Menurut opini saya, kalau ingin mengambil SCJP dalam waktu dekat lebih baik yang 1.5. Tapi kalau sudah yakin bisa menguasai objective yang baru, kenapa tidak? Ambil yang 1.6. Tergantung kesiapan dan motivasi kita. Kalau mau tanya saya, saya mau mengambil yang 1.5. Dokumentasi lebih banyak dan passing grade lebih kecil (beda 4 jawaban yang benar dengan 1.6). Lagipula, saya mau mengambil SCJP sebagai prerequisite untuk spesialisasi di SCMAD (Sun Certified Mobile Application Developer) dan untuk spesialisai itu independen dengan versi SCJP yang diambil.

    Jadi mau pilih yang mana??

    Menuju SCJP Tahap 1

    Apa sih SCJP? SCJP itu adalah singkatan dari Sun Certified Java Programmer. Sebuah sertifikasi bertaraf internasional yang dikeluarkan oleh Sun Microsystem.

    SCJP adalah fondasi untuk meniti karir di pemrograman Java. Sertifikasi advanced seperti SCWCD, SCMAD, dll membutuhkan SCJP sebagai prerequisite.

    Berikut bagan sertifikasi Java yang dikeluarkan oleh Sun Microsystem.

    certpathJava

    Sertifikasi SCJP yang terbaru adalah untuk yang SCJP 1.6 (310-065) karena Java yang terbaru yang 1.6, tapi sepertinya saya akan mengambil yang SCJP 1.5. Selain karena tidak banyak perbedaan antara materi yang diujikan juga karena dokumentasi untuk SCJP 1.6 belum banyak beredar.

    Jadi, saya bertolak ke Inixindo Jakarta yang merupakan salah satu prometrik di Indonesia. Begitu masuk, saya diarahkan ke petugas yang berkewenangan (yang manis dan cantik).

    Voucher SCJP berharga $150 jika dirupiahkan menjadi Rp. 1,425,000.

    Cukup mahal tapi yah namanya juga sertifikat internasional. Voucher yang saya beli expired bulan Oktober tahun ini. Jadi saya bisa menjadwalkan untuk mengambil exam kapan saja sebelum bulan Oktober. Cukup waktu untuk persiapan.

    Anehnya, tidak ada semacam record yang diisi waktu pembelian voucher, jadi seperti membeli handphone. Hanya diberikan kuitansi. Setelah saya lihat vouchernya ternyata memang begitu. Jadi kalau vouchernya hilang, yah..hilang juga duit kita T_T.

    Kemudian saya mencoba mencari bahan latihan. Dari hasil browsing, saya mendapat info buku yang direkomendasikan banyak orang. buku SCJP 1.5 karangan Kathy Sierra dan Bert Bates (yang merupakan pelopor situs www.javaranch.com. OK. Jadi saya coba mencari buku itu.

    Akhirnya ketemu juga di Kinokuniya Plasa Senayan. Mahal. Rp.750.000. Yah, jadinya saya mencari yang versi “petani” nya di internet. Terpaksa.

    Ya sudah, Menuju SCJP Tahap II menyusul setelah mengambil examnya. Tidak dalam waktu dekat ini yang pasti karena sedang sibuk dengan tugas akhir.

    Jadi, mau ikutan menjadi SCJP?

    Siklus Aplikasi J2ME

    Setiap aplikasi J2ME (midlet) berada dalam salah satu dari tiga state berikut: Paused, Active, atau Destroyed.

    Siklus Midlet:

    siklusj2me

    Saat constructor dipanggil, maka Midlet akan berada dalam kondisi Paused. Jika method startApp() dipanggil, maka Midlet akan aktif, sebaliknya, jika Midlet menemui method destroyApp(), maka Midlet akan di buang dari memory (Destroyed).

    Terdapat 3 method yang harus ada dalam setiap MIdlet.

    1. startApp()

    Agar MIDlet memperoleh fokus dan menjadikannya active. Method ini dipanggil jika MIDlet baru saja dibuat atau kembali dari kondisi Paused.

    public static void startApp()

    2. pauseApp()

    Method ini dieksekusi jika MIDlet tidak memiliki fokus. Contohnya : ada telepon masuk saat kita menjalankan MIDlet tersebut. Aplikasi tidak mempunyai tampilan.

    public static void pauseApp()

    3. destroyApp()

    Method ini dipakai untuk membebaskan seluruh resource yang digunakan oleh MIDlet.

    public static void destroyApp(boolean unconditional)

     

    Sudah familiar dengan siklus Midlet?

    Hello J2ME

    Kita sudah kenalan dengan J2ME.

    Kita juga sudah melengkapi diri dengan tools pengembangan J2ME.

    Sekarang kita siap untuk membuat aplikasi J2ME yang dikenal dengan nama MIDlet

    Berikut adalah source code untuk :HelloMIDlet. (Untuk catatan, saya menggunakan Eclipse untuk seluruh pengembangan aplikasi)

    import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*;

    public class HelloMIDlet extends MIDlet {

        public HelloMIDlet() {
        }

        protected void destroyApp(boolean arg0) {

        }

        protected void pauseApp() {

        }

        protected void startApp() {
            TextBox teks = new TextBox("Kulunuwun", "Monggo", 256, TextField.ANY );
            Display display = Display.getDisplay(this);
            display.setCurrent(teks);
        }

    }

    Hasilnya sebagai berikut:

    HelloMIDlet

    Untuk sekarang, saya belum membuat penjelasan dari kode di atas.

    Seiring posting selanjutnya anda akan dapat menjelaskannya untuk diri anda sendiri.

    Jadi, siap untuk melangkah lebih lanjut?

    Tools J2ME

    Oke. kita sudah mengetahui bagian-bagian dari J2ME, sekarang kita siap untuk membuat aplikasinya.

    Apa yang kita perlukan?

    Sun Microsystem menyediakan J2ME Wireless Toolkit (J2ME WTK) untuk mengembangkan aplikasi J2ME.

    Satu paket J2ME sudah cukup untuk pengembangan aplikasi sampai bentuk jadi yang siap digunakan di alat sebenarnya.

    Ada beberapa IDE Java juga yang bisa digunakan untuk pengembangan.

    Diantaranya adalah NetBeans dan Eclipse.

    Langkah-langkah pengembangan aplikasi J2ME menggunakan NetBeans di OS Windows:

    1. Download jdk. Disarankan versi jdk 1.4 ke atas. Install.

    jdk ini adalah java development kit. Memuat compiler dan jre (java runtime environment-tool untuk menjalankan java dalam komputer kita)

    2. Download netbeans di www.netbeans.org/downloads. Install.

    3. Download netbeans mobility pack yang sesuai dengan versi netbeans anda. Install.
    4. Anda telah melengkapi diri dan siap untuk menendang beberapa pantat (kick some ass!)

    Anda bisa juga menggunakan Eclipse IDE.
    Langkah-langkah pengembangan J2ME menggunakan Eclipse adalah sebagai berikut.

    1. Download Eclipse.
    Nah. Di langkah ini ada beberapa hal yang harus diperhatikan.
    Saat artikel ini ditulis, plugin untuk J2ME pada Eclipse (EclipseME) baru mendukung untuk Eclipse 3.2 (Calisto). bukan Eclipse 3.3 (Europa).
    Di website EclipseME, versi yang terbaru adalah eclipseme 1.7.7. Dan versi tersebut adalah yang terakhir untuk Eclipse 3.2.
    Jadi, untuk saat ini, download Eclipse versi 3.2. Pada website resmi eclipse www.eclipse.org, sulit untuk mencari versi terdahulu. Google saja dengan kata kunci= eclipse 3.2 download.
    2. Download plugin eclipseme.
    Plugin eclipseme untuk pengembangan J2ME pada Eclipse IDE dapat didownload di www.eclipseme.org.
    3. Ikuti cara installasi yang ada di website tersebut.
    Petunjuk: untuk mudahnya, pada prerequisite terdapat banyak sdk yang harus diinstall. kita install J2ME Wireless Toolkit saja.
    4. Jika pada saat instalasi plugin eclipseme terdapat error seperti: (saya kurang hapal errornya tapi kira-kira seperti ini) birt something…, maka download dan install “birt reporting framework 2.1.2″. cari di google untuk linknya. saya sudah lupa.
    5. Lanjutkan installasi eclipseme anda.
    6. Mari kita membuat aplikasi J2ME.

    Selamat mengunduh!

    Pengenalan J2ME

    Java adalah bahasa pemrograman yang terus berkembang.

    Sampai sekarang ada 3 edisi dari Java 2.

    • Edisi standar J2SE (Java Standard Edition) digunakan untuk tipikal aplikasi desktop maupun applet.
    • Edisi ini kemudian dikembangkan untuk mendukung kebutuhan besar berskala enterprise sehingga muncul J2EE (Java Enterprise Edition). J2EE menitikberatkan aplikasi berbasis web dan server-side.
    • Edisi terakhir adalah J2ME (Java Micro Edition). Edisi ini mendukung pengembangan aplikasi untuk micro devices dengan segala keterbatasannya di sisi hardware.

    Jadi, J2ME adalah subset dari J2SE dengan tambahan paket opsional.

    Pada J2SE, kita jumpai JVM (Java Virtual Machine), sebuah mesin abstrak untuk menerjemahkan bytecode hasil kompilasi java hingga dimengerti oleh komputer. Untuk J2ME, maka kita jumpai KVM (K Vitual Machine).

    Untuk menjalankan aplikasi J2ME, kita tidak perlu melakukan instalasi JVM seperti pada J2SE. Jika device kita mendukung Java maka dapat kita asumsikan KVM sudah diinstal dalam device tersebut.

    Ilustrasi J2ME

    j2me1.jpg

    Teknologi J2ME memiliki 3 komponen

    1. Configuration : memuat library dasar dan virtual machine untuk banyak jenis device.

    Saat ini, arsitektur J2ME terdiri atas 2 jenis configuration, yaitu:

    • CDC (Connected Device Configuration) yang meliputi: PDA high-end, navigasi mobil, dll.
    • CDLC (Connected Limited Device Configuration) meliputi mobile phone, PDA kebanyakan, pager, dll.

    2. Profile : tambahan API (Application Programming Interface) dan spesifikasi lainnya untuk membuat aplikasi untuk tipe device yang lebih spesifik.

    Terdapat beberapa profile seperti pada gambar, namun yang paling sering dipakai dan yang akan dibahas adalah MIDP (Mobile Information Device Profile)

    3. Paket Optional : Paket tambahan yang dibutuhkan aplikasi saat deployment sehingga harus ikut didistribusikan.

    API yang disediakan untuk CDLC 1.1 dan MIDP 2.0 adalah sebagai berikut:

    CDLC 1.1

    • java.lang
    • java.lang.ref
    • java.io
    • java.util
    • java.microedition.io

    MIDP 2.0

    • java.microedition
    • java.microedition.media
    • java.microedition.midlet
    • java.microedtion.rms

    Jadi, sudah kenal dengan J2ME?