Obfuscator

13 08 2009
Obfuscate berasal dari transitive verb yang berarti darken, to make obscure atau confuse. Dalam terminasi software engineering, obfuscation adalah “the deliberate act of nondestructively changing either the source code of a computer program or machine code when the program is in some compiled or binary form, so that it is not easy to understand or read.” Code obfuscation merupakan proses untuk melakukan obcuring pada java class agar sulit untuk di decompile menjadi source kembali (reverse engineer).

Karena sebuah mobile aplication akan di porting dan di delivery pada berbagai jenis dan jumlah handset, dapat disimpulkan manfaat utama dari obfuscation antara lain pada aspek application size, to improve performance, footprint reduction, dan protection for intellectual property / security. obfuscation pada dasarnya melakukan penamaan ulang untuk class, methode dan variable, dll dengan penamaan lebih pendek, menghilangkan comment atau informasi debugging. Beberapa obfuscator juga mengimplementasikan optimisasi pada bytecode (byte code transforming) dan beberapa teknik shrinking lain. Beberapa open source obfuscator yang sering digunakan antara lain ProGuard dan RetroGuard.

Beberapa IDE juga sudah didistribusikan dengan obfuscator seperti Netbeans IDE dengan mobility pack nya yang telah di bundled dengan Proguard Obfuscator. Sun WTK dan Eclipse IDE juga mendukung third-party obfuscation namun harus dispesifikasikan dalam proses deployment. Developer juga dapat mengganti obfuscator atau menambahkan langkah obfuscation pada cript Ant.

Berikut salah satu contoh cara untuk memasukan Obfuscator pada Netbeans IDE (pada contoh ini, menggunakan Netbeans IDE 6.5 dan ProGuard 4.3) :
1. Download ProGuard obfuscator dari http://proguard.sourceforge.net/.
2. Untar atau unzip file tersebut
3. Masukan ProGuard obfuscator jar pada directory netbeans, contoh : C:\Program Files\NetBeans 6.5\mobility8\external\ (langkah ini bisa di skip)
4. Buka Netbeans IDE, pilih Tools –> Libraries, dan Library Manager akan muncul
5. Pilih Progruard Obfuscator pada Class Library folder –> pada Classpath pilih Add JAR/Folder, dan Form untuk memilih Obfuscator Registry akan muncul
6. Defenisikan lokasi tempat JAR obfuscator yang akan digunakan –> Ok, path dari JAR file tersebut akan tampak pada Library classpath tersebut
7. Simpan perubahan pada Libray Manager dengan tombol OK

Untuk menggunakan obfuscator tersebut pada proses deployment :
1. Klik kanan pada nama project –> pilih Properties
2. Pilih Obfuscating –> dan lakukan adjustment pada bar Obfuscation Level (1-9) sesuai dengan spesifikasi project yang diinginkan pada hasil deployment. Pada level tertentu, developer akan diminta untuk memasukan additional obfuscation level.
3. Tekan Ok untuk menyimpan perubahan property project dan obfuscator akan otomatis digunakan oleh IDE pada saat proses deployment.

Sangat disarankan untuk melakukan testing pada hasil deployment dari obfuscator ini, karena pada lobfuscation level tertentu, model logic tertentu, penggunaan API tertentu, dan handset tertentu, JAR hasil deployment oleh obfuscator tidak dapat dijalankan. okay, happy coding dan selamat mencoba !!

another article as advance read can be found at http://www.devx.com/wireless/Article/28989/0/page/2





Prepocessing

11 08 2009
Masih seputar tidak begitu manisnya slogan write once, run everywhere pada java mobile, maka porting menjadi hal yang cukup krusial yang perlu diperhatikan mobile developer dalam mengembangkan sebuah produk mobile application. Hal – hal yang menjadi perhatian seperti : display size apa saja yang didukung ? JSR API apa saja yang digunakan oleh source ? di platform apa program ini akan berjalan, Nokia S60 ? Nokia S40 ? blackberry ? Motorola ? Bahasa apa yang akan digunakan untuk antar muka ? dsb. Dari hal – hal tersebut, developer dapat menentukan variabel apa saja yang akan disertakan dalam proses deployment.

Preprocessing adalah cara porting yang dilakuakan dengan memodifikasi kode program berdasarkan platform yang akan ditargetkan. Simbol prepocessor ini dapat digunakan untuk melakukan testing pada berbagai emulator dan deployment pada berbagai platform berbeda. Hal ini sangat menguntungkan dan menghemat waktu, karena memungkinkan developer untuk membuat konfigurasi berbeda – beda untuk menghasilkan berbagai versi program yang akan berjalan pada platform / handset berbeda dengan source dari project program yang sama. Sebagai contoh, perubahan pada logic pada line program cukup dilakukan 1 kali dan akan berdampak pada keseluruhan konfigurasi, atau jika line perubahan tersebut hanya akan digunakan untuk konfigurasi tertentu (misal hanya untuk handset S60 tapi tidak S40), maka cukup tambahkan prepocessor pada line tersebut.

Berikut contoh penggunakan prepocessor untuk kasus pendefenisian variabel berdasakan resolusi layar :

#if screenWidth == “175″
widthX = 10;
heightY = 20;
#elif screenWidth == “240″
widthX = 20;
heightY = 30;
#endif

Berikut contoh penggunakan prepocessor untuk pada penggunakan canvas, dimana pada platform nokia mendukung fullcanvas pada package com.nokia.mid.ui. dan yang lain cukup menggunakan package standar pada javax.microsedition.lcdui.

#if nokia
import com.nokia.mid.ui.FullCanvas;
#else
Import javax.microsedition.lcdui.*;
#endif

untuk melakukan testing dan deployment kode program diatas, dapat dilakukan dengan membuat konfigurasi berbeda. Pada Netbeans, dapat dilakukan dengan mendefenisikan ability dan value yang diinginkan pada project properties.
1. Klik kanan pada nama Project –> Properties

2. Pilih Abilities –> Akan tampak table ability yang otomatis di generate oleh IDE, pilih Add –> devenisikan variabel prepocessor baru yang digunakan pada line program. Anda dapat membuang variable abiliti yang tidak dibutuhkan. devoper juga dapat melakukan pendefenisian ulang untuk variabel ability yang sudah ada, seperti ScreenWidth, ScreenHeight, JSR, dll dengan menekan Edit atau klik pada baris nama ability yang akan di ubah –> Ok
3. Developer juga dapat membuat berbagai macam konfigurasi pada property project. Pilih Platform –> Manage Configurations –> akan muncul Project Configuration Manager –> pilih Add atau Add more –> akan muncul Add Project Configuration –> masukan nama konfigurasi misal, S60_3Ed_240×320 –> Ok

4. Pada konfigurasi ini, developer dapat melakukan kustomisasi yang spesifik untuk project seperti API yang didukung, platform, CLDC dan MIDP version, nama JAR – JAD untuk keperluan pendistribusian program, dll
Also can be read similar topic at :





Midlet Icon

4 08 2009
Dalam melakukan deploy aplikasi mobile java untuk handset sebenarnya, terkadang kita menemukan kenyataan yang membuat slogan java sebagai bahasa pemrograman yang write once, run everywhere tidak terlalu tepat atau semanis seperti bunyinya. Nyatanya, sering kali developer harus melakukan kustomisasi terhadap kode dan resource program, sesuai dengan kebutuhan handset yang akan di targetkan.

Salah satu contoh paling sederhana adalah Midlet Icon. Seperti yang kita ketahui, walaupun tidak diharuskan, akan sangat baik jika dalam pendistribusian program mobile java (midlet) disertai icon (biasanya dalam format png) yang akan tampak pada listing aplikasi dalam handset.

Umumnya, setiap handset terkadang memiliki ukuran yang berbeda – beda satu sama lain, sehingga sebelum melakukan deployment, developer mobile java perlu mendefenisikan ukuran midlet icon yang tepat untuk setiap handset. Midlet icon ini dapat di spesifikasikan dan akan tampak pada atribut pada JAD (java application descriptor) file, yaitu :

MIDlet-Icon: /testicon.png

atau

MIDlet-1: [nama midlet], /testicon.png,[nama kelas midlet]

atau jika anda menggunakan IDE, dapat mencari menu untuk melakukan customize midlet icon. Berikut salah satu contoh melakukan pendefenisian dan atau kustomisasi midlet icon(pada contoh ini, menggunakan Netbeans IDE 6.0)
1. Klik kanan pada nama Project –> properties
2.Pilih Build –> Libraries & Resource

3. Pilih Add Folder (jika image yang akan dijadikan midlet icon terdapat paad salah satu folder anda), dan defenisikan image yang diinginkan –> Open

4. Pilih Application Descriptor –> Midlets –> akan tampak tabel Midlets in the Suite –> pilih Edit –> spesifikasikan Midlet Name (akan muncul saat instalasi dan penggunaan program pada hanset), Midlet Class (kelas pada project yang mengimplemen midlet) dan Midlet Icon (akan tampak semua resource image yang sudah di defenisikan pada library tadi (langkah 2 dan 3)) –> Ok

5. Tekan tombol Ok pada kanan bawah form ini untuk menyimpan perubahan properties project

Setiap handset memiliki penanganan yang berbeda untuk ukuran Midlet icon yang tidak tepat. Sebagai contoh, ada yang otomatis melakukan scale icon tersebut pada ukuran yang tepat, ada yang menampilkannya tetap sebagai ukuran yang sebenarnya ehingga jika icon lebih kecil ia akan tampak kecil pada sisi kanan area (nokia s60) dan jika lebih besar tetap akan tampak terpotong.

Berikut beberapa rekomendasi ukuran midlet icon yang saya dapatkan dari beberapa referensi, atau saran developer lain dan telah di implementasikan beberapanya. Saya akan sangat berterima kasih jika anda mengkonformasi jika terdapat saran untuk ukuran yang lebih baik dan atau menambahkan list yang sudah ada.

Blackberry :

  • display size resolution 320 x 240 –> 46 x 48 pixels
  • display size resolution 480 x 320 –> 53 x 53 pixels
  • General –> 45 x 45 pixels

Motorola :

  • display size resolution 176 x 220 –> 27 x 24 pixels
  • display size resolution 240 x 320 –> 27 x 24 pixels
  • General –> 15 x 15, 16 x 16, 32 x 32

Nokia S90 :

  • small display size resolution –> 25 x 20 pixels
  • medium dan large display size resolution –> 64 x 50 pixels

Nokia S80 :
General –> 64 x 50 pixels

Nokia S60 1st and 2nd Edition :

  • display size resolution 176 x 208 –> 31 x 31, 42 x 29 (best fit), 29 x 29 pixels
  • display size resolution 208 x 176 –> 37 x 37 pixels
  • display size resolution 240 x 320 –> 53 x 53, 55 x 55 pixels
  • display size resolution 352 x 416 –> 76 x 76 pixels
  • display size resolution 416 x 352 –> 76 x 76 pixel

Nokia S60 3rd Edition :

  • display size resolution 176 x 208 –> 31 x 31 (best fit), 42 x 29 pixels
  • display size resolution 240 x 320 –> 53 x 53 (best fit), 55 x 55, 64 x 64 pixels
  • display size resolution 320 x 240 –> 52 x 52 (best fit), 54 x 54 pixels
  • display size resolution 360 x 640 –> 52 x 52 pixels
  • display size resolution 352 x 416 –> 64 x 64, 76 x 76 (best fit) pixels
  • display size resolution 416 x 352 –> 76 x 76 (best fit) pixels
  • display size resolution 208 x 176 –> 37 x 37
    208×208:37×37

Nokia S40

  • display size resolution 128 x 128 –> 16 x 16 pixels
  • display size resolution 128 x 160 –> 18 x 18, 24 x 24 (best fit), 29 x 29 pixels
  • display size resolution 176 x 220 –> 27 x 24 pixels
  • display size resolution 208 x 208 –> 46 x 46 pixels
  • display size resolution 240 x 320 –> 46 x 48 (best fit), 42 x 29 pixels

Nokia S30
General –> 16 x 16 pixels

7560 dan 3650
General –> 32 x 32 pixels

N90
General –> 84 x 58 pixels

Samsung

  • display size resolution 176 x 220 –> 27 x 24 pixels
  • display size resolution 240 x 320 –> 27 x 24 pixels
  • display size resolution 320 x 240 –> 27 x 24 pixels
  • General –> 16 x 16, 29 x 29, 32 x 32 pixels
  • D807 –>32 x 32 pixels – Ignores 8-bit transparency, maybe 32-bit alpha would work
  • E770 –> 16 x 16 pixels
  • Z140v –> 24 x 24 pixels – use ‘web safe’ colors at 8 bit (256 color)
  • Z400 –> 53 x 46 pixels – (empirical)
  • Z500 –> 40 x 34 pixels
  • ZX10,ZX20 –> 42 x 36 pixels- same as D807
  • All Others – None

Siemens
General –> 18 x 18, 14 x 14 pixels

Sony Ericsson

  • General –> 16 x 16, 32 x 32 pixels
  • V800, W900 –> 24 x 24 pixels
  • K608i, W600i –> 16 x 16 pixels
  • Seri JP4, JP5, JP6 –> 16 x 16 pixels (recommended by SonyEricsson)
  • K700i, T610, T616, T618, T628, T630, T637, Z600, Z608, K500, K506, K508, K700, Z500, S700, S710a, P800, P900 –> No icon
  • P910 – supports icons in various sizes and attempts to scale/adapt these to a size suitable for display. The icon size shouldn’t matter, only that smaller ones might show up a bit jagged due to magnification.

Sharp
General –> 27 x 27 pixels
GX Series –> 24 x 24 pixels

Sagem
General –> 18 x 18 pixels

Vodafone Japan
General –> 24×24 pixels
905SH, 903SH, 902SH, 804SH, 705SH, 702SH –> 42 x 42 pixels

Sanyo
4920 –> 9 x 9 pixels
5300 –> 16 x 16 pixels
8100 –> 15 x 15 pixels

LG
CU-500 –> 15 x 15, 16 x 16 pixels

Palm
Tungsten, Treo, Low Res –> 22 x 22, 9 x 15 pixels

Kebanyakan dari handset diatas mendukung midlet icon dengan format png 1bit-depth, 4bit-depth, 8bit-depth, kecuali Nokia S60 3rd Edition dengan konfigurasi terbaik hingga 24bit-depth.

Advance read :

Terakhir diubah pada 11 agustus 2009





Little "annoying" Thumbs.db

30 10 2008
Pada suatu ketika saya dipaksa untuk memikirkan sesuatu, tentang makhluk kecil yang berkeliaran dalam komputer kesayangan. Terus terang sebelumnya makhluk ini tak begitu kuperdulikan ketika ia bermunculan disana sini dalam ruang – ruang space komputer tersayang ku. Hingga suatu hari, ketika saya harus berurusan dengan “1 bit is not a litle bit matter, its really count“ dalam pekerjaan yang makin menuntut performa maksimal, maka saya memutuskan saat itu lah makhluk ini perlu untuk diselidiki.

Saya yakin, hampir semua pengguna Windows pernah melihat icon kecil pada directori file nya, Oom Gates memberi nama untuk dia sebagai Thumbs.db. Dimulai dari era Windows Millennium, Microsoft menambahkan feature bernama Thumbnail View dengan menempatkan nya sebagai salah satu View option pada area tool bar dari Windows Explorer dan My Computer. Dengan cara ini, oom Gates bermaksud mempermudah para konsumen setia nya untuk melihat isi file pada suatu folder yang berisi picture dalam Thumbnail format sehingga tidak perlu repot – repot membuka file tersebut hanya untuk mengetahui isi nya.

File ini adalah chache dari thumbnail file gambar pada suatu folder dengan tujuan dapat mempercepat pengaksesan file tersebut dengan Thumbnail view. Dengan kata lain ini adalah database file yang berisi image kecil yang akan ditampulkan setiap kali kita menggunakan mode view folder dengan Thumbnail view / tidak perlu dibuka untuk melihat isinya. However, walaupun user telah mengubah setting folder vide menjadi Icon, Tile,List atau Details, sebuah file yang bernama Thumbs.db tetap ada didalam folder tersebut.

Dan disini lah dimulai nya masalah nya. Kenyataannya file ini digenerated secara otomatis oleh OS Windows baik user meminta nya atau tidak. Hal yang lebih menyedihkan adalah setiap File Thumbnail ini setidaknya akan berkisar 2kb hingga 100kb per file dan jika user mengedit banyak file akan sangat mengganggu karena File Thumbnail ini akan popping up disetiap file, sehinga File Thumbnail akan mengkonsumsi banyak hard disk space. Tidak ada kerugian yang cukup besar untuk menghilangkan file ini kecuali jika anda bekerja dengan banyak file image dan tidak ingin repot – repot membuka file image tersebut hanya untuk melihat nya. Pada kasus ini, men dispabling Thumbnail caching ini akan memperlambat pengaksesan file pada thumbnail view.

Untuk menghapus file Thumbnail.db ini pada Windows XP lakukan dengan : Click Start > click Search > Click All files dan folders option > tuliskan pada box Thumbs.db > Click Search dan pastikan semua Local Hard Drive terpilih> Delete semua File Thumbs.db yang ada. Jika anda beruntung, semua file Thumbs.db yang di-select akan ter-delete, tapi ada kemungkinan akan muncul pesan seperti ‘in use’ atau ‘can’t be found’ dll,. Anda bisa memilih untuk men-delete sekelompok file Thumbs.db untuk kemudian mengetahui file mana yang tak bisa di delete.

Untuk menhapus annoying File thumbs.db ini yang dibuat Windows ketika mem browsing network drive dapat dilakukan dengan melakukan command travers terhadap semua directori dan men delete semua “Thumbs.db” yang ditemukan secara otomatis dengan perintah find / -name “Thumbs.db” -exec rm ‘{}’ \;

Namun masalah terjadi karena Windows selalu membuat kembali File Thumbnails.db ini secara otomatis. Mengapa ?? sebelum saya menjawabnya, seorang kawan sudah nyeletuk : Becouse windows is suck“.. hahaha,,no comment deh untuk itu..Karena pada kenyataan nya sampai saat ini saya belum bisa beranjak dari ketergantungan terhadap windows,,maklum rencana untuk belajar unix dan ubuntu tak kunjung terealisasi !_! Okay, back to topic,, Untuk melakukan turn off terhadap feature automatic ini lakukan dengan : Buka My Computer > Click Tools atau pada Explorer, click Tools -> pilih Folder Options atau Click Start button > Pilih Control Panel (atau Settings, lalu Control Panel) lalu Click Folder Option > Click View Tab > check pada option “Do not cache thumbnails”> Click Ok > Tutup My Computer

Atau dengan Click Run di startmenu > tuliskan gpedit.msc > Click OK dan Group Policy akan muncul > pilih User Configuration/Administrative Template/Windows Components/Windows Explorer > Double-Click pada Turn off caching of thumbnail pictures > Click Enable lalu Apply, dan Ok

Perubahan juga dapat dilakukan pada Registry dengan : Click Run di startmenu > buka Registry Editor dengan menuliskan regedit.exe > pilih HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced > Double-click pada DisableThumbnailCache value atau pilih Edit > New > buat value DWORD, masukan 1 > Click Ok dan tutup Registry Editor. Perubahan akan tampak setelah melakukan log off.

Oke,,selamat berjuang atau anda bisa memilih untuk pindah agama ke Mac ato Linux atau. ??
ah sudah lah,,back to work dulu :p


Sumber :
http://www.annoyances.org/
http://www.pchell.com/
http://www.softwaretipsandtricks.com/
http://www.daniweb.com/
http://www.real-knowledge.com/





Pengenalan Java

3 10 2007

1. Pemrograman Berorientasi Objek [MDLJV]

1.1 Object Oriented Vs Procedural

Beberapa pendekatan dalam pemrograman berorientasi procedural:

·Teknik Top-Down, tugas-tugas yang kompleks dipecah menjadi bagian yang lebih kecil, sampai sub tugas tersebut mudah diimplementasikan.

·Teknik Buttom-Up, membuat procedure-procedure untuk menyelesaikan tugas yang sederhana, kemudian menggabungkannya dalam procedure yang lebih kompleks, sampai fungsionalitas yang diinginkan tercapai.

Untuk menentukan procedure di dalam procedural programming sama dengan menentukan sebuah method yang ada dalam OOP. Perbedaan OOP adalah memisahkan class-class, menentukan methode-methode dalam class yang dihubungkan dengan class yang bertanggung jawab untuk menjalankan suatu fungsi.

Dengan menggunakan class, fungsionalitas dari suatu class sudah di encapsulate di dalamnya sehingga sangat membantu dalam membangun project. Seorang programmer dapat menggunakan class yang sudah dibuat programmer lain, tanpa ia perlu tahu bagaiman detailnya suatu class mengerjakan suatu operasi

Beberapa konsep penting OOP :

· Pengkapsulan(Encapsulation)

Pengkapsulan adalah proses pemaketan data object bersama method-methodnya. Manfaat utama pengkapsulan bagi pemrogram, yaitu :

1. Penyembunyian informasi (information hiding)

Penyembunyian implementasi mengacu perlindungan implementasi internal objek. Objek disusun dari antarmuka public dan bagian private yang merupakan kombinasi data dan method internal. Manfaat utama adalah bagian internal dapat berubah tanpa mempengaruhi bagian-bagian program yang lain.

2. Modularitas (Modularity)

Membuat objek dapat dikelola secara independent sehingga bebas melakukan modifikasi tanpa menyebabkan masalah pada bagian lain. Manfaat ini mempermudah mendistribusikan objek-objek di system.

· Pewarisan (Inheritance)

Pewarisan adalah proses penciptaan class baru dengan mewarisi karakteristik class yang telah ada, ditambah karakteristik unik class baru itu.. Pewarisan memungkinkan class mewarisi fungsionalitas class yang telah ada dan mengorganisasi class.

Subclass mewarisi semua method dan variabel dari superclassnya. Secara praktis berarti bahwa jika superclass telah mendefinisikan perilaku yang kita perlukan, maka kita tidak perlu mendefinisi ulang perilaku itu, kita cukup membuat class yang merupakan subclass dari superclass yang dimaksud

Contoh:

class SuperContohInheritance {

int iVar1,iVar2;

/** Creates a new instance of SuperContohInheritance*/

public SuperContohInheritance() {

}

int mSuperClass(){

iVar1 = iVar1 + iVar2;

System.out.println(“nilai var1 + var2 = “+iVar1+” + “+iVar2+”= ” +iVar1);

return iVar1;

}

}

public class SubContohInheritance extends SuperContohInheritance{

private int iVar3;

/** Creates a new instance of SubContohInheritance*/

public SubContohInheritance(int iVar1,int iVar2,int iVar3){

this.iVar1 = iVar1;

this.iVar2 = iVar2;

this.iVar3 = iVar3;

}

void mSubClass(){

System.out.println(“nilai iVar3 di variabel instan adalah “+this.iVar3);

}

public static void main(String args[]){

SubContohInheritance objek1 = new SubContohInheritance(100,200,300);

objek1.mSuperClass();

objek1.mSubClass();

}

}

Output :

D:\>java SubContohInheritance

nilai var1 + var2 = 300 + 200= 300

nilai iVar3 di variabel instan adalah

·Polimorfisme (Polymorphism)

Polimorfisme berarti mempunyai banyak bentuk. Dua objek atau lebih dikatakan sebagai polymorphic bila objek-objek itu mempunyai antarmuka-antarmuka identik namun mempunya perilaku-perilaku yang berbeda. Pada bahasa pemrograman fungsional yang lain, untuk melengkapi dua pekerjaan yang berbeda diperlukan dua fungsi terpisah dengan nama yang berbeda. Pada Polimorfisme memperbolehkan method memiliki beberapa implementasi yang dipilih berdasarkan tipe objek yang dilewatkan pada pengerjaan method, ini dikenal dengan overloading method.

· Pesan (Message)

Objek-objek memerlukan suatu tipe mekanisme komunikasi untuk saling berinteraksi. Objek-objek saling berkomunikasi dan berinteraksi lewat message. Ketika berkomunikasi objek mengirim pesan (memanggil method) untuk memberitahu agar objek lain melakukan sesuatu yang diharapkan.. Seringkali pengiriman message juga disertai informasi untuk memperjelas apa yang dikehendaki. Informasi yang dilewatkan beserta message adalah parameter message.

1.2 Kelas (Class) dan Objek (Object)

Kelas merupakan bentuk logik dimana seluruh bahasa berorientasi objek dibangun. Kelas mendefinisikan bentuk dan sifat/kelakuan/perilaku objek.Semua konsep/abstraksi yang kita implementasikan di Java harus dikapsulkan/dikemas dalam class. Kelas adalah template atau prototype yang mendefinisikan type objek, sarana pengkapsulan kumpulan data-data dan method-method yang mengolah data-data tersebut, adalah cetakan objek, jadi objek harus merupakan instant suatu kelas. Data dan method berguna untuk mendefinisikan isi dan kemampuan objek.


Deklarasi Kelas

Classmodifier class namaclass [extends namasuperclass] [implements namainterface]

/* Mendefinisikan atribut */

Type instance-variabel1;

Type instance-variabel2;

Type instance-variabelN;

/* Mendefinisikan atribut */

Type instance-variabel1;

Type instance-variabel2;

Type instance-variabelN;

/* Mendefinisikan constructor */

[modifier] namaclass(parameterlist){

constructor body;

}

/*Mendefinisikan method*/

Type methodname1(parameterlist){

Methodbody;

}

Type methodname2(parameterlist){

Methodbody;

}

}

namaclass dan namasuperclass dapat berupa identifier apa saja yang berlaku. Kata kunci extends digunakan untuk menunjukkan bahwa namaclass adalah subclass namasuperclass. Di Java terdapat sebuah class object yang merupakan induk hirarki class Java. Jika kita ingin langsung menurunkan class namaclass dari class object maka dapat menghilangkan pertanyaan extends karena compiler secara otomatis akan memasukkanya.

Contoh :

class Switch {

private boolean isOn = false;

/** Creates new Switch */

public Switch() {

}

public void turnOn(){

isOn = true;

}

public void turnOff() {

isOn = false;

}

public boolean isItOn() {

return isOn;

}

}

public class HomeSweetHome {

private Switch bedroomSwitch = new Switch();

private Switch hallWaySwitch = new Switch();

/** Creates a new instance of HomeSweetHome */

public HomeSweetHome() {

}

public void turnOnBedroomSw() {

bedroomSwitch.turnOn();

System.out.println(“bedroom switch is now on”);

}

public static void main(String[] arg){

HomeSweetHome obHouse = new HomeSweetHome();

System.out.println(“now, I turn on the bedroom switch”);

obHouse.turnOnBedroomSw();

}

}

Output :

D:\>java HomeSweetHome

now, I turn on the bedroom switch

bedroom switch is now on

Apakah hubungan class dengan objek? Class adalah blue print dari objek, ini berarti bahwa kita dapat membuat banyak objek dari satu macam class. Kita tidak dapat melakukan sesuatu dengan/terhadap class (kecuali untuk data dan method static), kita hanya dapat melakukan sesuatu terhadap objek yang diinstan dari sebuah class. Instants atau objek adalah suatu salinan pola class, dengan kumpulan datanya sendiri yang disebut variable instans. Setiap instantsnull yang merupakan referensi untuk tipe object, sehingga tipenya cocok dengan semua class lain. dapat juga dirujuk sebagai objek. Jika kita mendeklarasikan tipe suatu variabel sebagai suatu class, maka dia memiliki nilai awal

Objek null tidak memiliki nilai, seperti contoh di bawah ini :

Classname p;

Disini variabel p memiliki nilai null, kita hanya melakukan reference variabel p dengan tipe objek Classname. untuk membuat objek sebenarnya atau mengalokasikan objek Classname terhadap variabel p maka kita akan gunakan operator new.

Operator new menghasilkan instans tunggal dari suatu class dan menghasilkan referensi ke objek tersebut, seperti contoh dibawah ini :

p = new Classname();

Di sini kita telah menciptakan instant/objek dengan tipe/class Classname dan diberikan ke variabel p. Variabel p mengacu atau bertindak sebagai reference ke objek tersebut.

Penggunaan objek dilakukan dnegna mengirimkan pesan ke objek atau dnegna kata lain, mamanggil method yang terdapat dalam objek tersebut.

Penghancuran objek dalam Java tidak perlu dilakukan karena Java menyediakan Garbage Collecotor yang mendeteksi dan memusnahkan objek yang saling tidak di acu oleh objek lain yang masih digunakan oleh program

1.3 Konstruktor (Constructor)

Konstruktor digunakan untuk melakukan inisialisasi variable-variabel instan class serta melakukan persiapan-persiapan yang diperlukan oleh suatu objek untuk dapat beroperasi dengan baik.

Format umum pendeklarasian dan pendefinisian constructor adalah :

· Nama constructor sama dengan nama class.

· Sebelum itu dapat diberi access modifier untuk mengatur visibility constructor.

Dalam suatu Class dapat lebih dari satu constructor, masing-masing harus mempunyai parameter yang berbeda sebagai penandanya. Hal seperti ini disebut Overloading terhadap constructor.

Deklarasi Konstruktor :

[modifier] namaclass(parameter1){

Body constructor;

}

[modifier] namaclass(parameter1,parameter2){

Body constructor;

}

[modifier] namaclass(parameter1,parameter2,…,parameterN){

Body constructor;

}

Contoh:

public class ContohConstructor {

int iVar;

/** Creates a new instance of ContohConstructor */

public ContohConstructor(int iVar){

System.out.println(“Ditampilkan ketika objek diciptakan”);

this.iVar = iVar;

}

public ContohConstructor(int iParam,String sParam){

System.out.println(sParam);

iVar = iParam;

}

int mTambah(){

iVar = iVar + 10;

return iVar;

}

public static void main(String args[]){

ContohConstructor obConst1 = new ContohConstructor(100);

ContohConstructor obConst2 = new ContohConstructor(200,”ditampilkan lagi ketika objek2 diciptakan”);

System.out.println(“nilai dari parameter inputan untuk constructor objek1 “+obConst1.mTambah());

System.out.println(“nilai dari parameter inputan untuk constructor objek2 “+obConst2.mTambah());

}

}

Output :

D:\>java ContohConstructor

Ditampilkan ketika objek diciptakan

ditampilkan lagi ketika objek2 diciptakan

nilai dari parameter inputan untuk constructor objek1 110

nilai dari parameter inputan untuk constructor objek2 210

1.4 Metod (Methode) dan Atribut (atribut)

Method dikenal dengan fungsi dan procedure. Dalam OOP, Method digunakan untuk memodularisasi program melalui pemisahan tugas dalam suatu kelas. Pemanggilan method menspesifikasikan nama method dan menyediakan informasi (parameter) yang diperlukan untuk melaksanakan tugasnya. 2 Teknik pelewatan parameter (parameter passing) :

· Pelewatan dengan nilai (Pass By Value) dimana parameter dilewatkan melalui pengkopian nilai argumen, sehingga perubahan terhadap parameter tidak berpengaruh terhadap argument

· Pelewatan dengan Acuan (Pass By Reference) dimana yang dilewatkan adalah objek, sehingga perubahan terhadap parameter akan berlaku untuk variabel yang dilewatkan ke metode

Deklarasi method untuk yang mengembalikan nilai (fungsi) :

[modifier]Type-nilai_kiriman namamethod (parameter1, parameter2,…, parameterN){

Deklaras-deklarasi dan proses;

return nilai_kembalian;

}

Deklarasi method untuk yang tidak mengembalikan nilai (procedure) :

[modifier] void namamethod(parameter1,parameter2,…,parameterN){

Deklaras-deklarasi dan proses;

}

Contoh :

class Test {

int iVar1, iVar2, iVar3;

Test(int iVar1, int iVar2, int iVar3) {

this.iVar1 = iVar1;

this.iVar2 = iVar2;

this.iVar3 = iVar3;

}

/*Overidding method dengan pass by value */

void Calculate(int iCal1, int iCal2) {

iCal1 = iCal1 * 10;

iCal2 = iCal2 / 2;

}

/* Overidding method dengan pass by reference */

void Calculate(Test obTest) {

obTest.iVar1 = obTest.iVar1 * 10;

obTest.iVar2 = obTest.iVar2 / 2;

}

/*Overidding method yang mengembalikan nilai*/

int OverMethod(int iAngka){

iVar3 = iVar3 + iAngka;

System.out.println(“Tulisan ini bukan dari parameter inputan”);

System.out.print(“iVar3 + iAngka = “+iVar3+” + “+iAngka+” = “);

return (iVar3+iAngka);

}

/*Overidding method yang tidak mengembalikan nilai*/

void OverMethod(int iAngka, String sComment){

System.out.println(sComment);

System.out.println(“iVar3 + iAngka = “+iVar3+” + “+iAngka+” = “+(iVar3 + iAngka));

}

}

public class ContohMethod{

/** Creates a new instance of ContohMethod*/

public ContohMethod() {

}

public static void main(String[] argv) {

int iParam1, iParam2;

String sKalimat =”Tulisan ini dikirim dari parameter inputan “;

Test obTestParam = new Test(50,100,500);

iParam1 = 10;

iParam2 = 20;

System.out.println(“Nilai sebelum pass by value”);

System.out.println(“iParam1 = “+iParam1);

System.out.println(“iParam2 = “+iParam2);

/* pemanggilan method dengan pass by value*/

obTestParam.Calculate(iParam1,iParam2);

System.out.println(“Nilai setelah pass by value”);

System.out.println(“iParam1 = “+iParam1);

System.out.println(“iParam2 = “+iParam2);

/*————————————————-*/

System.out.println(“Nilai sebelum pass by reference”);

System.out.println(“obTestParam.iVar1 = “+obTestParam.iVar1);

System.out.println(“obTestParam.iVar2 = “+obTestParam.iVar2);

/* pemanggilan method dengan pass by reference*/

obTestParam.Calculate(obTestParam);

System.out.println(“Nilai setelah pass by reference”);

System.out.println(“obTestParam.iVar1 = “+obTestParam.iVar1);

System.out.println(“obTestParam.iVar2 = “+obTestParam.iVar2);

/* pemanggilan method yang mengembalikan nilai */

System.out.println(obTestParam.OverMethod(500));

/* pemanggilan method yang tidak mengembalikan nilai */

obTestParam.OverMethod(500,sKalimat);

}

}

Output:

D:\>java ContohMethod

Nilai sebelum pass by value

iParam1 = 10

iParam2 = 20

Nilai setelah pass by value

iParam1 = 10

iParam2 = 20

Nilai sebelum pass by reference

obTestParam.iVar1 = 50

obTestParam.iVar2 = 100

Nilai setelah pass by reference

obTestParam.iVar1 = 500

obTestParam.iVar2 = 50

1.5 Modifier 1.5 Modifier

Modifier memberi dampak tertentu pada class, interface, method dan variabel. Java modifier terbagi menjadi kelompok berikut:

1. Access modifier / Visibility Modifier berlaku untuk class, method, variable dan interface, meliputi modifier Public, Protected, Private, dan Default (tak ada modifier). Modifier ini berguna untuk menentukan kontrol terhadap member class tersebut.

Modifier

Class dan Interface

Method dan Variabel

Default (tak ada modifier)

Tampak di Paketnya

Diwarisi oleh subclassnya di paket yang sama dengan classnya. Dapat diakses oleh method-method di class-class yang sepaket.

Public

Tampak di manapun

Diwarisi oleh semua subclassnya.

Dapat diakses dimanapun.

Protected

Tidak dapat diterapkan

Diwarisi oleh semua subclassnya.

Dapat diakses oleh method-method di class-class yang sepaket.

Private

Tidak dapat diterapkan

Tidak diwarisi oleh subclassnya

Tidak dapat diakses oleh class lain.

2. Final modifier berlaku untuk class,variabel dan method, meliputi modifier final.

3. Static modifier berlaku untuk variabel dan method, meliputi modifier static.

4. Abstrac modifier berlaku untuk class dan method, meliputi modifier abstract.

5. Syncronized modifier berlaku untuk method, meliputi modifier syncronized .

6. Native modifier berlaku untuk method, meliputi modifier native.

7. Storage modifier berlaku untuk variabel, meliputi transient dan volatile.

Modifier

Class

Interface

Method

Variabel

Abstract

Class dapat berisi method abstract. Class tidak dapat diinstantiasi

Tidak mempunyai constructor

Optional untuk diberikan di interface karena interface secara inheren adalah abstract.

Tidak ada badan method yang didefinisikan. Method memerlukan class kongkret yang merupakan subclass yang akan mengimplementasikan method abstract

Tidak dapat diterapkan.

Final

Class menjadi tidak dapat digunakan untuk menurunkan class yang baru.

Tidak dapat diterapkan.

Method tidak dapat ditimpa oleh method di subclass-subclassnya

Berperilaku sebagai konstanta

Static

Tidak dapat diterapkan.

Tidak dapat diterapkan.

Mendefinisikan method (milik) class. Dengan demikian tidak memerlukan instant object untuk menjalankanya. Method ini tidak dapat menjalankan method yang bukan static serta tidak dapat mengacu variable yang bukan static.

Mendefinisikan variable milik class. Dengan demikian, tidak memerlukan instant object untuk mengacunya. Variabel ini dapat digunakan bersama oleh semua instant objek.

synchronized

Tidak dapat diterapkan.

Tidak dapat diterapkan.

Eksekusi dari method adalah secara mutual exclusive diantara semua thread. Hanya satu thread pada satu saat yang dapat menjalankan method

Tidak dapat diterapkan pada deklarasi. Diterapkan pada instruksi untuk menjaga haya satu thread yang mengacu variable pada satu saat.

Native

Tidak dapat diterapkan.

Tidak dapat diterapkan.

Tidak ada badan method yang diperlukan karena implementasi dilakukan dengan bahas lain.

Tidak dapat diterapkan.

transient

Tidak dapat diterapkan.

Tidak dapat diterapkan.

Tidak dapat diterapkan.

Variable tidak aka diserialisasi

Volatile

Tidak dapat diterapkan.

Tidak dapat diterapkan.

Tidak dapat diterapkan.

Variabel diubah secara asinkron. Kompilator tidak pernah melakukan optimasi atasnya.

1.6 This

Java memasukkan suatu besaran referensi khusus yang disebut this, yang digunakan didalam method yang dirujuk untuk objek yang sedang berlaku. Nilai this merujuk pada objek dimana method yang sedang berjalan dipanggil.

Terdapat 2 cara dalam penggunan this yaitu secara Eksplisit dan Implisit. Pemanggilan Eksplisit biasanya digunakan untuk mengatasi penamaan yang sama. Sedangkan pada pemanggilan Implisit, karena tidak ada pertentangan maka tidak harus menulis kata kunci this secara eksplisit. Bilapun ditulis akan mempunyai efek yang sama. Namun sebenarnya kompilator akan menambahkan kata kunci this untuk pengacuan ke lokasi yang tepat di objek itu secara otomatis.

Pada program ContohConstructor terlihat parameter di constructor yaitu iVar yang memiliki kesamaan nama dengan variabel instant iVar di class ContohConstructor, untuk mengatasinya maka digunakan this yang mengacu variabel instant milik objek.

Potongan program ContohConstructor :

public class ContohConstructor {

……

/* ini merupakan penerapan dari Pemanggilan Eksplisit */

public ContohConstructor(int iVar){

System.out.println(“Ditampilkan ketika objek diciptakan”);

this.iVar = iVar;

}

/* ini merupakan penerapan dari Pemanggilan Implisit */

public ContohConstructor(int iParam,String sParam){

System.out.println(sParam);

iVar = iParam;

}

……

DAFTAR PUSTAKA

[FSW] Wiryasantika, Faisal. faisal@winwinfaisal.info

[MDLJV] Modul Praktikum Java. 2005. Program Studi D3 Jurusan Teknik Informatika. STTTelkom : Bandung (Tidak Diterbitkan)





Research Group Recruitment

20 09 2007

Mobile Communication Laboratory, one of the well known laboratory in mobile communication research and development, are inviting highly qualified person for Laboratory Research Group position for each division:

1. Cellular Networks code: CN
Job desk:
· Introduction cellular technology and evolution
· MSC AMPS EMX 500 + BTS operation and maintenance
· RF Planning
· MATLAB / SIMULINK research, application and simulation
· Software and hardware application analysis and research

Special requirements:
· Students of STT Telkom
Topic for paper:
· Next generation on cellular technology (4th generation Ex. ATDMA, OFDM, MCCDMA, UWB, MIMO etc.),
· Broadband wireless access,
· Hardware of wireless technology,
· Enhanced 3G (HSDPA), etc.

2. Mobile Application code: MA
Job desk:
· OOP concept with Java and C++
· Developing BREW application
· Mobile Operating System, J2ME application
· Developing Symbian C++ application
· Developing LBS and implementation
· Software engineering SMS/MMS
· SMS/MMS application and implementation
· Developing WAP and implementation
· Developing mobile internet application (streaming, chat, etc)

Topic for paper:
· OOP in JAVA, Comparison BREW and J2ME,
· Developing VAS with J2ME, BREW,
· Symbian OS, Palm OS, and .Net platform,
· GPS and LBS Implementation,
· Messaging Evolution and SMS/MMS Cellular network,
· Developing SMS or MMS application,
· WAP Gateway Implementation, Value Added Service with WAP,
· Comparison XHTML and WML,etc.

Special requirements:
· Students of STT Telkom
· Know some programming language

General Requirements (for all division) :

  • Good command of English and Good communication.
  • Good knowledge about basic cellular concept.
  • Self motivated, creative , dynamic, self confidence and teamwork ability.
  • Qualified in special requirements in each division you will choose

Suitable qualified applicants are invited to apply no later than Sept 24 th, 2007 at 23:59:59 pm after this advertisement together with :

Application letter (with your division choice) (in english)
Curriculum Vitae (in english)
Academic Transcript
Latest photograph (4 x 6 cm) 2 pc
Paper (choose one topic in the list, suitable with your division choice) :
(in Indonesian, 2 pages minimum, font :Arial, line spacing1,5 )

Please send it (directly to laboratory) in A4 envelope :

Mobile Communication Laboratory
http://mobilecommlab.or.id
STT Telkom Bandung E – 203
Jl Telekomunikasi no 1, DayeuhKolot
Bandung 40257
CN –> Blue Envelope
MA –> Yellow Envelope

and write your division code choice in Top Left your A4 envelope !!!!!





Research Group Recruitment

20 09 2007

Mobile Communication Laboratory, one of the well known laboratory in mobile communication research and development, are inviting highly qualified person for Laboratory Research Group position for each division:

1. Cellular Networks code: CN
Job desk:
· Introduction cellular technology and evolution
· MSC AMPS EMX 500 + BTS operation and maintenance
· RF Planning
· MATLAB / SIMULINK research, application and simulation
· Software and hardware application analysis and research

Special requirements:
· Students of STT Telkom
Topic for paper:
· Next generation on cellular technology (4th generation Ex. ATDMA, OFDM, MCCDMA, UWB, MIMO etc.),
· Broadband wireless access,
· Hardware of wireless technology,
· Enhanced 3G (HSDPA), etc.

2. Mobile Application code: MA
Job desk:
· OOP concept with Java and C++
· Developing BREW application
· Mobile Operating System, J2ME application
· Developing Symbian C++ application
· Developing LBS and implementation
· Software engineering SMS/MMS
· SMS/MMS application and implementation
· Developing WAP and implementation
· Developing mobile internet application (streaming, chat, etc)

Topic for paper:
· OOP in JAVA, Comparison BREW and J2ME,
· Developing VAS with J2ME, BREW,
· Symbian OS, Palm OS, and .Net platform,
· GPS and LBS Implementation,
· Messaging Evolution and SMS/MMS Cellular network,
· Developing SMS or MMS application,
· WAP Gateway Implementation, Value Added Service with WAP,
· Comparison XHTML and WML,etc.

Special requirements:
· Students of STT Telkom
· Know some programming language


General Requirements (for all division) :

  • Good command of English and Good communication.
  • Good knowledge about basic cellular concept.
  • Self motivated, creative , dynamic, self confidence and teamwork ability.
  • Qualified in special requirements in each division you will choose

Suitable qualified applicants are invited to apply no later than Sept 24 th, 2007 at 23:59:59 pm after this advertisement together with :

Application letter (with your division choice) (in english)
Curriculum Vitae (in english)
Academic Transcript
Latest photograph (4 x 6 cm) 2 pc
Paper (choose one topic in the list, suitable with your division choice) :
(in Indonesian, 2 pages minimum, font :Arial, line spacing1,5 )

Please send it (directly to laboratory) in A4 envelope :

Mobile Communication Laboratory
http://mobilecommlab.or.id
STT Telkom Bandung E – 203
Jl Telekomunikasi no 1, DayeuhKolot
Bandung 40257
CN –> Blue Envelope
MA –> Yellow Envelope

and write your division code choice in Top Left your A4 envelope !!!!!





Analisis dan Perancangan Fast Channel Switching pada Mobile Live TV Streaming 2.1

30 07 2007

BAB II-Landasan Teori

2.1. REAL TIME VIDEO STREAMING


2.1.1. Pendahuluan

Streaming adalah teknologi transmisi pengiriman data, video atau audio secara real time / pre-recorded dari sender pada receiver. Ide dari streaming adalah membagi data, encoding, mengirimkan melalui jaringan dan saat bagian data tiba pada client maka dilakukan decoding serta membaca data. Ciri – ciri aplikasi Streaming [12] : Distribusi audio, video dan multimedia pada jaringan secara real time atau on demand, transfer media data digital oleh server dan diterima oleh client sebagai real time stream simultan, client tidak perlu menunggu keseluruhan data didownload karena server mengirimkan data yang diperlukan setiap selang waktu tertentu. Sehingga memungkinkan client menjalankan file content seketika dengan periode buffer pendek.

Stream adalah aliran paket data yang berisi konten media tertentu yang di generated oleh streaming media server [6]. Salah satu keuntungannya adalah, tidak ada data yang disimpan permanen pada client setelah data yang diterima dijalankan. Sehingga, user tidak dapat menyimpan atau men-forward file yang telah ia terima kepada user lain.

Multimedia Streaming merupakan transmisi data real time (audio, video, grafis, image, serta text) dari sender ke receiver. Secara umum, model pengiriman file Multimedia Streaming[14] Live, dimana server meng-capture dan encode serta mengirim stream secara real time dan Pre Recorded / On Demand, dimana server melalukan pre-encoded dan menyimpan content lalu mengirimkan pada client saat ada permintaan. Client dapat meng-interupt pengiriman file content tersebut. terbagi 2 yaitu

Streaming adalah pengaksesan konten streaming dari terminal dengan kapabilitas packet-switched data dan streaming media player software melalui jaringan kemunikasi bergerak [10].

Jenis aplikasi pada komunikasi Video [15] :

1. Broadcast. Bersifat One-to-many / One-to-all, sender menggunakan channel berbeda untuk setiap receiver, contoh Digital Video Broadcast for Handled (DVB – H)

2. Multicast. Bersifat One-to-many, hanya pada client tertentu, contoh IP-Multicast over the Internet, Multimedia Broadcast Multicast Service (MBMS)

3 Unicast / Point-to-point. Bersifat One-to-one dengan property tergantung pada available back channel yaitu dengan back channel atau tidak. Contoh: Videophone, unicast over the Internet, VOD and Live Streaming

Layanan Mobile TV sendiri terdiri dari kategori Interactive Mobile TC (DVB-H), Buffered Personalized Infotainment (contoh berita, learning lesson, movie guide),Multiplayer Online Games, Location Bases Traffic Guide, Passive Mobile TV (contoh Schedulle TV Program (no intetactivity))

2.1.2. Teknologi Video dan Audio Digital

Kekurangan utama video analog adalah penurunan kualitas ketika dilakukan penyimpanan atau produksi ulang, cacat seperti snow pada gambar karena noise atau efek interferensi. Sebalikknya, video digital merepresentasikan informasi sebagai angka digital, dibuat dengan sampling dan quantisasi sinyal. Kualitas video digital dapat dipengaruhi 3 faktor [15]:

1. Frame Rate, yaitu banyak gambar ditampilkan / detik pada sisi receiver (frame per second / fps). Frame rate digunakan untuk sinkronisasi gambar-suara dan kecepatannya tergantung pada kecepatan koneksi internet. Standar National Television Standards Committee (NTSC) untuk full motion video adalah 30 fps, program TV memiliki frame rate 24 fps dan video digital pada internet memiliki frame rate 15 – 30 fps [8].

2. Color Depth, yaitu banyak bit / pixel sebagai representasi warna, contoh, 24 bit merepresentasi 16.7 juta warna, 16 bit sekitar 65,535 warna, dan 8 bit hanya 256 warna.

3. Frame Resolution, yaitu besaran lebar dan tinggi dalam pixel, contoh, full screen PC display memiliki resolusi 640 x 480

Variabel lain dalam video adalah Image Size, Bit Depth dan Data Rate / Bit Rate. Bit Depth adalah banyak warna pada gambar yang dapat disajikan pada waktu tertentu. Makin tinggi Bit Depth maka makin besar ukuran video [6].

Data Rate / Bit Rate adalah ukuran banyak data dikompres yang dikirmkan / detik (bits per second / bps), sangat dipengaruhi oleh Image size, Bit Depth dan Frames / Second. Penggunaan Bit Rate dan Codec yang tepat dapat menambah qualitas dari data streaming. [10].

Bit Rate dapat ditentukan dengan strategi berikut [1] :

1. Contstant Bit Rate / CBR adalah strategi memaksimalkan qualitas visual video dengan mengkonstankan bit rate / frame, buffer dan feedback pada encoding. Strategi ini digunakan pada real-time dan non-buffered video streaming karena ketersediaan bandwidth tetap namun kapastitas channel terbatas, contoh videoconferencing pada channel dengan fixed bandwidth

2. Variable Bit Rate / VBR adalah strategi memaksimalkan qualitas visual video dengan meminimalisir Bit Rate, karena hal ini berbanding lurus dengan distorsi yang terjadi pada setiap frame. Pada fast motion scene, VBR menggunakan lebih banyak bit dari pada slow motion scene pada durasi yang sama untuk mengkonsistenkan visual quality. contoh DVD.

Seperti video, juga terdapat beberapa variabel yang mempengaruhi ukuran pada kompresi audio, yaitu [6]:

1. Sample Rate, yaitu frekwensi bit data yang diambil secara acak (Kilohertz / KHz). Nilai umum untuk variabel ini adalah 11.025 kHz, 22.050 kHz, 44.1 kHz and 48 kHz. Makin tinggi sample rate maka makin baik kualitas audio, namun makin sulit mengatur singkronisasi audio dan video.

2. Sample Size, yaitu banyak bit yang merepresentasikan amplitudo sampel audio. Nilai umum untuk audio codex menggunakan 16-bit – 8-bit sample size.

3. Channel, yaitu banyak jenis sinyal audio, Mono atau Stereo.


2.1.3. Kompresi Video

Untuk memperoleh kualitas video dan audio maka diperlukan Sistem Kompresi (Encoding System) yaitu proses mengurangi redudansi pada data. Encoding Video Streaming terbagi atas Encoding Video dan Encoding Audio.

Codec terdiri Coder yang digunakan untuk melakukan encoding pada file audio / video sehingga memiliki ukuran lebih kecil dengan memperkecil pixel, lebar, fewer frame dan fewer pixel serta Decoder untuk membaca file yang telah di encode dan memainkannya di sisi receiver.

Sistem kompresi dipengaruhi oleh Video codec, Audio codec, Bit rate video dan audio, Frame rate video, Frekwensi audio, dan Size video. Kompresi video dilakukan dengan mengurangi terjadinya redudansi pada video signal. Isehingga mengurangi video signal yang tidak relevan dan hanya kode yang perlu saja yang dikirimkan.

Mengidentifikasi dan mengurangi redudansi pada signal video merupakan proses yang komplek. Video terdiri dari urutan frame atau image, dimana sebuah frame dapat terdiri beberapa bagian image. Pada Kompresi video terdapat 2 pendekatan untuk mengurangi redudansi pada data berdasarkan identifikasi tipe nya :

1. Spatial redudancy, mendefenisikan redudansi data pada video berdasarkan nilai pixel yang berkorelasi dengan tetangganya

2. temporal redundancy, mendefenisikan redudansi data pada video berdasarkan nilai pixel yang berkorelasi dengan frame setelahnya

3. Spectral redundancy, mendefenisikan redudansi data pada video berdasarkan korelasi antara komponen warna pada image yang sama.

MPEG mendefenisikan 3 tipe dasar dari kode frame [1]:

1. Intra-Coded Frame (I-Frame), frame ini dikodekan secara spatial dan independen dari frame lain. Frame memiliki fungsi penting dan sering diletakan paling tidak 1 / detik. Kehilangan Frame ini dapat menyebabkan P-Frame setelahnya menjadi tidak berguna

2. Predictively Coded Frame (P-frame), frame ini dikodekan dengan kompresi berbasis temporal yang berdasarkan frame sebelumnya

3. Bi-Directionally Predicted Frame (B-Frame), frame ini dikodekan berdasarkan frame sebelum dan setelahnya

Teknik lain untuk mengurangi ukuran file ketika kompresi video yaitu Key Frame dan Delta Frame. Key Frame menyimpan perubahan frame dan kemudian digunakan sebagai acuan bagi untuk membandingkan nya dengan frame lain [4].

To be continued….





J2ME : Bright Generation Of Wireless Tech

5 06 2007

Adek Aidi

Mobile Communication Research Laboratory STTTelkom

Berkembangnya teknologi telekomunikasi hingga saat ini, telah mempengaruhi berbagai sendi kehidupan serata membuat aktivitas berkomunikasi masyarakat semakin maju. Pengaruh yang ditimbulkan antara lain mulai dari keinginan berkomunikasi dengan mudah, akses semua informasi yang ada dan lain-lain.

Salah satu teknologi telekomunikasi yang diharapkan mampu melayani semua kebutuhan tersebut adalah teknologi jaringan komunikasi internet. Namun kemudian, layanan ini diharapkan dapat juga diakses melalui teknologi selular sehingga muncul teknologi Mobile Internet. Mobile Internet dapat memberikan kebebasan bagi setiap individu untuk mengakses internet, kapanpun dan dimanapun.

Pemanfaatan teknologi Mobile Internet ini sudah merambah ke dunia bisnis commerce. Teknologi J2ME, dalam teknologi jaringan, berada pada konvergensi dari dua keterkaitan teknologi jaringan, yakni wireless dan internet. Berbagai faktor tersebut sebagai usaha untuk menciptakan suatu nilai tambah, dari fungsi handset, yang sebelumnya sebagai media komunikasi telephony, menjadi multifungsi.

Pada Java versi 1.2, Sun Microsystem membagi arsitektur Java dalam beberapa bagian yaitu [2]:

  • Java 2 Standard Edition (J2SE), kategori ini digunakan untuk aplikasi Java pada level PC (Personal Computer).
  • Java 2 Enterprise Edition (J2EE), kategori ini digunakan untuk aplikasi pada lingkungan Enterprise, dengan fungsionalitas tambahan java seperti EJB (enterprise Java Bead), Java CORBA, Servlet serta JSP dan XML (Extensible Markup Language).
  • Java 2 Micro Edition (J2ME), kategori ini digunakan untuk aplikasi pada embedded system dan handled devices seperti handphone, Palm, PDA, Pocket PC yang memiliki karakteristik berbeda dengan komputer biasa.
  • Java Card, kategori ini khusus untuk aplikasi pada smart card seperti SIM card.

KOMPONEN
J2ME memiliki komponen sebagai berikut [2] :

  • Java Virtual Machine (JVM). Komponen ini merupakan lingkungan tempat eksekusi program Java berlangsung dimana objek saling berinteraksi. Virtual Machine menyebabkan Java mempunyai kemampuan penanganan memori yang lebih baik, keamanan yang lebih tinggi serta portabilitas yang besar. Pada CLDC, ini disebut K Virtual Machine, menggambarkan singkatan kilo byte yang bahwa Virtual Machine ini berkerja pada lingkungan yang sangat kecil.
  • Java Application Programming Interface (Java API). Merupakan kumpulan library untuk menjalankan dan mengembangkan pada emulator atau handled devices.
  • Tools lain untuk pengembangan aplikasi Java, seperti emulator

ARSITEKTUR
J2ME terbagi dalam 2 bagian yaitu [2]:
a. J2ME Configuration adalah spesifikasi yang mendefenisikan lingkungan kerja J2ME (dapat berupa JVM lengkap atau bagian tertentu) dan kumpulan API dasar yang mengimplementasikan fitur standar handled devices. Terdapat 2 kategori J2ME Configuration :
1. Connected Limited Devices Configuration (CLDC)
Konfigurasi untuk perangkat wireless (handphone, organizer / PDA, two way pages ) dengan memori kecil (160 – 512 KBites ) dengan koneksi jaringan yang tetap / tidak. Keterbatasan pada CLDC menyebabkan beberapa fitur pada J2SE tidak disertakan. Fitur – fitur yang tidak disertakan tersebut seperti :

  • Floating Point yang terdapat dalam kelas java.lang.Double dan java.lang.float
  • Finalisasi Objek yang terdapat dalam kelas java.lang.object
  • JNI yang memungkinkan untuk mengakses library yang dibuat tidak dengan bahasa java
  • Error Exception yang terdapat dalam kelas java.lang.error , java.lang.OutMemory dan java.lang.VirtualMachineError

Pada CLDC juga ditambahakan fitur yang tidak terdapat pada J2SE. Fitur – fitur khusus ini seperti :

  • Generic Connection Framework, merupakan kelas yang digunakan sebagai framework koneksi secara umum. Ini dilakukan dengan memperlakukan koneksi seperti Uniform Resource Locator (URL). Kelas ini digunakan untuk melakukan koneksi ke file, protokol HTTP, socket atau port.
  • Kelas javax.microedition yang merupakan API untuk implementasi pada wireless programming.
  • Mendefenisikan hierarki tipe kooneksi dasar untuk koneksi jaringan, sedangkan defenisi protokol jaringan dilakukan oleh CDC.

2. Conected Device Configuration (CDC)
Konfigurasi untuk perangkat wireless dengan memori 2 MBites lebih (Set Tob Box, Internet Enabled Screen Phones, Internet TV, High – End Communicator, Car Televition, Auto Mobile Entertainment / Navigation System) dengan koneksi jaringan yang lebih kokoh / dapat kebeberapa tipe jaringan.

b. J2ME Profile adalah spesifikasi yang mendefenisikan implementasi tambahan yang sangat spesifik dari Handled Devices. Terdapat 5 kategori J2ME Profile :

  • Mobile Information Device Profile (MIDP). Profil yang menyediakan library Java untuk implementasi dasar antarmuka (GUI), jaringan (Networking), basisdata (database), penyimpanan tetap (persistant strage), daur hidup aplikasi (Application life cicle), dan timer (Personal Information Management). MIDP dirancang khusus untuk wireless phone dan pager serta dibangun berdasarkan CLDC.
  • Foundation Profile (FP). Profil dasar untuk non – GUI network devices pada CLDC dengan ROM 1024 k dan RAM 512 k.
  • Personal Profile. Profil dengan GUI yang memiliki tingkat keakuratan web tinggi dan mampu menjalankan applet
  • RMI Profile
  • PDA Profile

Selain itu, beberapa perusahaan juga mengembangkan Profile sendiri yang spesifik digunakan untuk Handled Devices produksinya seperti NTT DoCoMo Jepang.

MIDLET
Aplikasi yang berjalan diatas MIDP disebut MIDLet [1]. Aplikasi ini tidak berinteraksi langsung dengan hardware tapi melalui program khusus yang disebut Application Management Software (AMS).

Pengaplikasian API ditentukan oleh interaksi antara Aplikasi dengan MIDLet serta bagaiman MIDLet dikontrol. MIDLet terdiri atas:
a. MIDLet Suite dan Descriptor.
Aplikasi dalam J2ME dikemas dalam file *.JAR dan selanjutnya terdapat Descriptor yang disebut application describtor berupa file*.JAD untuk mendeskripsikan file JAR tersebut.
b. Java Class
c. Resource

Siklus hidup (LifeCycle) dari sebuah MIDLet ditangani oleh AMS. AMS adalah program bawaan (built in) yang melakukan penanganan eksekusi aplikasi atau sebagai lingkungan tempat MIDlet diciptakan, dijalankan, dihentikan dan dihancurkan. AMS disebut juga dengan Java Application Manager (JAM). MIDLet memiliki beberapa state (MIDLet State) yaitu Pause, Active, Destroy [1].

Tabel 1.2 MIDlet State

Nama Status

Keterangan

Paused

Status ini terjadi ketika MIDLet selesai diinisialisasi dan tidak melakukan aksi apapun atau terjadi kesalahan ketika akan melakukan start.

Pada status ini, MIDLet tidak boleh sedang mengunci sumber daya karena akan mengakibatkan proses lain tidak dapat menggunakan sumber daya tersebut.

Active

Status ini terjadi ketika MIDLet sedang aktiv / berjalan dengan normal

Destryed

Statrus ini terjadi ketika MIDLet berhenti berjalan, sehingga sumber daya yang digunakan dibebaskan.

2.4 Jenis Aplikasi J2ME

Terdapat 2 kategori dalam aplikasi J2ME [AAH03] yaitu :

a. Walled Garden Application (Local Application)

Pada Local Application, J2ME menggunakan Database RMS yang merupakan persistant storage yang embedded pada handled device. RMS bersifat non-volatile yang tidak membutuhkan akses ke server setiap mengambil data. Namun, RMS banyak menggunakan memori dari handled device dan suatu saat dapat menyebabkan overload tergantung kepada besar String Buffer dalam perangkat tersebut. Karena banyak menggunakan memori, menyebabkan akese MIDlet lebih lambat

b. Network Aware Application (Network Application).

Network Application menggunakan database server, sehingga setiap mengambil data harus terkoneksi ke server (connection oriented). Namun, ia tidak banyak menggunakan memori handled device, sehingga akses data akan lebih cepat, tetapi kecepatan akses ini pun rentan kepada kondisi I/O pada jaringan. Disamping itu, dari segi cost value akan membutuhkan biaya yang lebih mahal jika dibandingkan dengan RMS karena harus selalu terkoneksi jaringan.

Berikut Arsitektur sistem jika menggunakan Database Server dan RMS:

Gambar 1.3 Arsitektur Sistem menggunakan Database RMS

Gambar 1.4 Arsitektur Sistem menggunakan Database Server

MIDP Client request aplikasi melalui HTTP Server. Request tersebut dibaca dan dikembalikan nilai nya oleh JAM (Java Aplication Manager) yang kemudian dikirim ke server. Server kemudian mengirim file .jad dan .jar dari aplikasi ke MIDP Client yang diterima oleh JAM. JAM menyimpan JAR file tersebut pada memori telepon seluler. Setelah itu aplikasi dapat di launch melalui KVM (Kilo Vitrual Machine) agar dapat digunakan oleh user. Untuk request ke Database server dikirmkan oleh servlet ke database melalui JDBC
Driver. Untuk request ke Database RMS dikirmkan oleh JAM ke RecordStore yang berada dalam direktori NOJAM pada memori device.

2.5 Instalasi J2ME

Software maupun Hardware yang dibutuhkan untuk membuat aplikasi berbasis J2ME adalah :

a. Sistem Operasi Windows 98 SE, NT 4.0, 2000, XP

b. JSDK versi berapa pun (http://java.sun.com/j2se/ ).

c. J2ME WTK versi berapa pun

d. Bila ingin menjalankan program emulator dengan PALM OS sebagai emulator, maka diperlukan palm OS emulator ( http://www.palmos.com/dev/tech/tools/emulator/.)

e. Ruang Hardisk minimal 30 MB dan memori minimal 64 MB

Sebelum menginstall J2ME Wireless Toolkit harus terlebih dahulu meng-uninstall J2ME WTK versi terdahulu. Untuk meng-install J2ME jalankan program installer, J2ME_wireless_toolkit-1_0_3.exe. (Proses ini dilakukan jika anda memilih men-download atau mempergunakan CD, bukan menginstall langsung dari situs internet).

2 Tipe instalasi dalam J2Me WTK yaitu :

a. Integrated

J2ME WTK mengintegrasikan dengan Forte for Java (IDE)

b. Stand Alone

Gambar 1.5 Memilih Tipe Setup Program

Selama proses instalasi, akan terdapat konfirmasi mengenai direktori yang akan dipergunakan meletakan program J2ME WTK ini. Nama direktori ini tidak boleh mengandung spasi, jika tidak, maka kemungkinan bahwa beberapa proses perangkat tidak dapat berjalan semestinya. Tabel berikut ini menunjukan isi dari direktori yang akan di install, yang akan disimpan sebagai sebuah file

Tabel 1.3 J2ME Wireless Toolkit Directory Contents

Proses instalasi ini juga secara otomatis akan membuat grup program pada start-up menu sistem operasi pada computer dalam direktori J2ME Wireless Toolkit.

Gambar 1.6 J2ME Wireless Toolkit Program Group

3. Mengapa J2ME ?

Mobile Internet merupakan potensi besar yang belum banyak tergarap. Mobile Internet atau jika dipandang dari sisi bisnis dikenal sebagai Mobile Bussines yang menurut Siemens terbagi dalam 6 kategori :

a. m–Commerse (perbankan, perdagangan, pembelian, tiketing, pelelangan, travel management )

b. m–Info Service (Info cuaca, pasar modal, berita, jasa penetapan lokasi)

c. m Service ( jasa perbaikan, emergency, pengontrolan , jasa telematika lain)

d. m–Comunication (komunikasi suara, pesan , SMS, Mobile Multimedia)

e. m Entertainment (musik, video, games, lotere)

f. m-Office (email,, penjadwalan, direktori)

Di Indonesia, terdapat 12 bidang yang telah menggunakan m–Commerse, 6 diantaranya diprediksikan memiliki prospek yang baik untuk terus dikembangkan. Saat ini untuk membuat aplikasi berbasis Wireless terdapat beberapa pilihan teknologi, antara lain WAP dan J2ME. WAP dengan bahasa WML bekerja baik pada Aplikasi berbasis server, text centric application seperti weather report, stock quotes, dll. Namun terdapat kekurangan lain seperti :

a. Small display dan Limited User Input Fasility. Keterbatasan dalam tampilan (seperti animasi)

b. Tidak efektif untuk komputasi lokal dan penyimpanan dengan koneksi ke jaringan

c. Security Issue yang menimpa WAP Gateway. Dalam WAP, device meretrieve dan men-display data dengan microbrowser dan dibutuhkan suatu gateway untuk jembatan antara jaringan internet dan wireless. Hal ini merupakan hal potensial dalam ganguan keamanan data (konversi protokol dari protokol internet menjadi protokol wireles)

d. Must Always Connected. Aplikasi berbasis browser tidak mampu bekerja pada kondisi yang tidak terjangkau baik oleh sinyal provide

Teknologi Java dengan J2ME nya memiliki kelebihan antara lain :

a. Enhances User Experiences. Mendukung grafis yang rumit dan handal dalam koputasi lokal

b. Running Every Where, Any Where, Over Any Device. J2ME ditujukan untuk cakupan user dan device yang luas, dibangun diatas JVM yang menghasilkan kode portabel (Cross Platform Compatibilty)

c. Save Nerwork Delivery dan End to End Security HTTP. J2ME menyediakan SSL untuk melakukan enkripsi terhadap data yang dikirimkan ke dalam jaringan melalui HTTP Connection

d. Disconected Acces dan Synchronization. Device tetap dapat menjalankan aplikasi walaupun sudah berada out of coverage area atau ter diconnection

e. Dinamic Delivery of Application and Services. Dapat di download secara OTA (Over The Air) dan running dalam berbagai device (karena memiliki JVM)

f. Scalabiliry and Performance. Berkurangnya latensi koneksi device ke server karena aplikasi berbasis dapat dijalankan off line (stand alone) maupun on line.

Namun, J2ME dan WAP merupakan teknologi yang berbeda walaupun sama – sama berjalan diatas teknologi wireless [FSW]. WAP menyediakan pilihan teknologi browser yang dapat digunakan untuk surfing mencari aplikasi J2ME. Selain itu, Openwave dan Sun Microsystem merupakan major partenership untuk mengintegrasikan J2ME dan WAP.

Saat ini banyak device yang mendukung teknologi J2ME, ditambah lagi dengan resource toolkit dan documetation yang disediakan secara gratis oleh Sun Microsystem serta banyak nya IDE yang dapat digunakan untuk membantu membuat aplikasi J2ME (J Builder dari Borland, Forte CE / ME dan Neatbeans dari Sun)

4. Tips Membuat Aplikasi pada memori terbatas

Untuk Membuat sebuah aplikasi yang baik bagi peralatan dengan kapasitas memori yang kecil memerlukan perhatian khusus pada hal-hal tertentu,terutama pada saat perancangan progam sebelum menuliskan source program. Antara lain :

a. Buatlah aplikasi yang sederhana. Dengan menghindari fitur-fitur yang tidak perlu, memungkinkan kita menjadikan fitur tersebut sebagai aplikasi yang terpisah, atau aplikasi sekunder.

b. Semakin kecil program, maka akan semakin baik. Hal yang patut diperhatikan, bahwa semakin kecil program yang kita buat, maka akan semakin memperpendek proses instalasi program tersebut pada perangkat kita.

c. Memimalkan jumlah memori yang digunakan saat program dipergunakan. Untuk me inimalkan jumlah memori yang digunakan, penggunaan tipe scalar pada objek sangat disarankan. Jangan pula bergantung pada garbage collector. Atur memori secara effisien, jangan lupa mengeset referensi objek menjadi null saat aplikasi selesai dijalankan dan alokasikan objek sesuai kebutuhan.

5. Singel MIDLet Example

=== Listing program HelloMidlet.java ====

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

public class HelloMIDlet extends MIDlet implements CommandListener{

private Form mMainForm;

// Bagian ini untuk menampilkan aplikasi kita pada layar

public HelloMIDlet(){

mMainForm =new Form(“halo teman-teman”);

mMainForm.append (new StringItem(null, “Hallo teman 2″));

mMainForm.addCommand (new Command(“exit”,Command.EXIT,0));

mMainForm.setCommandListener(this);

}

public void startApp(){

Display.getDisplay(this).setCurrent(mMainForm);

}

// Saat Aplikasi kita hentikan sementara

public void pauseApp(){}

// Dekonstruktor

public void destroyApp(boolean unconditional){}

//Jika kita ingin keluar dari aplikasi

public void commandAction(Command c,Displayable s){

notifyDestroyed();

}

}

DAFTAR PUSTAKA

[AAH03] Aditya Hartanto, Antonius. 2003. Tips dan Trik Java 2 Micro Edition. PT. Elex Media Komputindo : Jakarta.

[ADW02] Wicaksono, Adi. 2002. Pemrograman Aplikasi Wireless dengan Java. PT. Elex Media Komputindo : Jakarta.

[FSW] Wiryasantika, Faisal. faisal@winwinfaisal.info