<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29972156</id><updated>2012-02-15T23:58:17.767-08:00</updated><title type='text'>Kuliah Wireless</title><subtitle type='html'>Get connected with mobile and wireless technology</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>admin</name><uri>http://www.blogger.com/profile/12528571096161588077</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>98</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29972156.post-115224759417444111</id><published>2006-07-06T21:40:00.000-07:00</published><updated>2006-07-06T21:46:34.280-07:00</updated><title type='text'>Pengumpulan Tugas Berakhir</title><content type='html'>Ya, karena ini sudah tanggal 7 Juli maka batas waktu untuk pengumpulan tugas Wireless sudah berakhir. Mengingat banyaknya orang yang sulit menerima invite (padahal semua email yang masuk - asalkan subjectnya benar - pasti di-invite), maka saya akan membolehkan tugas yang dikumpulkan dengan memakai login teman. Nilainya tidak akan saya kurangi. &lt;br /&gt;&lt;br /&gt;Ok, selamat liburan untuk semua !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115224759417444111?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115224759417444111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115224759417444111' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115224759417444111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115224759417444111'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/pengumpulan-tugas-berakhir.html' title='Pengumpulan Tugas Berakhir'/><author><name>admin</name><uri>http://www.blogger.com/profile/12528571096161588077</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115224315082392112</id><published>2006-07-06T20:30:00.000-07:00</published><updated>2006-07-06T20:44:19.300-07:00</updated><title type='text'>Network Programming dengan J2ME Wireless Devices</title><content type='html'>Network Programming dengan J2ME Wireless Devices&lt;br /&gt;&lt;br /&gt;Peralatan tanpa kabel seperti telepon selular dan pager 2 arah yang dapat memberikan koneksi pada dunia luar pada sembarang waktu dan sembarang tempat. Mereka menawarkankoneksivitas yang bagus dibandingkan dengan peralatan yang lainnya. Applikasi yang dikembangkan pada peralatan ini akan dibutuhkan secara besar-besaran pada beberapa tahun mendatang. Programming jaringan memerankan peranan yang penting untuk mengambil keuntungan dari koneksi yang ditawarkan oleh perangkat ini.&lt;br /&gt;            Sun’s java 2 micro edition (J2ME) menawarkan platform untuk mengembangkan aplikasi pada perangkat elektronik dan perangkat mobile. Pada java 2 micro edition  (J2ME) CLDC (connected limited device configuration)  mendefinisikan “konfigurasi” standart untuk perangkat handheld. Sebelum CLDC, digunakan MIDP (mobile information device profile) yang digunakan untuk mendefinisikan spesifikasi dari perangkat wireless seperti telpon selular. Kali ini akan dijelaskan tentang bagaimana cara J2ME menangani network programming. Akan dijelaskan tentang HttpConnection class pada J2ME MIDP.&lt;br /&gt;&lt;br /&gt;HttpConnection Class&lt;br /&gt;            HttpConnection Class yang ada pada MIDP digunakan untuk menangani koneksi http pada aplikasi wireless. HttpConnectuion dijamin tersedia pada semua perangkat MIDP.&lt;br /&gt;            Secara teori anda dapat menggunakan sockets atau datagram untuk komunikasi remote pada aplikasi J2ME pada perangkat MIDP anda jika pabrik mendukung hal tersebut. Tetapi ini dapat menyebabkan masalah karena anda tidak dapat selalu menghitung dan memilih perangkat mana saja yang mendukung. Hal ini berarti mungkin program dapat berjalan pada satu perangkat MIDP tetapi tidak berjalan pada lainnya. Jadi harus menggunakan HttpConnection class terlebih dahulu pada aplikasi anda, karena HttpConnection wajib digunakan untuk semua MIDP implementation.&lt;br /&gt;HttpConnection interface diturunkan dari ContentConnection interface pada CLDC. Itu mempunyai semua inheritance dari method I/O strean dari StreamConnection, semua method yang digunakan untuk menangani MIME dari ContentConnection dan menambahkan beberapa method tambahan untuk menangani http protokol. Berikut adalah daftar semua method yang tersedia pada HttpConnection.&lt;br /&gt;·        DataInputStream openDataInputStream()&lt;br /&gt;·        InputStream openInputStream()&lt;br /&gt;·        DataOutputStream openDataOutputStream()&lt;br /&gt;·        OutputStream openOutputStream()&lt;br /&gt;Input Stream digunakan untuk membaca isi dari web server sementara output stream dapat digunakan untuk mengirimkan request pada web server. Stream ini didapatkan dari HttpConnection object setelah koneksi terhubung pada web server.MIMEString getEncoding()long getLength()String getType()Setelah http connection terhubung, 3 method tersebut dapat digunakan untuk mendapatkan nilai dari 3 fields beriku pada HTTP header: Content-Length, Content-Encoding dan Content-Type.Berikut ini adalah method pada Http Protocol·        long getDate()·        long getExpiration()·        String getFile()·        String getHeaderField(int index)·        String getHeaderField(String name)·        long getHeaderFieldDate(String name, long def)·        int getHeaderFieldInt(String name, int def) ·        String getHeaderFieldKey(int n)·        String getHost()·        long getLastModified()·        int getPort()·        String getProtocol()·        String getQuery()·        String getRef()·        String getRequestMethod() ·        String getRequestProperty(String key) ·        int getResponseCode()·        String getResponseMessage()·        String getURL()·        void setRequestMethod(String method)·        void setRequestProperty(String key, String value)                GetResponseCode dan getResponseMessage dapat digunakan untuk mengecek kode status response dan pesan dari web server. Sebagai contoh “HTTP/1.1 401 Unauthorized”, akan didapatkan response kode “401” dan pesan response “Unauthorized”.               Berikut adalah method yang digunakan untuk mendapatkan infomasi header: getDate, getExpiration, getFile, getHeaderField, getHeaderFieldDate, getHeaderFieldInt, getHeaderFieldKey dan getLastModified.               Berikut adalah method yang digunakan untuk menerima komponen parse individual pada URL string: getHost, getPort, getProtocol, getQuery, getRef, getRequestMethod, getRequestProperty, getResponseCode, getResponseMessage dan getURL.               Berikut adalah method yang digunakan untuk HEAD, DET dan POST request: setRequestMethod, setRequestProperty, dan getRequestMethod.  www.wirelessdevnet.com/channels/ java/features/j2me_http.phtmlhttps://developers.sun.com/ techtopics/mobility/midp/articles/network&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115224315082392112?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115224315082392112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115224315082392112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115224315082392112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115224315082392112'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/network-programming-dengan-j2me.html' title='Network Programming dengan J2ME Wireless Devices'/><author><name>Adi Cahyono S</name><uri>http://www.blogger.com/profile/17915620597104640459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115220366885318565</id><published>2006-07-06T08:43:00.000-07:00</published><updated>2006-07-06T09:34:29.103-07:00</updated><title type='text'>Dasar Managemen Memori Pada .NET Compact Framework</title><content type='html'>&lt;div align="justify"&gt;     Meningkatnya produktivitas para pengembang software adalah salah satu alasan utama yang menyebabkan diterimanya .Net Framework dan the .Net Compact Framework secara luas. Diskusi tentang bagaimana kontribusi .NET Compact Framework CLR untuk produktifitas para pengembang software sering kali terfokus pada fitur seperti managemen memori otomatis (&lt;em&gt;garbage collection&lt;/em&gt;), ketidak tergantungan pada prosesor dan sebagainya. Pada saat .NET Compact Framework secara pasti menyediakan fitur-fitur tersebut, dia juga menyediakan fitur-fitur tambahan untuk membantu para pengembang software menjadi lebih produktif pada pengaplikasian diberbagai macam alat. Salah satu fitur ini adalah pengaturan pengalamatan memori virtual 32 MB pada setiap proses secara otomatis. Dengan membebaskan para pengembang software dari kekhawatiran kapan harus mengalokasikan dan membebaskan memori agar aplikasi mereka dapat berjalan dengan baik dalam batas 32 MB, Compact Framework membuat penulisan aplikasi yang dapat bekerja dengan baik pada alat dengan memori terbatas menjadi mudah. Banyak dari keputusan penting yang diambil ketika membangun .Net Compact Framework CLR adalah agar bisa secara efisien menggunakan batas memori virtual sebesar 32 MB pada setiap prosesnya. Dengan kata lain, fakta bahwa Windows CE membatasi setiap proses dengan memori virtual yang cukup kecil telah membuat pengembang Compact Framework mendesain sebuah platform yang dapat berjalan baik dalam lingkungan yang terbatas.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;    Sebelum mengambil keputusan desain spesifik yang dibuat untuk aplikasi pada alat yang memiliki memori terbatas, kita harus menganalisa semua data runtime yang dibuat oleh sistem operasi dan CLR ketika menjalankan aplikasi yang di-&lt;em&gt;manage&lt;/em&gt;-nya. Oleh karena itu pertama kita akan melihat penjelasan kategori data yang dibutuhkan untuk menjalankan sebuah aplikasi, baru setelah itu kita akan melihat dimana CLR mengalokasikan data runtime yang berhubungan dengan partisi memori Windows CE. Mari kita perhatikan kategori data runtime yang menggunakan memori ketika aplikasi "Hello World" sederhana dibawah ini dijalankan.&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;using System;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;using System.ComponentModel;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;using System.Drawing;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;using System.Text;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;using System.Windows.Forms;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;namespace HelloWorld&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;  public class Form1 : Form&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;  {&lt;br /&gt;    private MainMenu mainMenu1; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;    private Label label1;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;    public Form1()&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      InitializeComponent();&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    private void InitializeComponent()&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;    { &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      this.mainMenu1 = new System.Windows.Forms.MainMenu();&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.label1 = new System.Windows.Forms.Label();&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;      // Posisi label &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.label1.Location = &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;new System.Drawing.Point(64, 81);&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;      this.label1.Size = new System.Drawing.Size(100, 20);&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.label1.Text = "Hello World!";&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;      // Ukuran form &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.AutoScaleDimensions = new System.Drawing.SizeF(96F,96F);&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.ClientSize = new System.Drawing.Size(240, 268); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.Controls.Add(this.label1); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.Menu = &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;this.mainMenu1;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.MinimizeBox = false;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      this.Text = "Simple App";&lt;br /&gt;    }&lt;br /&gt;  } &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;  static class Program&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;  {&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;    static void Main()&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;      Application.Run(new Form1());&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;  } &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt; &lt;/div&gt;&lt;/span&gt;&lt;div align="justify"&gt;     Seperti yang anda lihat, program diatas membuat sebuah form dengan sebuah label yang berisi tulisan "Hello World". Memori yang dipakai pada saat runtime bisa dikelompokan menjadi 6 kategori :&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;1. Kode &lt;em&gt;native code&lt;/em&gt; untuk CLR dll&lt;/strong&gt; &lt;/div&gt;&lt;div align="justify"&gt;Compact Framework CLR terdiri dari dua dll, mscoree.dll dan mscoree2_0.dll. Kedua dll ini bersama dengan bagian native dari implementasi Form Window Compact Framework, netcfagl2_0.dll, digolongkan sebagai dll sistem. Oleh karena itu kode dari dll ini pasti dimasukan dalam memori kode sistem.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;2. Susunan progam dari Aplikasi dan Librari Class&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;CLR harus memasukan semua kode IL untuk aplikasi dan untuk librari &lt;em&gt;class&lt;/em&gt; yang digunakannya ke dalam memori sehingga kompiler JIT memiliki akses ke IL yang diperlukannya ketika membuat instruksi &lt;em&gt;native code&lt;/em&gt; yang sesuai dan &lt;em&gt;class loader&lt;/em&gt; harus memiliki akses ke metadata yang diperlukannya ketika membaca struktur data yang menjelaskan tipe dan sebagainya. Sebagai tambahan pada listing program yang mengandung kode "Hello World", listing program tersebut juga memerlukan IL dari &lt;em&gt;mscorlib&lt;/em&gt;, &lt;em&gt;System&lt;/em&gt;, &lt;em&gt;System.Windows.Forms&lt;/em&gt; dan &lt;em&gt;System.Drawing&lt;/em&gt;. File-file yang mengandung susunan progam yang dibutuhkan ini dimasukan pula ke area high memori.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;3. &lt;em&gt;Native code&lt;/em&gt; yang dikompile JIT&lt;/strong&gt; &lt;/div&gt;&lt;div align="justify"&gt;Ketika aplikasi dijalankan, kompiler JIT dipanggil untuk membuat &lt;em&gt;native code&lt;/em&gt; dari setiap method yang diaksesnya. &lt;em&gt;Native code&lt;/em&gt; ini disimpan pada buffer dalam memori virtual setiap proses.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;4. Referensi tipe yang dialokasikan&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;Listing program diatas mengalokasikan cukup banyak referensi tipe. Sebagai tambahan dari form utama itu sendiri, variabel dari MainMenu, Label, Point, dan Size di &lt;em&gt;create&lt;/em&gt;. Dan lebih banyak lagi tipe yang dialokasikan dari dalam implementasi dari librari class. Memori untuk menyimpan semua referensi tipe ada pada heap &lt;em&gt;garbage collector&lt;/em&gt;. Heap GC adalah sebuah penyimpan heap pada alamat yang spesifik untuk setiap aplikasinya.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;5. Representasi metadata tipe di memori&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;Pada saat &lt;em&gt;class&lt;/em&gt; dan &lt;em&gt;method&lt;/em&gt;-nya diperlukan pada waktu menjalankan sebuah program, CLR akan membaca representasi metadatanya dari file-file yang telah disimpan pada area high memori. Metadata ini digunakan untuk membuat representasi dari &lt;em&gt;class&lt;/em&gt; dan &lt;em&gt;metho&lt;/em&gt;d-nya di memori. Representasi ini disimpan didalam heap yang disebut sebagai heap &lt;em&gt;AppDomain&lt;/em&gt;. Heap &lt;em&gt;AppDomain&lt;/em&gt; disimpan pada memori virtual setiap proses.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;6. Alokasi rupa-rupa&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;Sebagai tambahan dari kategori alokasi yang disebutkan diatas, CLR juga membuat sejumlah kecil data tambahan pada saat aplikasi dijalankan. Data dari kategori ini termasuk yang digunakan kompiler JIT untuk menentukan apakah sebuah &lt;em&gt;method&lt;/em&gt; telah dikompile dan beberapa data elemen sementara. &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;     Sekarang setelah kita melihat kategori data yang diperlukan untuk menjalankan aplikasi yang diatur, mari kita memetakan alokasi tersebut pada model memori Windows CE seperti disebutkan diatas. Gambar dibawah akan memperlihatkan partisi memori Windows CE mana yang digunakan untuk menyimpan setiap kategori data runtime. &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;a href="http://photos1.blogger.com/blogger/6404/945/1600/wireless.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6404/945/320/wireless.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Gambar 1. &lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Pemetaan antara alokasi memori Compact Framework dan model memori Windows CE.&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;     Pada saat melihat gambar 1, adalah sangat penting untuk memperhatikan alokasi mana yang disimpan untuk setiap prosesnya atau yang di bagi secara shared pada semua proses. Model memori Windows CE menggunakan kode-kode dari memori kode sistem dan semua alokasi yang disimpan pada area high memori sebagai kode yang di bagi secara shared untuk semua aplikasi sedangkan semua alokasi yang disimpan pada memori setiap proses hanya diperuntukan proses tesebut. Karena alokasi yang disimpan pada memori setiap proses hanya diperuntukan proses tesebut dan tidak dibagi maka sangatlah penting agar memfokuskan penggunakan memori vitual 32 MB setiap proses dengan bijaksana.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115220366885318565?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115220366885318565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115220366885318565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115220366885318565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115220366885318565'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/dasar-managemen-memori-pada-net.html' title='Dasar Managemen Memori Pada .NET Compact Framework'/><author><name>Syarif (4230)</name><uri>http://www.blogger.com/profile/02248089428278064068</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115218166337073221</id><published>2006-07-06T03:05:00.000-07:00</published><updated>2006-07-06T03:32:50.580-07:00</updated><title type='text'>Menggunakan Ant Untuk membuat Aplikasi MIDP</title><content type='html'>Denny Hartanto&lt;br /&gt;201114235&lt;br /&gt;Menggunakan Ant&lt;br /&gt;untuk membuat&lt;br /&gt;Aplikasi MIDP&lt;br /&gt;&lt;br /&gt;1. Pendahuluan&lt;br /&gt;&lt;br /&gt;Berikut ini akan dijelaskan suatu proses untuk menggunakan fitur Ant yang masih merupakan basis JavaTM. Tool ini sangat mudah di compile dan di pakai dalam suatu program.&lt;br /&gt;1.1. Software dan Sistem Konfigurasi&lt;br /&gt;Pertama-tama yang dibutuhkan adalah menginstall Java Development Kit (JDK), pastikan program yang dipakai merupakan versi 1.4x atau yang lebih tinggi. Kemudian perlu ditambahkan kepada JDK, yaitu install J2ME Wireless Tollkit. Contoh di dalam penjelasan ini hanya dapat dicoba menggunakan versi 1.04 dan 2.0.&lt;br /&gt;1.2. Nokia Emulator&lt;br /&gt;Satu dari banyaknya fitur-fitur yang unik dari sebuah wareless toolkit merupakan pilihan untuk menjalankan emulator ini.&lt;br /&gt;Berikut ini adalah seri-seri Nokia yang bisa dipakai untuk mencoba tool ini :&lt;br /&gt;· Seri 30&lt;br /&gt;- Nokia 3510i MIDP SDK – 96 x 65 screen size, 4096 colors,GSM&lt;br /&gt;- Nokia 6310i MIDP SDK – 96 x 65 screen size, Monochrome, GSM&lt;br /&gt;· Seri 40&lt;br /&gt;- Nokia 7210 MIDP SDK – 128 x 128 screen size, 4096 colors, GSM&lt;br /&gt;· Seri 60&lt;br /&gt;- Nokia Concept SDK – 176 x 208 screen size, 3096 colors, GSM&lt;br /&gt;Untuk mengkonfigurasi sistem supaya bisa di tambahkan emulator, install desired SDK di \wtklib\devices direktori dari wireless toolkit. Contoh :&lt;br /&gt;c:\WTK104\wtklib\devices\Nokia_3510i_MIDP_SDK_v1_0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Contoh Kasus&lt;br /&gt;Berikut ini adalah beberapa contoh program (coding) yang dibuat menggunakan tool Ant.&lt;br /&gt;2.1. Animation.java&lt;br /&gt;package corej2me;&lt;br /&gt;import java.util.*;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;public class Animation extends MIDlet&lt;br /&gt;{&lt;br /&gt;private Display display; // The display&lt;br /&gt;private AnimationCanvas canvas; // Canvas&lt;br /&gt;private Timer tm; // Timer&lt;br /&gt;private AnimateTimerTask tt; // Task&lt;br /&gt;public Animation()&lt;br /&gt;{&lt;br /&gt;display = Display.getDisplay(this);&lt;br /&gt;canvas = new AnimationCanvas(this);&lt;br /&gt;// Create task that fires off every 1/10 second&lt;br /&gt;tm = new Timer();&lt;br /&gt;tt = new AnimateTimerTask(canvas);&lt;br /&gt;tm.schedule(tt, 0, 100);&lt;br /&gt;}&lt;br /&gt;protected void startApp()&lt;br /&gt;{&lt;br /&gt;display.setCurrent(canvas);&lt;br /&gt;}&lt;br /&gt;protected void pauseApp()&lt;br /&gt;{ }&lt;br /&gt;protected void destroyApp(boolean unconditional)&lt;br /&gt;{ }&lt;br /&gt;public void exitMIDlet()&lt;br /&gt;{&lt;br /&gt;destroyApp(true);&lt;br /&gt;notifyDestroyed();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;2.2. AnimationCanvas.java&lt;br /&gt;package corej2me;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;import java.util.*;&lt;br /&gt;class AnimationCanvas extends Canvas implements CommandListener&lt;br /&gt;{&lt;br /&gt;private Animation midlet; // Main midlet&lt;br /&gt;private Command cmExit; // Exit midlet&lt;br /&gt;private int keyFire, // Reset ball&lt;br /&gt;keyRight, // Increase ball radius&lt;br /&gt;keyLeft; // Decrease ball radius&lt;br /&gt;private boolean clearBackground = false; // Clear background&lt;br /&gt;private Random random; // Random number&lt;br /&gt;int x_loc, // Current x &amp; y locations&lt;br /&gt;y_loc,&lt;br /&gt;radius, // Ball radius&lt;br /&gt;red, // rgb colors&lt;br /&gt;green,&lt;br /&gt;blue,&lt;br /&gt;x_dir, // Next x &amp;amp; y positions of ball&lt;br /&gt;y_dir,&lt;br /&gt;start_x, // Where ball starts&lt;br /&gt;start_y,&lt;br /&gt;directionChanged = 0; // How many times an edge has been hit&lt;br /&gt;private static final int MAX_CHANGES = 50;&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* Constructor&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;public AnimationCanvas(Animation midlet)&lt;br /&gt;{&lt;br /&gt;// Save reference to main midlet&lt;br /&gt;this.midlet = midlet;&lt;br /&gt;random = new java.util.Random();&lt;br /&gt;// Determine starting location and direction of ball&lt;br /&gt;init();&lt;br /&gt;radius = 7;&lt;br /&gt;// Create exit command and "Fire" key&lt;br /&gt;cmExit = new Command("Exit", Command.EXIT, 1);&lt;br /&gt;keyFire = getKeyCode(FIRE);&lt;br /&gt;keyRight = getKeyCode(RIGHT);&lt;br /&gt;keyLeft = getKeyCode(LEFT);&lt;br /&gt;addCommand(cmExit);&lt;br /&gt;setCommandListener(this);&lt;br /&gt;}&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* Paint a new ball, clearing the screen as asked&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;protected void paint(Graphics g)&lt;br /&gt;{&lt;br /&gt;// Max edge hits, reset everything&lt;br /&gt;if (directionChanged &gt; MAX_CHANGES)&lt;br /&gt;init();&lt;br /&gt;// Clear the background&lt;br /&gt;if (clearBackground)&lt;br /&gt;{&lt;br /&gt;g.setColor(255, 255, 255);&lt;br /&gt;g.fillRect(0, 0, getWidth(), getHeight());&lt;br /&gt;clearBackground = !clearBackground;&lt;br /&gt;}&lt;br /&gt;// Set color and draw another ball&lt;br /&gt;g.setColor(red, green, blue);&lt;br /&gt;g.fillArc( x_loc, y_loc, radius, radius, 0, 360);&lt;br /&gt;}&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* Initialize starting location and direction of ball&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;private void init()&lt;br /&gt;{&lt;br /&gt;// Start close to the middle&lt;br /&gt;x_loc = getWidth() / 2;&lt;br /&gt;y_loc = getHeight() / 2;&lt;br /&gt;// The direction the ball is heading&lt;br /&gt;x_dir = (random.nextInt() % 10);&lt;br /&gt;if (x_dir == 0) x_dir = 1;&lt;br /&gt;y_dir = (random.nextInt() % 10);&lt;br /&gt;if (y_dir == 0) y_dir = 1;&lt;br /&gt;directionChanged = 0;&lt;br /&gt;clearBackground = true;&lt;br /&gt;changeColor();&lt;br /&gt;}&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* Change the colors.&lt;br /&gt;* Counting on the implemention to substitute&lt;br /&gt;* a use-able color if any of these are out of the&lt;br /&gt;* devices supported range&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;protected void changeColor()&lt;br /&gt;{&lt;br /&gt;// The shift is to remove any sign (negative) bit&lt;br /&gt;red = (random.nextInt() &gt;&gt;&gt; 1) % 256;&lt;br /&gt;green = (random.nextInt() &gt;&gt;&gt; 1) % 256;&lt;br /&gt;blue = (random.nextInt() &gt;&gt;&gt; 1) % 256;&lt;br /&gt;}&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* Event handling&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;public void commandAction(Command c, Displayable d)&lt;br /&gt;{&lt;br /&gt;if (c == cmExit)&lt;br /&gt;midlet.exitMIDlet();&lt;br /&gt;}&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* Reset ball is "Fire" key is pressed&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;protected void keyPressed(int keyCode)&lt;br /&gt;{&lt;br /&gt;// Restart&lt;br /&gt;if (keyCode == keyFire)&lt;br /&gt;init();&lt;br /&gt;// Decrease ball size&lt;br /&gt;else if (keyCode == keyLeft)&lt;br /&gt;radius = Math.max(1, --radius);&lt;br /&gt;else if (keyCode == keyRight)&lt;br /&gt;// Increase ball size&lt;br /&gt;radius = Math.min(getWidth() / 4, ++radius);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;2.3. AnimateTimerTask.java&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* AnimateTimerTask.java&lt;br /&gt;*&lt;br /&gt;* Timer task, to change location ball on the canvas&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;package corej2me;&lt;br /&gt;import java.util.*;&lt;br /&gt;class AnimateTimerTask extends TimerTask&lt;br /&gt;{&lt;br /&gt;private AnimationCanvas canvas;&lt;br /&gt;public AnimateTimerTask(AnimationCanvas canvas)&lt;br /&gt;{&lt;br /&gt;this.canvas = canvas;&lt;br /&gt;}&lt;br /&gt;/*--------------------------------------------------&lt;br /&gt;* Determine next location of the ball.&lt;br /&gt;* If the ball reaches any edge, change the color&lt;br /&gt;* Track how many times we've switced directions&lt;br /&gt;*-------------------------------------------------*/&lt;br /&gt;public final void run()&lt;br /&gt;{&lt;br /&gt;// If past the right edge or prior to left edge...&lt;br /&gt;if ((canvas.x_loc + canvas.radius +&lt;br /&gt;canvas.x_dir &gt; canvas.getWidth())&lt;br /&gt;(canvas.x_loc - canvas.radius + canvas.x_dir &lt; x_dir =" -canvas.x_dir;"&gt; canvas.getHeight())&lt;br /&gt;(canvas.y_loc - canvas.radius + canvas.y_dir &lt; y_dir =" -canvas.y_dir;" &lt;a href="http://photos1.blogger.com/blogger/6354/3140/1600/untitled1.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6354/3140/320/untitled1.0.jpg" border="0" /&gt;&lt;/a&gt;Gambar 1 Hirarki Direktori&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.5.2 Compile Berikut ini adalah perintah untuk mengkompile : javac -bootclasspath c:\wtk104\lib\midpapi.zip -d jclasses src\*.java 2.5.3 Preverify Gunakan sebuah kelas file didalam direktori Jclasses Contoh: c:\wtk104\bin\preverify -classpath c:\wtk104\lib\midpapi.zip -d pclasses jclasses 2.5.4 Package(JAR) Buatlah sebuah JAR file di dalam direktori Final. Contoh : jar cvfm final\Animation.jar MANIFEST.MF -C pclasses . -C resources . 2.5.5 Menjalankan menggunakan WirelessToolkit Emulator Copy JAD file kedalam direktori Final. Jalankan Wireless Toolkit menggunakan spesifikasi JAR, emulator, dan JAD filenya. Contoh: c:\wtk104\bin\emulator -classpath final/Animation.jar -Xdevice:DefaultColorPhone -Xdescriptor:final/Animation.jad · berikut adalah contoh tampilan program yang menggunakan Wireless Toolkit Application Manager. Dengan refensi dari MIDlet.&lt;br /&gt;gambar 2 Aplikasi Manajer dan Animasi MIDlet &lt;a href="http://photos1.blogger.com/blogger/6354/3140/1600/untitled2.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6354/3140/320/untitled2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Menggunakan tombol kanan dan kiri. Ukuran dari sebuah lingkaran dapat di besarkan atau dikecilkan.&lt;br /&gt;gambar 3 Beberapa variasi tampilan dengan menggunakan Wireless Toolkit DefaultColorPhone &lt;a href="http://photos1.blogger.com/blogger/6354/3140/1600/untitled3.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6354/3140/320/untitled3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.5.6 Menjalankan menggunakan Nokia Emulator Jika ingin menginstall sebuah Nokia Sdk, ganti dulu parameter -Xdevice untuk supaya bisa melihat tampilan di dalam Nokia emulator. Berikut ini diberikan beberapa cara mengganti berdasarkan tipe dari Nokianya : * Nokia 3510i MIDP SDK c:\wtk104\bin\emulator -classpath final/Animation.jar -device: Nokia_3510i_MIDP_SDK_v1_0 -Xdescriptor:final/Animation.jad * Nokia 6310i MIDP SDK c:\wtk104\bin\emulator -classpath final/Animation.jar –Xdevice : Nokia_6310i_MIDP_SDK_v1_1 -Xdescriptor:final/Animation.jad * Nokia 7210 MIDP SDK c:\wtk104\bin\emulator -classpath final/Animation.jar -Xdevice: Nokia_7210_MIDP_SDK_v1_0 -Xdescriptor:final/Animation.jad * Nokia Series MIDP 60 Concept_SDK c:\wtk104\bin\emulator -classpath final/Animation.jar -Xdevice: Nokia_Series_60_MIDP_Concept_SDK_Beta_0_2 -Xdescriptor:final/Animation.jad berikut adalah contoh tampilan dari Nokia Emulator &lt;a href="http://photos1.blogger.com/blogger/6354/3140/1600/untitled4.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6354/3140/320/untitled4.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gambar 4. Nokia 3510i Gambar 5. Nokia 6310i&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6354/3140/1600/untitled5.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6354/3140/320/untitled5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gambar 6. Nokia 7210 Gambar 7: Nokia series 60&lt;br /&gt;&lt;br /&gt;3. Ant Untuk meningkatkan kompleksitas dari sebuah program. Maka dibutuhkan sebuah tool yang dapat mengatur banyak MIDlet dan perintah. Oleh karena itu tool Ant ini berfungsi untuk mengatasi hal tersebut. 3.1 Download dan Install Untuk menggunakan tool ini maka untuk pertama kalinya. Harus menginstall dulu. Setelah itu harus menset path dan Ant Homenya. Perintah adalah : set path = c:\jakarta-ant-1.5.1\bin set ANT_HOME = c:\jakarta-ant-1.5.1 3.2 Pembuatan File Perintah-perintah untuk input pada Ant semua ditulis dalam file Build.xml. Pada bagian ini akan dijelaskan 4 komponen yang membuat sebuah file: project, targets, task, dan properties. 3.2.1 Project Untuk membuat sebuah program maka sebuah project harus di deklarasikan terlebih dahulu. Contoh : &lt;project basedir="." default="run" name="Animation"&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/project&gt;&lt;br /&gt;3.2.2 Target dan Task&lt;br /&gt;Untuk setiap program, satu atau lebih target harus dituliskan.&lt;br /&gt;Contoh&lt;br /&gt;&lt;project basedir="." default="run" name="Animation"&gt;&lt;br /&gt;&lt;target name="compile"&gt;&lt;br /&gt;&lt;javac listfiles="true" bootclasspath="${classpath.dir}" destdir="${jclasses.dir}" srcdir="${src.dir}"&gt;&lt;br /&gt;&lt;/javac&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;/project&gt;&lt;br /&gt;3.2.3 Properties&lt;br /&gt;Adalah berisi nama-nama value dan lokasi. Contoh:&lt;br /&gt;&lt;project basedir="." default="run" name="Animation"&gt;&lt;br /&gt;&lt;property name="classpath.dir" value="c:\wtk104\lib\midpapi.zip"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="src.dir" location="src"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="jclasses.dir" location="jclasses"&gt;&lt;/property&gt;&lt;br /&gt;&lt;target name="compile"&gt;&lt;br /&gt;&lt;javac listfiles="true" bootclasspath="${classpath.dir}" destdir="${jclasses.dir}" srcdir="${src.dir}"&gt;&lt;br /&gt;&lt;/javac&gt;&lt;br /&gt;3.3 Menjalankan Ant&lt;br /&gt;Untuk menjalankan program yang dibuat dengan menggunakan Ant maka perintah yang dijalankan adalah:&lt;br /&gt;&lt;project basedir="." default="run" name="Animation"&gt;&lt;br /&gt;3.4 Contoh program menggunakan Ant&lt;br /&gt;&lt;project basedir="." default="run" name="AnimationDemo"&gt;&lt;br /&gt;&lt;br /&gt;&lt;property name="classpath.dir" value="c:\wtk104\lib\midpapi.zip"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="wtk_install.dir" value="c:\wtk104"&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;property name="MIDletSuite" value="Animation"&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;property name="src.dir" location="src"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="jclasses.dir" location="jclasses"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="pclasses.dir" location="pclasses"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="final.dir" location="final"&gt;&lt;/property&gt;&lt;br /&gt;&lt;property name="resources.dir" location="resources"&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="compile" depends="initialize"&gt;&lt;br /&gt;&lt;javac listfiles="true" bootclasspath="${classpath.dir}" destdir="${jclasses.dir}" srcdir="${src.dir}"&gt;&lt;br /&gt;&lt;/javac&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="preverify" depends="compile"&gt;&lt;br /&gt;&lt;exec executable="${wtk_install.dir}\bin\preverify"&gt;&lt;br /&gt;&lt;arg line="-classpath ${classpath.dir}"&gt;&lt;br /&gt;&lt;arg line="-d ${pclasses.dir} ${jclasses.dir}"&gt;&lt;br /&gt;&lt;/exec&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="package" depends="preverify"&gt;&lt;br /&gt;&lt;jar manifest="MANIFEST.MF" destfile="${final.dir}/${MIDletSuite}.jar"&gt;&lt;br /&gt;&lt;fileset dir="${pclasses.dir}"&gt;&lt;br /&gt;&lt;fileset dir="${resources.dir}"&gt;&lt;br /&gt;&lt;/jar&gt;&lt;br /&gt;&lt;br /&gt;&lt;copy tofile="${final.dir}/${MIDletSuite}.jad" file="${MIDletSuite}.jad"&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="run" depends="package"&gt;&lt;br /&gt;&lt;exec dir="${final.dir}" executable="${wtk_install.dir}\bin\emulator"&gt;&lt;br /&gt;&lt;arg line="-classpath ${MIDletSuite}.jar"&gt;&lt;br /&gt;&lt;arg line="-Xdevice:Nokia_6310i_MIDP_SDK_v1_1"&gt;&lt;br /&gt;&lt;arg line="-Xdescriptor:${MIDletSuite}.jad"&gt;&lt;br /&gt;&lt;/exec&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="initialize"&gt;&lt;br /&gt;&lt;echo message="Cleaning up..."&gt;&lt;br /&gt;&lt;br /&gt;&lt;delete dir="${jclasses.dir}"&gt;&lt;br /&gt;&lt;delete dir="${pclasses.dir}"&gt;&lt;br /&gt;&lt;delete dir="${final.dir}"&gt;&lt;br /&gt;&lt;br /&gt;&lt;mkdir dir="${jclasses.dir}"&gt;&lt;br /&gt;&lt;mkdir dir="${pclasses.dir}"&gt;&lt;br /&gt;&lt;mkdir dir="${final.dir}"&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;/project&gt;&lt;br /&gt;4. Kesimpulan&lt;br /&gt;Di dalam penjelasan ini telah dibahas 2 metode untuk membuat aplikasi:&lt;br /&gt;- Program yang berdiri sendiri dari command line&lt;br /&gt;- Cara-cara pembuatan lingkaran menggunakan Ant&lt;br /&gt;keuntungan menggunakan Ant adalah Conditional Prosesing (contoh : program hanya di kompile saja langsung bisa dipakai)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;www.corej2me.com/DeveloperResources/ Nokia/Using_Ant_and_Antenna_MIDP.pdf &lt;br /&gt;www.shortestpath.us/easy/Antenna%20Toolkit&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115218166337073221?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115218166337073221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115218166337073221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115218166337073221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115218166337073221'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/menggunakan-ant-untuk-membuat-aplikasi.html' title='Menggunakan Ant Untuk membuat Aplikasi MIDP'/><author><name>Agus Setiono</name><uri>http://www.blogger.com/profile/02609542772314187870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115218317878062464</id><published>2006-07-06T02:57:00.000-07:00</published><updated>2006-07-06T04:18:33.993-07:00</updated><title type='text'>J2ME Wireless Messaging System</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;strong&gt;203114793 - ARIEF SUGIHARTO&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Secara garis besar Wireless Messaging System dapat mengembangkan kemampuan networking dan kemampuan I/O dari aplikasi J2ME untuk mengirim dan menerima pesan menggunakan messaging services pada jaringan GSM, seperti Short Message Service (SMS) dan Cell Broadcast Service (CBS). &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;GSM Short Message Service (SMS)&lt;br /&gt;&lt;/strong&gt;SMS adalah tranmisi dari short text messages ke dan dari mobile phone, fax machine, dan/atau IP address pada jaringan GSM. Messages tidak boleh lebih dari 160 alphanumeric characters dan tidak mengandung image atau graphics. Keunggulan utama dari service ini adalah cepat, murah dan dijamin message akan sampai pada pihak yang dituju walaupun mereka berada di luar jaringan radio atau teleponnya mati.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Saat pesan dikirim, pesan akan diterima oleh Short Message Service Center (SMSC), yang kemudian akan menyampaikannya pada mobile device yang dituju. Untuk melakukannya SMSC mengirim SMS request ke home location register (HLR) untuk mencari roaming customer (online customer).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;HLR kemudian akan merespon SMSC dengan mengirim status pelanggan yang meliputi (1) aktif / tidak aktif dan (2) roaming location. Jika response menunjukkan tidak aktif, maka SMSC akan menyimpan message selama periode tertentu. Saat pelanggan mengakses device-nya, HLR mengrimkan SMS notification ke SMSC dan SMSC akan melakukan delivery message.&lt;br /&gt;SMSC mengirimkan message ke GSM message delivery system dalam format Short Message Delivery Point-to-Point. System kemudian akan menghubungi device dan, jika device merespon, message dikirimkan.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;SMSC akan menerima verifikasi bahwa message telah diterima oleh user yang dimaksud, dan mengkategorikan message sebagai sent message dan tidak akan dikirimkan lagi.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;GSM cell broadcast service&lt;br /&gt;&lt;/strong&gt;GSM cell broadcast service memungkinkan message untuk dikirim ke setiap Mobile Station (MS), seperti mobile phone, fax machine, dan/atau IP address pada jaringan yang sama. Cell broadcast messages dilang terus dalam jangka waktu tertentu, yang memungkinkan MS untuk menerima message walaupun jika memasuki jaringan tidak pada transmission yang pertama. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Data dapat dikirim baik sebagai data binary atau text ASCII sampai panjangnya 15 page dimana setiap page memiliki panjang 93 character. Cell broadcast messages diklasifikasikan berdasarkan topic dan mengandung channel number, message code, update number, dan language.&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;A Channel Number adalah header number yang mengidentifikasi message topic (seperti 'Weather Report' atau 'Traffic Information').&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;A Message Code mengidentifikasi message khusus, sehingga saat MS menerima message dengan code yang sama seperti message yang diterima sebelumnya, akan mengenalinya sebagai message yang telah diterima dan tidak akan ditampilkan lagi ke user.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;An Update Number digunakan untuk mengidentifikasi version khusus dari message. Hal ini berguna untuk memberikan informasi dari dynamic situation, sebagai contoh saat message memiliki topic yang sama (seperti road consctruction) tetapi dapat memiliki detail yang berbeda (seperti panjang traffic jam), maka walaupun message codenya sama tetapi MS hanya akan menerima detail message yang terbaru saja.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Language mengindikasikan bahasa yang digunakan dalam message. Mengganti parameter ini tidak akan menterjemahkan text dari message secara otomatis.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Wireless messaging system&lt;br /&gt;&lt;/strong&gt;System ini dapat digambarkan sebagai 3-tiered architecture, yang terdiri atas Interface Layer, Implementation Layer dan Transport Layer. &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;Interface Layer&lt;/em&gt; menyediakan basic definition dari message, mendefinisikan basic functionality saat mengirim dan menerimanya, dan menyediakan mekanisme bagi aplikasi MIDlet untuk memberi tahu saat message diterima.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;Implementation Layer&lt;/em&gt; mengandung class yang mengimplementasikan setiap Interface Layer agar dapat mengakses wireless messaging seperti fungsi SMS atau CBS pada GSM mobile device. Implementation Layer juga menjalankan segmentation dan concatenation dari messages untuk protocol yang digunakan. MIDlet dapat menspesifikasikan jumlah segments dari message untuk dipecah-pecah menjadi MessageConnection.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;Transport Layer&lt;/em&gt; mengandung class yang merupakan actual implementation dari protocols yang membawa messages ke mobile device.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Generic Messaging API, javax.wireless.messaging&lt;br /&gt;&lt;/strong&gt;API ini didefinisikan pada package javax.wireless.messaging, yang mendefinisikan semua interface untuk mengirim dan menerima wireless message. Berikut ini adalah daftar interface yang ada.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Message&lt;/strong&gt;. Menyediakan basic definition dari message, yang bertindak sebagai container holding address, payload, dan flags untuk mengirim dan melakukan block terhadap suatu message. Ini adalah superinterface dari TextMessage, suatu message object dengan text payload attribute, dan suatu BinaryMessage, message object dengan binary payload attribute. &lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;MessageConnection.&lt;/strong&gt; Interface ini menyediakan basic functionality saat menerima dan mengirim messages. Ini mengandung method untuk mengirim dan menerima messages, method untuk membuat new Message object, dan method untuk menghitung jumlah segment dari protocol yang digunakan yang dibutuhkan untuk mengirim Message object yang diinginkan.&lt;br /&gt;Class ini dibuat dengan memanggil Connector.open().&lt;br /&gt;Pada client mode connection, messages hanya bisa dikirimkan. Client mode connection dibuat dengan me-passing-kan string yang mengidentifikasikan destination address ke method Connector.open(). Method ini mengembalikan MessageConnection object.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;clientConn = (MessageConnection)Connector.open("sms://+18643630999:5000");&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Pada server mode connection, messages dapat dikirim atau diterima. Server mode connection dibuat dengan mem-passing-kan string yang mengidentifikasikan end point (protocol dependent identifier, contoh, port number) pada local host ke method Connector.open().&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;serverConn = (MessageConnection)Connector.open("sms://:5000"); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;MessageListener.&lt;/strong&gt; Inteface ini menyediakan mekanisme basic untuk memberi tahu apliaksi MIDlet atas message yang datang. Ini memungkinkan MIDlet untuk menerima callback saat new messages siap untuk dibaca.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;The Short Message Service API&lt;br /&gt;&lt;/strong&gt;com.sun.midp.io.j2me.sms package menyediakan API untuk Short Message Service Messaging system dan memungkinkan MIDlet untuk mengakases fungsi SMS pada GSM mobile device.&lt;br /&gt;Componen utama pada package adalah -- MessageObject dan Protocol -- mendukung pengiriman dan penerimaan message SMS.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;MessageObject.&lt;/strong&gt; MessageObject adalah implementasi dari message SMS. Pada Implementation layer, interface javax.wireless.messaging.Message diimplementasikan sebagai buffer. MessageObject menghandle pembuatan message buffers dan operasi input/output dari buffer. Lebih lanjut, MessageObject memiliki 2 subclass -- TextObject dan BinaryObject. Class ini mengimplementasikan SMS message dengan payload, baik text atau binary.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Protocol.&lt;/strong&gt; Protocol akan mengimplementasikan message connection ke mekanisme low-level Transport yang dibutuhkan untuk mengirimkan message SMS. Dalam prosesnya juga akan melakukan validitas dari message dan menghandle pengiriman dan penerimaan message menggunakan datagram atau serial port connection.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;The Cell Broadcast Messaging API&lt;br /&gt;&lt;/strong&gt;com.sun.midp.io.j2me.cbs package menyediakan API untuk Cell Broadcast Messaging system dan memungkinkan MIDLlet untuk mengakses fungsi CBS pada GSM mobile device.Main component dari package, com.sun.midp.io.j2me.cbs.Protocol, mendukung penerimaan CBS Message.&lt;br /&gt;Perbedaan CBS dari SMS adalah:URL Connection string tidak support designated host, dan ini dimaksudkan untuk inbound protocol. MIDlet dengan kemampuan CBS dapat menerima messages, tetapi dapat mengirimnya. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;J2ME messaging application &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Example J2ME messaging application dapat dilihat pada &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www-128.ibm.com/developerworks/wireless/library/wi-extendj2me/"&gt;&lt;span style="font-size:85%;"&gt;http://www-128.ibm.com/developerworks/wireless/library/wi-extendj2me/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Example ini akan menunjukkan contoh WMAServer yang akan menunggu datangnya SMS message dan kemudian menampilkannya pada screen phone. Pada alamat site tersebut juga terdapat example dari WMA Client yang melakukan pengiriman message SMS ke GSM mobile phone.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;Deploying wireless messaging&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Untuk dapat men-deploy MIDlet dengan kemampuan wireless messaging anda perlu men-download Reference Implementation dari WMA 1.0 melalui &lt;/span&gt;&lt;a href="http://java.sun.com/products/sjwtoolkit/index.html"&gt;&lt;span style="font-size:85%;"&gt;http://java.sun.com/products/sjwtoolkit/index.html&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span style="font-size:85%;"&gt;yang kompatibel dengan versi 1.0.4 ke atas dari J2ME toolkit. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Langkah-langkah berikutnya dapat dilihat lebih lanjut pada &lt;/span&gt;&lt;a href="http://www-128.ibm.com/developerworks/wireless/library/wi-extendj2me/"&gt;&lt;span style="font-size:85%;"&gt;http://www-128.ibm.com/developerworks/wireless/library/wi-extendj2me/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Daftar Pustaka&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://java.sun.com/products/sjwtoolkit/index.html"&gt;http://java.sun.com/products/sjwtoolkit/index.html&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.java.sun.com/j2me/docs/pdf/WMA-RI.pdf"&gt;http://www.java.sun.com/j2me/docs/pdf/WMA-RI.pdf&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www-128.ibm.com/developerworks/wireless/library/wi-extendj2me/"&gt;http://www-128.ibm.com/developerworks/wireless/library/wi-extendj2me/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115218317878062464?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115218317878062464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115218317878062464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115218317878062464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115218317878062464'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/j2me-wireless-messaging-system.html' title='J2ME Wireless Messaging System'/><author><name>Pyro</name><uri>http://www.blogger.com/profile/12677280916200997637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115217478416733366</id><published>2006-07-06T01:31:00.000-07:00</published><updated>2006-07-06T01:34:16.823-07:00</updated><title type='text'></title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Parsing XML di J2ME&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Nama : Fany Guptanto&lt;br /&gt;Nrp : 201114204&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Memasangkan XML dalam MIDP&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Kita dapat menggunakan pasangan2 XML dalam aplikasi J2ME dengan permukaan suatu XML servis. Contohnya, kita dapat mendapatkan gambaran yang sudah disesuaikan pada layar hand phone yang menyimpulkan judul2 dan cerita untuk situs baru dalam format XML.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;       &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Parser XML cenderung kabur dan memerlukan memori run time yang besar. Untuk membiasakan diri dengan MIDP, parser XML harus dalam ukuran kecil sehingga dapat memasuki sumber dasar MIDP.&lt;/span&gt;&lt;span style="font-size:10;"&gt; &lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;Mereka juga harus mudah dipindahkan dengan usaha seminimum mungkin untuk memasangkan mereka ke MIDP.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Dua pasangan XML yang sering digunakan adalah kXML dan NanoXML. kXML digunakan khusus untuk J2ME platform (CLDC dan MIDP). Seperti pada versi 1.6.8 untuk MIDP, Nano XML mendukung pasangan DOM.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;       &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Masalah2 pada tampilan parser XML&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;&lt;span style=""&gt;Ada&lt;/span&gt;&lt;/st1:place&gt;&lt;/st1:city&gt;&lt;span style=""&gt; beberapa masalah yang berhubungan dengan tampilan yang harus kita pikirkan selama menyebarkan parser XML dalam aplikasi MIDP:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="margin-left: 45pt; text-align: justify; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:Wingdings;font-size:10;"  &gt;&lt;span style=""&gt;§&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;i style=""&gt;&lt;span style=""&gt;Bertambah b&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115217478416733366?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115217478416733366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115217478416733366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217478416733366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217478416733366'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/parsing-xml-di-j2me-nama-fany-guptanto.html' title=''/><author><name>daffy_quackquack</name><uri>http://www.blogger.com/profile/11664641377200954086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115217412581601094</id><published>2006-07-06T01:13:00.000-07:00</published><updated>2006-07-06T01:22:05.926-07:00</updated><title type='text'>Parsing XML di J2ME</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Nama : Fany Guptanto&lt;br /&gt;Nrp : 201114204&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Memasangkan XML dalam MIDP&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Kita dapat menggunakan pasangan2 XML dalam aplikasi J2ME dengan permukaan suatu XML servis. Contohnya, kita dapat mendapatkan gambaran yang sudah disesuaikan pada layar hand phone yang menyimpulkan judul2 dan cerita untuk situs baru dalam format XML.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;       &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Parser XML cenderung kabur dan memerlukan memori run time yang besar. Untuk membiasakan diri dengan MIDP, parser XML harus dalam ukuran kecil sehingga dapat memasuki sumber dasar MIDP.&lt;/span&gt;&lt;span style="font-size:10;"&gt; &lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Mereka juga harus mudah dipindahkan dengan usaha seminimum mungkin untuk memasangkan mereka ke MIDP.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Dua pasangan XML yang sering digunakan adalah kXML dan NanoXML. kXML digunakan khusus untuk J2ME platform (CLDC dan MIDP). Seperti pada versi 1.6.8 untuk MIDP, Nano XML mendukung pasangan DOM.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;       &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Masalah2 pada tampilan parser XML&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Ada&lt;/span&gt;&lt;/st1:place&gt;&lt;/st1:city&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; beberapa masalah yang berhubungan dengan tampilan yang harus kita pikirkan selama menyebarkan parser XML dalam aplikasi MIDP:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="margin-left: 45pt; text-align: justify; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:Wingdings;font-size:10;"  &gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;i style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Bertambah besar:&lt;/span&gt;&lt;/i&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; Suatu pasangan XML adalah kode yang intensif dan meningkatkan ukuran aplikasi secara keseluruhan. Ini adalah hal yang oenting untuk diperhitungkan sebagai sumber pengikat alat MIDP. &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;Ada&lt;/st1:city&gt;&lt;/st1:place&gt; beberapa teknik untuk mengoptimalkan yang dapt digunakan to melawan ekspansi kode. Pertama, kita harus memindahkan sumber file yang tidak digunakan. Kita sebaiknya menggunakan obfuscators yang akan memindahkan kelas2 yang tidak digunakan dan variable dari file JAD. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 45pt; text-align: justify; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:Wingdings;font-size:10;"  &gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt; &lt;/span&gt;&lt;i style=""&gt;Pemasangan string yang berat: &lt;/i&gt;Pasangan2 XML menggunakan pemasangan string yang intensif untuk melakukan tugasnya, ini akan ditambahkan ke tampilan aplikasi MIDP dengan runtime memory yang rendah. Dokumen XML yang dipasangkan ke aplikasi J2ME harus dalam ukuran kecil dan mengandung sebanyak mungkin informasi penting.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 45pt; text-align: justify; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:Wingdings;font-size:10;"  &gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Renpons yang lambat: Pada saat aplikasi MIDP dipasangkan dengan data XML yang relative besar, waktu untuk merespon akan meningkat. File XML yang akan dipasangkan harus berukuran kecil dan pemasangan harus dilakukan dalam proses yang berbeda dari aplikasi utama.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Sebuah pemasangan XML pada aplikasi J2ME.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;Pada bagian ini, bilangan XML yang dipasangkan dengan RSS (Rich Site Summary) dan diformat sesuai dokumen XML untuk menampilkan informasi yang ditampilkan dalam dokumen pada layer telephone. RSS adalah bagian sederhana dari format XML yang mengumpulkan judul dan deskripsi cerita untuk sebuah site baru. Contoh RSS dokument dapat dilihat di listing 1&lt;br /&gt;&lt;/span&gt;  &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a name="listing1"&gt;&lt;b&gt;Listing 1. RSS data to be parsed by the application&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;   &lt;table class="MsoNormalTable" style="background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 100%;" border="1" cellpadding="0" cellspacing="0" width="100%"&gt;   &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 3.75pt;"&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;"-//Netscape Communications//DTD RSS 0.91//EN" &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;"http://my.netscape.com/publish/formats/rss-0.91.dtd"&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;rss version="0.91"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/rss&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;channel&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/channel&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;title&gt;Meerkat: An Open Wire Service&lt;/title&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;link&gt;http://meerkat.oreillynet.com &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;description&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/description&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Meerkat is a Web-based syndicated content reader based on RSS ("Rich Site Summary"). &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;RSS is a fantastic, simple-yet-powerful syndication system rapidly gaining momentum.&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;      &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Pada hasilnya, bilangan XML menghasilkan judul dan gambaran dari data RSS pada layar telephone. Aspek UI dari aplikasi ini dilakukan oleh paket &lt;i style=""&gt;javax.microedition.lcdui&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;Pasangan XML yang digunakandalam aplikasi ini adalah kXML 1.2. Untuk membuat jenis kXML tersedia dalam aplikasi tsb, kita harus untuk men&lt;i style=""&gt;download&lt;/i&gt; paket&lt;i style=""&gt; kxml.zip&lt;/i&gt; dari situs kXML. Lalu, menyalin isi dari paket tersebut dalam folder yang sesuai dalam system yang sedang dikembangkan. Jika kita menggunakan peralatan Sun’s J2ME, salin isi paket tersebut ke &lt;i style=""&gt;TOOLKIT_HOME\apps\ParseXML\lib&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;Aplikasi J2ME akan menampilkan sebuah &lt;i style=""&gt;textbox&lt;/i&gt;, sebuah tombol yang memicu tampilan dari data XML dan sebuah tombol &lt;i style=""&gt;Exit&lt;/i&gt;. Pada saat tampilan tombol XML ditekan, metode &lt;i style=""&gt;viewXML &lt;/i&gt;akan dipanggil. Dalam metode ini, aplikasi yang dilakukan akan menbuat &lt;i style=""&gt;XMLParser&lt;/i&gt; untuk bergerak menuju dokumen. Pada setiap benda yang ditemukan, parser itu mencari sub-isi dari &lt;i style=""&gt;title&lt;/i&gt; dan &lt;i style=""&gt;description&lt;/i&gt; untuk dapat menemukan teks yang ingin kita tampilkan. Proses ini berlangsung berulang2. Pengguna dapat memilih untuk keluar dari aplikasi selama proses ini berlangsung dengan menekan tombol &lt;i style=""&gt;Exit&lt;/i&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;Data RSS dibuat untuk ParseXML dalam bentuk &lt;i style=""&gt;String&lt;/i&gt;. Karena parser XML bekerja dalam bentuk bytes, String tersebut dirubah kebentuk satuan byte, yang digunakan untuk membangun suatu &lt;i style=""&gt;ByteArrayInputSystem&lt;/i&gt;. Dan &lt;i style=""&gt;ByteArrayInputSystem &lt;/i&gt;ini menciptakan &lt;i style=""&gt;InputStreamReader&lt;/i&gt;, yang lalu menciptakan sebuah &lt;i style=""&gt;XMLParser&lt;/i&gt;. Proses ini diilustrasikan di listing 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;a name="listing2"&gt;&lt;b&gt;Listing 2. Creating an instance of XMLParser to parse a string containing RSS data&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;   &lt;table class="MsoNormalTable" style="background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 100%;" border="1" cellpadding="0" cellspacing="0" width="100%"&gt;   &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 3.75pt;"&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;byte[] xmlByteArray = xmlStr.getBytes();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;ByteArrayInputStream xmlStream = new &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;ByteArrayInputStream( xmlByteArray );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;InputStreamReader xmlReader = new &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;InputStreamReader( xmlStream );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; XmlParser parser = new XmlParser( xmlReader );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;       &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;Untuk dapat menangkap data dari site, aplikasi tersebut harus membuka koneksi URL dan mendapatkan data RSS pada sebuah &lt;i style=""&gt;InputStream&lt;/i&gt;. &lt;i style=""&gt;InputStream&lt;/i&gt; ini disediakan untuk &lt;i style=""&gt;XMLParser&lt;/i&gt; melalui sebuah &lt;i style=""&gt;InputStreamReader&lt;/i&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;a name="listing3"&gt;&lt;b&gt;Listing 3. Get the RSS data from an aggregator site &lt;/b&gt;&lt;/a&gt;&lt;/p&gt;   &lt;table class="MsoNormalTable" style="background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 100%;" border="1" cellpadding="0" cellspacing="0" width="100%"&gt;   &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 3.75pt;"&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;HttpConnection hc = (HttpConnection)Connector.open(url);&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;InputStream is = hc.openInputStream();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Reader reader = new InputStreamReader(is);&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;    &lt;/span&gt;XmlParser parser = new XmlParser(reader);&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;Saat metode &lt;i style=""&gt;XMLParser’s read()&lt;/i&gt; memasukkan suatu &lt;i style=""&gt;item&lt;/i&gt;, itu menghasilkan suatu &lt;i style=""&gt;ParseEvent&lt;/i&gt; objek. Objek ini&lt;span style=""&gt;  &lt;/span&gt;mengandung informasi penting seperti tipe &lt;i style=""&gt;event&lt;/i&gt;(mewakili mulainya tag, berakhirnya tag, berakhirnya dokumen, teks, atau &lt;i style=""&gt;whitespace&lt;/i&gt;), nama &lt;i style=""&gt;event&lt;/i&gt; (nama tag) dan teks &lt;i style=""&gt;event&lt;/i&gt; (teks yang termasuk antara awal dan akhir tag). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;i style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;ParseEvent&lt;/span&gt;&lt;/i&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt; membantu &lt;i style=""&gt;Event &lt;/i&gt;untuk mengetikkan Xml.START_TAG, Xml.END_TAG, Xml.END_DOCUMENT, Xml.WHITESPACE dan Xml.TEXT saat &lt;i style=""&gt;Event&lt;/i&gt; melakukan kegiatan memulai dan mengakhiri tag, mengakhiri dokumen, whitespace dan teks diantara tag. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="listing4"&gt;&lt;b&gt;Listing 4. Picking up title and description from RSS data &lt;/b&gt;&lt;/a&gt;&lt;/p&gt;   &lt;table class="MsoNormalTable" style="background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 100%;" border="1" cellpadding="0" cellspacing="0" width="100%"&gt;   &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 3.75pt;"&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;case Xml.START_TAG:&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; // see API doc of StartTag for more access methods&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;// Pick up Title for display&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;if ("title".equals(event.getName()))&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                       &lt;/span&gt;pe = parser.read();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                       &lt;/span&gt;title = pe.getText();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; // Pick up description for display&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;if ("description".equals(event.getName()))&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;             &lt;/span&gt;pe = parser.read();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;             &lt;/span&gt;desc = pe.getText();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;       &lt;p class="MsoNormal"&gt;Listing 5 merupakan code listing complete untuk parseXML application&lt;br /&gt;&lt;br /&gt;&lt;a name="listing5"&gt;&lt;b&gt;Listing 5. ParseXML application &lt;/b&gt;&lt;/a&gt;&lt;/p&gt;   &lt;table class="MsoNormalTable" style="background: rgb(238, 238, 238) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 100%;" border="1" cellpadding="0" cellspacing="0" width="100%"&gt;   &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 3.75pt;"&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import javax.microedition.midlet.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import javax.microedition.lcdui.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import javax.microedition.io.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import java.io.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;//kxml imports&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import org.kxml.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import org.kxml.parser.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public class ParseXML extends MIDlet implements CommandListener {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;private Command exitCommand; // The exit command&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;private Command displayXML; // On execution, it displays title and description &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                            &lt;/span&gt;// on phone screen&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;private Display display;&lt;span style=""&gt;     &lt;/span&gt;// The display for this MIDlet&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;// UI Items for display of title and description on phone screen&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;private static TextBox t;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;private static String textBoxString = "";&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;// XML String &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;private String xmlStr = "";&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public ParseXML() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; display = Display.getDisplay( this );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; exitCommand = new Command( "Exit", Command.EXIT, 2 );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; displayXML&lt;span style=""&gt;  &lt;/span&gt;= new Command( "XML", Command.SCREEN, 1 );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;// The XML String in form of RSS&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;StringBuffer xmlString = new StringBuffer();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("\"http://my.netscape.com/publish/formats/rss-0.91.dtd\"&gt;");&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("&lt;rss version="\"&gt;"); &lt;o:p&gt;&lt;/o:p&gt;&lt;/rss&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("&lt;channel&gt;&lt;title&gt;Meerkat: An Open Wire Service&lt;/title&gt;");&lt;o:p&gt;&lt;/o:p&gt;&lt;/channel&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("&lt;link&gt;http://meerkat.oreillynet.com");&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("&lt;description&gt;Meerkat is a Web-based syndicated content&lt;o:p&gt;&lt;/o:p&gt;&lt;/description&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                                         &lt;/span&gt;reader based on RSS (\"Rich Site Summary\").&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                         &lt;/span&gt;&lt;span style=""&gt;                &lt;/span&gt;RSS is a fantastic, simple-yet-powerful syndication &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                                         &lt;/span&gt;system rapidly gaining momentum.");&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("&lt;language&gt;en-us&lt;/language&gt;");&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("");&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlString.append("");&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;xmlStr = xmlString.toString();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public void startApp() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;// The textbox displays title and description from a RSS String&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;t = new TextBox( "MIDlet XML", "kXML", 256, 0 );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;t.addCommand( exitCommand );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;t.addCommand( displayXML );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;t.setCommandListener( this );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;display.setCurrent( t );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/**&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Pause is a no-op since there are no background activities or&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;record stores that need to be closed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public void pauseApp() { }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/**&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Destroy must cleanup everything not handled by the garbage collector.&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;In this case there is nothing to cleanup.&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public void destroyApp(boolean unconditional) { }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/*&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Respond to commands, including exit. On the exit command, cleanup&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;and notify that the MIDlet has been destroyed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public void commandAction(Command c, Displayable s) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;if ( c == exitCommand ) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;destroyApp( false );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;notifyDestroyed();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;} &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;else if ( c == displayXML ) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;try {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                       &lt;/span&gt;viewXML();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;catch( Exception e ) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                               &lt;/span&gt;e.printStackTrace();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;// This function sets up kxml parser and calls traverse() to parse the whole XML String&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public void viewXML() throws IOException {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; try {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;byte[] xmlByteArray = xmlStr.getBytes();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;ByteArrayInputStream xmlStream = new &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;ByteArrayInputStream( xmlByteArray );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;InputStreamReader xmlReader = new &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;InputStreamReader( xmlStream );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; XmlParser parser = new XmlParser( xmlReader );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; try&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                       &lt;/span&gt; traverse( parser, "" );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; catch (Exception exc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;                       &lt;/span&gt; exc.printStackTrace();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;               &lt;/span&gt;return;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;} &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;catch ( IOException e ) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;return ;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; } finally {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;return ;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/**&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Traverses the XML file&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public static void traverse( XmlParser parser, String indent ) throws Exception&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;boolean leave = false;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;String title = new String();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;String desc = new String();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;do {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;ParseEvent event = parser.read ();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;ParseEvent pe;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;switch ( event.getType() ) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;title&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt; &lt;/span&gt;case Xml.START_TAG:&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt; // see API doc of StartTag for more access methods&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt; // Pick up Title for display&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;if ("title".equals(event.getName()))&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;      &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;                       &lt;/span&gt;pe = parser.read();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;                       &lt;/span&gt;title = pe.getText();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;               &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt; // Pick up description for display&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;if ("description".equals(event.getName()))&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;             &lt;/span&gt;pe = parser.read();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;             &lt;/span&gt;desc = pe.getText();&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;textBoxString = title + " " + desc;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;traverse( parser, "" ) ; // recursion call for each &lt;tag&gt;&lt;/tag&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;  &lt;/span&gt;// For example &lt;/title&gt; // For example, &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; case Xml.END_TAG:&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;leave = true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;// For example &lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; case Xml.END_DOCUMENT:&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;leave = true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;// For example, the text between tags&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; case Xml.TEXT:&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt; case Xml.WHITESPACE:&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;default:&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;} while( !leave );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;t.setString( textBoxString );&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span style=""&gt;  &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;p class="MsoNormal"&gt;  &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;a href="http://developers.sun.com/techtopics/mobility/midp/articles/parsingxml/"&gt;http://developers.sun.com/techtopics/mobility/midp/articles/parsingxml/&lt;/a&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://www.ericgiguere.com/microjava/cldc_xml.html"&gt;http://www.ericgiguere.com/microjava/cldc_xml.html&lt;/a&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://www-128.ibm.com/developerworks/library/wi-parsexml/"&gt;http://www-128.ibm.com/developerworks/library/wi-parsexml/&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; Nama : Fany Guptanto  &lt;br /&gt;Nrp : 201114204&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:11;"  &gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;i style=""&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115217412581601094?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115217412581601094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115217412581601094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217412581601094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217412581601094'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/parsing-xml-di-j2me.html' title='Parsing XML di J2ME'/><author><name>daffy_quackquack</name><uri>http://www.blogger.com/profile/11664641377200954086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115217333594385800</id><published>2006-07-06T01:00:00.000-07:00</published><updated>2006-07-06T01:08:56.043-07:00</updated><title type='text'>Membangun Wirelless Application Menggunakan Teknologi J2ME</title><content type='html'>Limado / 201114140&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;                                          &lt;strong&gt; Membangun Wirelless Application&lt;br /&gt;                                                 Menggunakan Teknologi J2ME&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pendahuluan&lt;/strong&gt;&lt;br /&gt;Teknologi Java merupakan sebuah teknologi yang berkembang sangat pesat akhir-akhir ini. Bahkan belakangan ini dikabarkan berusaha mengalahkan Microsoft yang terkenal sebagai kampiun dari produsen operating system dimuka bumi ini. Teknologi Java yang pada awalnya dikenal untuk aplikasi pada desktop (J2SE) ataupun pada application server (J2EE), kini hadir dengan teknologi terbarunya, J2ME™ Platform, untuk pembangunan aplikasi pada mobile device seperti mobile phone dan PDA. Selain J2ME™ Platform yang termasuk baru, terdapat pula satu buah platform teknologi Java yang termasuk baru pula yaitu Java Card. Java Card merupakan seperangkat kakas untuk membangun aplikasi pada sebuah card electronic seperti SIM Card pada ponsel kita. SIM Card yang dipergunakan oleh Mobile Banking BCA (layanan operator selularExcelcomindo) menjadi salah satu contoh dari teknologi Java Card.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Network is the Computer&lt;/strong&gt;&lt;br /&gt;Computing atau komputasi ada dimana-mana! Kita masih dapat menemukan one-computer-to-many-people (mainframes) dan one-person-to-one-computer (PCs) di berbagai institusi atau organisasi diberbagai belahan dunia. Belakangan terdapat aplikasi yang sangat menarik yaitu mobile application yang dapat hadir dimanapun kita berada, ketika belanja, ketika menyetir sekalipun, bahkan ketika duduk disudut dapur anda, aplikasi ini dapat hadir dan siap membantu anda seolah dunia telah berada dalam genggaman tangan anda.&lt;br /&gt;Apakah devices yang menarik bagi para programmers dan engineers saat ini? Banyak orang berkata bahwa devices yang paling diminati adalah perpaduan antara computing + networking. Sebuah mobile phone’s memiliki kapabilitas wireless networking sekaligus kapabilitas computing (walau masih terbatas). Bila anda selama ini hanya dapat browsing dihadapan PC desktop yang bersifat wireline, maka saat ini melalui mobile devices anda dapat melakukan browsing dengan kemampuan yang tidak mengecewakan dibandingkan PC desktop, anywhere!&lt;br /&gt;Sun Microsystem telah melansir bahwa kedepan teknologi yang memadukan antara networking dan computing akan memberikan potensi yang besar bagi perkembangan teknologi di dunia ini. Perkembangan selanjutnya adalah XML yang telah menjadi standar bagi portable application pada lingkungan Java, dan IP sebagai standar bagi interoperabilitas &amp; skalabilitas networking, maka Sun seolah mengeluarkan mantra “The Network is the Computer”.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Java +XML+IP Protocol&lt;/strong&gt;&lt;br /&gt;Teknologi Java, XML, dan IP telah membuat Java ada dimana-mana, multi device computing. Bahasa Java telah memberikan cara yang konsisten bagi programmer agar dapat menulis kode yang dapat dieksekusi pada berbagai devices. Untuk client-side programming, Visual Basic masih mendominasi pasar dunia, sedangkan untuk pasar application server hampir seluruh pasar telah diambil oleh Java, dan kinipun teknologi Java telah diadopsi oleh berbagai vendor mobile devices seperti ponsel maupun PDA. Saat tulisan ini dibuat harga sebuah HP Siemens M50 hanyalah seharga 1 juta rupiah, anda telah mendapatkan HP yang Java enabled dan siap untuk menemani anda untuk “bercanda” dgn teknologi J2ME.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;J2ME and The Java 2 Platform&lt;/strong&gt;&lt;br /&gt;Anda jangan berharap dapat memprogram dengan platform J2SE dan dapat me-load-nya pada mobile devices, tentu saja berbeda terutama pada hal prosesor computing dan memory-nya. Jika pada J2SE anda menggunakan interpreter JVM, pada platform J2ME anda mempergunakan Kilo Virtual Machine (KVM) yang “ditanam” dalam  handheld devices. Sebagai informasi bahwa J2EE merupakan superset dari J2SE, sebaliknya J2SE merupakan superset bagi J2ME. Apa artinya? API yang ada pada J2ME sebagian mengadopsi yang ada pada API J2SE, selain juga mengimplementasikan API&lt;br /&gt;spesifik untuk teknologi J2ME itu (javax.microedition.*).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What are Configurations and Profiles?&lt;/strong&gt;&lt;br /&gt;Configuration mendefinisikan minimum Java Libraries dan kapabilitas yang dipunyai oleh para developer J2ME. Artinya antara mobile device yang Java enabled maka akan ditemui configuration yang sama. Bila dianalogikan dengan sekelompok mobil maka sebuah mobil dengan mobil lainnya memiliki kesamaan, misalnya mempunyai roda, kaca spion, spedo meter, dll. Roda dan kaca spion itulah yang disebut sebagai configuration. Jadi configuration hanyalah mengatur hal-hal yang berkaitan dengan “kesamaan” bukan mengatur hal-hal yang “membedakan”, sehingga configuration memastikan portabilitas antar devices.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Web Content for Mobile Devices&lt;/strong&gt;&lt;br /&gt;Terdapat tiga opsi untuk me-retrieve static (mark up) content untuk sebuah mobile phone saat ini :&lt;br /&gt;·        cHTML (compact HTML) yaitu merupakan subset dari HTML yang digunakan oleh NTT Docomo  sebuah operator selular maha sukses di Jepang hingga teknologinya (I-mode)  diekspor keberbagai negara.&lt;br /&gt;·        WML (wireless markup language) yaitu sebuah markup language untuk lingkungan wireless yang didefinisikan oleh WAP Forum. WML digunakan sebagai standar pada mark-up language diberbagai negara, meskipun untuk negara-negara Amerika Utara masih didominasi oleh HDML&lt;br /&gt;      (handheld device markup language).&lt;br /&gt;·        HTML. Jadi terdapat pula mobile devices yang dapat menginterpretasi HTML seperti Palm OS yang mempunyai HTML browser.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Bagaimana sebuah content dapat di-retrieve oleh mobile device?&lt;/em&gt;&lt;br /&gt;Pada bagian atas kiri terlihat content berisi static file atau bisa juga berupa dynamic content atau juga Java Application yang di-generated oleh server. Lebih luas lagi, informasi dapat diekstrak dari basis data dan dimodifikasi menggunakan servlets, EJB, atau teknologi server side lainnya. Selanjutnya kita lihat pada bagian tengah, Java Application ditampilkan oleh Web Server dan seteruskan ditransmisikan melalui jaringan&lt;br /&gt;wireless menuju mobile devices. Web server atau WAP gateway system akan mendistribusikan content pada mobile phone atau device lainnya.&lt;br /&gt;Akhirnya content diterima oleh client device dengan melakukan proses transcoding, baik itu mengambil data dari basis data, atau XML, atau HTML, dan selanjutnya diterjemahkan kedalam format WML atau cHTML bergantung pada format yang kita punyai.&lt;br /&gt;&lt;em&gt;Bagaimana Java Application dapat ditransmisikan melalui jaringan wireless dan selanjutnya diterima oleh client device?&lt;br /&gt;Bagaimana pula operator atau content provider mengatur masalah billing untuk Java&lt;br /&gt;Application atau service yang telah diberikan?&lt;br /&gt;&lt;/em&gt;Beberapa company telah bekerja untuk mendefinisikan masalah ini dan yang pertama melakukan adalah LG Telecom di Korea pada tahun 2000, disusu NTT DoCoMo di Jepang dan Nextel di USA pada akhir 2001. Setiap operator atau network memiliki ciri spesifik walaupun datang dengan teknologi yang sama yaitu 3G wireless technology yang dimulai tahun 2001-2002. Untuk menjembatani perbedaan tersebut maka sebuah MIDP Groups membuat sebuah ketentuan/ standar OTA (over the air) yaitu JSR118, walaupun ketentuan OTA ini masih terus disempurnakan.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Java Application Loading Process&lt;/strong&gt;&lt;br /&gt;Ketika sebuah application siap untuk didistribusikan maka dibutuhkan suatu mekanisme agar secara fisik aplikasi itu dapat di-load kedalam phone. AMS (application managemen software) adalah kakas pada ponsel yang mengatur mekanisme ini. Jadi AMS ini dapat mengetahui bagaimana cara me-load kode MIDlet melalui wireless connection. Sebagai contoh anda ingin men-download sebuah games MIDlet dari sebuah situs, ketika anda men-download jad file akan terlihat ukuran file games tersebut (jar=java archieve file) misalkan sebesar 6kb padahal sisa space memory anda hanya 2 kb maka akan muncul alert “user doesn't have enough room to download and store this application”. Jelas ini menguntungkan consumer karena akan menghemat bandwidth maupun uang,&lt;br /&gt;paling tidak consumer tidak membuang waktu untuk sebuah aplikasi yang tak perlu di-download-nya.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Supporting WAP in J2ME Enabled Mobile Phones&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Bagaimana J2ME dan WAP berelasi?&lt;br /&gt;&lt;/em&gt;WML bekerja baik untuk beberapa aplikasi seperti text-centric application seperti weather report, stock quotes, dll, tetapi terdapat beberapa kelemahan dengan WAP yaitu WAP-based application memerlukan koneksi terhadap network secara permanen, artinya koneksi terhadap internet harus terus dilakukan bilamana ingin menjalankan WAP-based application. Selain itu pula aplikasi WAP tidak baik digunakan pada aplikasi yang graphic intensive seperti games, interactive charting, dll. Selain dari itu isu security juga menimpa WAP gateway, dimana terjadi konversi protocol yaitu dari protocol internet menjadi protocol wireless.&lt;br /&gt;Teknologi Java dapat dijalankan pada devices dengan cara disconnected access dan inilah yang tidak dimiliki oleh WAP-based application. J2ME memberikan kemudahan bagi developer untuk membuat aplikasi grafis seperti color games, office application, dll. J2ME pula menyediakan end-to-end security HTTP seperti SSL Tetapi tidak berarti teknologi Java dan WAP berdiri sendiri dan justru sebaliknya merupakan teknologi&lt;br /&gt;komplementer dimana WAP browser (microbrowser) digunakan untuk surfing mencari Java Application kemudian AMS akan melakukan manajemen instalasi lalu KVM akan menjalankan aplikasi MIDlet secara disconnected access.&lt;br /&gt;Saat ini telah tersedia beberapa microbrowser yang ditulis dengan menggunakan bahasa Java. Tentu saja ini menguntungkan karena anda dapat melakukan proses updating secara OTA, sedangkan untuk microbrowser yang ditulis dengan bahasa selain Java tidak memiliki kemampuan untuk di-updated, dengan kata lain jika anda menginginkan microbowser versi terbaru anda harus membeli HP baru. Openwave (merger dari www.software.com dan www.phone.com) yang merupakan founder dengan WAP&lt;br /&gt;Forum dan merupakan supporter utama dunia WAP telah mengumumkan major partnership dengan Sun Microsystem untuk mengintegrasikan J2ME dan WAP untuk release selanjutnya.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Kesimpulan&lt;/strong&gt;&lt;br /&gt;J2ME CLDC dan KVM telah digunakan oleh banyak platform dan devices, termasuk oleh Motorola phones dan two-way pagers, Research in Motion (RIM) wireless handhelds, dan Palm PDA. Jutaan J2ME CLDS digunakan sehari-hari oleh berbagai mobile phone di Jepang dan Korea. Banyak pula consumer yang menggunakan J2ME dengan Motorola handsets pada jaringan Nextel di USA, dan dalam tahap test dan&lt;br /&gt;commercial deployment di Vodaphone Airtouch, Sprint PCS, Telefonica, dan operator lainnya di USA.&lt;br /&gt;Symbian terus men-support Java Technology untuk di-release-nya Nokia Communicator 9210 yang berbasiskan Java Technology pada akhir 2001. Saat ini terdapat berbagai J2ME developmet tool yang free. Sun menyediakan J2ME Wireless Toolkit (WTK) yang berisi full J2ME CLDC dan MIDP implementation. Tool kit ini hanya dapat bertindak sebagai emulator saja (bukan IDE) dan dilengkapi dengan beberapa generic phone. WTK ini dapat dijalankan secara stand alone maupun terintegrasi dengan IDE buatan Sun Microsystem pula, Forte Community Edition (CE). Selain Forte CE terdapat pula Forte Mobile Edition (ME) yang berdiri sendiri sebagai IDE untuk J2ME application. Borland sendiri mengeluarkan pula IDE-nya untuk pembuatan J2ME application yaitu Borland Mobile Set. Baik WTK, Forte CE/ ME, Borland Mobile Set adalah kakas yang free untuk di download pada masingmasing situs pengembangnya.&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;Source&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://ilmukomputer.com/populer/faisal-j2me.php"&gt;http://ilmukomputer.com/populer/faisal-j2me.php&lt;/a&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115217333594385800?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115217333594385800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115217333594385800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217333594385800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217333594385800'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/membangun-wirelless-application.html' title='Membangun Wirelless Application Menggunakan Teknologi J2ME'/><author><name>Aurelius</name><uri>http://www.blogger.com/profile/14720693235867961536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115216894048800740</id><published>2006-07-05T23:32:00.000-07:00</published><updated>2006-07-06T00:06:46.056-07:00</updated><title type='text'>Pemrograman Aplikasi Database Pocket PC dengan SQL CE</title><content type='html'>Nama : FX. Hadi Susanto&lt;br /&gt;NRP  : 201114411&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pendahuluan&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Artikel ini mendemonstrasikan bagaimana memprogram suatu aplikasi SQL CE. Ini juga menampilkan pola desain yang dapat dengan mudah diubah dan diperluas untuk membuat aplikasi database yang lain. Artikel ini dilampirkan pada fungsi layer akses data inheritance, dan mendeskripsikan bagaimana suatu metode yang cepat dan terstruktur dalam pembuatan aplikasi database pocket pc 2003.&lt;br /&gt;Pertama kali buat sebuah aplikasi smart device untuk pocket pc 2003. Berikut yang diperlukan untuk menambah referensi menuju System.Data.Common dan System.Data.SQLServerCE.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bagaimana menginisialisasi database &lt;/strong&gt;&lt;br /&gt;Untuk membuat database yang diisi dengan beberapa data inisialisasi, pertama-tama periksa apakah file databasenya ada. Jika file tersebut tidak ada maka database dapat dibuat dengan langkah-langkah sebagai berikut:&lt;br /&gt;&lt;br /&gt;1. Menciptakan database dengan sendirinya&lt;br /&gt;REM Create Database &lt;br /&gt;&lt;br /&gt;Dim SQLEngine As SqlServerCe.SqlCeEngine&lt;br /&gt;SQLEngine = New SqlServerCe.SqlCeEngine("data source=" &amp; DBPath)&lt;br /&gt;SQLEngine.CreateDatabase()&lt;br /&gt;Untuk membuat suatu password database dengan menggunakan metode SqlCeEngine.CreateDatabase, maka anda harus mengisi properti password dalam connection string. Contohnya: &lt;br /&gt;"data source=\secure.sdf;password=&lt;myPassword&gt;;encrypt database=TRUE"&lt;br /&gt;&lt;br /&gt;2. Buat perintah SQL untuk membuat tabel yang diinginkan &lt;br /&gt;REM Create an SQL command to create the database&lt;br /&gt;SQL = "CREATE TABLE ADR_ADDRESS ( "&lt;br /&gt;SQL &amp;= "Address_ID INT IDENTITY(1,1) PRIMARY KEY "&lt;br /&gt;SQL &amp;= ",Name nvarchar(50) "&lt;br /&gt;SQL &amp;= ",Address ntext "&lt;br /&gt;SQL &amp;= ",Telephone ntext "&lt;br /&gt;SQL &amp;= ",Last_Edited datetime "&lt;br /&gt;SQL &amp;= ",IsPrivate_Flag nvarchar(10) "&lt;br /&gt;SQL &amp;= ")"&lt;br /&gt;&lt;br /&gt;Dalam tabel berikut, dijelaskan mengenai tipe-tipe data dan deskripsinya yang digunakan oleh SQL CE.&lt;br /&gt;&lt;br /&gt;nchar(n) (national character(n)) : Fixed-length Unicode data dengan panjang maks. 255 karakter. Default length = 1. Ukuran penyimpanan, dalam bytes, 2 kali jumlah karakter yang dimasukkan. &lt;br /&gt;&lt;br /&gt;nvarchar(n) (national character varying(n)): Variable-length Unicode data dengan panjang 1 sampai 255 karakter. Default length = 1. Ukuran penyimpanan, dalam bytes, 2 kali jumlah karakter yang dimasukkan. &lt;br /&gt;&lt;br /&gt;Ntext : Variable-length Unicode data dengan panjang maks. (2^30 - 2) / 2 (536,870,911) karakter. Ukuran penyimpanan, dalam bytes, 2 kali jumlah karakter yang dimasukkan.&lt;br /&gt;&lt;br /&gt;binary(n) : Fixed-length binary data dengan panjang maks. 510 bytes. Default length = 1.&lt;br /&gt; &lt;br /&gt;Varbinary(n) : Variable-length binary data dengan panjang maks. 510 bytes. Default length = 1. &lt;br /&gt;&lt;br /&gt;Image : Variable-length binary data dengan panjang maks. 2^30 – 1 (1,073,741,823) bytes. &lt;br /&gt;&lt;br /&gt;Uniqueidentifier : A globally unique identifier (GUID). Ukuran penyimpanan 16 bytes. &lt;br /&gt;&lt;br /&gt;IDENTITY [(s, i)]. s (seed) = nilai awal. i (increment) = nilai penambahan. Ini adalah properti sebuah kolom data, bukan tipe data distinct. Hanya kolom data dari tipe data integer dapat digunakan untuk  kolom identitas. Sebuah tabel hanya boleh mendapat sebuah kolom identitas. Seed dan increment dapat dijabarkan dan kolom tidak dapat diubah. &lt;br /&gt;&lt;br /&gt;ROWGUIDCOL : Ini adalah properti sebuah kolom data, bukan tipe data distinct. Ini sebuah kolom dalam suatu tabel yang didefinisikan memakai tipe data uniqueidentifier. Sebuah tabel hanya boleh mendapat sebuah kolom ROWGUIDCOL. &lt;br /&gt;&lt;br /&gt;3. Jalankan perintah SQL &lt;br /&gt;Dim objConn As New SqlCeConnection&lt;br /&gt;&lt;br /&gt;objConn.ConnectionString = ConnStr&lt;br /&gt;objConn.Open()&lt;br /&gt;&lt;br /&gt;Dim objCmd As SqlCeCommand = New SqlCeCommand(SQL, objConn)&lt;br /&gt;objCmd.CommandType = CommandType.Text&lt;br /&gt;objCmd.ExecuteNonQuery()&lt;br /&gt;bjCmd.Dispose()&lt;br /&gt;&lt;br /&gt;Langkah terakhir adalah mengisi tabel ini dengan data. Untuk melakukannya, dibutuhkan Adr_Address.xml dalam proyek ini. Ketika diluncurkan, file ini akan mencari jalannya sendiri menuju directori program. Dimana dapat dilokasikan dengan kode sebagai berikut:&lt;br /&gt;StartupPath = "/Program Files/" + &lt;br /&gt;  System.Reflection.Assembly.GetExecutingAssembly.GetName.Name&lt;br /&gt;&lt;br /&gt;File ini dibaca dan dimasukkan kedalam database menggunakan fungsi ImportXML pada DBTable.vb. &lt;br /&gt;CRUD (Create, Read, Update dan Delete) dengan SQLCE &lt;br /&gt;Fungsi Create, Update dan Delete dapat dibuat dengan perintah SQL yang tidak mengembalikan nilai. Fungsi-fungsi ini dapat dibuat sebagaimana sebelumnya dibahas pada langkah kedua dan ketiga.&lt;br /&gt;Untuk membaca dari database, digunakan kode berikut:&lt;br /&gt;Dim objConn As New SqlCeConnection&lt;br /&gt;&lt;br /&gt;objConn.ConnectionString = ConnStr&lt;br /&gt;objConn.Open()&lt;br /&gt;&lt;br /&gt;Dim SQL as string = “select * from adr_address”&lt;br /&gt;Dim objCmd As New SqlCeDataAdapter(SQL, objConn)&lt;br /&gt;Dim ds As DataSet = New DataSet&lt;br /&gt;&lt;br /&gt;REM Fill Table held in ClassName in the Dataset ds&lt;br /&gt;objCmd.Fill(ds, ClassName)&lt;br /&gt;objCmd.Dispose()&lt;br /&gt;Ketika membuat perintah SQL yang lebih menarik, perbedaan utama antara Access dan SQL CE berhubungan dengan contoh sebagai berikut:&lt;br /&gt;&lt;br /&gt;1. Menggunakan fungsi Date Time &lt;br /&gt;Pada Access &lt;br /&gt;TestDate = #01 MAR 2002 13:12:45#&lt;br /&gt;Pada SQL CE &lt;br /&gt;TestDate (datetime,' 01 MAR 2002 13:12:45:000') &lt;br /&gt;&lt;br /&gt;2. SQL CE tidak mempunyai tipe Boolean. Ini berarti anda harus mendefinisikan sendiri. Disarankan menggunakan strings ‘True’ dan ‘False’, tetapi hal itu dapat lebih mudah didefinisikan sebagai suatu integer atau ‘T’ dan ‘F’.&lt;br /&gt;Pada Access&lt;br /&gt;TestBoolean = True&lt;br /&gt;Pada SQL CE&lt;br /&gt;TestBoolean = ‘True’&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Contoh 3 Tingkatan SQLCE pada Pocket PC &lt;/strong&gt;&lt;br /&gt;Dalam contoh, semua ini telah diimplementasikan menggunakan metode inheritance dalam fungsi layer akses data inheritance. Ini mungkin tidak semua dapat, bagaimanapun juga ini telah dibuktikan menjadi suatu jalur cepat dalam mengembangkan dan memelihara aplikasi yang baik strukturnya. Dalam contoh, diperlukan XMLTable, yang sama seperti DBTable. Ide itu menggunakan tampilan yang sama untuk membaca file-file XML sebagaimana database lainnya, membuat itu mudah untuk mengubah database dari XML ke sesuatu yang lain.&lt;br /&gt; &lt;br /&gt;Hal terakhir untuk diingat adalah ‘x’ pada ujung kiri atas pada kotak dialog tidak ditangani dengan cara yang sama pada suatu aplikasi Windows. Ini dikarenakan hal itu lebih sulit sebaliknya untuk mengganti dari satu aplikasi ke aplikasi lainnya. Sebab itu, jika anda ingin menutup suatu dialog, anda harus menjalankan me.close.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tips&lt;/strong&gt;&lt;br /&gt;Ini adalah poin awal yang baik dalam pembuatan aplikasi database. Ini menunjukkan masalah-masalah dasar bagaimana untuk mendapatkan aplikasi database yang dapat berjalan sendiri. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Source&lt;/strong&gt; &lt;br /&gt;http://www.codeproject.com/netcf/DBApplicationsForPocketPC.asp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115216894048800740?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115216894048800740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115216894048800740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115216894048800740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115216894048800740'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/pemrograman-aplikasi-database-pocket.html' title='Pemrograman Aplikasi Database Pocket PC dengan SQL CE'/><author><name>frankensteiners</name><uri>http://www.blogger.com/profile/16209926482627972289</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115216949941825716</id><published>2006-07-05T23:31:00.000-07:00</published><updated>2006-07-06T00:04:59.493-07:00</updated><title type='text'>Aplikasi Flash pada Pocket PC</title><content type='html'>Pemrograman Pocket PC juga bisa menggunakan Flash&lt;br /&gt;&lt;br /&gt;Sekarang sudah ada 2 Content Development Kits, yaitu&lt;br /&gt; - Macromedia Flash Player 7 for Pocket PC CDK&lt;br /&gt; - Macromedia Flash Player 6 CDK for Pocket PC&lt;br /&gt;&lt;br /&gt;Ini link untuk download Flash Player 6 CDK for Pocket PC&lt;br /&gt; - http://www.adobe.com/cfusion/entitlement/index.cfm?e=pocketpccdk&lt;br /&gt; &lt;br /&gt;Macromedia Flash Player tidak hanyak digunakan di komputer. Ini sebetulnya digunakan untuk bervariasi alat, termasuk Pocket PC, Symbian OS devices, WebTV, Sony PS2, ATMs, dan lain-lain.&lt;br /&gt;&lt;br /&gt;Karena Macromedia Flash sudah dapat dijalan secara meluas (hampir di mana saja), Macromedia Flash tool yang terbaik untuk membuat sebuah aplikasi yang bisa dijalankan di beberapa platform. Lebih lanjut dengan peluncuran dari macromedia flash mx pengembangan aplikasi bahkan lebih mudah. Macromedia Flash secara tradisional telah digunakan untuk membuat game, entertainment, dan utility untuk Pocket PC. Flash content yang terbaru dan lebih menarik pada Pocket PC bisa diatur untuk menunjukkan brand secara custom pada e-commerce dan pada aplikasi bisnis. dan semuanya bisa diakses kapan saja dan dimana saja.&lt;br /&gt;&lt;br /&gt;Resource yang paling baik untuk belajar adalah Macromedia Flash Player for Pocket PC 2002 Content Development Kit (http://www.adobe.com/products/flashplayer/pocketpc/devkit/). Dokumentasi dari CDK itu membahas mengenai User Interface, Input Methods, Screen economy, Online detection, File size dan memory.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Menampilkan isi Macromedia Flash&lt;/strong&gt;&lt;br /&gt;Secara default, saat anda membuat Macromedia Flash content untuk Pocket PC, anda menampilkannya dengan meletakkan file SWF ke dalam sebuah halaman HTML dan menggunakan Pocket Internet Explorer untuk menampilkan halaman tersebut. Player khusus untuk Pocket PC masih tidak ada karena terdapat beberapa keterbatasan dalam PIE beberapa developer telah menciptakan flash player custom yang Stand-Alone sehingga dapat menampilkan content flash pada full screen (240x320 pixels). Dengan menggunakan stand-alone player akan mendapat keuntungan termasuk dapat menciptakan content flash untuk seluruh layar. Sampai saat ini baru ada 1 developer yang menciptakan stand-alone player ini, akan tetapi di masa depan mungkin akan lebih banyak developer yang akan membuat aplikasi serupa.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Test, test, dan test beberapa kali lagi&lt;/strong&gt;&lt;br /&gt;Ini penting untuk mengetes Flash content anda secara berulang. Anda harus memastikan bahwa aplikasi anda melakukan sesuatu yang diinginkan. Jika anda sedang mengembangkan sebuah aplikasi untuk client, pastikan client terlibat selama design, development, dan testing.&lt;br /&gt;Sampai sekarang masih belum ada Pocket PC emulator yang membuat anda bisa melihat flash content diluar Pocket PC. Jadi jika anda sedang mengembangkan content untuk Pocket PC tersebut dan anda tidak mempunyai Pocket PC maka anda harus berpikir secara kreatif. Mintalah seseorang yang mempunyai Pocket PC dengan macromedia flash player yang sudah terinstall untuk mengetes aplikasi anda. Anda juga bisa melakukan request pada macromedia discusion group untuk mengetesnya. Feedback dari teman-teman anda selalu berguna dan bermanfaat.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Apa selanjutnya&lt;/strong&gt;&lt;br /&gt;Macromedia Flash dan Pocket PC sedang menuju ke suatu keadaan di mana user bisa berinteraksi dengan dinamically-driven content dalam GUI yang bagus ketika sedang berkoneksi melalui PAN, LAN, or WAN. Tentu saja hal ini tidak mungkin terjadi dalam 1 malam. Tapi dengan peran Macromedia Flash dan Pocket PC maka hal tersebut sedang menuju ke kenyataan.&lt;br /&gt;Dalam dunia hardware selalu ada device baru. Jika anda melihat dari peluncuran Intel, mmO2, Toshiba, HP. Anda akan melihat generasi baru dari Pocket PC.&lt;br /&gt;&lt;br /&gt;Berikut sebuah contoh pengimplementasian Flash pada Pocket PC&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Connecting People with Macromedia Flash on the Pocket PC&lt;/strong&gt;&lt;br /&gt;Ini adalah era yang menarik dalam dunia komputer. Pertimbangkan Microsoft Smartphone, Audiovox Thera, Kyocera QCP Series smartphone, Samsung SPH-1300, Handspring Treo, dan Nokia 9290 Communicator. Keragaman dari PDA dan selular akan semakin banyak dalam beberapa tahun ke depan, dan Macromedia Flash ditakdirkan untuk memegang peranan penting dalam pengembangan tersebut.&lt;br /&gt;Device Wireless yang bisa memainkan Flash, dan anda dapat membuat aplikasi wireless yang menggunakan Macromedia Flash untuk menghubungkan user pada service bahkan orang lain.&lt;br /&gt;&lt;br /&gt;Tutorial ini mendemokan bagaimana membuat sebuah ruang chat interaktif menggunakan Flash pada Pocket PC.&lt;br /&gt;http://www.adobe.com/devnet/mobile/articles/flash_chat/chat_sample.zip&lt;br /&gt;&lt;br /&gt;Budiyanto Tanjung - 203114806&lt;br /&gt;&lt;br /&gt;Referensi :&lt;br /&gt;- http://www.adobe.com/devnet/mobile/articles/f5_ppc.html&lt;br /&gt;- http://www.adobe.com/devnet/mobile/articles/flash_chat.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115216949941825716?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115216949941825716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115216949941825716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115216949941825716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115216949941825716'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/aplikasi-flash-pada-pocket-pc.html' title='Aplikasi Flash pada Pocket PC'/><author><name>bakpao</name><uri>http://www.blogger.com/profile/12207470111319648318</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115211593093305324</id><published>2006-07-05T09:06:00.000-07:00</published><updated>2006-07-05T09:12:14.996-07:00</updated><title type='text'>Dua in One</title><content type='html'>==================================================================&lt;br /&gt;&lt;div align="center"&gt;::     OpenGl ES Tuk HP       ::&lt;/div&gt;==================================================================&lt;br /&gt;Gubah   : 202114682&lt;br /&gt;Bahasa  : Rada Gaul&lt;br /&gt;Sumber : Antonious AH dari &lt;a href="http://www.mappz.com"&gt;www.mappz.com&lt;/a&gt;&lt;br /&gt;     &lt;br /&gt;&lt;div align="justify"&gt;      Bagi game  developer sangat  mudah untuk pengembangan game pada HPdengan  memakai  OpenGl ES. ES ini singkatan dari Embedded System.OpenGL sendiri merupakan sebuah API yang cukup populer di platformkomputer  yang bersistem  operasi Linux  maupun Windows. OpenGl pada komputer berbeda dengan OpenGl yang digunakan pada mobilemedia seperti handphone atau pda.&lt;br /&gt;      OpenGl ES ini untuk level yang "RENDAHAN". Jangan salah sangka kata ini bisa menurunkan jumlah fans dari OpenGl ES. OpenGl ES ini telahmelewati beberapa audisi dan eliminasi. Malahan kata "RENDAHAN" bisa jadi buuuumerang yakni teknologi yang dikandungnya. OpenGL ES ini tidak rewel. Dia hanya membutuhkan spesifikasi hardware yangtidak terlalu gres abis. OpenGl ES ini membutuhkan sedikit ruang memori dan kecepatan processor yang minimal. Minimal... pembuat artikel ini masih mencari dan menyelidiki. Oleh karena itu OpenGlES sangat cocok digunakan pada mobile media dimana rata-ratakebutuhan hardware memori dan prosessor sangat sederhana.&lt;br /&gt;      J2ME adalah bahasa pemrograman yang digunakan oleh programmer untuk membuataplikasi pada mobile media yang menggunakan teknologi Java. Sekali membuat aplikasi, aplikasi tersebut dapat digunakan di berbagai mobile media yangpunya teknologi Java. M3G adalah sebuah API yang digunakan pada J2ME.M3G menyediakan fungsi-fungsi grafik tiga dimensi dalam paket yang compact, yang dapat menghasilkan proses rendering of 3-D dalam lingkungan platform yang didukung oleh J2ME yang terbatas pada peralatan handset mobile. M3G merupakan paket tambahan pada platform J2ME dan mulai tersedia secara default pada J2ME Wireless Toolkit 2.2. Secara umum, API yang ada dibagi dalam dua mode untuk menampilkan content 3D yaitu immediate mode yangmemungkinkan untuk menciptakan dan memanipulasi elemen 3D secara langsung dan retained mode yang memungkinkan untuk memuat dan menampilkan seluruh adegan 3D yang telah dibuat.&lt;br /&gt;Kalo diatas untuk Game maka artikel berikutnya adalah&lt;br /&gt;===================================================================&lt;/div&gt;&lt;div align="center"&gt;:: Pengembangan Aplikasi Telefon Selular berbasis Bluetooth ::&lt;/div&gt;&lt;div align="justify"&gt;===================================================================&lt;/div&gt;&lt;div align="justify"&gt;Gubah   : juga 202114682&lt;/div&gt;&lt;div align="justify"&gt;Bahasa  : Singkat dan Jelas&lt;/div&gt;&lt;div align="justify"&gt;Sumber : &lt;a href="http://www.te.ugm.ac.id/~selo/penelitian/aplikasihp.htm"&gt;http://www.te.ugm.ac.id/~selo/penelitian/aplikasihp.htm&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Pada artikel ini 202114682 akan memilah istilah secara bertahap.&lt;br /&gt;&gt;&gt;&lt;strong&gt;Contoh aplikasi dengan teknologi wireless&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;1.    Bluetooth walkie talkie&lt;/div&gt;&lt;div align="justify"&gt;2.    Sistem parkir berbasis bluetooth&lt;/div&gt;&lt;div align="justify"&gt;3.   Telefon selular pengganti kartu elektronik (ATM, VISA, dll)&lt;/div&gt;&lt;div align="justify"&gt;4.   Video chat melalui bluetooth&lt;/div&gt;&lt;div align="justify"&gt;5.   Video chat melalui Wifi&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&gt;&gt;&lt;strong&gt;J2ME&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;Java 2 Micro Edition (J2ME) merupakan subset dari J2SE (Java 2 Standard Edition) yang ditujukan untuk implementasi pada peralatan embeded system dan handhled yang tidak mampu mendukung secara penuh implementasi mengunakan J2SE. Embedded system adalah produk-produk dengan komputer kecil di dalamnya, namun aplikasi yang bisa dimanfaatkan dari peralatan tersebut sangatlah spesifik. Hal ini tentu saja berbeda dengan komputer PC (Personal Computer) yang kita kenal sehari-hari, yang mampu digunakan untuk berbagai aplikasi. Contoh embedded system yang ada misalnya adalah aplikasi-aplikasi yang memanfaatkan mikroprosesor seperti Televisi, sistem keamanan gedung, dan lain sebagainya.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&gt;&gt;&lt;strong&gt;MIDlet&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;MIDlet adalah aplikasi yang dibuat menggunakan Java 2 Micro Edition dengan profile Mobile Information Device Profile (MIDP). MIDP dikhususkan untuk digunakan pada handset dengan kemampuan CPU, memori, keyboard, dan layar yang terbatas, misalnya pada handphone, pager, PDA, dan sebagainya.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&gt;&gt;&lt;strong&gt;Bluetooth&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;Bluetooth adalah standar yang sifatnya terbuka dan ditujukan untuk komunikasi wireless untuk menghubungkan peralatan seperti telefon selular dengan headset, atau dengan peralatan portabel lainnya seperti komputer. Spesifikasi bluetooth mendefinisikan secara sistem lengkap dari level transmisi radio hingga lapiran aplikasi, termasuk software stack. Tetapi spesifikasi Bluetooth tidak menjelaskan bagaimana software API akan dikembangkan dan digunakan oleh software developers. Salah satu API yang dikembangkan adalah JABWT (Java API Bluetooth Wireless Technology) atau dinami JSR-82. JABWT mendifinisikan API untuk pengembangan aplikasi aplikasi  berbasis Bluetooth menggunakan J2ME.&lt;br /&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115211593093305324?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115211593093305324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115211593093305324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115211593093305324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115211593093305324'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/dua-in-one.html' title='Dua in One'/><author><name>202114682</name><uri>http://www.blogger.com/profile/11895111982238192419</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115207605835592057</id><published>2006-07-04T21:58:00.000-07:00</published><updated>2006-07-04T22:07:38.443-07:00</updated><title type='text'>Tips J2ME List &amp; Iteraksi User</title><content type='html'>Yohan&lt;br /&gt;201114118&lt;br /&gt;&lt;br /&gt;Saat ini dalam membuat aplikasi diperlukan link, tombol atau item lain yang bisa di gunakan user untuk berinteraksi dengan aplikasi. Gunanya tentu saja untuk mengantarkan user ke bagian lain dari aplikasi sesuai yg ditunjuk oleh link, tombol atau link tersebut. API MIDP mempunyai komponen yang dapat digunakan untuk membangun user interface seperti list, radio button, selection box, dan lain-lain.&lt;br /&gt;&lt;br /&gt;Membuat Menu Dengan List&lt;br /&gt;Berikut adalah contoh kode program yang memuat penggunaan list untuk membuat menu&lt;br /&gt;&lt;br /&gt;MenuMidlet01.java&lt;br /&gt;Import javax.microedition.midlet.*;&lt;br /&gt;Import javax.microedition.lcdui.*;&lt;br /&gt;&lt;br /&gt;Public class MenuMidlet01 extende MIDlet {&lt;br /&gt;private List mainMenu = null;&lt;br /&gt;private Display display;&lt;br /&gt;public MenuMidlet01() {&lt;br /&gt;            mainMenu = new List(“Menu Midlet”, List.IMPLICIT);&lt;br /&gt;            mainMenu.append(“Link 1”, null);&lt;br /&gt;            mainMenu.append(“Link 2”, null);&lt;br /&gt;            mainMenu.append(“Link 3”, null);&lt;br /&gt;}&lt;br /&gt;public void startApp() {&lt;br /&gt;            display = Display.getDisplay(this);&lt;br /&gt;            display.setCurrent(mainMenu);&lt;br /&gt;}&lt;br /&gt;            public void pauseApp () {         }&lt;br /&gt;            public void destroyApp(boolean) {      }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Iteraksi Dengan Menu&lt;br /&gt;&lt;br /&gt;Aplikasi diatas masih belum memproses aksi yang diberikan oleh user pada saat memilih menu.Selanjutnya aplikasi diatas dimodifikasi agar bisa memproses aksi sesuai dengan item dari List yang dipilih. Berikut adalah kode programnya.&lt;br /&gt;&lt;br /&gt;MenuMidlet02.java&lt;br /&gt;Import javax.microedition.midlet.*;&lt;br /&gt;Import javax.microedition.lcdui.*;&lt;br /&gt;&lt;br /&gt;Public class MenuMidlet02 extende MIDlet implements CommandListener {&lt;br /&gt;private List mainMenu = null;&lt;br /&gt;private Display display;&lt;br /&gt;private Alert alert;&lt;br /&gt;public MenuMidlet02() {&lt;br /&gt;            mainMenu = new List(“Menu Midlet”, List.IMPLICIT);&lt;br /&gt;            mainMenu.append(“Link 1”, null);&lt;br /&gt;            mainMenu.append(“Link 2”, null);&lt;br /&gt;            mainMenu.append(“Link 3”, null);&lt;br /&gt;            mainMenu.setCommandListener(this);&lt;br /&gt;}&lt;br /&gt;public void startApp() {&lt;br /&gt;            display = Display.getDisplay(this);&lt;br /&gt;            display.setCurrent(mainMenu);&lt;br /&gt;}&lt;br /&gt;            public void pauseApp () {         }&lt;br /&gt;            public void destroyApp(boolean) {      }&lt;br /&gt;            public void commandAction(Command c, Displayable d) {&lt;br /&gt;                        if (d == mainMenu) {&lt;br /&gt;                                    if (mainMenu.isSelected(0)) {&lt;br /&gt;                                                alert = new Alert(“Alert!!”);&lt;br /&gt;                                                alert.setString(“Link1 ditekan,silakan tunggu..”);&lt;br /&gt;                                                display.setCurrent(alert);&lt;br /&gt;                                    }&lt;br /&gt;                                    else if (mainMenu.isSelected(1)) {&lt;br /&gt;                                                alert = new Alert(“Alert!!”);&lt;br /&gt;                                                alert.setString(“Link2 ditekan,silakan tunggu..”);&lt;br /&gt;                                                display.setCurrent(alert);&lt;br /&gt;                                    }&lt;br /&gt;                                    else if (mainMenu.isSelected(2)) {&lt;br /&gt;                                                destroyApp(false);&lt;br /&gt;                                                notifyDestroyed();&lt;br /&gt;                                    }&lt;br /&gt;                        }&lt;br /&gt;            }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Sumber :&lt;br /&gt;&lt;a href="http://www.ilmukomputer.com/berseri/mic-j2me/index.php"&gt;http://www.ilmukomputer.com/berseri/mic-j2me/index.php&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mycgiserver.com/~chocolove2003"&gt;http://www.mycgiserver.com/~chocolove2003&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115207605835592057?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115207605835592057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115207605835592057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115207605835592057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115207605835592057'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/tips-j2me-list-iteraksi-user.html' title='Tips J2ME List &amp; Iteraksi User'/><author><name>Aurelius</name><uri>http://www.blogger.com/profile/14720693235867961536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115202428853053312</id><published>2006-07-04T07:44:00.000-07:00</published><updated>2006-07-04T07:44:48.666-07:00</updated><title type='text'>Menampilkan Pocket PC dan Smartphone di PC Anda</title><content type='html'>&lt;span style=""&gt;            &lt;/span&gt;Jika Anda membutuhkan sebuah presentasi dengan menggunakan pocket PC atau smartphone bagaimana Anda dapat menampilkan tampilan yang ada di device Anda sehingga semua dapat melihatnya? Satu – satunya cara adalah dengan cara visualizer camera untuk menampilkan tampilan pada device di layar proyektor, akan tetapi hasilnya akan buruk dan harganya cukup mahal, oleh karena itu Anda tidak akan selalu dapat menggunakannya. &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;Cara yang baik untuk menampilkan tampilan pada device Anda adalah dengan menggunakan PowerToys Remote Display Control for Pocket PC from Microsoft's web site dan tentunya gratis. Aplikasi ini Remote Display Control adalah aplikasi yang diinstall pada pocket PC maupun PC Anda. Setelah menginstall Anda dapat mengontrol pocket PC Anda dengan menggunakan keyboard pada PC Anda dan screen pada device Anda akan terlihat pada monitor PC Anda.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;Seperti presentasi pada umumnya, salah satu kegunaan yang paling praktis dari Remote Display Control adalah untuk meng-capture screen pada pocket PC Anda. Anda dapat meng-capture screen pada pocket PC Anda semudah meng-capture tampilan PC pada umumnya. Cara yang paling mudah untuk melakukan hal ini adalah dengan menggunakan kombinasi tombol &lt;i style=""&gt;Alt-PrntScrn.&lt;/i&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;u&gt;Cara Menginstall Remote Display Control di Pocket PC&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;Lankah 1: &lt;/b&gt;Setelah program di download dan terinstall pada PC Anda dan juga pada pocket PC lewat Pocket PC Active Sync, Anda harus dapat menemukannya di folder Programs pada pocket PC. Aplikasi ini bernama &lt;i style=""&gt;cerdisp.&lt;/i&gt; Klik iconnya sehingga muncul dialog box lalu pilih connect.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;Langkah 2: &lt;/b&gt;Anda akan diminta untuk memasukkan hostname, gunakan PPP_PEER lalu klik OK. Jangan mengganti Hostname, hal ini akan menyebakan program berhenti berkeja. Anda dapat menjalankan remote Display Control lewat Start &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Program &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Remote ActiveSync Display. Anda sekarang seharusnya dapat melihat tampilan pocket PC Anda pada PC Anda.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;       &lt;p class="MsoNormal" style="text-indent: 36pt;"&gt;&lt;b style=""&gt;&lt;u&gt;Menggunakan Remote Display Control Pada Smartphone&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;/span&gt; Meskipun Remote Display Control diperuntukkan untuk Pocket PC, program ini juga berkerja di smartphone platform. Program ini sudah pernah dicoba pada Motorola MPx200 dan berkerja sempurna.&lt;br /&gt;   &lt;br /&gt;Untuk menginstall Remote Display Control pada smartphone, cara yang sama dapat diterapkan pada smartphone platform. Anda harus dapat menenmukan &lt;i style=""&gt;cerdisp &lt;/i&gt;application pada menu Programs di smartphone Anda. Urutan program yang sebenarnya tergantung dari program yang sudah Anda install pada smartphone Anda. Tetapi Anda tetap menemukannya secara mudah. Pilih action untuk menjalankan programnya. Setelah itu Anda sudah dapat melihat tampilan smartphone Anda pada monitor PC.&lt;span style=""&gt;&lt;br /&gt;   &lt;br /&gt;      Jika Smartphone Anda tidak mendukung fasilitas touch screen maka gunakan keypad pada Smartphone Anda sebagai navigasi. &lt;/span&gt;Sebagai informasi program ini taidak berjalan sempurna untuk Windows Mobile 2003 SE ke atas. Hasil yag didapat jika memakai Windows Mobile 2003 SE gambar tailan tidak jelas dan tulisan akan sulit dibaca. Selamat mencoba!&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Kris Cahyogi 201114206&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Sumber: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;a href="http://www.oreillynet.com/pub/a/wireless/2004/10/15/remote_display.html"&gt;http://www.oreillynet.com/pub/a/wireless/2004/10/15/remote_display.html&lt;/a&gt;&lt;span style=""&gt;         &lt;/span&gt; &lt;a href="http://palmtops.about.com/gi/dynamic/offsite.htm?site=http://www.microsoft.com/technet/prodtechnol/wce/downloads/ppctoys.mspx%23EGAA"&gt;http://palmtops.about.com/gi/dynamic/offsite.htm?site=http://www.microsoft.com/technet/prodtechnol/wce/downloads/ppctoys.mspx%23EGAA&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style=""&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115202428853053312?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115202428853053312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115202428853053312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115202428853053312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115202428853053312'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/menampilkan-pocket-pc-dan-smartphone_04.html' title='Menampilkan Pocket PC dan Smartphone di PC Anda'/><author><name>r3n0v4t10</name><uri>http://www.blogger.com/profile/04458866811721641513</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115201208369425003</id><published>2006-07-04T04:14:00.000-07:00</published><updated>2006-07-04T04:21:23.860-07:00</updated><title type='text'>Step by Step Begining MIDP 2.0 menggunakan J2ME Wireless ToolKit(J2MEWTK)</title><content type='html'>Step by Step Begining MIDP 2.0&lt;br /&gt;&lt;br /&gt;J2ME merupakan platform, kumpulan teknologi dan spesifikasi yang dirancang khusus untuk piranti mobile. Untuk lebih dalam mengenai J2ME dapat diliihat di &lt;a href="http://developers.sun.com/techtopics/mobility/getstart/"&gt;http://developers.sun.com/techtopics/mobility/getstart/&lt;/a&gt;. Aplikasi yang akan kita buat merupakan implementasi dari Mobile Information Device Profile(MIDP). Aplikasi ini disebut MIDlet.&lt;br /&gt;Apa yang dapat kita buat dengan midlet?. Dengan midlet kita bisa membangun aplikasi yang dapat berjalan dalam piranti mobile seperti Handphone. Bukan Cuma itu, midlet juga dapat berhubungan dengan jaringan seperti Http Server. MIDlet dapat menerima dan mengirim data ke Servlet ataupun PHP.&lt;br /&gt;Dalam tutorial ini kita menggunakan J2ME Wireless ToolKit(J2MEWTK) dari Sun dan sistem operasi RedHat 9. J2MEWTK dapat diintegrasikan dengan IDE ataupun berdiri sendiri. J2MEWTK dapat anda download dari &lt;a href="http://java.sun.com/products/j2mewtoolkit/"&gt;http://java.sun.com/products/j2mewtoolkit/&lt;/a&gt;. Sebelum menginstall J2MEWTK anda membutuhkan J2SE SDK versi 1.4.2 sudah terinstall di komputer. Apabila anda sudah menginstall JDK, untuk memastikan periksalah versinya dengan perintah java ?version.&lt;br /&gt;Dari download yang anda dapatkan adalah file binary yang dapat dieksekusi, anda dapat melakukan chmod bila file tersebut bukan binari yang dapat dieksekusi. Jalankan file eksekusi yang telah anda download, anda akan memerlukan hak akses root. Instaler akan mencari JDK dan jika dalam proses ini mengalami masalah/gagal anda dapat melakukannya secara manual dengan menunjukkan direktori tempat anda menginstal JDK. Kemudian instaler akan menanyakan direktori tujuan instalasi, misalnya kita isikan /home/djeq/WTK2.1. Maka? direktori tersebuat akan dibuat oleh installer. Jika anda ingin menjalankan J2MEWTK tidak sebagai root, anda harus merubah hak akses direktori instalasi tersebut dengan perintah ?chown -R user:group [instal dir]?. Dalam contoh ini instal dir adalah /home/djeq/WTK2.1 dan user yang akan menjalankan adalah djeq dengan group djeq maka perintahnya akan menjadi? chown -R djeq:djeq /home/djeq/WTK2.1 . Setelah proses instalasi selesai anda dapat mencoba toolkit yang telah terinstal untuk memastikan hasilnya. Jalankan Ktoolbar ?/home/djeq/WTK2.1/bin/ktoolbar?.&lt;br /&gt;&lt;br /&gt;J2MEWTK bekerja berdasarkan projek dimana setiap satu projek merupakan satu MIDlet Suite. Untuk memulai suatu projek baru klik tombol New Project. Isikan CobaSuite untuk nama projek dan CobaMidlet untuk nama MIDlet class.&lt;br /&gt;&lt;br /&gt;Setelah anda tekan tombol Create project akan ditampilkan setting untuk projek yang anda buat. Jangan melakukan perubahan pada setting dan tekan tombol OK.&lt;br /&gt;&lt;br /&gt;Di konsol akan ditampilkan informasi direktori tempat projek tersebut dibuat.&lt;br /&gt;Creating project "CobaSuite"&lt;br /&gt;Place Java source files in "/home/djeq/WTK2.1/apps/CobaSuite/src"&lt;br /&gt;Place application resource files in "/home/djeq/WTK2.1/apps/CobaSuite/res"&lt;br /&gt;Place application library files in "/home/djeq/WTK2.1/apps/CobaSuite/lib"&lt;br /&gt;Settings updated&lt;br /&gt;Project settings saved&lt;br /&gt;&lt;br /&gt;ToolKit akan membuat subdirektori baru didalam direktori aplikasi J2MEWTK. Jika anda menginstal J2MEWTK di /home/djeq/WTK2.1 maka projek yang kita buat akan ada dalam direktori? /home/djeq/WTK2.1/apps/CobaSuite.? Susunan direktori dalam J2MEWTK adalah sebagai berikut :&lt;br /&gt;-WTK21&lt;br /&gt;-+ appdb&lt;br /&gt;-+ apps&lt;br /&gt;-+ bin&lt;br /&gt;-+ docs&lt;br /&gt;-+ lib&lt;br /&gt;-+ sessions&lt;br /&gt;-+ wtklib&lt;br /&gt;&lt;br /&gt;Dalam subdirektori projek tersebut terdapat subdirektori yang dibuat oleh ToolKit secara otomatis.&lt;br /&gt;-CobaSuite&lt;br /&gt;-+ bin&lt;br /&gt;-+ classes&lt;br /&gt;-+ lib&lt;br /&gt;-+ res&lt;br /&gt;-+ src&lt;br /&gt;-+ tmpclasses&lt;br /&gt;-+ tmplib&lt;br /&gt;&lt;br /&gt;Direktori bin berisi hasil kompilasi MIDlet (jar) dan MIDlet descriptor(jad) . lib berisi jar tambahan yang anda perlukan. Res berisi file-file resource seperti file gambar. Direktori src berisi source kode aplikasi yang akan kita buat. Kita lanjutkan ke langkah berikutnya yaitu membuat source kode untuk MIDlet kita yang pertama. Ketiklah kode berikut dan simpan dalam direktori? dengan nama CobaMidlet.java.&lt;br /&gt;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;&lt;br /&gt;public class CobaMidlet&lt;br /&gt;??? extends MIDlet&lt;br /&gt;??? implements CommandListener {&lt;br /&gt;&lt;br /&gt;? private Form mMainForm;&lt;br /&gt;?&lt;br /&gt;? public CobaMidlet() {&lt;br /&gt;??? mMainForm = new Form(" COBA ");&lt;br /&gt;??? mMainForm.append(new StringItem(null, "Halo, MIDP2"));&lt;br /&gt;??? mMainForm.addCommand(new Command("Exit", Command.EXIT, 0));&lt;br /&gt;??? mMainForm.setCommandListener(this);&lt;br /&gt;? }&lt;br /&gt;&lt;br /&gt;?&lt;br /&gt;? public void startApp() {&lt;br /&gt;??? Display.getDisplay(this).setCurrent(mMainForm);&lt;br /&gt;? }&lt;br /&gt;&lt;br /&gt;?&lt;br /&gt;? public void pauseApp() {}&lt;br /&gt;??&lt;br /&gt;? public void destroyApp(boolean unconditional) {}&lt;br /&gt;&lt;br /&gt;?&lt;br /&gt;? public void commandAction(Command c, Displayable s) {&lt;br /&gt;??? notifyDestroyed();&lt;br /&gt;? }&lt;br /&gt;}&lt;br /&gt;Setelah itu tekan tombol build untuk mengkompile. Proses kompilasi ini toolkit akan menelusuri file yang ada dalam direktori src kemudian mengkompile, tapi kompilasi disini bukanlah seperti kita melakukan kompilasi pada program java dengan JDK karena hasil kompilasi ini harus berjalan dalam lingkungan MIDP bukan JSDK. MIDP akan melakukan verifikasi terhadap class sebelum class tersebut dapat dijalankan dalam lingkungan MIDP. Jika ada kesalahan akan ditampilkan dalam konsol. Jika proses kompilasi berhasil, kita coba jalankan MIDlet ini. Tekan tombol run. J2MEWTK akan menjalankan emulator.&lt;br /&gt;&lt;br /&gt;Emulator akan menampilkan daftar MIDlet yang ada dalam MIDlet suite. Dalam aplikasi kita hanya ada satu yaitu CobaMidlet. Tekan tombol Launch untuk menjalankan MIDlet. Tekan tombol Exit untuk keluar dari CobaMidlet. Tutup emulator.&lt;br /&gt;&lt;br /&gt;Kita sudah membuat midlet pertama, selanjutnya latihan berikutnya kita membuat midlet baru. Buat projek baru LatihanSuite dan nama midlet LatihanMidlet. Ketik kode berikut dan simpan dalam direktori src dengan nama LatihanMidlet.java dan mainscreen.java. Berikut kode LatihanMidlet.java.&lt;br /&gt;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;&lt;br /&gt;public class LatihanMidlet extends javax.microedition.midlet.MIDlet {&lt;br /&gt;??? static LatihanMidlet instance;&lt;br /&gt;??? private mainscreen mainscr;&lt;br /&gt;??? public LatihanMidlet() {&lt;br /&gt;??????? this.instance=this;&lt;br /&gt;???????&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? public void startApp() {&lt;br /&gt;??????? mainscr=new mainscreen();&lt;br /&gt;??????? Display.getDisplay(this).setCurrent(mainscr);&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? public void pauseApp() {&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? public void destroyApp(boolean unconditional) {&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? public static void quitApp()&lt;br /&gt;??? {&lt;br /&gt;??????? instance.destroyApp(true);&lt;br /&gt;??????? instance.notifyDestroyed();&lt;br /&gt;??????? instance=null;&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? public static void setScreen(Displayable d)&lt;br /&gt;??? {&lt;br /&gt;??????? Display.getDisplay(instance).setCurrent(d);&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? public static void setScreen(javax.microedition.lcdui.Alert a, Displayable d)&lt;br /&gt;??? {&lt;br /&gt;??????? Display.getDisplay(instance).setCurrent(a,d);&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? private void jbInit() throws Exception&lt;br /&gt;??? {&lt;br /&gt;??? }&lt;br /&gt;}&lt;br /&gt;//=========================================================&lt;br /&gt;&lt;br /&gt;Berikut kode mainscreen.java&lt;br /&gt;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;&lt;br /&gt;public class mainscreen extends javax.microedition.lcdui.Form{&lt;br /&gt;??? static mainscreen instance=null;&lt;br /&gt;??? javax.microedition.lcdui.TextField passwd=new javax.microedition.lcdui.TextField("","",10,1);&lt;br /&gt;??? javax.microedition.lcdui.TextField username=new javax.microedition.lcdui.TextField("","",10,1);&lt;br /&gt;??? javax.microedition.lcdui.Alert alert;&lt;br /&gt;???&lt;br /&gt;??? public mainscreen() {&lt;br /&gt;??????? super("mainscreen");&lt;br /&gt;??????? setCommandListener(new CommandListener() {&lt;br /&gt;??????????? public void commandAction(Command c, Displayable d) {&lt;br /&gt;??????????????? this_commandPerformed(c,d);&lt;br /&gt;??????????? }&lt;br /&gt;???? ???});&lt;br /&gt;??????? try {&lt;br /&gt;??????????? jbInit();&lt;br /&gt;??????? }catch(Exception e) {&lt;br /&gt;??????????? e.printStackTrace();&lt;br /&gt;??????? }&lt;br /&gt;??????? instance=this;&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? private void jbInit() throws Exception {&lt;br /&gt;??????? addCommand(new Command("Exit",Command.EXIT,1));&lt;br /&gt;???? ???addCommand(new Command("Login",Command.SCREEN,1));&lt;br /&gt;??????? username.setLabel("UserName ");&lt;br /&gt;??????? passwd.setLabel("Password? ");&lt;br /&gt;??????? passwd.setConstraints(TextField.PASSWORD);&lt;br /&gt;??????? this.append(username);&lt;br /&gt;??????? this.append(passwd);&lt;br /&gt;???????&lt;br /&gt;?? ?}&lt;br /&gt;???&lt;br /&gt;??? public void this_commandPerformed(Command c, Displayable d) {&lt;br /&gt;??????? if (c.getCommandType()==Command.SCREEN) {&lt;br /&gt;??????????? if((username.getString()).equals("djeq"))&lt;br /&gt;??????????? {&lt;br /&gt;??????????? ? showAlert("Error","Username dan Password Benar");&lt;br /&gt;??????????? }else&lt;br /&gt;??????????? {&lt;br /&gt;??????????? ? showAlert("Error","Username dan Password salah");&lt;br /&gt;??????????? }&lt;br /&gt;??????? }else {&lt;br /&gt;??????????? LatihanMidlet.quitApp();&lt;br /&gt;??????? }&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? private void showAlert(String altype, String message) {&lt;br /&gt;??????? alert=new Alert(altype,message,null,AlertType.INFO);&lt;br /&gt;??????? alert.setTimeout(3000);&lt;br /&gt;??????? LatihanMidlet.setScreen(alert,instance);&lt;br /&gt;??? }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Setelah disimpan kompile, tekan tombol build. Jalankan program tersebut untk melihat hasilnya.&lt;br /&gt;&lt;br /&gt;Sekarang kita lanjutkan pada langkah berikutnya yaitu menghubungkan MIDlet yang telah kita buat tadi dengan HTTP Server. Pertama kita persiapkan dulu http server yang akan kita akses. Dalam tutorial ini kita menggunakan Apache sebagai Http Server yang dapat didownload di &lt;a href="http://apache.org/"&gt;http://apache.org/&lt;/a&gt;. Setelah apache terinstall kita buat sebuah file html dengan nama latihan.html dan simpan di direktori /var/www/html. Berikut kode latihan.html.&lt;br /&gt;&lt;br /&gt;Tampilan ini berasal dari http server&lt;br /&gt;&lt;br /&gt;Untuk memastikan kita harus mencobanya dengan browser. Jalankan apache dan buka situs &lt;a href="http://localhost/latihan.html"&gt;http://localhost/latihan.html&lt;/a&gt;. Jika sudah berhasil kita kembali ke MIDlet. Lakukan perubahan pada mainscreen.java yang sudah kita buatpada latihan sebelumnya supaya bisa melakukan koneksi ke web server. Berikut ini kode mainscreen.java yang telah diedit.&lt;br /&gt;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;&lt;br /&gt;public class mainscreen extends javax.microedition.lcdui.Form{&lt;br /&gt;??? static mainscreen instance=null;&lt;br /&gt;??? javax.microedition.lcdui.TextField passwd=new javax.microedition.lcdui.TextField("","",10,1);&lt;br /&gt;??? javax.microedition.lcdui.TextField username=new javax.microedition.lcdui.TextField("","",10,1);&lt;br /&gt;??? javax.microedition.lcdui.Alert alert;&lt;br /&gt;???&lt;br /&gt;??? public mainscreen() {&lt;br /&gt;??????? super("mainscreen");&lt;br /&gt;??????? setCommandListener(new CommandListener() {&lt;br /&gt;??????????? public void commandAction(Command c, Displayable d) {&lt;br /&gt;??????????????? this_commandPerformed(c,d);&lt;br /&gt;??????????? }&lt;br /&gt;??????? });&lt;br /&gt;??????? try {&lt;br /&gt;??????????? jbInit();&lt;br /&gt;??????? }catch(Exception e) {&lt;br /&gt;??????????? e.printStackTrace();&lt;br /&gt;??????? }&lt;br /&gt;??????? instance=this;&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? private void jbInit() throws Exception {&lt;br /&gt;??????? addCommand(new Command("Exit",Command.EXIT,1));&lt;br /&gt;??????? addCommand(new Command("Login",Command.SCREEN,1));&lt;br /&gt;??????? username.setLabel("UserName ");&lt;br /&gt;??????? passwd.setLabel("Password? ");&lt;br /&gt;??????? passwd.setConstraints(TextField.PASSWORD);&lt;br /&gt;??????? this.append(username);&lt;br /&gt;??????? this.append(passwd);&lt;br /&gt;???????&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? public void this_commandPerformed(Command c, Displayable d) {&lt;br /&gt;??????? if (c.getCommandType()==Command.SCREEN) {&lt;br /&gt;??????????? if((username.getString()).equals("djeq"))&lt;br /&gt;??????????? {&lt;br /&gt;??????????? ? Thread t=new Thread()? {&lt;br /&gt;????????????????? public void run()&lt;br /&gt;????????????????? {&lt;br /&gt;????????????????? ?login();&lt;br /&gt;????????????????? }&lt;br /&gt;??????????? ? };&lt;br /&gt;??????????? ? t.start();&lt;br /&gt;??????????? }else&lt;br /&gt;??????????? {&lt;br /&gt;??????????? ? showAlert("Error","Username dan Password salah");&lt;br /&gt;??????????? }&lt;br /&gt;??????? }else {&lt;br /&gt;??????????? LatihanMidlet.quitApp();&lt;br /&gt;??????? }&lt;br /&gt;??? }&lt;br /&gt;&lt;br /&gt;??? private void login()&lt;br /&gt;??? {&lt;br /&gt;??????? HttpConnection hc=null;&lt;br /&gt;??????? java.io.InputStream in=null;&lt;br /&gt;??????? java.io.ByteArrayOutputStream bst=null;&lt;br /&gt;????? try{&lt;br /&gt;????? ??? hc=(HttpConnection)Connector.open("http://localhost/latihan.html");&lt;br /&gt;??????????? hc.setRequestMethod(HttpConnection.GET);&lt;br /&gt;??????????? if (hc.getResponseCode()==HttpConnection.HTTP_OK)&lt;br /&gt;??????????? {&lt;br /&gt;???????????????? in=hc.openInputStream();&lt;br /&gt;???????????????? int hclength=(int)hc.getLength();&lt;br /&gt;???????????????? bst=new java.io.ByteArrayOutputStream();&lt;br /&gt;???????????????? int ch;&lt;br /&gt;???????????????? while((ch=in.read())!=-1)&lt;br /&gt;??????????? ?{&lt;br /&gt;???????????????????? bst.write(ch);&lt;br /&gt;???????????????? }&lt;br /&gt;???????????????? String s=new String(bst.toByteArray());&lt;br /&gt;???????????????? bst.close();&lt;br /&gt;???????????????? in.close();&lt;br /&gt;???????????????? hc.close();&lt;br /&gt;??????????? ?showAlert("Error",s);&lt;br /&gt;??????????? }else&lt;br /&gt;??????????? {&lt;br /&gt;??????????? ?showAlert("Error","Koneksi ke server gagal");&lt;br /&gt;??????????? }&lt;br /&gt;????? }catch(java.io.IOException ie)&lt;br /&gt;????? {&lt;br /&gt;????? ?ie.printStackTrace();&lt;br /&gt;????? }&lt;br /&gt;??? }&lt;br /&gt;???&lt;br /&gt;??? private void showAlert(String altype, String message) {&lt;br /&gt;??????? alert=new Alert(altype,message,null,AlertType.INFO);&lt;br /&gt;??????? alert.setTimeout(3000);&lt;br /&gt;??????? LatihanMidlet.setScreen(alert,instance);&lt;br /&gt;??? }&lt;br /&gt;}&lt;br /&gt;Perubahan yang kita tambahkan adalah pada metode login dan pada aksi yang dilakukan pada saat tombol login ditekan. Kita menambahkan thread pada saat login.&lt;br /&gt;??????????? ? Thread t=new Thread()? {&lt;br /&gt;????????????????? public void run()&lt;br /&gt;????????????????? {&lt;br /&gt;????????????????? ?login();&lt;br /&gt;????????????????? }&lt;br /&gt;??????????? ? };&lt;br /&gt;??????????? ? t.start();&lt;br /&gt;Pada saat tombol login ditekan maka midlet akan membuka koneksi http ke web server meminta file latihan.html. Proses ini akan memakan waktu karena itu kita menggunakan thread supaya pada saat proses membuka hubungan dan mentransfer data dari web server piranti dapat melakukan operasi lainya. Jika kita tidak menggunakan thread maka pada saat proses berjalan maka semua proses lainnya akan berhenti seakan-akan piranti tersebut hang.&lt;br /&gt;??????????? Perubahan lainya yaitu penambahan metode login. Dalam metode inilah hubungan dengan http server dibuka dan file latihan.html dibaca oleh midlet. Pertama kali koneksi dibuka oleh HttpConnection kemudian data ditransfer melalui InputStream dan ditampung dalam ByteArrayOutputStream. Kemudian data tersebut kita rubah ke String untuk ditampilkan dalam alert.&lt;br /&gt;??? private void login()&lt;br /&gt;??? {&lt;br /&gt;??????? HttpConnection hc=null;&lt;br /&gt;??????? java.io.InputStream in=null;&lt;br /&gt;??????? java.io.ByteArrayOutputStream bst=null;&lt;br /&gt;????? try{&lt;br /&gt;????? ??? hc=(HttpConnection)Connector.open("http://localhost/latihan.html");&lt;br /&gt;??????????? hc.setRequestMethod(HttpConnection.GET);&lt;br /&gt;??????????? if (hc.getResponseCode()==HttpConnection.HTTP_OK)&lt;br /&gt;??????????? {&lt;br /&gt;???????????????? in=hc.openInputStream();&lt;br /&gt;???????????????? int hclength=(int)hc.getLength();&lt;br /&gt;???????????????? bst=new java.io.ByteArrayOutputStream();&lt;br /&gt;???????????????? int ch;&lt;br /&gt;???????????????? while((ch=in.read())!=-1)&lt;br /&gt;??????????? ?{&lt;br /&gt;???????????????????? bst.write(ch);&lt;br /&gt;???????????????? }&lt;br /&gt;???????????????? String s=new String(bst.toByteArray());&lt;br /&gt;???????????????? bst.close();&lt;br /&gt;???????????????? in.close();&lt;br /&gt;???????????????? hc.close();&lt;br /&gt;??????????? ?showAlert("Error",s);&lt;br /&gt;??????????? }else&lt;br /&gt;??????????? {&lt;br /&gt;??????????? ?showAlert("Error","Koneksi ke server gagal");&lt;br /&gt;??????????? }&lt;br /&gt;????? }catch(java.io.IOException ie)&lt;br /&gt;????? {&lt;br /&gt;????? ?showAlert("Error","Koneksi ke server gagal");&lt;br /&gt;????? ?ie.printStackTrace();&lt;br /&gt;????? }&lt;br /&gt;??? }&lt;br /&gt;Setelah tombol login pada emulator kita tekan maka akan muncul tampilan alert yang berisi &lt;em&gt;Tampilan ini berasal dari http server&lt;/em&gt; .&lt;br /&gt;&lt;br /&gt;Source : &lt;a href="http://djeq.songolimo.net/midlet1/Tutorial_MIDP.htm"&gt;http://djeq.songolimo.net/midlet1/Tutorial_MIDP.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115201208369425003?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115201208369425003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115201208369425003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115201208369425003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115201208369425003'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/step-by-step-begining-midp-20.html' title='Step by Step Begining MIDP 2.0 menggunakan J2ME Wireless ToolKit(J2MEWTK)'/><author><name>sulung</name><uri>http://www.blogger.com/profile/14843351442946190777</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115201142371242151</id><published>2006-07-04T03:53:00.000-07:00</published><updated>2006-07-04T04:10:23.870-07:00</updated><title type='text'>Pengembangan Aplikasi Telefon Selular berbasis Bluetooth, infra  merah dan Wifi menggunakan J2ME</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;&lt;strong&gt;Pengembangan Aplikasi Telefon Selular berbasis Bluetooth, infra  merah dan Wifi&lt;br /&gt;&lt;/strong&gt;                                     &lt;br /&gt;&lt;br /&gt;Orang membutuhkan komunikasi untuk menjaga hubungan dengan temannya, peralatan dan layanan-layanan telefon lainnya. Di antara peralatan elektronik yang banyak orang miliki dan gunakan adalah telepon selular yang sering dibawa dimanapun mereka berada.&lt;br /&gt;Telepon Seluler atau Ponsel adalah salah satu alat komunikasi yang dapat dibawa kemana saja oleh pengggunanya. Dengan adanya perkembangan teknologi yang sangat pesat, ponsel saat ini tidak hanya digunakan untuk komunikasi suara, tetapi juga dapat membeli tiket, mencari berita, perbankan dan digunakan untuk berselancar di Internet, bahkan untuk mengoperasikan peralatan tertentu. Boleh dikatakan suatu saat nanti kemampuan telefon selular akan dapat menyamai kemampuan komputer yang ada saat ini. Dengan kemampuan CPU dan memory yang makin meningkat, semakin dimungkinkan bagi developer untuk mengembangkan aplikasi yang juga bersifat multimedia.&lt;br /&gt;Bluetooth dan infra merah pada telefon selular merupakan teknologi yang telah lama muncul. Menyusul sekarang teknologi Wifi pada piranti tersebut. Akan tetapi aplikasi-aplikasi yang memanfaatkannya belum banyak digali. Umumnya aplikasi yang banyak muncul adalah untuk koneksi telefon selular ke headset atau komputer. Di lain pihak, saat ini penelitian terkait dengan bidang komunikasi bergerak  dan aplikasinya di Jurusan Teknik Elektro belum nampak menggairahkan. Oleh karena itu diharapkan dengan kegiatan penelitian tentang aplikasi telefon selular khususnya penggunaan bluetooth, infra merah dan wifi ini, yang diharapkan salah satu hasilnya adalah class library, akan semakin menggiatkan penelitian sejenis barbasis class class tersebut. Ini dimungkinkan karena bahasa pemrograman java adalah bahasa yang memakai konsep berorientasi objek.&lt;br /&gt;&lt;a name="_Toc98724120"&gt;Masalah utama yang diteliti adalah pemanfaatan telefon selular untuk tidak sekedar komunikasi suara akan tetapi dapat berkembang untuk aplikasi yang lain oleh karena tersedianya port I/O seperti bluetooth, inframerah dan wifi. &lt;/a&gt;Lima aplikasi di antaranya adalah sebagai berikut.&lt;br /&gt;1.      Bluetooth walkie talkie&lt;br /&gt;2.      Sistem parkir berbasis bluetooth&lt;br /&gt;3.      Telefon selular pengganti kartu elektronik (ATM, VISA, dll)&lt;br /&gt;4.      Video chat melalui bluetooth&lt;br /&gt;5.      Video chat melalui Wifi&lt;br /&gt;&lt;br /&gt;Suatu saat nanti telefon selular betul betul merupakan suatu peralatan multifungsi yang selain untuk komunikasi juga untuk mengendalikan peralatan, mengkoordinasi peralatan dan lain sebagainya.&lt;br /&gt;&lt;br /&gt;Pada penelitian ini akan digunakan J2ME (Java for mobile devices) yang memiliki Bluetooth API dan Mobile Media API, di dalamnya. Bagian ini akan menjelaskan secara mendasar tentang  J2ME, Bluetooth API dan Mobile Media API.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;J2ME&lt;/strong&gt;&lt;br /&gt;Java 2 Micro Edition (J2ME) merupakan subset dari J2SE (Java 2 Standard Edition) yang ditujukan untuk implementasi pada peralatan embeded system dan handhled yang tidak mampu mendukung secara penuh implementasi mengunakan J2SE. Embedded system adalah produk-produk dengan komputer kecil di dalamnya, namun aplikasi yang bisa dimanfaatkan dari peralatan tersebut sangatlah spesifik. Hal ini tentu saja berbeda dengan komputer PC (Personal Computer) yang kita kenal sehari-hari, yang mampu digunakan untuk berbagai aplikasi. Contoh embedded system yang ada misalnya adalah aplikasi-aplikasi yang memanfaatkan mikroprosesor seperti Televisi, sistem keamanan gedung, dan lain sebagainya.&lt;br /&gt;J2ME sangat berguna untuk membangun suatu aplikasi pada peralatan dengan jumlah memori dan kapasitas penyimpanan yang terbatas, serta kemampuan user interface yang terbatas seperti pada perangkat komunikasi bergerak berupa handphone, PDA (Personal Digital Assistant), dan lain sebagainya.&lt;br /&gt;Seperti aplikasi Java umumnya yang menggunakan JVM, dalam J2ME digunakan pula virtual machine yang disebut K virtual machine. K Virtual Machine adalah virtual machine yang sangat kecil dalam kebutuhan memorinya. Huruf K dalam K virtual machine adalah singkatan dari kilobyte, untuk menggambarkan betapa virtual machine ini bekerja pada total memori yang sedemikian kecil mulai dari 128 kilobyte hingga maksimal rata-rata sekitar 512 kilobyte.&lt;br /&gt;Dalam J2ME dibagi menjadi dua bagian besar yang dikenal sebagai configuration dan profile[1]. Dua istilah ini sangatlah penting dalam pengembangan aplikasi wireless dengan Java sehingga harus dipahami dengan baik. Sebuah profile dibangun dalam sebuah configuration namun menambahkan beberapa API (Application Program Interface) khusus agar dihasilkan sebuah lingkungan yang lengkap untuk membangun aplikasi. Sedangkan sebuah configuration mendeskripsikan sebuah JVM dan sekumpulan API dasar, dan hal ini tidak cukup untuk membangun sebuah aplikasi yang lengkap. Profile-profile biasanya termasuk API-API untuk aplikasi lifecycle, user inteface, dan penyimpanan secara kontinu. J2ME configuration mendefinisikan lingkungan kerja J2ME runtime. Oleh karena handheld devices memiliki fitur-fitur yang berbeda-beda, J2ME configuration dirancang untuk menyediakan library standar yang mengimplementasikan fitur standar dari handheld devices.&lt;br /&gt;Bila J2ME configuration menyediakan library Java untuk implementasi fitur-fitur standar dari sebuah handheld devices maka J2ME profile menyediakan implementasi tambahan yang sangat spesifik untuk sebuah handheld devices. MIDP menyediakan library-library Java untuk implementasi dasar interface (GUI) Graphical User Interface, implementasi networking, database, dan timer. MIDP dirancang khusus untuk wireless phone dan pager. Beberapa perusahaan mengembangkan sendiri J2ME profile, misalnya NTT Docomo, yang mengembangkan J2ME profile yang spesifik untuk perangkat keras yang dimiliki NTT Docomo. Keuntungan yang paling menonjol dari J2ME dibandingkan dengan teknologi wireless sebelumnya adalah security dan disconnected access and synchronization. Security menjadi sebuah isu yang sangat penting dewasa ini.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MIDlet&lt;/strong&gt;&lt;br /&gt;MIDlet adalah aplikasi yang dibuat menggunakan Java 2 Micro Edition dengan profile Mobile Information Device Profile (MIDP) [4].. MIDP dikhususkan untuk digunakan pada handset dengan kemampuan CPU, memori, keyboard, dan layar yang terbatas, misalnya pada handphone, pager, PDA, dan sebagainya. &lt;/div&gt;&lt;div align="justify"&gt;Secara umum, terdapat beberapa hal penting dalam membuat sebuah aplikasi MIDlet, yaitu menyangkut lifecycle, user interface, command handling, deployment dan Application Management. Paket javax.microedition.midlet memiliki kelas MIDlet yang mendefinisikan MIDP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bluetooth&lt;/strong&gt;&lt;br /&gt;Bluetooth [9] adalah standar yang sifatnya terbuka dan ditujukan untuk komunikasi wireless untuk menghubungkan peralatan seperti telefon selular dengan headset, atau dengan peralatan portabel lainnya seperti komputer. Spesifikasi bluetooth mendifinisikan secara sistem lengkap dari level transmisi radio hingga lapiran aplikasi, termasuk software stack. Tetapi spesifikasi Bluetooth tidak menjelaskan bagaimana software API akan dikembangkan dan digunakan oleh software developers. Salah satu API yang dikembangkan adalah JABWT (Java API Bluetooth Wireless Technology) [6,9] atau dinami JSR-82. JABWT mendifinisikan API untuk pengembangan aplikasi aplikasi  berbasis Bluetooth menggunakan J2ME.&lt;br /&gt;Spesifikasi Bluetooth terdiri atas Bluetooth stack dan profile Bluetooth. Perlu mendapat perhatian bahwa dalam Bluetooth stack dan semua profil Bluetooth tidak semuanya diimplementasikan pada JABWT. Salah satu contohnya adalah profil audio yang belum diimplementasikan. Informasi lebih lanjut terkait dengan JABWT dan profile Bluetooth yang telah diimplementasikan dapat dilihat pada [9].&lt;br /&gt;Telah pula dikembangkan aplikasi menggunakan Bluetooth dan Java [8], yang menjelaskan bagaimana membangun aplikasi Bluetooth menggunakan J2ME yang dinamai BlueChat. BlueChat adalah aplikasi chatting peer-to-peer yang menggunakan Bluetooth dan berbasis JABWT API.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mobile Media&lt;/strong&gt;&lt;br /&gt;Mobile Media API (MMAPI), yang dijelaskan di JSR-135 [7], menyediakan api yang dapat dipakai untuk mengembangkan aplikasi multimedia berbasis J2ME.&lt;br /&gt;MMAPI mendukung fitur-fitur seperti&lt;br /&gt;-          Playback file file audio dan video&lt;br /&gt;-          kemampuan rekam sinyal audio dan video ke file&lt;br /&gt;-          akses ke vibrator pada telefon selular&lt;br /&gt;Meskipun suatu peralatan J2ME mempunyai dukungan MMAPI tidak berarti mendukung semua fitur yang ada pada api. Contohnya adalah SonyEricsson K750i (handphone milik saya sendiri ^^ ) yang tidak mempunyai kemampuan untuk audio recording, tetapi mendukung picture recording.&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Source : &lt;a href="http://www.te.ugm.ac.id/~selo/penelitian/aplikasihp.htm"&gt;http://www.te.ugm.ac.id/~selo/penelitian/aplikasihp.htm&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115201142371242151?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115201142371242151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115201142371242151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115201142371242151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115201142371242151'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/pengembangan-aplikasi-telefon-selular.html' title='Pengembangan Aplikasi Telefon Selular berbasis Bluetooth, infra  merah dan Wifi menggunakan J2ME'/><author><name>Vera Pareira</name><uri>http://www.blogger.com/profile/03404225375386948938</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115217221559860721</id><published>2006-07-04T00:45:00.000-07:00</published><updated>2006-07-06T00:50:15.773-07:00</updated><title type='text'>PIM API 202114473</title><content type='html'>&lt;div align="center"&gt;Andrew  Budiman Hartono&lt;/div&gt;&lt;div align="center"&gt;202114473&lt;/div&gt;&lt;br /&gt;PIM API adalah sebuah package untuk mengakses dan merubah PIM database yang terdapat pada MIDP. tujuannya adalah untuk membuat sebuah standardized interface untuk database tersebut, yang bisa digunakan untuk berbagai macam device. seperti pada API yang lain yang menggunakan I/O operation, thread yang digunakan harus berbeda dengan thread yang digunakan untuk GUI untuk menghindari deadlocks.PIM database saat ini mendukung beberapa database, antara lain: Contact lists, Event lists, and To-Do lists. 3 tipe database ini tidak sepenuhnya dibutuhkan bagi beberapa device, namun spesifikasi yang dibutuhkan mengharuskan 3 database tersebut untuk diimplementasikan pada device, setidaknya salah satu tipe harus ada. pada implementasinya, database dapat memuat lebih dari 1 list untuk tipe yang sama, contohnya pada device, contact-list bisa terdapat pada memori device dan memori dari SIM card.PIM API merujuk ke database sebagai PIMList objects dan data individual sebagai PIMItems. PIM Class mempunyai 2 openPIMList methods untuk mendapatkan akses dari PIMList yang ada. method ini membutuhkan tipe dari database dan access mode yang digunakan ( (READ_ONLY, WRITE_ONLY, READ_WRITE). PIM class hanya merupakan singleton yang bisa didapatkan dari getInstance() static method. untuk mengurangi permintaan atas security permissions, disarankan untuk menggunakan minimum access rights ketika membuka database.setiap database harus diidentifikasikan dengan nama yang unik. dengan menggunakan method listPIMLists, kita dapat mendata semua nama yang ada untuk tipe tertentu. pada nokia, penamaan database biasanya bersangkutan dengan lokal database, contohnya contacts database dapat bernama "contacts", "contactos", atau "puhelinluettelo", tergantung bahasa dari device. pada device-device highend tertentu, user dapat menentukan nama dari list itu sendiri. maka dari itu disarankan untuk menggunakan method listPIMList daripada menggunakan nama list yang di hard-coded ketika membuka database. PIMList mengandung beberapa method items() yang digunakan untuk mengakses secara penuh isi dari PIMItems dan memilih berberapa dari isi tersebut. method ini harus digunakan secara hati-hati, karena prosesnya dapat memakan waktu yang lama apabila data yang ada sangat banyak.PIMList juga support untuk creat,modify, dan delete PIMItems. yang perlu diperhatikan ialah bahwa modifikasi atau pembuatan item baru tidak akan dicatat pada database sampai dilakukan pemanggilan method commit(). kebalikannya delete akan langsung diproses pada saat pemanggilan. untuk melakukan perubahan ini, mode akses harus  WRITE_ONLY atau READ_WRITE mode. ada 3 macam tipe yang terdapat pada PIMItems yang masing-masing berhubungan dengan PIMList: Contact, Event, dan ToDo. tipe-tipe tersebut mengandung data yang sebenarnya dari masing-masing item. data tersebut antara lain seperti nomer telpon ataupun alamat. data ini diidentifikasikan dengan numerical constant. sebuah contact dapat memiliki beberapa nomer telpon.setiam PIMList tidak perlu untuk support semua fields yang disediakan pada API. untuk itu, sebelum kita membaca data sebuah field, kita harus memanggil method isSupportedField() atau getSupportedFields() untuk memastikan bahwa field tersebut disupport. perlu diperhatikan bahwa database pada device yang sama dapat memiliki field yang berbeda, semisal contact list pada device memiliki banyak field dibandingkan dengan contact list yang terdapat pada SIM card. untuk memastikan hal ini dapat digunakan method countValues() sehingga menghindari error IndexOutOfBounds.setiap entry juga mungkin memiliki attribut extra untuk mendeskripsikan sebuah item. contohnya field telpon, dapat memiliki attribut tambahan seperti fax, rumah, mobile-phone. untuk mendapatkan data tersebut dapat digunakan method isSupportedAttribute() dan getSupportedAttributes(). untuk mendapatkan nama dari attribut atau field dapat digunakan getFieldLabel() dan getAttributLabel(). API pada nokia juga menyediakan layanan untuk melakukan grouping pada database, sehingga dapat memperbagus tampilan pada device.&lt;br /&gt;berikut ini adalah contoh dari pemrograman j2me untuk membuat ContactsListForm.form ini menunjukkan list dari contacts dengan nomer telpon, sehingga user dapat memilih salah satu.&lt;br /&gt;import java.util.*; import javax.microedition.lcdui.*; import javax.microedition.pim.*; // This form shows a list of the contacts in the local databases class ContactListForm extends List implements CommandListener {   private final Command exitCommand, selectCommand, backCommand;   private final EventSharingMIDlet parent;   private boolean available;   private Vector allTelNumbers = new Vector();   public ContactListForm(EventSharingMIDlet parent)   {     super("Contacts", Choice.IMPLICIT);     this.parent = parent;     // init UI     selectCommand = new Command("Select", Command.OK, 0);     backCommand = new Command("Back", Command.BACK, 1);     exitCommand = new Command("Exit", Command.EXIT, 1);     addCommand(backCommand);     addCommand(exitCommand);     setCommandListener(this);     setFitPolicy(Choice.TEXT_WRAP_ON);     // load the list of names in a different thread     parent.enqueueOperation(new LoadContacts());   }   public void commandAction(Command cmd, Displayable displayable)   {     // if no names are available return     if (!available)     { parent.showMain();       return;     }     else if (cmd == selectCommand)     {       int selected = getSelectedIndex();       if (selected &gt;= 0)       {         // will get the number from the list         parent.contactSelected(         (String) allTelNumbers.elementAt(selected));       }       else       {         parent.showMain();       }     }     else if (cmd == backCommand)     {       parent.showMain();     }     else if (cmd == exitCommand)     {       parent.notifyDestroyed();     }   }   // loads the names of a named contact list   private void loadNames(String name)   throws PIMException, SecurityException   {     ContactList contactList = null;     try     {       contactList = (ContactList) PIM.getInstance()       .openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY, name);       // First check that the fields we are interested in are supported       // by the PIM List       if (contactList.isSupportedField(Contact.FORMATTED_NAME)       &amp;&amp;amp; contactList.isSupportedField(Contact.TEL))       {         // Put an informative title while reading the contacts         setTitle("Contacts");         append("Reading contacts...", null);         Enumeration items = contactList.items();         // change the title to use the localized name.         // getFieldLabel returns an i18n version         delete(0);         setTitle(contactList.getFieldLabel(Contact.FORMATTED_NAME)         + ": "         + contactList.getFieldLabel(Contact.TEL));         Vector telNumbers = new Vector();         while (items.hasMoreElements())         {           Contact contact = (Contact) items.nextElement();           int telCount = contact.countValues(Contact.TEL);           int nameCount = contact.countValues(Contact.FORMATTED_NAME);           // we're only interested in contacts with a phone number           // nameCount should always be &gt; 0 since FORMATTED_NAME is           // mandatory           if (telCount &gt; 0 &amp;&amp;amp; nameCount &gt; 0)           {             // here we use the first entry in formatted named             String contactName =             contact.getString(Contact.FORMATTED_NAME, 0); // go through all the phone numbers             for (int i = 0; i &lt; telattributes ="               contact.getAttributes(Contact.TEL," telnumber ="               contact.getString(Contact.TEL,"&gt;20)             {               contactName = contactName.substring(0, 17)               + "...";             }             // insert elements in the list in order             for (int i = 0; i &lt; telNumbers.size(); i++)             {               append(contactName               + ": "               + telNumbers.elementAt(i), null);             }             telNumbers.removeAllElements();           }         }         available = true;       }       else       {         append("Contact list required items not supported", null);         available = false;       }     }     finally     {       // always close it       if (contactList != null)       {         contactList.close();       }     }   }   // load the names in a separate thread   private class LoadContacts implements Operation   {     public void execute()     {       try       {         // go through all the lists         String[] allContactLists = PIM.getInstance()         .listPIMLists(PIM.CONTACT_LIST);         if (allContactLists.length != 0)         {           for (int i = 0; i &lt; allContactLists.length; i++)           {             loadNames(allContactLists[i]);           }           addCommand(selectCommand);         }         else         {           append("No Contact lists available", null);           available = false;         }       }       catch (PIMException e)       {         parent.showMessage(e.getMessage(), ContactListForm.this);         available = false;         append("Press a key to return", null);       }       catch (SecurityException e)       {         parent.showMessage(e.getMessage(), ContactListForm.this);         available = false;         append("Press a key to return", null);       }     }   } }&lt;br /&gt;Referensi[JSR-075] JSR-75: PDA Optional Packages for the J2ME™ Platform , Java Community Process, 2004, &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr075/index.html"&gt;http://jcp.org/aboutJava/communityprocess/final/jsr075/index.html&lt;/a&gt; [MIDPPROG] MIDP 1.0: Introduction to MIDlet Programming, Forum Nokia, 2004, &lt;a href="http://www.forum.nokia.com/"&gt;http://www.forum.nokia.com&lt;/a&gt;  Technologies  Java  Code and Examples [SIGNMID] MIDP 2.0: Tutorial On Signed MIDlets, Forum Nokia, 2004, &lt;a href="http://www.forum.nokia.com/documents"&gt;http://www.forum.nokia.com/documents&lt;/a&gt; [MIDP 2.0] Mobile Information Device Profile 2.0, Java Community Process, 2002, &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr118/index.html"&gt;http://jcp.org/aboutJava/communityprocess/final/jsr118/index.html&lt;/a&gt; [VCARD] vCard The Electronic Business Card Version 2.1, versit Consortium 1996, &lt;a href="http://www.imc.org/pdi/vcard-21.txt"&gt;http://www.imc.org/pdi/vcard-21.txt&lt;/a&gt; [VCALENDAR] vCalendar The Electronic Calendaring and Scheduling Exchange Format Version 1.0, versit Consortium 1996, &lt;a href="http://www.imc.org/pdi/vcal-10.txt"&gt;http://www.imc.org/pdi/vcal-10.txt&lt;/a&gt; 5 Evaluate This Resource In order to improve the quality of documentation, we kindly ask you to fill in the survey.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115217221559860721?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115217221559860721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115217221559860721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217221559860721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217221559860721'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/pim-api-202114473_04.html' title='PIM API 202114473'/><author><name>bos_tekjang</name><uri>http://www.blogger.com/profile/06488799341462462822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115217103108264953</id><published>2006-07-04T00:28:00.000-07:00</published><updated>2006-07-06T00:42:42.710-07:00</updated><title type='text'>PIM API 202114473</title><content type='html'>&lt;div align="center"&gt;Andrew Budiman Hartono&lt;/div&gt;&lt;div align="center"&gt;202114473&lt;/div&gt;&lt;br /&gt;PIM API adalah sebuah package untuk mengakses dan merubah PIM database yang terdapat pada MIDP. tujuannya adalah untuk&lt;br /&gt;membuat sebuah standardized interface untuk database tersebut, yang bisa digunakan untuk berbagai macam device. seperti pada&lt;br /&gt;API yang lain yang menggunakan I/O operation, thread yang digunakan harus berbeda dengan thread yang digunakan untuk GUI&lt;br /&gt;untuk menghindari deadlocks.PIM database saat ini mendukung beberapa database, antara lain: Contact lists, Event lists, and To-Do lists. 3 tipe database&lt;br /&gt;ini tidak sepenuhnya dibutuhkan bagi beberapa device, namun spesifikasi yang dibutuhkan mengharuskan 3 database tersebut&lt;br /&gt;untuk diimplementasikan pada device, setidaknya salah satu tipe harus ada. pada implementasinya, database dapat memuat lebih&lt;br /&gt;dari 1 list untuk tipe yang sama, contohnya pada device, contact-list bisa terdapat pada memori device dan memori dari SIM&lt;br /&gt;card.PIM API merujuk ke database sebagai PIMList objects dan data individual sebagai PIMItems. PIM Class mempunyai 2 openPIMList&lt;br /&gt;methods untuk mendapatkan akses dari PIMList yang ada. method ini membutuhkan tipe dari database dan access mode yang&lt;br /&gt;digunakan ( (READ_ONLY, WRITE_ONLY, READ_WRITE). PIM class hanya merupakan singleton yang bisa didapatkan dari getInstance()&lt;br /&gt;static method. untuk mengurangi permintaan atas security permissions, disarankan untuk menggunakan minimum access rights&lt;br /&gt;ketika membuka database.setiap database harus diidentifikasikan dengan nama yang unik. dengan menggunakan method listPIMLists, kita dapat mendata&lt;br /&gt;semua nama yang ada untuk tipe tertentu. pada nokia, penamaan database biasanya bersangkutan dengan lokal database, contohnya&lt;br /&gt;contacts database dapat bernama "contacts", "contactos", atau "puhelinluettelo", tergantung bahasa dari device. pada&lt;br /&gt;device-device highend tertentu, user dapat menentukan nama dari list itu sendiri. maka dari itu disarankan untuk menggunakan&lt;br /&gt;method listPIMList daripada menggunakan nama list yang di hard-coded ketika membuka database. PIMList mengandung beberapa&lt;br /&gt;method items() yang digunakan untuk mengakses secara penuh isi dari PIMItems dan memilih berberapa dari isi tersebut. method&lt;br /&gt;ini harus digunakan secara hati-hati, karena prosesnya dapat memakan waktu yang lama apabila data yang ada sangat banyak.PIMList juga support untuk creat,modify, dan delete PIMItems. yang perlu diperhatikan ialah bahwa modifikasi atau pembuatan&lt;br /&gt;item baru tidak akan dicatat pada database sampai dilakukan pemanggilan method commit(). kebalikannya delete akan langsung&lt;br /&gt;diproses pada saat pemanggilan. untuk melakukan perubahan ini, mode akses harus WRITE_ONLY atau READ_WRITE mode. ada 3 macam tipe yang terdapat pada PIMItems yang masing-masing berhubungan dengan PIMList: Contact, Event, dan ToDo.&lt;br /&gt;tipe-tipe tersebut mengandung data yang sebenarnya dari masing-masing item. data tersebut antara lain seperti nomer telpon&lt;br /&gt;ataupun alamat. data ini diidentifikasikan dengan numerical constant. sebuah contact dapat memiliki beberapa nomer telpon.setiam PIMList tidak perlu untuk support semua fields yang disediakan pada API. untuk itu, sebelum kita membaca data sebuah&lt;br /&gt;field, kita harus memanggil method isSupportedField() atau getSupportedFields() untuk memastikan bahwa field tersebut&lt;br /&gt;disupport. perlu diperhatikan bahwa database pada device yang sama dapat memiliki field yang berbeda, semisal contact list&lt;br /&gt;pada device memiliki banyak field dibandingkan dengan contact list yang terdapat pada SIM card. untuk memastikan hal ini&lt;br /&gt;dapat digunakan method countValues() sehingga menghindari error IndexOutOfBounds.setiap entry juga mungkin memiliki attribut extra untuk mendeskripsikan sebuah item. contohnya field telpon, dapat memiliki&lt;br /&gt;attribut tambahan seperti fax, rumah, mobile-phone. untuk mendapatkan data tersebut dapat digunakan method&lt;br /&gt;isSupportedAttribute() dan getSupportedAttributes(). untuk mendapatkan nama dari attribut atau field dapat digunakan&lt;br /&gt;getFieldLabel() dan getAttributLabel(). API pada nokia juga menyediakan layanan untuk melakukan grouping pada database,&lt;br /&gt;sehingga dapat memperbagus tampilan pada device.&lt;br /&gt;berikut ini adalah contoh dari pemrograman j2me untuk membuat ContactsListForm.form ini menunjukkan list dari contacts dengan nomer telpon, sehingga user dapat memilih salah satu.&lt;br /&gt;import java.util.*; import javax.microedition.lcdui.*; import javax.microedition.pim.*; // This form shows a list of the contacts in the local databases class ContactListForm extends List implements CommandListener { private final Command exitCommand, selectCommand, backCommand; private final EventSharingMIDlet parent; private boolean available; private Vector allTelNumbers = new Vector(); public ContactListForm(EventSharingMIDlet parent) { super("Contacts", Choice.IMPLICIT); this.parent = parent; // init UI selectCommand = new Command("Select", Command.OK, 0); backCommand = new Command("Back", Command.BACK, 1); exitCommand = new Command("Exit", Command.EXIT, 1); addCommand(backCommand); addCommand(exitCommand); setCommandListener(this); setFitPolicy(Choice.TEXT_WRAP_ON); // load the list of names in a different thread parent.enqueueOperation(new LoadContacts()); } public void commandAction(Command cmd, Displayable displayable) { // if no names are available return if (!available) { parent.showMain(); return; } else if (cmd == selectCommand) { int selected = getSelectedIndex(); if (selected &gt;= 0) { // will get the number from the list parent.contactSelected( (String) allTelNumbers.elementAt(selected)); } else { parent.showMain(); } } else if (cmd == backCommand) { parent.showMain(); } else if (cmd == exitCommand) { parent.notifyDestroyed(); } } // loads the names of a named contact list private void loadNames(String name) throws PIMException, SecurityException { ContactList contactList = null; try { contactList = (ContactList) PIM.getInstance() .openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY, name); // First check that the fields we are interested in are supported // by the PIM List if (contactList.isSupportedField(Contact.FORMATTED_NAME) &amp;&amp;amp; contactList.isSupportedField(Contact.TEL)) { // Put an informative title while reading the contacts setTitle("Contacts"); append("Reading contacts...", null); Enumeration items = contactList.items(); // change the title to use the localized name. // getFieldLabel returns an i18n version delete(0); setTitle(contactList.getFieldLabel(Contact.FORMATTED_NAME) + ": " + contactList.getFieldLabel(Contact.TEL)); Vector telNumbers = new Vector(); while (items.hasMoreElements()) { Contact contact = (Contact) items.nextElement(); int telCount = contact.countValues(Contact.TEL); int nameCount = contact.countValues(Contact.FORMATTED_NAME); // we're only interested in contacts with a phone number // nameCount should always be &gt; 0 since FORMATTED_NAME is // mandatory if (telCount &gt; 0 &amp;&amp;amp; nameCount &gt; 0) { // here we use the first entry in formatted named String contactName = contact.getString(Contact.FORMATTED_NAME, 0); // go through all the phone numbers for (int i = 0; i &lt; telattributes =" contact.getAttributes(Contact.TEL," telnumber =" contact.getString(Contact.TEL,"&gt;20) { contactName = contactName.substring(0, 17) + "..."; } // insert elements in the list in order for (int i = 0; i &lt; available =" true;" available =" false;" allcontactlists =" PIM.getInstance()" i =" 0;" available =" false;" available =" false;" available =" false;" href="http://jcp.org/aboutJava/communityprocess/final/jsr075/index.html"&gt;http://jcp.org/aboutJava/communityprocess/final/jsr075/index.html&lt;/a&gt; [MIDPPROG] MIDP 1.0: Introduction to MIDlet Programming, Forum Nokia, 2004, &lt;a href="http://www.forum.nokia.com/"&gt;http://www.forum.nokia.com/&lt;/a&gt; Technologies Java Code and Examples [SIGNMID] MIDP 2.0: Tutorial On Signed MIDlets, Forum Nokia, 2004, &lt;a href="http://www.forum.nokia.com/documents"&gt;http://www.forum.nokia.com/documents&lt;/a&gt; [MIDP 2.0] Mobile Information Device Profile 2.0, Java Community Process, 2002, &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr118/index.html"&gt;http://jcp.org/aboutJava/communityprocess/final/jsr118/index.html&lt;/a&gt; [VCARD] vCard The Electronic Business Card Version 2.1, versit Consortium 1996, &lt;a href="http://www.imc.org/pdi/vcard-21.txt"&gt;http://www.imc.org/pdi/vcard-21.txt&lt;/a&gt; [VCALENDAR] vCalendar The Electronic Calendaring and Scheduling Exchange Format Version 1.0, versit Consortium 1996, &lt;a href="http://www.imc.org/pdi/vcal-10.txt"&gt;http://www.imc.org/pdi/vcal-10.txt&lt;/a&gt; 5 Evaluate This Resource In order to improve the quality of documentation, we kindly ask you to fill in the survey.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115217103108264953?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115217103108264953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115217103108264953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217103108264953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115217103108264953'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/pim-api-202114473.html' title='PIM API 202114473'/><author><name>bos_tekjang</name><uri>http://www.blogger.com/profile/06488799341462462822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115199531856958226</id><published>2006-07-03T23:32:00.000-07:00</published><updated>2006-07-04T00:05:39.633-07:00</updated><title type='text'>Mengamankan wireless device anda</title><content type='html'>Jika anda merupakan personal user atau pegawai perusahaan, jika anda memiliki mobile device, anda harus memiliki kebijakan keamanan pribadi, atau perusahaan. Beberapa user memiliki kebijakan keamanan secara tidak langsung, tetapi beberapa tidak memiliki kebijakan keamanan samasekali dan tidak memikirkan implikasi keamanan yang mungkin terjadi pada pocket PC. Artikel ini bertujuan untuk membantu organisasi berpikir tentang kebijakan keamanan yang dapat berguna untuk perusahaannya, dan juga untuk orang yang ingin mengatur keamanan dari alatnya. Mobile device security harus menjadi prioritas yang tinggi dalam agenda kerja suatu perusahaan, karena banyak perusahaan memiliki user dengan mobile device dan kebanyakan dari device ini memiliki data perusahaan didalamnya&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Apakah mobile device security policy dan kenapa diperlukan?&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Kebijakan keamanan berdasarkan device membentuk dasar dari bagaimana user berinteraksi dengan device dan perusahaan. Jika device merupakan mobile dan berisi data perusahaan maka kita harus yakin bahwa data tersebut akan aman meskipun jatuh ke tangan yang salah. Kebijakan perusahaan akan mengatur enkripsi dari data pada device sekaligus koneksi ke perusahaan. Ini juga akan meyakinkan jika password dari device terlindungi dan tidak dapat dirubah oleh orang yang tidak berwenang. Kebijakan akan membuat aturan seperti aturan password, seberapa panjang password tersebut, dan berapa banyak nomor unik yang dapat dimasukkan pada password. Secara singkat kebijakan keamanan memungkinkan admin untuk menciptakan solusi keamanan yang berdasarkan pada kebutuhan keamanan untuk data organisasi.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Bagaimana memulainya?&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Untuk memulainya pertama kali anda harus mengetahui mengapa anda ingin mengijinkan device ini dalam organisasi, dengan informasi tersebut, tulislah batasan yang ingin dibuat dan ubahlah menjadi aturan teknis menggunakan consederations outlined. Aturan keamanan merupakan panduan teknis dan harus menjadi kebutuhan yang ada pada setiap device. Panduan ini harus berdasarkan pada kebijakan keamanan yang lebih tinggi dari perusahaan. Tingkat dari detail dapat memisahkan dokumen yang diijinkan untuk diakses setiap device. Ketika membuat kebijakan keamanan, walaupun teknologi yang ada dapat mendukung atau tidak. Ketika panduan sudah dibuat, periksalah solusi keamanan untuk mencocokkan panduan dan jika perlu aturlah panduan tersebut setelah selesai melakukan evaluasi. Jika evaluasi menunjukkan bahwa aturan tersebut tidak mungkin dibuat maka anda harus memutuskan apakah akan mengganti aturan tersebut. Keputusan ini harus berdasarkan resiko dan harus didiskusikan pada tingkat bisnis bukan tingkat teknik.Bagian ini akan menunjukkan apakah yang perlu dicakup pada kebijakan keamanan.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;· Authentication into the device&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Bagian utama dari kebijakan keamanan adalah autentikasi kedalam device. Pada device standard anda dapat memasukkan pin empat digit atau password yang lebih rumit. Anda juga bias mengeset timeout menjadi nol(dengan kata lain anda harus memasukkan password setiap device dinyalakan). Ini jelas lebih baik daripada tanpa keamanan samasekali, tetapi jika device tersebut hilang maka pihak yang tidak berwenang dapat melakukan percobaan yang tidak terbatas untuk menebak password tersebut. Selain itu fungsi default sangatlah mudah sehingga user dapat memasukkan pin 0000 yang mudah untuk ditembus. Untuk menghindari compromise, pakailah produk pihak ketiga untuk meningkatkan pilihan manajemen password. Produk pihak ketiga dapat memiliki masa cooldown setelah password yang salah dicoba, mereset device jika password gagal, dan menangani dan bahkan meminta perubahan password dari device.&lt;br /&gt;Cool down period menghindari penyerang yang mencoba untuk memasukkan password pada periode waktu tertentu. Jika anda mengeset cooldown period untuk meningkatkan periode waktu dengan setiap group dari percobaan yang gagal, akan sangat mengganggu oran yang mencoba melakukan brute force pada device tersebut.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;· Penghapusan secara remote dan penonaktifan&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Beberapa solusi yang ada saat ini memiliki kemampuan untuk menghapus device secara remote.ini dapat menjadi fitur yang sangat berguna, namun tidak boleh diandalkan unutk keamanan jika device tercuri. Untuk mengerti hal ini, cobalah kita pertimbangkan contoh dibawah.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;· Stolen device&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Device yang dicuri jelas merupakan ancaman untuk keamanan dari sudut pandang device dan jaringan karena device tidak hanya mengandung informasi perusahaan seperti dokumen dan e-mail, tetapi juga sering mengandung informasi autentikasi jaringan juga, dengan kata lain orang yang mencuri tidak hanya dapat mengakses data perusahaan, tetapi juga dapat memasuki infrastruktur perusahaan juga. Jika mereka memiliki informasi, maka menyerang jarignan sangatlah mungkin. Untuk melindungi dari hal ini anda dapat menggunakan fasilitas remote destruction untuk mereset device secara paksa, menghapus semua data dan konfigurasi yang ada. Namun, bergantung pada remote destruction tampaknya tidak seperti keamanan, mengapa? Pertama, device tersebut mungkin terputus dan tidak dapat menerima perintah dan ada banyak alasan kenapa sebuah device dapat terputus. Pencuri dapat membuang SIM card atau menukarnya. Device mungkin diluar jangkauan dari operator atau wi-fi network, baterai habis, dan lain sebagainya. Itulah sebabnya anda tidak dapat mengandalkan system ini.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;. Lost Device&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Jika device hilang, device tersebut berada pada tangan orang yang tidak dikenal. Mungkin jatuh dari jaket,dsb maka jika seandainya kita melakukan remote destruction untuk keamanan, maka jika kemungkinan device tersebut kita temukan kembali maka kita tidak bisa mengembalikan konfigurasi yang ada sebelum menemui admin. Jika user berada di kota atau Negara yang berbeda maka hal ini dapat menjadi masalah yang serius. Cara yang lebih baik untuk mengatur device destruction adalah dengan mnggunakan aplikasi keamanan yang akan secara otomatis menghancurkan device dan seluruh data ketika pin yang salah diinputkan. Hal ini menjamin bahwa data yang ada hilang karena situasi yang benar. Mis: ketika pihak yang tidak berwenang mencoba ngakses data. Hal ini tidak akan terjadi jika user yang memiliki pin menggunakan device tersebut.&lt;br /&gt;Software seperti SOTI MobiControl dapat membantu menjelaskan dan membagikan kebijakan keamanan&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;· Backup and restore&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Tentu saja jika device hilang atau dicuri kita akan berusaha mengembalikan informasi yang ada(atau sebagian) kedalam device lain. Prosedur restore dan backup harus dilakukan. Kebanyakan Pocket PC device dilengkapi dengan fasilitas ini, termasuk file copy sederhana dan PIM sysncronisation ke desktop atau laptop akan lebih baik daripada tidak samasekali. Aturan ini harus menentukan kapankah data akan dikopi, frekuensi, dan pastikan copy data tersebut juka diproteksi seperti data aslinya.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;· Storage cards&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Storage card adalah cara yang baik untuk meningkatkan kapasitas dari on-board memory, tetapi mereka juga portable dan maka dari itu menimbulkan resiko keamanan tambahan. Cobalah mengunci akses dari storage card dengan cara enkripsi. Dibawah ini adalah contoh produk untuk membatasi akses dari storage card, atau mengenkripsinya.&lt;br /&gt;Pertimbangkanlah untuk mengenkripsi isi yang penting&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;· Applications&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;jika anda membuat aturan untuk menghalangi akses untuk hal atau aplikasi tertentu , anda juga harus mempertimbangkan kemungkinan bahwa user dapat membobol aturan tersebut dengan menginstall software tambahan. Ada dua pendekatan untuk application lockdown. Pertama dengan menolak akses ke aplikasi tertentu. Ini berguna untuk menghilangkan akses ke beberapa aplikasi oleh user, tetapi jika user menginstall produk sejenis yang berbeda maka hal ini menjadi sia-sia. Pendekatan kedua yang lebih baik ialah dengan mengeset daftar aplikasi yang dapat dibuka user dan membatasi user pada aplikasi tersebut saja.bagaimanapun anda harus memikirkan baik-baik batasan tersebut. Jika user memiliki kemampuan untuk merename file baik pada device maupun melalui ActiveSync, mereka mungkin dapat mengakali proteksi ini dengan mengganti nama aplikasi yang diinginkan.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;· Information transfer&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Akhirnya anda harus mempertimbangkan cara informasi dapat keluar dan masuk pada device dan melindungi fasilitas tersebut.beberapa device terbaru akan memiliki BlueTooth, WiFi, Cellular Data, Infrared, Storage Card dan ActiveSync dan koneksi RAPI. Aturan keamanan anda harus menyertakan item diatas boleh atau tidak digunakan dan membuat benda seperti Bluetooth dapat dikenali oleh umum jika diaktifkan. Untuk koneksi local, pastikan anda mempertimbangkan resiko dari aplikasi yang tidak diijinkan seperti games diinstall didalam device dan apakah aplikasi tersebut dapat diatur atau dilarang. Proteksi network harus dapat mengcover akses remote kedalam device sekaligus metode yang digunakan untuk mengconnect data perusahaan. Jka koneksi berada pada jaringan anda harus mempertimbangkan keamanan dari jaringan. Dengan pertimbangan, pastikan anda mempertimbangkan apakah koneksi jaringan tersebut dapat dipercaya atau tidak.&lt;br /&gt;Firewalls baik untuk melindungi device dari serangan dari luar pada PC, tetapi kegunaannya pada pocket PC terbatas karena tidak ada servis yang ada untuk diserang secara default. Tetapi, jika anda telah memasang aplikasi tertentu pada device yang dapat menunjukkan sebuah servis atau anda menginstall web server dan sebagainya, maka anda dapat menggunakan firewall untuk melindungi servis tersebut. Bahaya derbesar ialah serangan denial of service dan saya sarankan anda harus mempertimbangkan resiko dari serangan tersebut dengan harga dari software untuk proteksinya. Software firewall untuk pocket pc sekarang telah ada&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Who do you trust?&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;PDA merupakan device pribadi, sebagian besar dari kegunaannya pada perusahaan akan berubah sesuai tingkat kepercayaan yang orang tersebut miliki pada perusahaan.sehingga sebagaimana anda mempercayai pegawai anda bergantung pada jenis data dari organisasi dan siapa dan bagaimana device tersebut akan digunakan.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Kesimpulan&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Dengan membuat aturan keamanan, anda akan menemukan bahwa tidak ada sebuah aplikasi yang akan memenuhi semua keinginan anda, beberapa mungkin baik dalam hal tertentu tetapi tidak pada hal yang lain, karena itu campuran dari beberapa aplikasi mungkin diperlukan, pastikan anda mencobanya dengan jelas secara bersamaan terlebih dahulu. Jika ini dirasa terlalu sulit, jangan takut untuk meminta bantuan. Lebih baik mendapatkan bantuan dan menghabiskan uang daripada mengalami mandapatkan masalah dengan keamanan dimana dapat membuat sebuah perusahaan tidak lagi dapat berfungsi secara efektif dan efesien, kehilangan kepercayaan konsumen, hinaan dari umum, dan lebih buruk lagi.&lt;br /&gt;&lt;br /&gt;Dibawah ini adalah daftar produk yang dapat membantu anda dalam mengimplementasi aturan keamanan dalam pocket PC&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D42581" target="_blank"&gt;SafeGuard&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D9985" target="_blank"&gt;PocketLock&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://www.safepda.com/pocketpc_antivirus.htm" target="_blank"&gt;Airscanner Mobile Antivirus Pro (Pocket PC)&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://www.safepda.com/pocketpc_firewall.htm" target="_blank"&gt;Airscanner Mobile Firewall (Pocket PC)&lt;/a&gt; · &lt;a href="http://www.safepda.com/pocketpc_encrypter.htm" target="_blank"&gt;Airscanner Mobile Encrypter (Pocket PC)&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://www.safepda.com/smartphone_antivirus.htm" target="_blank"&gt;Airscanner Mobile antivirus (Smartphone)&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D34628" target="_blank"&gt;Sprite Backup Standard&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D65427" target="_blank"&gt;Sprite Backup Premium&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D15458" target="_blank"&gt;eWallet for WindowS Mobile Pocket PC&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D72353" target="_blank"&gt;eWallet for Windows Mobile Smartphone&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D150306" target="_blank"&gt;SecretAgent Mobile for Pocket PC 2003&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D160481" target="_blank"&gt;Spb Kiosk Explorer for Pocket PC&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D160408" target="_blank"&gt;Spb Kiosk Engine for Pocket PC&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D18480" target="_blank"&gt;SOTI Pocket Controller-Professional&lt;/a&gt;&lt;br /&gt;· &lt;a title="Buy now at Handango.com" href="http://www.geekzone.co.nz/click_thru_handango.asp?ContentId=3909&amp;amp;URL=http%3A%2F%2Fwww%2Ehandango%2Ecom%2Fampp%2Fstore%2FPlatformProductDetail%2Ejsp%3FsiteId%3D1204%26productId%3D45122" target="_blank"&gt;SOTI Pocket Controller-Enterprise (4 Device License)&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://www.bluefiresecurity.com/" target="_blank"&gt;Bluefire Security&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://www.jpmobile.com/mobile_defense.asp" target="_blank"&gt;SureWave Mobile Defense&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://www.credant.com/" target="_blank"&gt;Credant&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://www.trustdigital.com/solutions/mobiledevice.asp" target="_blank"&gt;Trust Digital VPN and Firewall&lt;/a&gt; (dianjurkan).&lt;br /&gt;&lt;br /&gt;Source :&lt;br /&gt;&lt;a href="http://www.geekzone.co.nz/content.asp?contentid=3909"&gt;http://www.geekzone.co.nz/content.asp?contentid=3909&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.fawcette.com/xmlmag/2002_03/magazine/columns/presentation/jjurvis/"&gt;http://www.fawcette.com/xmlmag/2002_03/magazine/columns/presentation/jjurvis/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115199531856958226?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115199531856958226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115199531856958226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115199531856958226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115199531856958226'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/mengamankan-wireless-device-anda.html' title='Mengamankan wireless device anda'/><author><name>hendra</name><uri>http://www.blogger.com/profile/14967209917325081802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115198330996995440</id><published>2006-07-03T20:18:00.000-07:00</published><updated>2006-07-03T20:21:50.236-07:00</updated><title type='text'>MMS PADA JAVA 2 PLATFORM, MICRO EDITION (J2ME)</title><content type='html'>NAMA :INGGRID SAMITHA&lt;br /&gt;NRP     :201114337&lt;br /&gt;&lt;br /&gt;MMS PADA JAVA 2 PLATFORM, MICRO EDITION (J2ME)&lt;br /&gt;&lt;br /&gt;Penjelasan tentang mengenai 2 Java 2 Platform, Micro Edition (J2ME)&lt;br /&gt;Java 2 Platform, Micro Edition (J2ME) adalah salah satu dari produk Sun Microsystems. Java 2 Platform, Micro Edition (J2ME) merupakan bagian dari platform Java 2. Platform Java 2 sendiri terdiri dari tiga elemen, yaitu:&lt;br /&gt;·        Java programming language.&lt;br /&gt;Bahasa pemrograman yang digunakan mirip dengan bahasa pemrograman C++ tetapi secara fundamental berbeda. C++ menggunakan pointer-pointer yang kurang aman dan mengharuskan programmer untuk mengalokasikan dan mengosongkan memori. Sedangkan Java menggunakan typesafe object references dan setiap memori yang tidak digunakan akan dikosongkan secara otomatis. Java juga mendukung multiple inheritance dengan konstruksi yang lebih baik, yaitu Interface.&lt;br /&gt;·        Java Virtual Machine.&lt;br /&gt;Java Virtual Machine atau JVM adalah dasar dari platform Java. Arsitektur JVM menawarkan beberapa fitur menarik, salah satunya adalah JVM dapat diimplementasikan untuk berjalan pada berbagai macam operating system dan hardware. Ketika mengcompile sebuah program dengan C++ akan dihasilkan file executeable(*.exe) yang hanya dapat dijalankan pada Windows OS. Hal ini berbeda dengan Java, program akan dicompile dengan JIT-compiler dan menghasilkan bytecode. Bytecode inilah yang akan diterjemahkan oleh JVM dan dijalankan sebagai sebuah aplikasi.&lt;br /&gt;·        Application Programming Interfaces(API).&lt;br /&gt;Dengan dukungan API yang luas, programmer dapat membuat berbagai macam program sesuai keinginannya dengan mudah dan cepat&lt;br /&gt;Ketiga elemen di atas apabila disatukan akan membentuk platform Java. Java juga didesain untuk kompatibel dengan berbagai macam hardware komputer, mulai dari smart card hingga server. Java dibagi menjadi 3 edisi dan masing-masing memiliki fungsi yang berbeda, yaitu:&lt;br /&gt;·        Java 2 Platform, Standard Edition(J2SE)&lt;br /&gt;J2SE didesain untuk digunakan pada komputer desktop atau PC. J2SE paling sering dijalankan pada OS X, Linux, Solaris, dan Microsoft Windows.&lt;br /&gt;·        Java 2 Platform, Enterprise Edition(J2EE)&lt;br /&gt;J2EE adalah platform yang sangat luas untuk aplikasi multi-user dan banyak digunakan oleh perusahaan-perusahaan. J2EE berbasis pada J2SE dengan tambahan API untuk pemrograman sisi server.&lt;br /&gt;·        Java 2 Platform, Micro Edition(J2ME)&lt;br /&gt;J2ME adalah satu set teknologi dan spesifikasi yang dikembangkan untuk perangkat kecil seperti pager dan hanphone. J2ME menggunakan subset dari komponen J2SE, seperti virtual machine yang lebih kecil dan API.&lt;br /&gt;Berbeda dengan J2SE, J2ME bukanlah sebuah software atau sebuah spesifikasi tunggal. Perbedaan ini mungkin sangat membingungkan, bahkan untuk developer yang sudah mengenal J2SE. J2ME adalah sebuah platform, sebuah kumpulan dari teknologi dan spesifikasi yang didesain untuk perangkat kecil.&lt;br /&gt;Karena J2ME mendukung banyak perangkat, tidak mungkin untuk membuat solusi “satu ukuran untuk semua”. Oleh karena itu, J2ME dibagi-bagi menjadi Configuration, Profiles, dan Package optional. Configurations adalah spesifikasi yang menjabarkan sebuah virtual machine dan satu set API dasar yang dapat digunakan dengan beberapa perangkat tertentu. Sebuah Configuration, sebagai contoh, mungkin ditujukan untuk perangkat yang memiliki memori dibawah 512KB dan koneksi jaringan yang naik turun. Virtual machine dapat berupa Java Virtual Machine lengkap atau berupa bagian dari Java Virtual Machine.&lt;br /&gt;Sebuah profile dibangun berdasarkan Configuration, ditambah API yang lebih spesifik untuk membuat sebuah environment lengkap untuk pembuatan aplikasi. Walaupun sebuah Configuration mendeskripsikan sebuah JVM dan satu set API dasar, tetapi masih kurang untuk menspesifikasikan cukup detail untuk pembuatan aplikasi. Profile biasanya menyertakan API untuk siklus hidup, user interface dan persistent storage suatu aplikasi.&lt;br /&gt;Sebuah optional Package menyediakan fungsionalitas yang mungkin tidak berhubungan dengan Configuration atau Profile tertentu. Sebuah contoh untuk optional Package adalah Bluetooth API(JSR 82), yang menyediakan API standar untuk mengakses jaringan Bluetooth. Optional Package ini dapat diimplementasikan dengan kombinasi Configuration dan Profile lainnya.&lt;br /&gt; &lt;br /&gt; Seperti yang ditunjukkan gambar Struktur Java 2 Platform, Micro Edition (J2ME) di atas, Java 2 Platform, Micro Edition (J2ME) memiliki 2 cabang. Yang pertama adalah Connected, Limited Device Configuration atau disingkat dengan CLDC. Configuration ini diperuntukkan bagi perangkat wireless kecil yang memiliki jaringan yang naik turun seperti pager, handphone dan Personal Digital Assistance(PDA). Mobile Information Devices atau MIDP, yang berbasiskan CLDC, adalah Profile pertama yang diselesaikan sekaligus aplikasi pertama lingkungan Java 2 Platform, Micro Edition (J2ME).&lt;br /&gt;Salah satu cabang besar lain Java 2 Platform, Micro Edition (J2ME) adalah Connected Device Configuration atau CDC. Tetapi Configuration ini lebih diperuntukkan bagi perangkat yang lebih besar(dalam hal memori dan kecepatan processor) dengan jaringan yang lebih baik.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Penjelasan tentang  Wireless Messaging API 2.0&lt;br /&gt;Wireless Messaging API 2.0 atau WMA 2.0 adalah salah satu package optional yang ditawarkan oleh Java 2 Platform, Micro Edition (J2ME). WMA 2.0 menawarkan banyak kemudahan dan sangat membantu dalam pembuatan aplikasi multimedia messaging. Wireless Messaging API 2.0 adalah API yang digunakan untuk melakukan pengiriman dan penerimaan multimedia message. API ini dibuat berbasiskan Generic Connection Framework(GCF) yang didefinisikan di spesifikasi Connected Limited Device Configuration(CLDC) 1.0. Package javax.microedition.io mendefinisikan framework, mendukung proses input/outpu(I/O), dan fungsionalitas jaringan pada Profile J2ME. Package ini menyediakan sebuah cara untuk mengakses dan mengatur data pada dengan resource yang terbatas.&lt;br /&gt;Desain fungsionalitas pengiriman dan penerimaan multimedia message mirip dengan fungsionalitas datagram yang digunakan untuk UDP pada Generic Connection Framework(GCF). Seperti fungsionalitas datagram, pengiriman dan penerimaan multimedia message harus dilakukan dengan membuka koneksi berupa String address dan koneksi tersebut dapat dilakukan pada mode server maupun client. Bagaimanapun juga, multimedia message dan datagram berbeda satu dengan lainnya, oleh karena itu, interface untuk multimedia message tidak diturunkan dari datagram. Penggunaan interface yang sama untuk multimedia message dan datagram juga akan membingungkan. Interface untuk multimedia message telah didefinisikan pada package javax.wireless.messaging.&lt;br /&gt;Sebuah multimedia message digambarkan sebagai dua bagian, yaitu bagian alamat(address part) dan bagian data(data part). Sebuah multimedia message direpresentasikan oleh sebuah class yang merupakan implementasi dari interface yang didefinisikan untuk multimedia message pada API-nya. Interface ini menyediakan method-method yang umum digunakan untuk semua multimedia message. Pada package javax.wireless.messaging, interface dasar yang diimplementasikan oleh semua multimedia message dinamakan Message. Message menyediakan method-method untuk address-address dan timestamp.&lt;br /&gt;Pada bagian data (data part) dari multimedia message, API-nya didesain untuk dapat menangani multimedia message berupa text message, binary message, multipart message. Hal ini diwakili oleh tiga subinterface yaitu TextMessage, BinaryMessage, MultipartMessage. Ketiga subinterface tersebut menyediakan banyak cara untuk memanipulasi payload dari message seperti String, Byte array, Multiple parts (Multiple payloads). Subinterface lain dari Message dapat didefinisikan untuk payload message yang murni text message, binary message maupun murni message parts. Pembuatan subinterface untuk fitur protocol-spesifik dari TextMessage, BinaryMessage dan MessageParts juga sangat dimungkinkan.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Penerapan Wireless Messaging API 2.0&lt;br /&gt;Program yang telah dibuat akan dijalankan dengan menggunakan emulator yang telah disediakan oleh Wireless Toolkit yaitu KToolbar. Aplikasi yang dibuat menggunakan variabel User Defined bernama “MMS-Port” yang harus didefinisikan pada Project Settings. Nilai yang digunakan harus lebih besar dari 50000, hal ini sesuai dengan batasan port yang telah dibahas pada Bab 2. Aplikasi yang akan dibuat dan dibahas adalah MMS Manager. MMS Manager memiliki kemampuan menerima dan mengirim message baru, menyimpan message yang telah diterima, melakukan reply pada message yang baru diterima maupun message yang telah disimpan, melakukan forward pada message yang telah disimpan.&lt;br /&gt;&lt;br /&gt;1. Membuka Koneksi&lt;br /&gt;Dengan pembuatan object Connection. Sebelum melakukan penerimaan dan pengiriman message, suatu aplikasi harus membuka koneksi terlebih dahulu. Aplikasi MMS Manager yang dibuat menggunakan koneksi mode “server”.&lt;br /&gt;Pembuatan koneksi harus dilakukan dalam try-catch sehingga apabila terjadi error exception yang dilemparkan dapat ditangkap dan dibaca.&lt;br /&gt;&lt;br /&gt;2. Penerimaan MMS&lt;br /&gt;Aplikasi untuk menerima MMS sebenarnya sangat sederhana. Aplikasi hanya perlu untuk membuka koneksi MessageConnection pada suatu port dan menunggu message melalui MessageListener. Apabila ada message yang akan datang, MessageListener akan memanggil metode notifyIncomingMessage terlebih dahulu dan memberi tahu aplikasi bahwa akan ada message yang datang, dan kemudian aplikasi dapat menerimanya dengan menggunakan metode receive() dari MessageConnection.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Pengiriman MMS&lt;br /&gt;Agar proses pengiriman message tidak mengganggu jalannya aplikasi, maka pengiriman message dilakukan dengan menggunakan thread. Karena dalam satu prosedur hanya boleh terdapat satu thread, maka pengiriman message dilakukan dalam prosedur yang terpisah. Prosedur untuk mengirimkan message diberi nama Sender. Prosedur Sender harus dibuat instance-nya terlebih dahulu sebelum dapat digunakan.&lt;br /&gt;&lt;br /&gt;4. Penyimpanan Message&lt;br /&gt;Dengan menggunakan MMS Manager, message yang telah diterima dapat disimpan untuk dipergunakan kemudian. Penyimpanan message dilakukan dengan menggunakan RecordStore.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sumber :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://192.18.97.149/ECom/EComTicketServlet/BEGINsdlcweb2b.sun.com-98ff%3A40ffcc54%3Ac8f93e3125d7546/-2147483648/457194915/1/414278/414266/457194915/2ts+/westCoastFSEND/7502-j2sdk-1.4.2-doc-oth-JPR/7502-j2sdk-1.4.2-doc-oth-JPR:1/j2sdk-1_4_2-doc.zip"&gt;http://192.18.97.149/ECom/EComTicketServlet/BEGINsdlcweb2b.sun.com-98ff%3A40ffcc54%3Ac8f93e3125d7546/-2147483648/457194915/1/414278/414266/457194915/2ts+/westCoastFSEND/7502-j2sdk-1.4.2-doc-oth-JPR/7502-j2sdk-1.4.2-doc-oth-JPR:1/j2sdk-1_4_2-doc.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2me/docs/wtk2.3-beta/UserGuide.pdf"&gt;http://java.sun.com/j2me/docs/wtk2.3-beta/UserGuide.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115198330996995440?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115198330996995440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115198330996995440' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115198330996995440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115198330996995440'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/mms-pada-java-2-platform-micro-edition.html' title='MMS PADA JAVA 2 PLATFORM, MICRO EDITION (J2ME)'/><author><name>daffy_quackquack</name><uri>http://www.blogger.com/profile/11664641377200954086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115194301244423800</id><published>2006-07-03T09:08:00.000-07:00</published><updated>2006-07-03T09:10:12.560-07:00</updated><title type='text'>SCADA (SUPERVISORY CONTROL AND DATA ACQUISITION) MENGGUNAKAN TEKNOLOGI KOMUNIKASI BERGERAK/ Yustinus Adityanata /200114109</title><content type='html'>Oleh : Yustinus Adityanata&lt;br /&gt;200114109&lt;br /&gt;Wireless Mobile Networking&lt;br /&gt;&lt;br /&gt;SCADA adalah suatu sistem pengendalian alat secara jarak jauh, dengan kemampuan memantau data-data dari alat yang dikendalikan. SCADA merupakan bidang yang secara kontinyu selalu dikembangkan di seluruh bagian dunia pada berbagai tipe industri yang menghabiskan bertrilyun-trilyun rupiah.&lt;br /&gt;Penelitian-penelitian mengenai SCADA semakin berkembang dengan ditemukannya media komunikasi bergerak, sehingga memunculkan istilah Mobile SCADA.&lt;br /&gt;Salah satu penelitian untuk mengatasi permasalahan di atas adalah dengan dibuatnya suatu sistem SCADA yang dikendalikan melalui web (Robotics and Automation Group, 2004). Di dalam penelitian ini digunakan sebuah server yang terkoneksi dengan internet yang akan menangani beberapa fungsi dan kontrol robot. Dengan dipindahkannya beberapa fungsi dan kontrol tersebut maka fungsi pengendalian robot akan menjadi lebih sederhana, yang berakibat pula sistem bersifat generik, artinya bisa diterapkan di berbagai bidang aplikasi industri. Selain itu juga dibuat program berbasis web yang bersifat user friendly. Hal-hal ini akan mengatasi beberapa permasalahan di atas. Namun demikian sistem di atas masih belum bersifat bergerak/mobile.&lt;br /&gt;Oleh karena itu penelitian-penelitian baru dilakukan dengan merancang suatu sistem SCADA yang menggunakan teknologi komunikasi bergerak, untuk selanjutnya kita sebut sebagai Mobile SCADA. Mobile SCADA sendiri didefinisikan sebagai penggunaan sistem SCADA dengan media komunikasi jaringan telepon bergerak (Mayer, 2002). Dengan digunakannya infrastruktur komunikasi bergerak yang sudah ada tersebut, maka bisa diwujudkan suatu sistem SCADA yang berbiaya murah, disertai dengan kemampuannya untuk bisa dipasang di mana saja tanpa tergantung setting lokasi industri. Selain itu dalam sistem ini juga akan digunakan suatu server terhubung internet yang akan mengakomodir beberapa fungsi dan kontrol pengendalian sehingga kerumitan sistem akan terkurangi yang mengakibatkan perangkat SCADA akan dapat dioperasikan dengan mudah dan lebih bersifat generik serta perawatannya menjadi lebih murah. Penghematan biaya terjadi karena obyek kendali bisa dikendalikan secara jarak jauh sehingga akan membantu penghematan kerja manusia.Namun demikian sistem-sistem SCADA yang dikembangkan di atas syarat dengan rancang bangun yang modern dan integrasi yang tinggi antara perancang dan industri pendukungnya. Penelitian-penelitian di atas bahkan membutuhkan biaya yang juga masih sangat mahal untuk mengembangkan mesin SCADA), yang merupakan komponen utama dari sistem SCADA yang berupa kartu (card) yang tersambung ke telepon klien dan ke obyek kendali. Sistem pengembangan alat seperti ini tentu akan sangat berat bila diterapkan di Indonesia.&lt;br /&gt;Maka dari itu dalam penelitian ini akan dikembangkan suatu sistem SCADA yang tepat bagi kondisi industri menengah ke bawah di Indonesia, yang bisa dilaksanakan oleh para peneliti di level universitas di Indonesia, dengan penggunaan komponen-komponen dan perangkat lunak yang mudah didapatkan di pasaran, serta dengan menggunakan jaringan komunikasi bergerak yang murah di Indonesia, seperti jaringan CDMA.&lt;br /&gt;Selain permasalahan di atas, ada permasalahan utama yang akan menjadi titik perhatian dalam penelitian ini, yaitu pembuatan protokol atau aturan-aturan kendali yang nantinya akan menjadi landasan pembuatan perangkat lunak sistem Mobile SCADA ini. Protokol ini nantinya harus dibuat sedemikian rupa sehingga perangkat lunak serta perangkat keras yang dibangun dalam sistem ini dapat mengatasi berbagai permasalahan di atas, yaitu bersifat generik, mudah digunakan, mudah dirawat, mudah beradaptasi, dan mobile.&lt;br /&gt;Beberapa penelitian mengenai Mobile SCADA telah dilakukan. Lembaga penelitian HighBeam Research di Chicago telah mengembangkan sistem ini untuk keperluan pengendalian sistem pengairan dan sistem pemompaan. Sistem SCADA yang dikembangkan menggunakan RTUs, suatu perangkat pengendalian dengan media komunikasi radio. Pada sistem ini terdapat suatu sistem pengendalian berbasis komputer yang terletak pada sebuah kamar pusat. Sistem seperti ini sangat efektif digunakan untuk memantau operasi-operasi secara remote, namun pada suatu area yang terbatas. Sistem ini dilaporkan mampu menghemat biaya secara signifikan karena hemat tenaga manusia dan hemat energi.&lt;br /&gt;Penelitian lain adalah yang dilakukan lembaga riset CSIRO, Canberra, Australia. Sistem Mobile SCADA yang dikembangkan menggunakan GPRS sebagai media komunikasinya dan menggunakan mikroprosesor yang murah untuk mesin SCADA, sehingga dihasilkan sistem SCADA yang murah dan fleksibel (Mayer dan Taylor, 2002). Penelitian ini lebih dikhususkan untuk sistem SCADA pada jaringan sensor. Jaringan sensor adalah suatu sistem yang terdiri dari banyak micro controller kecil yang mempunyai alat sensor, yang bekerja bersama pada jaringan nirkabel.Penelitian yang dikerjakan pada tesis ini dimaksudkan untuk mengembangkan suatu sistem Mobile SCADA dengan protokol atau aturan-aturan kendali yang nantinya akan menjadi landasan bagi pembuatan perangkat lunak sistem. Protokol ini nantinya harus dibuat sedemikian rupa sehingga perangkat lunak serta perangkat keras yang dibangun dalam sistem ini bersifat generik, mudah digunakan, mudah dirawat, mudah beradaptasi, dan mobile sehingga tepat digunakan oleh industri menengah ke bawah di Indonesia. Selain itu sistem Mobile SCADA ini menggunakan media komunikasi Paket Data CDMA.&lt;br /&gt;Dengan sistem Mobile SCADA yang dibuat dengan suatu protokol/aturan yang didasarkan pada kondisi ketersediaan komponen-komponen mesin SCADA di Indonesia, serta didasarkan pada perangkat lunak yang murah bahkan gratis, dan dibatasi untuk permasalahan sederhana dan bersifat umum atau generik, serta dengan menggunakan media komunikasi Paket Data CDMA di Indonesia, maka akan dihasilkan sebuah sistem Mobile SCADA yang akan sangat sesuai dengan kebutuhan industri-industri di Indonesia yang ingin menerapkan sistem SCADA. Tentu saja pemanfaatan hasil penelitian masih harus disesuaikan dengan bidang aplikasi yang akan menggunakannya, yaitu dengan sedikit modifikasi pada perangkat lunaknya karena menyesuaikan perangkat keras yang akan dikendalikan.&lt;br /&gt;Lembaga penelitian HighBeam Research di Chicago telah mengembangkan sistem Mobile SCADA dengan menggunakan RTUs, suatu perangkat pengendalian dengan media komunikasi radio (May, 1997). Penelitian serupa dilakukan juga oleh Perusahaan MDS di Rochester, New York.&lt;br /&gt;Penelitian lain adalah yang dilakukan lembaga riset CSIRO, Canberra, Australia. Sistem Mobile SCADA yang dikembangkan menggunakan GPRS sebagai media komunikasinya dan menggunakan mikroprosesor yang murah untuk mesin SCADA, sehingga dihasilkan sistem SCADA yang murah dan fleksibel (Mayer dan Taylor, 2002).&lt;br /&gt;Penelitian-penelitian di atas memerlukan suatu mesin SCADA yang membutuhkan rancang bangun yang modern dan integrasi yang tinggi antara industri pendukung dan perancangnya. Hal ini belum bisa dilakukan di Indonesia. Sehingga dalam tesis ini akan dibuat suatu protokol atau aturan-aturan kendali yang nantinya akan menjadi landasan pembuatan perangkat lunak sistem Mobile SCADA ini. Protokol ini nantinya harus dibuat sedemikian rupa sehingga perangkat lunak serta perangkat keras yang dibangun dalam sistem ini dapat mengatasi berbagai permasalahan di atas, yaitu bersifat generik, mudah digunakan, mudah dirawat, mudah beradaptasi, dan mobile. Selain itu penelitian pada tesis ini menggunakan media komunikasi yang berbeda dengan penelitian-penelitian di atas, yaitu Paket Data CDMA. Agar sistem Mobile SCADA yang dikembangkan bersifat generik, mudah digunakan, mudah dirawat, dan mudah beradaptasi, maka pembuatan sistem SCADA perlu memisahkan pengembangan fungsional dan layanan ke dalam dunia komputasi umum (DKU) dan dunia alat kendali (Taylor dan Palmer, 2003). Hal ini dilakukan dengan membagi-bagi sistem ke dalam tiga modul, yaitu Front End, Back End, dan mesin SCADA.&lt;br /&gt;). Front End adalah antar muka web bagi sistem SCADA yang akan dikembangkan yang berguna menghindari kekompleksan bagi pengguna sistem. Di dalam Front End terdapat fungsionalitas sistem yang mewakili fungsi-fungsi pengendalian. Sedangkan Back End merupakan sebuah program aplikasi yang mengelola koneksi ke mesin SCADA, dan juga terpasang di PC yang sama (Server Web/Aplikasi) dengan lokasi Front End. Back End dan mesin SCADA akan memberikan layanan-layanan yang diminta oleh pengguna melalui Front End. Seorang pengguna dengan mudah bisa mengendalikan obyek kendali melalui Front End tanpa harus memahami bagaimana Back End dan mesin SCADA memberikan layanan-layanan yang diminta.&lt;br /&gt;Pengguna dari suatu sistem Mobile SCADA melalui sebuah aplikasi browser web dengan media komunikasi bergerak akan mengirimkan pesan-pesan ke obyek kendali. Sebelum pesan-pesan ini sampai maka terlebih dulu harus diterjemahkan oleh suatu mesin SCADA ke dalam bentuk perintah-perintah.Setelah obyek kendali mengerjakan perintah-perintah tersebut maka akan ada suatu mekanisme untuk mendapatkan umpan balik yang menunjukkan bahwa perintah-perintah telah dilaksanakan. Salah satu caranya adalah dengan digunakannya suatu aplikasi TiniDB. TiniDB adalah suatu basis data mini yang bisa beroperasi pada mesin SCADA yang berkomunikasi dengan pengguna dengan teknologi komunikasi bergerak, yang memungkinkan dilaksanakannya operasi-operasi SQL (Ken Taylor dan Kevin Mayer, 2003).&lt;br /&gt;Penelitian dalam tesis ini tidak menggunakan suatu aplikasi TinyDB, namun menggunakan sistem basis data yang diimplementasikan pada Server Aplikasi yang mempunyai IP privat yang terhubung ke mesin SCADA melalui jaringan telepon bergerak. Dengan penggunaan basis data di server ini maka dengan mudah bisa ditambahkan fasilitas-fasilitas fungsional yang memungkinkan terjadinya kegenerikan sistem. Bila sistem ini akan digunakan pada bidang aplikasi industri yang lain, maka kita tidak perlu mengubah program pada mesin SCADA, namun yang perlu kita ubah adalah variabel-variabel pada basis data yang terpasang di server aplikasi.&lt;br /&gt;Sistem SCADA yang murah dan fleksibel bisa diperoleh dengan penggunaan mesin SCADA yang murah, serta dengan menggunakan sarana komunikasi yang sudah ada, yaitu jaringan telepon bergerak. Sementara itu teknologi GPRS menyediakan suatu jalur komunikasi yang selalu online namun biayanya tidak berbasis waktu tersambung (Kevin Mayer dan Ken Taylor, 2002). Dalam penelitian tersebut digunakan suatu mesin SCADA yang mampu memicu sambungan TCP secara langsung ke suatu PC (yang merupakan Server Aplikasi dengan alamat IP privat) dengan sarana teknologi GPRS, sehingga waktu respon dari sistem pengendalian menjadi lebih baik daripada yang menggunakan mesin SCADA tanpa kemampuan memicu sambungan TCP secara langsung. Namun demikian mesin SCADA di atas dirancang secara khusus sehingga harganya pun relatif sangat mahal.&lt;br /&gt;Dalam penelitian, selain digunakan media komunikasi bergerak yang berbeda dan lebih murah yaitu Paket Data CDMA, yang prinsip umumnya sama dengan media komunikasi GPRS, juga akan digunakan suatu sistem yang berbeda dari sistem di atas, yaitu mesin SCADA yang digunakan mudah didapatkan di Indonesia dengan harga murah, namun tidak akan secara langsung bisa memicu sambungan TCP ke PC Server Aplikasi. Sambungan TCP hanya terjadi di antara PC dan telepon bergerak. Mesin SCADA yang tertempeli telepon bergerak tersebut melakukan komunikasi dengan menggunakan perintah AT+ command (merupakan himpunan teks ASCII dan berorientasi baris, yang digunakan telepon bergerak untuk membaca pesan IO dari peralatan lain dengan protokol RS-232, lihat Gb.1). Walaupun terlihat bahwa waktu respon pengendalian dari sistem ini bertambah, namun dalam penelitian ini akan dicari suatu cara di mana kekurangan tersebut bisa ditekan seminimal mungkin. Hal ini dapat dilakukan dengan telepon bergeraknya diprogram agar setiap saat (dalam hitungan mikro detik) selalu meminta data dari mesin SCADA yang memang sudah tersambung ke PC melalui sambungan TCP.&lt;br /&gt;Penelitian akan disesuaikan dengan kondisi di Indonesia yang mana akan dimanfaatkan mesin SCADA yang dibangun dari micro controller yang tersedia mudah di pasaran seperti Micro Controller AT 89C51, atau micro controller lainnya.&lt;br /&gt;Dengan membuat suatu sistem SCADA yang murah dan dapat diaplikasikan pada berbagai aplikasi SCADA dengan sedikit pemrograman serta dengan menambahkan peralatan yang sesuai, akan menghasilkan suatu sistem SCADA yang sangat berguna bagi berbagai aplikasi industri maupun organisasi.&lt;br /&gt;Biaya yang mahal dari banyak aplikasi SCADA disebabkan oleh penggunaan sarana komunikasi yang khusus. Dengan digunakannya sarana komunikasi yang sudah tersedia secara luas, yaitu pada kasus ini adalah jaringan komunikasi bergerak, tidak hanya harga yang bisa dikurangi, namun juga akan didapatkan sifat skalabilitas dan sifat generik dari sistem ini. Jaringan komunikasi bergerak yang telah beroperasi di Indonesia umumnya ada dua macam, yaitu yang menggunakan teknologi GSM yang sudah lebih dulu ada dan yang menggunakan teknologi CDMA yang lebih murah. Kedua teknologi di atas sama-sama mempunyai empat metode komunikasi yaitu:&lt;br /&gt;1. Komunikasi Bit Tunggal,&lt;br /&gt;2. SMS,&lt;br /&gt;3. Data Call,&lt;br /&gt;4. GPRS / Paket Data.&lt;br /&gt;&lt;br /&gt;Komunikasi Bit Tunggal Sistem komunikasi ini adalah teknologi paling sederhana yang hanya menggunakan data satu bit bernilai ”on/off”. Komunikasi terjadi dengan cara pengguna memanggil sebuah nomor telepon yang merupakan bagian dari sistem PABX yang terhubung dengan sebuah komputer. Komputer di sini digunakan untuk mengelola sebuah basis data yang bertugas mencocokkan nomor pemanggil, nomor terpanggil, dan perintah yang relevan. Contoh aplikasinya adalah beroperasinya suatu vending machine yang mengeluarkan minuman bila suatu nomor telepon dipanggil. Hal ini dimungkinkan karena vending machine tadi disambungkan ke komputer yang terhubung ke Internet.&lt;br /&gt;&lt;br /&gt;SMS&lt;br /&gt;Sistem komunikasi ini dapat menyediakan lalu lintas data yang lebih besar dibanding komunikasi bit tunggal, yang menggunakan mode asynchronous namun tanpa jaminan terkirim. Sebuah komputer yang dengan kabel serial terhubung ke telepon/modem bergerak dapat digunakan untuk mengotomatisasi pengiriman dan penerimaan SMS. Dengan cara ini pesan-pesan yang datang dapat dianalisa oleh suatu program komputer, demikian halnya pesan dapat dibangkitkan pada komputer dan dikirimkan ke sebuah telepon bergerak.&lt;br /&gt;&lt;br /&gt;Data Call&lt;br /&gt;Komunikasi ini memungkinkan lalu lintas data yang besar. Sistem ini meminta alokasi satu slot untuk setiap percakapan, walaupun pada saat itu tidak ada transfer data. Begitu suatu percakapan tersambung, akan terjamin bahwa data bisa terkirimkan. Proses pengiriman data ini menggunakan sistem Data Over Voice, di mana data akan diubah ke sinyal frekuensi dengan menggunakan DTMF encoder yang nantinya pada telepon bergerak penerima diubah kembali ke data dengan DTMF decoder. Untuk itu diperlukan bahasa pemrograman J2ME yang memang memungkinkan proses DTMF encoder/decoder. Biaya tergantung dari jumlah waktu sambungan percakapan. Komunikasi ini sangat cocok untuk sistem yang tidak memerlukan data waktu nyata, serta tidak memerlukan komunikasi yang kontinyu, namun secara khusus sangat cocok untuk lalu lintas data besar yang memerlukan waktu transfer singkat.&lt;br /&gt;&lt;br /&gt;GPRS atau Paket Data&lt;br /&gt;Sistem komunikasi ini berprinsip bahwa satu slot percakapan sebenarnya bisa digunakan oleh beberapa pengguna secara simultan dengan time division multiplexing. Seorang pengguna hanya menggunakan lebar pita saat loading halaman web, bukan saat membaca halaman yang telah di-load. Biaya tergantung dari jumlah data terkirim, bukan tergantung dari jumlah waktu sambungan, sehingga sangat cocok untuk sistem yang memerlukan data waktu nyata, serta memerlukan komunikasi yang kontinyu.&lt;br /&gt;&lt;br /&gt;Sistem yang DikembangkanDengan adanya data-data untuk keempat metode komunikasi di atas maka menjadikan masukan mengenai bagaimana sistem SCADA dalam penelitian ini akan dikembangkan. Dunia industri sangat membutuhkan media komunikasi yang kontinyu, data waktu nyata, dan murah. Sehingga Paket Data dipilih sebagai metode komunikasinya.Data waktu nyata pada media komunikasi Paket Data ini memang sangat tergantung dari bandwidth Internet yang dialokasikan untuk Server Web/Aplikasinya. Penelitian oleh Mayer menunjukkan bahwa sambungan TCP untuk transfer data pada GPRS memerlukan 1 KB/detik (Mayer, 2002). Sedangkan data dari homepage flexi menunjukkan bahwa transfer data Paket Data juga memerlukan 1 KB/detik. Tentu saja untuk mencapai hal itu tidak mudah karena seperti telah dijelaskan di Tinjauan Pustaka bahwa mesin SCADA yang dibuat tidak secara langsung bisa memicu sambungan TCP ke Server Aplikasi. Sambungan TCP hanya terjadi di antara Server Aplikasi dan telepon bergerak. Mesin SCADA yang tertempeli telepon klien tersebut melakukan komunikasi dengan menggunakan perintah AT+ command (merupakan himpunan teks ASCII dan berorientasi baris, yang digunakan telepon bergerak untuk membaca pesan IO dari peralatan lain dengan protokol RS-232,sehingga waktu respon pengendalian dari sistem ini bertambah. Namun demikian dalam penelitian ini akan dicari suatu cara di mana waktu respon bisa ditekan seminimal mungkin. Hal ini dapat dilakukan dengan telepon bergeraknya diprogram agar setiap saat (dalam hitungan mikro detik) selalu meminta data dari mesin SCADA yang memang sudah tersambung ke PC melalui sambungan TCP.&lt;br /&gt;Sistem Mobile SCADA ini akan menggunakan metode komunikasi Paket Data. Ini dipilih karena terutama adalah memenuhi persyaratan untuk pengendalian yaitu bisa berkomunikasi dua arah, handal, selalu online, waktu transfer cepat, serta relatif murah dibanding yang lain.Skema dari sistem Mobile SCADA yang digunakan untuk penelitian ini adalah seperti tampak pada Gb.1, dan terdiri dari tiga modul:&lt;br /&gt;1. Front End,&lt;br /&gt;2. Back End,&lt;br /&gt;3. mesin SCADA.&lt;br /&gt;Front End&lt;br /&gt;Front End merupakan antar muka pengguna menuju sistem, berupa kumpulan aplikasi web yang terdiri dari script PHP, yang nantinya akan terpasang di Server Web/Aplikasi. Pengguna berinteraksi dengan sistem dengan melalui browser web untuk membuka aplikasi tadi di sebuah PC klien. Dengan kondisi demikian maka sebenarnya modul ini tidak bisa berkomunikasi secara langsung dengan mesin SCADA. Komunikasi harus dilakukan melalui Back End. Dengan melalui koneksi langsung ke suatu basis data, Front End bisa menyediakan pengguna suatu akses terhadap pesan-pesan yang dikirimkan oleh mesin SCADA melalui Back End. Kebutuhan fungsional yang harus disediakan pada Front End:&lt;br /&gt;- kemampuan mengirimkan pesan ke mesin SCADA,&lt;br /&gt;- membaca pesan dari mesin SCADA.&lt;br /&gt;&lt;br /&gt;Back End&lt;br /&gt;Back End merupakan sebuah aplikasi Java yang terpasang pada Server Web/Aplikasi dan berfungsi mengelola koneksi ke mesin SCADA melalui telepon bergerak. Back End terpasang di server yang sama dengan lokasi Front End. Kebutuhan fungsional yang harus dimiliki:&lt;br /&gt;- kemampuan menginisiasi koneksi ke mesin SCADA via telepon bergerak;&lt;br /&gt;- mengelola koneksi ke mesin SCADA, sehingga bila ada data ingin dikirim ke mesin SCADA, jalurnya menjadi tersedia;&lt;br /&gt;- menerima pesan dari mesin SCADA via telepon bergerak dan mengirimnya ke sistem pengelola pesan (basis data);&lt;br /&gt;- menyediakan data umpan balik bagi Front End;&lt;br /&gt;- melayani permintaan dari Front End, misalnya untuk mengirim pesan ke mesin SCADA via telepon bergerak.&lt;br /&gt;&lt;br /&gt;Mesin SCADA Mesin SCADA dibangun dengan suatu micro controller beserta dengan kabel-kabel serialnya yang menjembatani telepon/modem bergerak dengan obyek kendali. Yang perlu dipahami pada mesin SCADA ini adalah keharusannya untuk dapat mengirim dan menerima data melalui Paket Data, yang mana koneksi Paket Data tersebut harus selalu online. Hal ini bisa terjadi bila telepon klien selalu dalam keadaan men-dial PC server dalam artian koneksi terjadi atas inisiatif dari telepon klien, karena hanya PC server lah yang bisa dihubungi sebab mempunyai alamat IP publik. Sedangkan telepon bergerak cuma mempunyai alamat IP privat sehingga tidak bisa dihubungi dengan jaringan GPRS / Paket Data. Dalam kondisi seperti ini maka komunikasi data bisa terjadi di antara PC dan telepon klien. Kemudian dengan suatu perintah AT+ command yang merupakan fasilitas pada telepon bergerak maka data-data yang sudah tersimpan dalam telepon klien tadi bisa dikirimkan ke mesin SCADA, yang pada akhirnya diterjemahkan oleh mesin SCADA untuk mengendalikan obyek kendali.. Terlihat bahwa bila seorang pengguna ingin mengendalikan gerakan mobil-mobilan, maka perintah-perintahnya harus dilakukan melalui interaksi dengan web yang berupa program aplikasi Front End dalam PHP. Program PHP ini akan melakukan suatu proses yang mengubah pesan ke format yang sesuai dan mengirimkan pesan-pesan tadi ke Back End. Setelah itu suatu program Back End dalam Java (dengan Java Development Kit versi 1.3 atau lebih) memungkinkan pesan tadi dikirimkan melalui suatu port ke telepon klien via komunikasi Paket Data.&lt;br /&gt;Komunikasi antara pengguna dan obyek kendali&lt;br /&gt;Bila obyek kendali berupa mobil-mobilan maka:&lt;br /&gt;- Pengguna memencet tombol di layar yang dimaksudkan untuk ”membelokkan mobil ke kiri 300 dengan kecepatan 2m/detik”, maka perintah ini ditangkap oleh suatu proses PHP di Front End yang mengubahnya menjadi karakter ASCII, misalnya ”K30DC2M/D” (artinya belok kiri 300 kecepatan 2m/detik).- Back End dengan aplikasi Java mengambil data dari basis data dan mengirimkannya melalui port COM teks ASCII ”K30DC2M/D” ke telepon bergerak.&lt;br /&gt;- Telepon bergerak tadi dengan perintah AT+ command mengirimkan teks ASCII ”K30DC2M/D” ke mesin SCADA.&lt;br /&gt;- Kemudian suatu perintah dilakukan oleh mesin SCADA untuk membaca teks ASCII tadi pada EEPROM eksternalnya:&lt;br /&gt;read_ext_eeprom(RECV_MESSAGE_LOCATION),&lt;br /&gt;dengan variabel RECV_MESSAGE_LOCATION adalah lokasi disimpannya teks ASCII pada EEPROM.&lt;br /&gt;- Kemudian mesin SCADA mengubah memroses karakter ”K30DC2M/D” menjadi sinyal-sinyal tegangan yang dikehendaki sehingga mobil-mobilan yang gerakannya diatur oleh perubahan tegangan bergerak sesuai perintah pengguna.&lt;br /&gt;&lt;br /&gt;Url :&lt;br /&gt;Robotics and Automation Group, Telerobot, Department of Mechanical and Materials of Engineering, The University of Western Australia, Nedlands 6907, Western Australia, &lt;a href="http://telerobot.mech.uwa.edu.au/"&gt;http://telerobot.mech.uwa.edu.au/&lt;/a&gt;, 2004.&lt;br /&gt;&lt;br /&gt;May dan Donald, L., Mobile’s SCADA systems reduce operating costs, &lt;a href="http://static.highbeam.com/p/publicworks/august011997/%20mobilesscadasystemsreduceoperatingcostsalabamasupe/"&gt;http://static.highbeam.com/p/publicworks/august011997/%20mobilesscadasystemsreduceoperatingcostsalabamasupe/&lt;/a&gt;, HighBeam Research,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115194301244423800?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115194301244423800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115194301244423800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115194301244423800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115194301244423800'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/scada-supervisory-control-and-data_03.html' title='SCADA (SUPERVISORY CONTROL AND DATA ACQUISITION) MENGGUNAKAN TEKNOLOGI KOMUNIKASI BERGERAK/ Yustinus Adityanata /200114109'/><author><name>starstrom</name><uri>http://www.blogger.com/profile/10648844256616778282</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115194411575476467</id><published>2006-07-03T09:06:00.000-07:00</published><updated>2006-07-03T10:07:32.883-07:00</updated><title type='text'>Memahami Proses Kompilasi Aplikasi Java pada Ponsel</title><content type='html'>Radityo Trihascaryo&lt;br /&gt;200114017&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;strong&gt;Memahami Proses Kompilasi Aplikasi Java pada&lt;br /&gt;Ponsel&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;Sebagai sebuah bahasa pemrograman yang harus dikompilasi, untuk membuat sebuah kode&lt;br /&gt;Java dapat dijalankan dan dilihat hasilnya lewat sebuah ponsel, diperlukan beberapa tahap&lt;br /&gt;penting. Sebuah kode program adalah file teks yang dapat dikenali secara mudah oleh developer&lt;br /&gt;yang membuatnya. Namun, mesin atau dalam hal ini adalah ponsel tidak mengenali kode-kode&lt;br /&gt;yang ada didalam program tersebut. Hanya byte code saja yang mampu dikenali oleh ponsel&lt;br /&gt;yang bersangkutan. Apa yang terjadi selama tahap-tahap tersebut ? Bagaimana compiler&lt;br /&gt;mengeksekusi tahap tersebut?&lt;br /&gt;Secara umum, tahap untuk menghasilkan sebuah byte code aplikasi atau yang dikenal dengan&lt;br /&gt;midlet yang dapat langsung dijalan dalam sebuah ponsel terdiri atas proses editing, kompilasi,&lt;br /&gt;preverify, packaging/pengemasan, run/Debuging, dan terakhir adalah proses porting atau transfer&lt;br /&gt;ke dalam ponsel. Beberapa proses tersebut harus dilakukan secara berurutan sesuai dengan&lt;br /&gt;aturan yang telah ditetapkan oleh kompiler Java baik secara otomatis maupun secara manual.&lt;br /&gt;Secara otomatis berarti anda menggunakan software khusus yang melakukan beberapa proses&lt;br /&gt;yang dimaksud tanpa perlu mengetikkan perintah dari proses yang bersangkutan melalui&lt;br /&gt;Command Prompt. Dengan cara ini, pada dasarnya software tersebut juga memanggil perintah&lt;br /&gt;bersangkutan melalui Command Prompt, namun proses pemanggilan tersebut dilakukan di backend&lt;br /&gt;process. Sedangkan cara manual, seperti telah dikemukakan mengharuskan seorang&lt;br /&gt;developer untuk melakukan tahap-tahap untuk menghasilkan sebuah midlet.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/4964/3259/320/untitled.0.jpg" border="0" /&gt;&lt;br /&gt;Seperti terlihat para gambar, proses dari editing hingga Run/Debug harus dilakukan secara&lt;br /&gt;berurutan sampai diperoleh hasil seperti yang diinginkan. Pada proses selanjutnya&lt;br /&gt;&lt;strong&gt;Editing&lt;br /&gt;&lt;/strong&gt;Proses editing merupakan tahap pertama sebelum seorang developer dapat menghasilkan&lt;br /&gt;sebuah midlet. Tahap ini merupakan proses untuk menghasilkan kode program sebelum&lt;br /&gt;dikompilasi, maupun menyiapkan file-file gambar maupun suara yang mungkin diperlukan sesuai&lt;br /&gt;dengan format yang didukung oleh bahasa pemrograman Java yang digunakan. Beberapa&lt;br /&gt;software editing seperti Sun One Java Studio Mobility, Jbuilder mobile Edition, Forte, dan&lt;br /&gt;sebagainya mengintegrasikan fungsi editing dengan compiler.&lt;br /&gt;Dengan demikian, akan memudahkan developer ketika membangun sebuah aplikasi karena&lt;br /&gt;proses-proses kompilasi dapat dilakukan secara otomatis. Jika tidak menggunakan softwaresoftware&lt;br /&gt;tersebut, tidak berarti proses editing berlangsung lebih sulit, namun dari berbagai&lt;br /&gt;pengalaman justru terbukti menggunakan editor lain yang terpisah justru mempercepat proses&lt;br /&gt;yang dilakukan. File kode sumber java disimpan dalam format *.java.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;strong&gt;Kompilasi&lt;/strong&gt;&lt;br /&gt;Setelah kode program dibuat, selanjutnya kode tersebut harus diterjemahkan menjadi byte code.&lt;br /&gt;Dalam hal ini, kode program yang dibuat dengan ekstensi .java diubah dalam bentuk byte code&lt;br /&gt;menjadi file yang berekstensi .class. Pengubahan ini sangat penting, karena ketika dijalankan di&lt;br /&gt;dalam ponsel, mesin yang bekerja pada ponsel harus dapat memahami maksud dari aplikasi.&lt;br /&gt;Semua aplikasi java berjalan pada mesin yang memiliki virtual machine (VM). Demikian pula&lt;br /&gt;dengan midlet. Midlet dijalankan pada ponsel yang memiliki VM. Karakteristik virtual machine&lt;br /&gt;pada ponsel berbeda dengan karakteristik VM pada PC maupun peralatan lain yang mampu&lt;br /&gt;didukung oleh Java. VM pada ponsel dikenal dengan nama KVM dengan k adalah singkatan dari&lt;br /&gt;kilo untuk menggambarkan lingkungan kerja ponsel yang berukuran kecil.&lt;br /&gt;VM inilah yang sebenarnya menjadi wahana hidup sekaligus penerjemah bagi byte code yang&lt;br /&gt;dihasilkan dari tahap ini.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;strong&gt;Preverify&lt;br /&gt;&lt;/strong&gt;Kompilasi saja belum cukup untuk membuat aplikasi dapat berjalan dengan lancar pada ponsel.&lt;br /&gt;Perlu dilakukan kembali proses penyusunan kembali byte code dari file berekstensi .class tadi&lt;br /&gt;untuk verifikasi akhir apakah sesuai dengan KVM yang digunakan dalam ponsel. Disamping itu&lt;br /&gt;diperiksa juga apakah ada fitur dari KVM yang tidak didukung oleh ponsel.&lt;br /&gt;Apabila proses kompilasi menggunakan fitur standar menggunakan Java 2 Micro Edition (J2ME)&lt;br /&gt;Wireless ToolKit, maka umumnya semua aplikasi dapat dijalankan di semua ponsel yang&lt;br /&gt;mendukung Java. Namun sebelum munculnya Mobile Interface Device Profile versi 2.0 yang&lt;br /&gt;merupakan profil khusus J2ME pada ponsel, pengembangan aplikasi harus menggunakan&lt;br /&gt;berbagai pustaka khusus dari masing-masing vendor disesuaikan dengan karakteristik dari&lt;br /&gt;masing-masing ponsel yang digunakan. Apabila langkah ini dilakukan, maka proses kompilasi&lt;br /&gt;dan preverify juga akan mempertimbangkan pustaka tersebut.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/4964/3259/320/untitled2.jpg" border="0" /&gt; &lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;Run/Debug&lt;/strong&gt;&lt;br /&gt;Pada tahap ini, para developer dapat melihat tampilan dari aplikasi yang dibuat melalui sebuah&lt;br /&gt;emulator. Apa yang muncul dalam emulator ini biasanya dibuat mendekati tampilan asli jika&lt;br /&gt;aplikasi dijalankan di ponsel yang diinginkan. Jika anda menggunakan J2ME WTK, maka&lt;br /&gt;peluang anda mendapatkan aplikasi yang persis seperti yang anda lihat di emulator ketika&lt;br /&gt;ditransfer ke ponsel hanya berkisar 60%-85% saja. Hal ini terjadi karena di setiap vendor,&lt;br /&gt;penanganan fitur yang tersedia juga bermacam-macam. Contoh paling sederhana adalah&lt;br /&gt;penanganan tombol di layer, kerapatan dan kualitas LCD yang berbeda, dan masih banyak halhal&lt;br /&gt;kecil yang mungkin akan membuat perbedaan tampilan di emulator dengan aslinya.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/4964/3259/320/untitled3.jpg" border="0" /&gt;&lt;br /&gt;&lt;strong&gt;Packaging/Pengemasan&lt;/strong&gt;&lt;br /&gt;Beberapa file hasil kompilasi, maupun file-file pendukung lainnya akan sangat repot jika harus&lt;br /&gt;ditransfer seluruhnya ke dalam ponsel. Untuk itu, semua file yang diperlukan kecuali file&lt;br /&gt;berekstensi *.jad yang merupakan file pertama yang akan dipanggil oleh VM, harus dikepak&lt;br /&gt;dalam satu file berekstensi .jar. Jadi kedua file inilah yang harus ditransfer ke dalam ponsel.&lt;br /&gt;Meski demikian, di beberapa jenis ponsel memungkinkan pula untuk menggunakan hanya file&lt;br /&gt;berekstensi *.jar saja yang ditransfer dan tetap dapat dijalankan.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/4964/3259/320/untitled4.jpg" border="0" /&gt;&lt;br /&gt;&lt;strong&gt;Porting&lt;/strong&gt;&lt;br /&gt;Proses porting atau transfer file *.jad dan *.jar hasil proses kompilasi harus menggunakan&lt;br /&gt;software khusus yang disediakan oleh vendor. Nokia menyediakan Nokia PC Suite, Siemens&lt;br /&gt;menggunakan Data Exchange Software, dan sebagainya. Sebagian besar software tersebut&lt;br /&gt;disediakan di situs resmi vendor bersangkutan.&lt;br /&gt;Secara umum, proses kompilasi pada aplikasi Java sebelum ditransfer ke ponsel melalui tahaptahap&lt;br /&gt;yang tetap. Untuk itu, membuat sebuah aplikasi Java pada ponsel dapat dilatih terus&lt;br /&gt;menerus, dan percayalah semakin sering anda mencoba dan melakukan setiap tahap secara&lt;br /&gt;berurutan, semakin berkembang kemampuan anda. Selamat mencoba.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115194411575476467?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115194411575476467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115194411575476467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115194411575476467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115194411575476467'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/memahami-proses-kompilasi-aplikasi.html' title='Memahami Proses Kompilasi Aplikasi Java pada Ponsel'/><author><name>Maman</name><uri>http://www.blogger.com/profile/13394210919600461780</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115194274123725659</id><published>2006-07-03T08:57:00.000-07:00</published><updated>2006-07-03T09:05:52.056-07:00</updated><title type='text'>SCADA (SUPERVISORY CONTROL AND DATA ACQUISITION) MENGGUNAKAN TEKNOLOGI KOMUNIKASI BERGERAK</title><content type='html'>Oleh : Yustinus Adityanata&lt;br /&gt;200114109&lt;br /&gt;Wireless Mobile Networking&lt;br /&gt;&lt;br /&gt;SCADA adalah suatu sistem pengendalian alat secara jarak jauh, dengan kemampuan memantau data-data dari alat yang dikendalikan. SCADA merupakan bidang yang secara kontinyu selalu dikembangkan di seluruh bagian dunia pada berbagai tipe industri yang menghabiskan bertrilyun-trilyun rupiah.&lt;br /&gt;Penelitian-penelitian mengenai SCADA semakin berkembang dengan ditemukannya media komunikasi bergerak, sehingga memunculkan istilah Mobile SCADA.&lt;br /&gt;Salah satu penelitian untuk mengatasi permasalahan di atas adalah dengan dibuatnya suatu sistem SCADA yang dikendalikan melalui web (Robotics and Automation Group, 2004). Di dalam penelitian ini digunakan sebuah server yang terkoneksi dengan internet yang akan menangani beberapa fungsi dan kontrol robot. Dengan dipindahkannya beberapa fungsi dan kontrol tersebut maka fungsi pengendalian robot akan menjadi lebih sederhana, yang berakibat pula sistem bersifat generik, artinya bisa diterapkan di berbagai bidang aplikasi industri. Selain itu juga dibuat program berbasis web yang bersifat user friendly. Hal-hal ini akan mengatasi beberapa permasalahan di atas. Namun demikian sistem di atas masih belum bersifat bergerak/mobile.&lt;br /&gt;Oleh karena itu penelitian-penelitian baru dilakukan dengan merancang suatu sistem SCADA yang menggunakan teknologi komunikasi bergerak, untuk selanjutnya kita sebut sebagai Mobile SCADA. Mobile SCADA sendiri didefinisikan sebagai penggunaan sistem SCADA dengan media komunikasi jaringan telepon bergerak (Mayer, 2002). Dengan digunakannya infrastruktur komunikasi bergerak yang sudah ada tersebut, maka bisa diwujudkan suatu sistem SCADA yang berbiaya murah, disertai dengan kemampuannya untuk bisa dipasang di mana saja tanpa tergantung setting lokasi industri. Selain itu dalam sistem ini juga akan digunakan suatu server terhubung internet yang akan mengakomodir beberapa fungsi dan kontrol pengendalian sehingga kerumitan sistem akan terkurangi yang mengakibatkan perangkat SCADA akan dapat dioperasikan dengan mudah dan lebih bersifat generik serta perawatannya menjadi lebih murah. Penghematan biaya terjadi karena obyek kendali bisa dikendalikan secara jarak jauh sehingga akan membantu penghematan kerja manusia.Namun demikian sistem-sistem SCADA yang dikembangkan di atas syarat dengan rancang bangun yang modern dan integrasi yang tinggi antara perancang dan industri pendukungnya. Penelitian-penelitian di atas bahkan membutuhkan biaya yang juga masih sangat mahal untuk mengembangkan mesin SCADA), yang merupakan komponen utama dari sistem SCADA yang berupa kartu (card) yang tersambung ke telepon klien dan ke obyek kendali. Sistem pengembangan alat seperti ini tentu akan sangat berat bila diterapkan di Indonesia.&lt;br /&gt;Maka dari itu dalam penelitian ini akan dikembangkan suatu sistem SCADA yang tepat bagi kondisi industri menengah ke bawah di Indonesia, yang bisa dilaksanakan oleh para peneliti di level universitas di Indonesia, dengan penggunaan komponen-komponen dan perangkat lunak yang mudah didapatkan di pasaran, serta dengan menggunakan jaringan komunikasi bergerak yang murah di Indonesia, seperti jaringan CDMA.&lt;br /&gt;Selain permasalahan di atas, ada permasalahan utama yang akan menjadi titik perhatian dalam penelitian ini, yaitu pembuatan protokol atau aturan-aturan kendali yang nantinya akan menjadi landasan pembuatan perangkat lunak sistem Mobile SCADA ini. Protokol ini nantinya harus dibuat sedemikian rupa sehingga perangkat lunak serta perangkat keras yang dibangun dalam sistem ini dapat mengatasi berbagai permasalahan di atas, yaitu bersifat generik, mudah digunakan, mudah dirawat, mudah beradaptasi, dan mobile.&lt;br /&gt; Beberapa penelitian mengenai Mobile SCADA telah dilakukan. Lembaga penelitian HighBeam Research di Chicago telah mengembangkan sistem ini untuk keperluan pengendalian sistem pengairan dan sistem pemompaan. Sistem SCADA yang dikembangkan menggunakan RTUs, suatu perangkat pengendalian dengan media komunikasi radio. Pada sistem ini terdapat suatu sistem pengendalian berbasis komputer yang terletak pada sebuah kamar pusat. Sistem seperti ini sangat efektif digunakan untuk memantau operasi-operasi secara remote, namun pada suatu area yang terbatas. Sistem ini dilaporkan mampu menghemat biaya secara signifikan karena hemat tenaga manusia dan hemat energi.&lt;br /&gt;            Penelitian lain adalah yang dilakukan lembaga riset CSIRO, Canberra, Australia. Sistem Mobile SCADA yang dikembangkan menggunakan GPRS sebagai media komunikasinya dan menggunakan mikroprosesor yang murah untuk mesin SCADA, sehingga dihasilkan sistem SCADA yang murah dan fleksibel (Mayer dan Taylor, 2002). Penelitian ini lebih dikhususkan untuk sistem SCADA pada jaringan sensor. Jaringan sensor adalah suatu sistem yang terdiri dari banyak micro controller kecil yang mempunyai alat sensor, yang bekerja bersama pada jaringan nirkabel.Penelitian yang dikerjakan pada tesis ini dimaksudkan untuk mengembangkan suatu sistem Mobile SCADA dengan protokol atau aturan-aturan kendali yang nantinya akan menjadi landasan bagi pembuatan perangkat lunak sistem. Protokol ini nantinya harus dibuat sedemikian rupa sehingga perangkat lunak serta perangkat keras yang dibangun dalam sistem ini bersifat generik, mudah digunakan, mudah dirawat, mudah beradaptasi, dan mobile sehingga tepat digunakan oleh industri menengah ke bawah di Indonesia. Selain itu sistem Mobile SCADA ini menggunakan media komunikasi Paket Data CDMA.&lt;br /&gt;Dengan sistem Mobile SCADA yang dibuat dengan suatu protokol/aturan yang didasarkan pada kondisi ketersediaan komponen-komponen mesin SCADA di Indonesia, serta didasarkan pada perangkat lunak yang murah bahkan gratis, dan dibatasi untuk permasalahan sederhana dan bersifat umum atau generik, serta dengan menggunakan media komunikasi Paket Data CDMA di Indonesia, maka akan dihasilkan sebuah sistem Mobile SCADA yang akan sangat sesuai dengan kebutuhan industri-industri di Indonesia yang ingin menerapkan sistem SCADA. Tentu saja pemanfaatan hasil penelitian masih harus disesuaikan dengan bidang aplikasi yang akan menggunakannya, yaitu dengan sedikit modifikasi pada perangkat lunaknya karena menyesuaikan perangkat keras yang akan dikendalikan.&lt;br /&gt; Lembaga penelitian HighBeam Research di Chicago telah mengembangkan sistem Mobile SCADA dengan menggunakan RTUs, suatu perangkat pengendalian dengan media komunikasi radio (May, 1997). Penelitian serupa dilakukan juga oleh Perusahaan MDS di Rochester, New York.&lt;br /&gt;            Penelitian lain adalah yang dilakukan lembaga riset CSIRO, Canberra, Australia. Sistem Mobile SCADA yang dikembangkan menggunakan GPRS sebagai media komunikasinya dan menggunakan mikroprosesor yang murah untuk mesin SCADA, sehingga dihasilkan sistem SCADA yang murah dan fleksibel (Mayer dan Taylor, 2002).&lt;br /&gt;            Penelitian-penelitian di atas memerlukan suatu mesin SCADA yang membutuhkan rancang bangun yang modern dan integrasi yang tinggi antara industri pendukung dan perancangnya. Hal ini belum bisa dilakukan di Indonesia. Sehingga dalam tesis ini akan dibuat suatu protokol atau aturan-aturan kendali yang nantinya akan menjadi landasan pembuatan perangkat lunak sistem Mobile SCADA ini. Protokol ini nantinya harus dibuat sedemikian rupa sehingga perangkat lunak serta perangkat keras yang dibangun dalam sistem ini dapat mengatasi berbagai permasalahan di atas, yaitu bersifat generik, mudah digunakan, mudah dirawat, mudah beradaptasi, dan mobile. Selain itu penelitian pada tesis ini menggunakan media komunikasi yang berbeda dengan penelitian-penelitian di atas, yaitu Paket Data CDMA.            Agar sistem Mobile SCADA yang dikembangkan bersifat generik, mudah digunakan, mudah dirawat, dan mudah beradaptasi, maka pembuatan sistem SCADA perlu memisahkan pengembangan fungsional dan layanan ke dalam dunia komputasi umum (DKU) dan dunia alat kendali (Taylor dan Palmer, 2003). Hal ini dilakukan dengan membagi-bagi sistem ke dalam tiga modul, yaitu Front End, Back End, dan mesin SCADA.&lt;br /&gt;). Front End adalah antar muka web bagi sistem SCADA yang akan dikembangkan yang berguna menghindari kekompleksan bagi pengguna sistem. Di dalam Front End terdapat fungsionalitas sistem yang mewakili fungsi-fungsi pengendalian. Sedangkan Back End merupakan sebuah program aplikasi yang mengelola koneksi ke mesin SCADA, dan juga terpasang di PC yang sama (Server Web/Aplikasi) dengan lokasi Front End. Back End dan mesin SCADA akan memberikan layanan-layanan yang diminta oleh pengguna melalui Front End. Seorang pengguna dengan mudah bisa mengendalikan obyek kendali melalui Front End tanpa harus memahami bagaimana Back End dan mesin SCADA memberikan layanan-layanan yang diminta.&lt;br /&gt;Pengguna dari suatu sistem Mobile SCADA melalui sebuah aplikasi browser web dengan media komunikasi bergerak akan mengirimkan pesan-pesan ke obyek kendali. Sebelum pesan-pesan ini sampai maka terlebih dulu harus diterjemahkan oleh suatu mesin SCADA ke dalam bentuk perintah-perintah.Setelah obyek kendali mengerjakan perintah-perintah tersebut maka akan ada suatu mekanisme untuk mendapatkan umpan balik yang menunjukkan bahwa perintah-perintah telah dilaksanakan. Salah satu caranya adalah dengan digunakannya suatu aplikasi TiniDB. TiniDB adalah suatu basis data mini yang bisa beroperasi pada mesin SCADA yang berkomunikasi dengan pengguna dengan teknologi komunikasi bergerak, yang memungkinkan dilaksanakannya operasi-operasi SQL (Ken Taylor dan Kevin Mayer, 2003).&lt;br /&gt;Penelitian dalam tesis ini tidak menggunakan suatu aplikasi TinyDB, namun menggunakan sistem basis data yang diimplementasikan pada Server Aplikasi yang mempunyai IP privat yang terhubung ke mesin SCADA melalui jaringan telepon bergerak. Dengan penggunaan basis data di server ini maka dengan mudah bisa ditambahkan fasilitas-fasilitas fungsional yang memungkinkan terjadinya kegenerikan sistem. Bila sistem ini akan digunakan pada bidang aplikasi industri yang lain, maka kita tidak perlu mengubah program pada mesin SCADA, namun yang perlu kita ubah adalah variabel-variabel pada basis data yang terpasang di server aplikasi.&lt;br /&gt;Sistem SCADA yang murah dan fleksibel bisa diperoleh dengan penggunaan mesin SCADA yang murah, serta dengan menggunakan sarana komunikasi yang sudah ada, yaitu jaringan telepon bergerak. Sementara itu teknologi GPRS menyediakan suatu jalur komunikasi yang selalu online namun biayanya tidak berbasis waktu tersambung (Kevin Mayer dan Ken Taylor, 2002). Dalam penelitian tersebut digunakan suatu mesin SCADA yang mampu memicu sambungan TCP secara langsung ke suatu PC (yang merupakan Server Aplikasi dengan alamat IP privat) dengan sarana teknologi GPRS, sehingga waktu respon dari sistem pengendalian menjadi lebih baik daripada yang menggunakan mesin SCADA tanpa kemampuan memicu sambungan TCP secara langsung. Namun demikian mesin SCADA di atas dirancang secara khusus sehingga harganya pun relatif sangat mahal.&lt;br /&gt;Dalam penelitian, selain digunakan media komunikasi bergerak yang berbeda dan lebih murah yaitu Paket Data CDMA,  yang prinsip umumnya sama dengan media komunikasi GPRS, juga akan digunakan suatu sistem yang berbeda dari sistem di atas, yaitu mesin SCADA yang digunakan mudah didapatkan di Indonesia dengan harga murah, namun tidak akan secara langsung bisa memicu sambungan TCP ke PC Server Aplikasi. Sambungan TCP hanya terjadi di antara PC dan telepon bergerak. Mesin SCADA yang tertempeli telepon bergerak tersebut melakukan komunikasi dengan menggunakan perintah AT+ command (merupakan himpunan teks ASCII dan berorientasi baris, yang digunakan telepon bergerak untuk membaca pesan IO dari peralatan lain dengan protokol RS-232, lihat Gb.1). Walaupun terlihat bahwa waktu respon pengendalian dari sistem ini bertambah, namun dalam penelitian ini akan dicari suatu cara di mana kekurangan tersebut bisa ditekan seminimal mungkin. Hal ini dapat dilakukan dengan telepon bergeraknya diprogram agar setiap saat (dalam hitungan mikro detik) selalu meminta data dari mesin SCADA yang memang sudah tersambung  ke PC melalui sambungan TCP.&lt;br /&gt;Penelitian akan disesuaikan dengan kondisi di Indonesia yang mana akan dimanfaatkan mesin SCADA yang dibangun dari micro controller yang tersedia mudah di pasaran seperti Micro Controller AT 89C51, atau micro controller lainnya.&lt;br /&gt;Dengan membuat suatu sistem SCADA yang murah dan dapat diaplikasikan pada berbagai aplikasi SCADA dengan sedikit pemrograman serta dengan menambahkan peralatan yang sesuai, akan menghasilkan suatu sistem SCADA yang sangat berguna bagi berbagai aplikasi industri maupun organisasi.&lt;br /&gt;Biaya yang mahal dari banyak aplikasi SCADA disebabkan oleh penggunaan sarana komunikasi yang khusus. Dengan digunakannya sarana komunikasi yang sudah tersedia secara luas, yaitu pada kasus ini adalah jaringan komunikasi bergerak, tidak hanya harga yang bisa dikurangi, namun juga akan didapatkan sifat skalabilitas dan sifat generik dari sistem ini. Jaringan komunikasi bergerak yang telah beroperasi di Indonesia umumnya ada dua macam, yaitu yang menggunakan teknologi GSM yang sudah lebih dulu ada dan yang menggunakan teknologi CDMA yang lebih murah. Kedua teknologi di atas sama-sama mempunyai empat metode komunikasi yaitu:&lt;br /&gt;1.      Komunikasi Bit Tunggal,&lt;br /&gt;2.      SMS,&lt;br /&gt;3.      Data Call,&lt;br /&gt;4.      GPRS / Paket Data.&lt;br /&gt;&lt;br /&gt;Komunikasi Bit Tunggal            Sistem komunikasi ini adalah teknologi paling sederhana yang hanya menggunakan data satu bit bernilai ”on/off”. Komunikasi terjadi dengan cara pengguna memanggil sebuah nomor telepon yang merupakan bagian dari sistem PABX yang terhubung dengan sebuah komputer. Komputer di sini digunakan untuk mengelola sebuah basis data yang bertugas mencocokkan nomor pemanggil, nomor terpanggil, dan perintah yang relevan. Contoh aplikasinya adalah beroperasinya suatu vending machine yang mengeluarkan minuman bila suatu nomor telepon dipanggil. Hal ini dimungkinkan karena vending machine tadi disambungkan ke komputer yang terhubung ke Internet.&lt;br /&gt;&lt;br /&gt;SMS&lt;br /&gt;            Sistem komunikasi ini dapat menyediakan lalu lintas data yang lebih besar dibanding komunikasi bit tunggal, yang menggunakan mode asynchronous namun tanpa jaminan terkirim. Sebuah komputer yang dengan kabel serial terhubung ke telepon/modem bergerak dapat digunakan untuk mengotomatisasi pengiriman dan penerimaan SMS. Dengan cara ini pesan-pesan yang datang dapat dianalisa oleh suatu program komputer, demikian halnya pesan dapat dibangkitkan pada komputer dan dikirimkan ke sebuah telepon bergerak.&lt;br /&gt;&lt;br /&gt;Data Call&lt;br /&gt;            Komunikasi ini memungkinkan lalu lintas data yang besar. Sistem ini meminta alokasi satu slot untuk setiap percakapan, walaupun pada saat itu tidak ada transfer data. Begitu suatu percakapan tersambung,  akan terjamin bahwa data bisa terkirimkan. Proses pengiriman data ini menggunakan sistem Data Over Voice, di mana data akan diubah ke sinyal frekuensi dengan menggunakan DTMF encoder yang nantinya pada telepon bergerak penerima diubah kembali ke data dengan DTMF decoder. Untuk itu diperlukan bahasa pemrograman J2ME yang memang memungkinkan proses DTMF encoder/decoder. Biaya tergantung dari jumlah waktu sambungan percakapan. Komunikasi ini sangat cocok untuk sistem yang tidak memerlukan data waktu nyata, serta tidak memerlukan komunikasi yang kontinyu, namun secara khusus sangat cocok untuk lalu lintas data besar yang memerlukan waktu transfer singkat.&lt;br /&gt;&lt;br /&gt;GPRS atau Paket Data&lt;br /&gt;            Sistem komunikasi ini berprinsip bahwa satu slot percakapan sebenarnya bisa digunakan oleh beberapa pengguna secara simultan dengan time division multiplexing. Seorang pengguna hanya menggunakan lebar pita saat loading halaman web, bukan saat membaca halaman yang telah di-load. Biaya tergantung dari jumlah data terkirim, bukan tergantung dari jumlah waktu sambungan, sehingga sangat cocok untuk sistem yang memerlukan data waktu nyata, serta memerlukan komunikasi yang kontinyu.&lt;br /&gt;&lt;br /&gt;Sistem yang DikembangkanDengan adanya data-data untuk keempat metode komunikasi di atas maka menjadikan masukan mengenai bagaimana sistem SCADA dalam penelitian ini akan dikembangkan. Dunia industri sangat membutuhkan media komunikasi yang kontinyu, data waktu nyata, dan murah. Sehingga Paket Data dipilih sebagai metode komunikasinya.Data waktu nyata pada media komunikasi Paket Data ini memang sangat tergantung dari bandwidth Internet yang dialokasikan untuk Server Web/Aplikasinya. Penelitian oleh Mayer menunjukkan bahwa sambungan TCP untuk transfer data pada GPRS memerlukan 1 KB/detik (Mayer, 2002). Sedangkan data dari homepage flexi menunjukkan bahwa transfer data Paket Data juga memerlukan 1 KB/detik. Tentu saja untuk mencapai hal itu tidak mudah karena seperti telah dijelaskan di Tinjauan Pustaka bahwa mesin SCADA yang dibuat tidak secara langsung bisa memicu sambungan TCP ke Server Aplikasi. Sambungan TCP hanya terjadi di antara Server Aplikasi dan telepon bergerak. Mesin SCADA yang tertempeli telepon klien tersebut melakukan komunikasi dengan menggunakan perintah AT+ command (merupakan himpunan teks ASCII dan berorientasi baris, yang digunakan telepon bergerak untuk membaca pesan IO dari peralatan lain dengan protokol RS-232,sehingga waktu respon pengendalian dari sistem ini bertambah. Namun demikian dalam penelitian ini akan dicari suatu cara di mana waktu respon bisa ditekan seminimal mungkin. Hal ini dapat dilakukan dengan telepon bergeraknya diprogram agar setiap saat (dalam hitungan mikro detik) selalu meminta data dari mesin SCADA yang memang sudah tersambung  ke PC melalui sambungan TCP.&lt;br /&gt;Sistem Mobile SCADA ini akan menggunakan metode komunikasi Paket Data. Ini dipilih karena terutama adalah memenuhi persyaratan untuk pengendalian yaitu bisa berkomunikasi dua arah, handal, selalu online, waktu transfer cepat, serta relatif murah dibanding yang lain.Skema dari sistem Mobile SCADA yang digunakan untuk penelitian ini adalah seperti tampak pada Gb.1, dan terdiri dari tiga modul:&lt;br /&gt;1.      Front End,&lt;br /&gt;2.      Back End,&lt;br /&gt;3.      mesin SCADA.&lt;br /&gt;Front End&lt;br /&gt;            Front End merupakan antar muka pengguna menuju sistem, berupa kumpulan aplikasi web yang terdiri dari script PHP, yang nantinya akan terpasang di Server Web/Aplikasi. Pengguna berinteraksi dengan sistem dengan melalui browser web untuk membuka aplikasi tadi di sebuah PC klien. Dengan kondisi demikian maka sebenarnya modul ini tidak bisa berkomunikasi secara langsung dengan mesin SCADA. Komunikasi harus dilakukan melalui Back End. Dengan melalui koneksi langsung ke suatu basis data, Front End bisa menyediakan pengguna suatu akses terhadap pesan-pesan yang dikirimkan oleh mesin SCADA melalui Back End. Kebutuhan fungsional yang harus disediakan pada Front End:&lt;br /&gt;-        kemampuan mengirimkan pesan ke mesin SCADA,&lt;br /&gt;-        membaca pesan dari mesin SCADA.&lt;br /&gt;&lt;br /&gt;Back End&lt;br /&gt;            Back End merupakan sebuah aplikasi Java yang terpasang pada Server Web/Aplikasi dan berfungsi mengelola koneksi ke mesin SCADA melalui telepon bergerak. Back End terpasang di server yang sama dengan lokasi Front End. Kebutuhan fungsional yang harus dimiliki:&lt;br /&gt;-        kemampuan menginisiasi koneksi ke mesin SCADA via telepon bergerak;&lt;br /&gt;-        mengelola koneksi ke mesin SCADA, sehingga bila ada data ingin dikirim ke mesin SCADA, jalurnya menjadi tersedia;&lt;br /&gt;-        menerima pesan dari mesin SCADA via telepon bergerak dan mengirimnya ke sistem pengelola pesan (basis data);&lt;br /&gt;-        menyediakan data umpan balik bagi Front End;&lt;br /&gt;-        melayani permintaan dari Front End, misalnya untuk mengirim pesan ke mesin SCADA via telepon bergerak.&lt;br /&gt;&lt;br /&gt;Mesin SCADA            Mesin SCADA dibangun dengan suatu micro controller beserta dengan kabel-kabel serialnya yang menjembatani telepon/modem bergerak dengan obyek kendali. Yang perlu dipahami pada mesin SCADA ini adalah keharusannya untuk dapat mengirim dan menerima data melalui Paket Data, yang mana koneksi Paket Data tersebut harus selalu online. Hal ini bisa terjadi bila telepon klien selalu dalam keadaan men-dial PC server dalam artian koneksi terjadi atas inisiatif dari telepon klien, karena hanya PC server lah yang bisa dihubungi sebab mempunyai alamat IP publik. Sedangkan telepon bergerak cuma mempunyai alamat IP privat sehingga tidak bisa dihubungi dengan jaringan GPRS / Paket Data. Dalam kondisi seperti ini maka komunikasi data bisa terjadi di antara PC dan telepon klien. Kemudian dengan suatu perintah AT+ command yang merupakan fasilitas pada telepon bergerak maka data-data yang sudah tersimpan dalam telepon klien tadi bisa dikirimkan ke mesin SCADA, yang pada akhirnya diterjemahkan oleh mesin SCADA untuk mengendalikan obyek kendali.. Terlihat bahwa bila seorang pengguna ingin mengendalikan gerakan mobil-mobilan, maka perintah-perintahnya harus dilakukan melalui interaksi dengan web yang berupa program aplikasi Front End dalam PHP. Program PHP ini akan melakukan suatu proses yang mengubah pesan ke format yang sesuai dan mengirimkan pesan-pesan tadi ke Back End. Setelah itu suatu program Back End dalam Java (dengan Java Development Kit versi 1.3 atau lebih) memungkinkan pesan tadi dikirimkan melalui suatu port ke telepon klien via komunikasi Paket Data.&lt;br /&gt;Komunikasi antara pengguna dan obyek kendali&lt;br /&gt;            Bila obyek kendali berupa mobil-mobilan maka:&lt;br /&gt;-        Pengguna memencet tombol di layar yang dimaksudkan untuk ”membelokkan mobil ke kiri 300 dengan kecepatan 2m/detik”, maka perintah ini ditangkap oleh suatu proses PHP di Front End yang mengubahnya menjadi karakter ASCII, misalnya ”K30DC2M/D” (artinya belok kiri 300 kecepatan 2m/detik).-        Back End dengan aplikasi Java mengambil data dari basis data dan mengirimkannya melalui port COM teks ASCII ”K30DC2M/D” ke telepon bergerak.&lt;br /&gt;-        Telepon bergerak tadi dengan perintah AT+ command mengirimkan teks ASCII ”K30DC2M/D” ke mesin SCADA.&lt;br /&gt;-        Kemudian suatu perintah dilakukan oleh mesin SCADA untuk membaca teks ASCII tadi pada EEPROM eksternalnya:&lt;br /&gt;read_ext_eeprom(RECV_MESSAGE_LOCATION),&lt;br /&gt;dengan variabel RECV_MESSAGE_LOCATION adalah lokasi disimpannya teks ASCII pada EEPROM.&lt;br /&gt;-        Kemudian mesin SCADA mengubah memroses karakter ”K30DC2M/D” menjadi sinyal-sinyal tegangan yang dikehendaki sehingga mobil-mobilan yang gerakannya diatur oleh perubahan tegangan bergerak sesuai perintah pengguna.&lt;br /&gt;&lt;br /&gt; Url :&lt;br /&gt;Robotics and Automation Group, Telerobot, Department of Mechanical and Materials of Engineering, The University of Western Australia, Nedlands 6907, Western Australia, &lt;a href="http://telerobot.mech.uwa.edu.au/"&gt;http://telerobot.mech.uwa.edu.au/&lt;/a&gt;, 2004.&lt;br /&gt;&lt;br /&gt;May dan Donald, L., Mobile’s SCADA systems reduce operating costs, &lt;a href="http://static.highbeam.com/p/publicworks/august011997/%20mobilesscadasystemsreduceoperatingcostsalabamasupe/"&gt;http://static.highbeam.com/p/publicworks/august011997/ mobilesscadasystemsreduceoperatingcostsalabamasupe/&lt;/a&gt;, HighBeam Research,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115194274123725659?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115194274123725659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115194274123725659' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115194274123725659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115194274123725659'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/scada-supervisory-control-and-data.html' title='SCADA (SUPERVISORY CONTROL AND DATA ACQUISITION) MENGGUNAKAN TEKNOLOGI KOMUNIKASI BERGERAK'/><author><name>starstrom</name><uri>http://www.blogger.com/profile/10648844256616778282</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115190067883313059</id><published>2006-07-02T20:09:00.000-07:00</published><updated>2006-07-02T21:31:21.646-07:00</updated><title type='text'>Aplikasi Pocket PC dengan E-Visual C++</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/1.0.jpg"&gt;&lt;/a&gt;&lt;strong&gt;Johannes Untoro&lt;br /&gt;203114892&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Membuat Aplikasi Berbasis Dialog&lt;br /&gt;&lt;/span&gt;2.1 Membuat Aplikasi Berbasis Dialog Dengan Wizard&lt;/strong&gt;&lt;br /&gt;Aplikasi dengan arsitektur Dialog merupakan arsitektur yang paling sederhana dibandingkan dengan&lt;br /&gt;struktur Document/View. Aplikasi dengan jenis Dialog standar tidak ada fasilitas untuk Menu utama dan&lt;br /&gt;penyimpanan pada file, tentu saja fitur tersebut dapat ditambahkan dengan source code tambahan yang&lt;br /&gt;lebih kompleks.&lt;br /&gt;Embedded Visual C++ atau EVC menyediakan Wizard untuk membuat aplikasi Dialog pada menu ‘File’ -&gt; ‘New’. Lalu masukkan parameter aplikasi yang akan dibuat seperti pada tampilan dibawah ini :&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/1.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/1.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/1.0.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/1.0.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Pilih Tab ‘Projects’ lalu pilih ‘WCE Pocket PC PC 2003 MFC AppWizard (exe) pada jendela&lt;br /&gt;disebelah kiri&lt;br /&gt;2. Pada kolom ‘Project name’, isi dengan nama project yang akan dibuat, disini namanya&lt;br /&gt;‘PocketPCDialog’. Lokasi aplikasi dapat dipilih pada kolom ‘Location’ dibawah kolom nama&lt;br /&gt;project&lt;br /&gt;3. Pada jendela sebelah kanan bawah, tertera bahwa aplikasi yang dibuat kompatibel dengan&lt;br /&gt;Pocket PC yang berbasis prosessor Windows CE ARM4 dan Windows CE Emulator&lt;br /&gt;4. Setelah selesai klik tombol ‘OK’&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/2.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/2.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Struktur MFC pada pocket dengan menggunakan Wizard ada 3 jenis yaitu :&lt;br /&gt;1. Single document with Doc List : Aplikasi dapat menggunakan 1 tampilan/view dengan&lt;br /&gt;document yang berbeda – beda, misalnya pada aplikasi MS Word.&lt;br /&gt;2. Single document : Aplikasi menggunakan 1 tampilan/view dengan 1 document.&lt;br /&gt;3. Dialog based : Aplikasi dengan menggunakan jendela yang sederhana tanpa ada menu.&lt;br /&gt;Karena pada bab ini akan menjelaskan cara membuat aplikasi dengan dialog maka pilihlah pilhan&lt;br /&gt;yang terakhir yaitu ‘Dialog based’, lalu pilih bahasa yang akan digunakan. (Disini menggunakan&lt;br /&gt;bahasa Inggris/English). Klik tombol ‘Next &gt;’ untuk melanjutkan.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/3.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pada langkah ke-2, Wizard akan menanyakan apakah anda akan menggunakan fasilitas Windows&lt;br /&gt;Sockets atau menggunakan ActiveX Control/OCX. Pada halaman ini juga anda dapat merubah judul&lt;br /&gt;dialog yang akan muncul sewaktu aplikasi dijalankan. Contoh ini tidak menggunakan fasilitas&lt;br /&gt;tersebut jadi anda bisa melewatkan bagian ini. Klik tombol ‘Next &gt;’ untuk melanjutkan.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/4.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/4.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Di langkah yang ke-3, bagi para pemula pilih bagian pertama ke ‘Yes, Please’ agar Wizard membuat&lt;br /&gt;komentar yang sangat berguna tentang fungsi yang akan ditambahkan secara otomatis.&lt;br /&gt;Pada pertanyaan kedua, pilih pilihan pertama jika anda menggunakan file DLL terpisah misalnya&lt;br /&gt;file DLL yang dikhususkan untuk menangani grafik, tentu saja anda harus menyisipkan file DLL&lt;br /&gt;tersebut ke dalam Pocket PC anda agar aplikasinya berjalan. Untuk pertanyaan kedua, aplikasi akan&lt;br /&gt;menambahkan file DLL pada aplikasi tersebut yaitu pada file aplikasi yang berakhirkan .exe&lt;br /&gt;sehingga jumlah besar filenya akan bertambah. Pada contoh sekarang pilihlah pada pilihan pertama,&lt;br /&gt;yakni pilihan pada ‘As a shared DLL’.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/5.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Langkah ke-4 merupakan langkah terakhir sebelum Wizard membuat aplikasi tersebut secara&lt;br /&gt;otomatis. Setelah anda yakin, klik tombol ‘Finish’.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.2 Contoh Menggunakan Control Pada Dialog&lt;/strong&gt;&lt;br /&gt;Disini akan dibahas tentang cara menggunakan control pada EVC.&lt;br /&gt;Setelah pembuatan dialog dengan menggunakan App Wizard, anda dapat menambahkan Control pada dialog yang baru dibuat dengan berpindah ke mode Editor. Pada jendela sebelah kiri pilih Tab ‘ResourceView’ , klik dua kali pada resource ‘Dialog’ lalu klik dua kali lagi pada tulisan&lt;br /&gt;‘IDD_POCKETPCDIALOG_DIALOG’.&lt;br /&gt;Jendela yang aktif / sebelah kiri akan berpindah ke mode desain dialog.&lt;br /&gt;Buatlah dialog yang berisi kumpulan control seperti dibawah ini :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/6.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/6.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pertama tama, masukkan control yang akan digunakan dari toolbox ‘Control’ lalu tempelkan control tersebut pada dialog. Setiap control mempunyai ID/penanda yang unik pada setiap Aplikasi. Untuk merubah ID pada control, klik kanan pada control tersebut lalu pilih ‘Properties’, setelah muncul window yang menampilkan atribut dari control tersebut, ganti nama ID-nya seperti pada gambar diatas.&lt;br /&gt;Penamaan ID tergantung dari programmer tetapi sebaiknya ID tersebut mempunyai penanda yang konsisten bahwa ID tersebut berupa Tombol, List Box, Label, dsb.&lt;br /&gt;Setelah selesai, kita akan memberi variabel kepada control tersebut agar kita dapat mengaksesnya&lt;br /&gt;dengan mudah pada pemrogramannya. Pilih menu ‘View’ pada menu utama lalu pilih ‘ClassWizard...&lt;br /&gt;Ctrl + W’. Menu tersebut juga dapat diakses dengan meng klik kanan pada dialog tersebut lalu pilih&lt;br /&gt;‘ClassWizard…’. Setelah muncul jendela Class Wizard, pilih tab ‘Member Variables’.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/7.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Untuk menambahkan variable pada control yang telah dibuat, pilih ID ‘IDC_BTN_TAMBAH’ lalu klik tombol ‘Add Variable’ disebelah kanan jendela.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pada kolom ‘Member variable name:’ isi nama variable yang akan dialokasikan pada control. Disini nama variablenya m_btnTambahItem. Pada Wizard, EVC akan menambahkan kata ‘m_’ pada setiap variable yang akan ditambahkan untuk menandakan bahwa variable ini akan digunakan pada dialog dengan jenis variabel Public (bisa diakses dari luar).&lt;br /&gt;Penamaan tersebut juga dapat dirubah oleh programmer tetapi sebaiknya penamaan variabel tersebut mengikuti anjuran yang telah baku dalam pembuatan aplikasi dengan EVC.&lt;br /&gt;&lt;br /&gt;Dialog ini juga menampilkan pilihan ‘Category’ yaitu menandakan&lt;br /&gt;bahwa nama variabel ini berjenis Control dan Control ini turunan / inheritance dari class ‘CButton’ yang berarti tombol tersebut berupa class yang mempunyai sifat yang sama dengan class ‘CButton’.&lt;br /&gt;&lt;br /&gt;Kita akan menambahkan variabel pada control selanjutnya yaitu pada ID ‘IDC_EDIT_ITEM’, lakukan hal yang sama seperti sebelumnya. Pada control ini, kita akan menamakan variabel tersebut ‘m_edtNamaItem’. Disini kategori variabelnya berjenis ‘Value’ dengan tipe CString atau teks, dengan&lt;br /&gt;variabel jenis ‘Value’ kita hanya mengakses variabel teks tersebut secara langsung tanpa melalui class control.&lt;br /&gt;&lt;br /&gt;Cara ini dilakukan jika aplikasi hanya mengambil/mengisi teks tersebut dengan cara yang lebih&lt;br /&gt;sederhana.&lt;br /&gt;Pada variabel selanjutnya, beri nama variabel tersebut ‘m_lbKumpulanItem’ dengan kategori control dan turunan dari class ‘CListBox’.&lt;br /&gt;Setelah selesai klik tombol ‘OK’ untuk keluar dari jendela ‘MFC Class Wizard’. EVC akan&lt;br /&gt;menambahkan variabel – variabel yang telah dibuat kedalam dialog.&lt;br /&gt;&lt;br /&gt;Untuk menambahkan action sewaktu tombol ‘Tambahkan ke listbox’, klik dua kali pada tombol tersebut, EVC akan menampilkan nama fungsi yang akan dibuat. Biarkan nama fungsinya ke nama standard, lalu klik tombol ‘OK’ untuk menambah &amp; merubah isi fungsi tersebut.&lt;br /&gt;Tambahkan listing kode dibawah ini :&lt;br /&gt;&lt;br /&gt;&lt;em&gt;// start code&lt;br /&gt;UpdateData();&lt;br /&gt;m_lbKumpulanItem.AddString(m_edtNamaItem);&lt;br /&gt;// end code&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;Baris ‘UpdateData()’ mempunyai fungsi untuk menyimpan data yang tersimpan pada EditBox ke&lt;br /&gt;variabel m_edtNamaItem yang telah dialokasikan.&lt;br /&gt;Kembali ke mode desain dialog, kita akan menambahkan action ketika item pada listbox dipilih. Klik&lt;br /&gt;kanan pada ListBox lalu pilih menu ‘Events…’&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/8.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/8.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pada jendela kiri pilih ‘LBN_SELCHANGE’ lalu klik tombol ‘Add and Edit’ untuk menambahkan&lt;br /&gt;fungsi tersebut.&lt;br /&gt;Tambahkan listing kode dibawah ini :&lt;br /&gt;&lt;br /&gt;&lt;em&gt;// start code&lt;br /&gt;m_lbKumpulanItem.GetText(m_lbKumpulanItem.GetCurSel(),&lt;br /&gt;m_edtNamaItem);&lt;br /&gt;UpdateData(FALSE);&lt;br /&gt;// end code &lt;/em&gt;&lt;br /&gt;code diatas mengambil teks dari listbox lalu menyimpannya kedalam variabel ‘m_edtNamaItem’. Pada&lt;br /&gt;baris selanjutnya fungsi UpdateData(FALSE) merupakan kebalikan dari fungsi yang ditulis pertama kali.&lt;br /&gt;Fungsi ini berfungsi untuk menampilkan variabel ‘m_edtNamaItem’ agar tampil pada layar/dialog.&lt;br /&gt;&lt;br /&gt;Terakhir, kita akan menambahkan fungsi untuk menambah item pada listbox sewaktu aplikasi dimulai.&lt;br /&gt;Pada jendela Workspace di sebelah kiri, pilih tab ‘ClassView’ lalu pada bagian ‘CPocketPcDialogDlg’&lt;br /&gt;klik dua kali pada ‘OnInitDialog()’. Fungsi tersebut dipanggil pertama kali sewaktu aplikasi dijalankan dan sebelum Dialog dimunculkan pada layar.&lt;br /&gt;&lt;br /&gt;Dibawah baris ‘// TODO: Add extra initialization here’ tambahkan baris seperti dibawah ini :&lt;br /&gt;&lt;br /&gt;&lt;em&gt;// start code&lt;br /&gt;CString sNamaItem = _T("item no :");&lt;br /&gt;for(int i = 0; i &lt;&gt;&lt;br /&gt;{&lt;br /&gt;CString sNoItem;&lt;br /&gt;sNoItem.Format(_T("%d"),i);&lt;br /&gt;m_lbKumpulanItem.AddString(sNamaItem + sNoItem);&lt;br /&gt;}&lt;br /&gt;// end code&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;Perlu diingat bahwa teks pada Pocket PC menggunakan karakter UNICODE. Karakter UNICODE&lt;br /&gt;tersebut ditandai dengan fungsi “_T”. Fungsi tersebut akan menambahkan 5 tulisan pada listbox ketika aplikasi dimulai.&lt;br /&gt;&lt;br /&gt;Untuk menjalankannya, kita akan menggunakan Emulator Pocket PC 2003 yang telah diinstall&lt;br /&gt;sebelumnya. Pada bagian ‘WCE Configuration’ pilih ‘Win32(WCE emulator) debug’ lalu set targetnya ke ‘POCKET PC 2003 Emulator’.&lt;br /&gt;Lalu jalankan aplikasi tersebut dengan memilih tombol tanda seru ‘!’ di sebelah kanan.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/9.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/9.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tampilan akhir yang akan muncul di Pocket PC akan seperti dibawah ini :&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/10.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/10.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Menutup aplikasi dilakukan dengan menekan tombol ‘OK’&lt;br /&gt;disebelah kanan atas aplikasi. Perlu diketahui bahwa aplikasi&lt;br /&gt;yang berbasis Dialog akan menutup aplikasi setelah tombol&lt;br /&gt;‘OK’ dipilih, berbeda dengan aplikasi yang berbasis&lt;br /&gt;Document yang akan non aktif/resident setelah tombol ‘OK’&lt;br /&gt;dipilih.&lt;br /&gt;Selamat, anda telah membuat aplikasi pertama untuk Pocket&lt;br /&gt;PC !!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sumber :&lt;br /&gt;&lt;a href="http://www.ilmukomputer.com/berseri/riki-pocketpc/index.php"&gt;http://www.ilmukomputer.com/berseri/riki-pocketpc/index.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115190067883313059?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115190067883313059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115190067883313059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115190067883313059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115190067883313059'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/aplikasi-pocket-pc-dengan-e-visual-c.html' title='Aplikasi Pocket PC dengan E-Visual C++'/><author><name>Eva Paulina Tjendra</name><uri>http://www.blogger.com/profile/16426272137657745673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115189595261922478</id><published>2006-07-02T19:49:00.000-07:00</published><updated>2006-07-02T20:05:52.730-07:00</updated><title type='text'>MAX Mobile Application Xpert</title><content type='html'>Riadi Wirawan&lt;br /&gt;203114940&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.medc2006.com/"&gt;MEDC (Mobile Embedded Developer Conference)&lt;/a&gt; yaitu event international membahas teknologi mobile devices windows mobile 5.0. Atas undangan Microsoft Regional Singapore, akhirnya mereka mengundang &lt;a href="http://max-studio.net/"&gt;MAX &lt;/a&gt;untuk turut serta berpartisipasi dalam acara tersebut. ini adalah oppurtunities yang harus dimanfaatkan semaksimal mungkin.&lt;br /&gt;MAX diundang karena MAX merupakan salah satu developer indonesia yang membuat games aplikasi menggunakan platform windows di mobile devices (sekarang disebutnya windows mobile 5.0, dulu disebutnya windows PPC 2003 atau 2004 atau yang lebih kuno lagi dulu disebut windows CE)&lt;br /&gt;Nanti disana kita bisa lebih ekspose tentang MAX dihadapan audience yang terdiri dari developer / business praktisi / manufacture handset (vendor) atau siapapun yang bisnisnya berhubungan dengan industri mobile teknologi. mudah2an nggak cuma datang, ngomong, pulang trus balik ke indo lagi tanpa ada business deal. I hope , we can go there, making impressed speech, finish, discussing with 1 or more prospectous clients, and make it deal there, balik ke indo udah pegang approval projects at least above one hundred thousand dollars...amiinnn.....&lt;br /&gt;harusnya sih ada 1 atau 2 vendor handset (misalnya Dopod, O2, HpIpaq, Toshiba apalagi ya) yang berminat buat dibuatkan content oleh MAX. Atau ada corporate consumer goods yang berminat bikin advergaming di mobile devices, atau mudah2an ada corporat business yang berminat menggunakan teknologi mobile devices untuk memperbaiki kinerja bisnis/meningkatkan sales menggunakan aplikasi mobiel devices, atau ada corporate banking yang berminat menyediakan aplikasi untuk user tidak hanya transaksi banking tapi ada unsur hiburannya. semuanya memang baru harapan, tapi kalau ternyata ada salah satu ada yang deal, kita makan2 ya........&lt;br /&gt;&lt;br /&gt;Bikin games lalu dijual di Indonesia dan mengharapkan profit is almost impossible, kalau mau bikin games ya dijual dipasaran luar.., that's right...that's all we do selama hampir 2 tahun terakhir...., tapi masih penasaran juga..., mungkin nggak ya games yang dibuat ini bisa dikenal juga di dalam negeri. tapi kalau dijual di dalam negeri...bagaimana bisa mengharapkan profit..., kalaupun gamesnya bagus...pasti nanti dimangga dua sudah tersedia....dengan harga standard 20 ribu.........based on actual facts..., maka kitapun menemukan alternatif solusi..., bagaimana games yang semakin banyak dibajak....justru menguntungkan semua pihak.....??....ayo ...solusi apa gerangan yang bisa menghasilkan win-win solution antara pembeli, pembajak dan developer ??..., dibajak kok malah senang ?..pembeli senang, pembajak senang dan developer senang.....&lt;br /&gt;Inilah solusi yang kita harapkan dapat memberikan win-win untuk semua pihak....,....MAX Mobile Application Xpert membuat games untuk dijual kepada sponsor bukan dijual langsung ke end-user..., semua game developer membutuhkan publisher.....,Kami menganggap publisher sebagai suatu corporate perusahaan yang berminat memanfaatkan game kami sebagai media advertising...., Alternatif beriklan di Radio,TV,Koran,Majalah,Billboard adalah melalui Games......, pertimbangkan dari segi efektivitasnya...... berapa audience pemakai dan peminat games PC di Indonesia...? berapa banyak waktu yang dihabiskan orang ? di depan TV atau di depan komputer ? berapa lama life-time spot iklan di TV,Radio,Majalah,SuratKabar Billboard ?&lt;br /&gt;Kenapa tidak mencoba beriklan melalui media games ?...dibawah ini adalah screen shoot pengandaian, kalau saja ada corporate yang bersedia mensponsori our games. ya kalau aja ada....&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/untitled.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/untitled.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/untitled2.jpg"&gt;&lt;/a&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/untitled2.jpg"&gt;&lt;/a&gt;&lt;a href="http://photos1.blogger.com/blogger/6236/3183/1600/untitled2.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6236/3183/320/untitled2.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;nama2 BCA dan coca-cola diatas ini cuma pengandaian aja lho...andai...saja....nggak terbatas.....dengan nama 2 corporate ini lho....siapa aja..., boleh kok...kalau berminat.....games ini didevelop serius dgn C++ oleh Eric Gunawan , modelling 3D yang amat sangat detail oleh Cin Hartono Widodo, hasil porting dari games yang pernah didevelop di pocket PC oleh Ricky suryo dan Johnson, efek2 ledakan oleh Alex...,landscape grafis desain oleh Ryan.Dengan games yang seperti ini, maka semakin banyak digandakan/bajak..., maka yang untung ya pasti perusahaan yang pasang sponsor digames ini, pembajaknya juga seneng..., MAX juga bakalan senang...karena tingkat popularitas makin naik gara2 dibajak.....so???..... hubungi kami untuk pemesanan tempat spot iklan di &lt;a href="mailto:kukuh@max-studio.net"&gt;kukuh@max-studio.net&lt;/a&gt; atau &lt;a href="mailto:ricky@max-studio.net"&gt;ricky@max-studio.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a id="_7369223e8c3a109_HomePageDays_DaysList__ctl2_DayItem_DayList__ctl0_TitleUrl" href="http://blogs.netindonesia.net/kukuhtw/archive/2006/04/15/9332.aspx"&gt;Our gaming software is not only game but also as advertising media&lt;/a&gt;&lt;br /&gt;MAX Mobile Application Xpert, sebuah team yang fokus pada pengembangan game pada platform Pocket PC, SmartPhones dan CellPhones, kali ini membuat games untuk platform PC. Programming C++ Dibuat oleh Eric Gunawan dan 3D Modelling oleh Hartono Widodo aka Cin, Graphics Design oleh Alex Sukandar. Game akan direlease bulan depan. MAX terdiri dar 5 orang, berlatar belakang teknikal programming, 3D modelling dan design graphics. Setelah merasakan 'keras' dan'sulit' nya berbisnis di industri gaming, maka sejak 3 bulan terakhir kami menemukan “sedikit harapan“ untuk survive di industri ini dengan cara kolaburasi dengan industri media entertainment dan advertising. Tidak cukup hanya memiliki kemampuan teknikal programming, tapi harus mampu juga memiliki kemampuan non-teknis seperti strategy business, marketing, communication dan Public Relation&lt;br /&gt;1. Game ini akan diedarkan secara gratis, dengan minimal target pengguna 100.000 , target pengguna adalah casual gamer berusia 15tahun s/d 30tahun. distribusi penyebaran melalui media internet, warnet, mall, plaza, sekolah ,toko buku dan majalah dan toko2 komputer.&lt;br /&gt;2. Untuk menutupi cost development, kami bekerja sama dengan sponsorship. Para sponsor dapat meletakkan logo Brand/produk, animasi video clip, informasi advertorial dalam game berjudul “Burning armor code E” ini. Sampai saat ini (14 April 2006) kami masih menerima permintaan untuk pemasangan advertising pada game ini.&lt;br /&gt;3. Seperti halnya dengan industri media seperti TV yang memiliki content acara2 menarik dan mampu mendatangkan spot iklan, kami juga melihat game karya kami sebagai content unique dan mendatangkan peminat untuk memasang iklan pada game ini.&lt;br /&gt;Untuk persiapan pola pendistrbusian , kami memerlukan informasi&lt;br /&gt;1. Daftar perusahaan pencetak CD dan cover CD untuk jumlah 1000an dan Contact Person-nya2. Contact person toko buku Gramedia, Gunung Agung, Kharisma. Kami akan mencoba mendekati salah satu dari mereka untuk bekerja sama mendistribusikan game ini ke pengunjung toko buku mereka3. Contact person redaktur majalah yang memiliki target pembaca berumur 17-30an tahun.4. Contact person pengelola gedung mall/plasa. kami akan mencoba untuk memberikan game ini ke pengunjung mall./plaza5. Contact person untuk calon pemasang iklan yang berminat untuk pesan spot iklan/advertorial/videoclip di game ini&lt;br /&gt;&lt;br /&gt;sumber:&lt;br /&gt;&lt;a href="http://maxonne.blogspot.com/"&gt;http://maxonne.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://max-studio.net/"&gt;http://max-studio.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115189595261922478?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115189595261922478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115189595261922478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115189595261922478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115189595261922478'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/max-mobile-application-xpert.html' title='MAX Mobile Application Xpert'/><author><name>Eva Paulina Tjendra</name><uri>http://www.blogger.com/profile/16426272137657745673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115180203369953003</id><published>2006-07-01T17:57:00.000-07:00</published><updated>2006-07-01T18:00:33.833-07:00</updated><title type='text'>Dari 3 Menjadi 1 Dengan smsZipper</title><content type='html'>Hendra Poerwanto&lt;br /&gt;200113922&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pengertian&lt;/span&gt;&lt;br /&gt;smsZipper adalah sebuah tool yang digunakan untuk mengkompres pesan text (SMS) pada HP yang dipatenkan oleh University of Aalborg.&lt;br /&gt;Tool ini dapat digunakan untuk mengkompres 2 atau 3 SMS menjadi satu SMS. smsZipper merupakan tool yang dikembangkan dengan J2ME dan bekerja pada semua telepon yang support java.&lt;br /&gt;Adapun kebutuhan minimum yang diperlukan adalah sebagai berikut :&lt;br /&gt;- MIDP 2.0&lt;br /&gt;- CLDC 1.0 atau CLDC 1.1&lt;br /&gt;Disarankan untuk menyisakan tempat memori kosong sebesar 500 kb pada telepon sebelum menginstal aplikasi.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cara Kerja&lt;/span&gt;&lt;br /&gt;Supaya dapat dijalankan, aplikasi yang ada harus diinstal baik pada pengirim maupun penerima telepon. smsZipper memungkinkan user untuk menulis sms dan pada saat siap untuk dikirimkan, smsZipper akan mengkompres text secara otomatis dan mengirimkannya.&lt;br /&gt;Pada saat penerima mendapatkan pesan yang telah terkirim pada port smsZipper, maka aplikasi akan berjalan secara otomatis, dan men-dekompres text yang ada. Kemudian akan muncul pesan yang memberitahu user bahwa ada pesan baru yang masuk.&lt;br /&gt;Pada tool ini tersedia berbagai macam package dengan bahasa yang berbeda-beda. Disarankan untuk tidak menginstal lebih dari satu package pada mobile yang sama. Tingkat kompresi dari text sangat tergantung pada isi dan bahasa dari package yang digunakan harus sama dengan bahasa yang dipakai untuk menulis sms.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Instalasi&lt;/span&gt;&lt;br /&gt;Tool ini dapat didownload secara bebas untuk pribadi, di &lt;a href="http://smszipper.kom.aau.dk"&gt;smsZipper&lt;/a&gt;&lt;br /&gt;Setelah didownload, terdapat 2 cara untuk menginstalnya ke dalam mobile phone yang ada, yaitu :&lt;br /&gt;- Menggunakan Bluetooth&lt;br /&gt;- Menggunakan program yang telah disediakan pada telepon.&lt;br /&gt;Menginstal smsZipper V0.7 melalui Bluetooth&lt;br /&gt;Jika kita menggunakan Bluetooth untuk mengirimkan aplikasi ke telepon, maka tinggal klik kanan pada file yang telah didownload, kemudian -&gt; send to -&gt; Bluetooth device.&lt;br /&gt;Pilih telepon yang digunakan pada list yang ada dan kirimkan filenya. Tool tersebut akan diterima oleh telepon sebagai "pesan yang masuk".&lt;br /&gt;Menginstal smsZipper V0.7 menggunakan program yang ada pada telepon&lt;br /&gt;Jar file yang ada dapat dikirimkan melalui Bluetooth, IRDA, atau koneksi kabel menggunakan program dari telepon seperti PCSuite dari Nokia. Langkah yang sama mungkin dibutuhkan untuk jenis telepon yang lain. Pada contoh ini menggunakan Nokia 6630.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;smsZipper V0.7 Feature&lt;/span&gt;&lt;br /&gt;Di bawah ini merupakan beberapa tampilan GUI dari smsZipper pada Nokia 6630 :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6898/3162/1600/1.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6898/3162/320/1.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Setting Bahasa dan Panjang Maximum Sms&lt;/span&gt;&lt;br /&gt;smsZipper support package dengan berbagai macam bahasa. Setiap package terdiri dari 2 bahasa, kecuali untuk bahasa Inggris. Melalui menu "Setting Form" dapat mengubah bahasa dan panjang maksimum dari sms. Secara default nilainya adalah 160, tetapi mungkin berbeda pada telepon yang lain.&lt;br /&gt;Untuk menyimpan perubahan tekan tombol "Save". Di bawah ini merupakan gambar dari Setting Form :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6898/3162/1600/Formm.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6898/3162/320/Formm.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Statistik&lt;/span&gt;&lt;br /&gt;Form statistik ini memberikan informasi seperti yang terlihat pada gambar di bawah :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6898/3162/1600/Stat.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6898/3162/320/Stat.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Terdapat 2 macam informasi :&lt;br /&gt;- Memory Status : Informasi tentang space yang digunakan oleh smsZipper dan space yang masih kosong.&lt;br /&gt;- SMS Status    : Informasi tentang nomor total sms yang terkirim, dan total sms yang tersimpan menggunakan smsZipper.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sumber :&lt;/span&gt;&lt;br /&gt;&lt;a href="http://kom.aau.dk/project/mobilephone/Documents/README-ENG.pdf"&gt;http://kom.aau.dk/project/mobilephone/Documents/README-ENG.pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kom.aau.dk/project/mobilephone/index.php?section=12"&gt;http://kom.aau.dk/project/mobilephone/index.php?section=12&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115180203369953003?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115180203369953003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115180203369953003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115180203369953003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115180203369953003'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/dari-3-menjadi-1-dengan-smszipper.html' title='Dari 3 Menjadi 1 Dengan smsZipper'/><author><name>hendra poerwanto</name><uri>http://www.blogger.com/profile/07504742655585836199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115175211068984621</id><published>2006-07-01T04:07:00.000-07:00</published><updated>2006-07-01T04:34:18.246-07:00</updated><title type='text'>Library Grafik Berkecepatan Tinggi untuk WinCE pada Pocket PC</title><content type='html'>Nama : Charles Mutanto&lt;br /&gt;NRP : 201114197&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pendahuluan&lt;/strong&gt;&lt;br /&gt;CEDraw adalah library grafik berkecepatan tinggi dalam WinCE. CEDraw bergantung pada GAPI. Kode ini ditulis dalam C++ yang menggunakan VC++ yang di-embed untuk mengkompilasinya. Percobaan dilakukan pada suatu iPaq h3600 dengan WinCE 3.0. CEDraw menggunakan buffer ganda dan teknologi mengisi buffer video secara langsung untuk meningkatkan kecepatan penggambaran. Dengan kepemilikan aritmetik grafik, kecepatan penggambaran jauh lebih cepat daripada WinGDI.&lt;br /&gt;CE Draw mendukung fungsi-fungsi ini:&lt;br /&gt;a. Draw Pixel&lt;br /&gt;b. Fill Screen&lt;br /&gt;c. Draw Line,HLine,VLine&lt;br /&gt;d. Draw Polyline&lt;br /&gt;e. Draw Polygon&lt;br /&gt;f. Draw Rectangle&lt;br /&gt;g. Fill Rectangle (dengan dukungan alpha blend)&lt;br /&gt;h. Fill Polygon&lt;br /&gt;i. Draw Bitmap (mendukung format Bmp,Gif,Jpg, mendukung alpha blend)&lt;br /&gt;j. Draw Text (memiliki file font, mendukung Bahasa Cina, mendukung teks gdi)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bagaimana menggunakan CEDraw&lt;/strong&gt;&lt;br /&gt;Sebelum menggunakan library CEDraw, beberapa file yang mendukung harus di-copy-kan dalam sistem.&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Copy-kan dll ke directory sistem WinCE&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;Jika menggunakan mode emulasi, copy-kan dua dll dalam directory …\CEGraph\DLL\X86Em (gx.dll dan cegl.dll) ke directory sistem windows emulasi, selalu dalam directory D:\Windows CE Tools\wce300\MS Pocket PC\emulation\palm300\windows, lalu copy-kan file Hzk16 dalam directory …\CEGraph\Res ke directory root WinCE, selalu dalam directory D:\Windows CE Tools\wce300\MS Pocket PC\emulation\palm300.&lt;br /&gt;Jika menggunakan sistem Arm, copy-kan dua dll dalam directory …\CEGraph\DLL\Arm (gx.dll dan cegl.dll) ke directory sistem windows Pocket PC. Lalu copy-kan file HZK16 ke directory root sistem.&lt;br /&gt;Ada 4 langkah untuk menggunakan CEDraw:&lt;br /&gt;&lt;strong&gt;Langkah 1: Directory&lt;/strong&gt;&lt;br /&gt;Set directory including ke …\CEGraph\Include&lt;br /&gt;Dan directory lib ke …\CEGraph\Lib\X86Em (jika menggunakan sistem emulasi) atau …\CEGraph\Lib\Arm (jika menggunakan pocketpc)&lt;br /&gt;Buka project setting à Link à Object/library Modules&lt;br /&gt;Tambahkan CEGL.lib&lt;br /&gt;&lt;strong&gt;Langkah 2: Menyertakan file header&lt;/strong&gt;&lt;br /&gt;Menyertakan file header grafik CEDraw: CEGL.h&lt;br /&gt;#include "stdafx.h"&lt;br /&gt;#include "SDKSample.h"&lt;br /&gt;#include &lt;commctrl.h&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;cegl.h&gt;// menyertakan library CE Graphics&lt;br /&gt;&lt;strong&gt;Langkah 3: Menciptakan class CE Draw&lt;/strong&gt;&lt;br /&gt;// menciptakan objek CE Draw&lt;br /&gt;CCEDraw m_ceDraw;&lt;br /&gt;&lt;br /&gt;// inisialisasi sesudah CreateWindow()&lt;br /&gt;&lt;br /&gt;BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;HWND hWnd;&lt;br /&gt;TCHAR szTitle[MAX_LOADSTRING]; // teks title bar&lt;br /&gt;TCHAR szWindowClass[MAX_LOADSTRING]; // nama class window&lt;br /&gt;&lt;br /&gt;hInst = hInstance; // menyimpan instance handle dalam variabel global&lt;br /&gt;// inisialisasi string global&lt;br /&gt;LoadString(hInstance, IDC_SDKSAMPLE, szWindowClass, MAX_LOADSTRING);&lt;br /&gt;MyRegisterClass(hInstance, szWindowClass);&lt;br /&gt;LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);&lt;br /&gt;hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,&lt;br /&gt;0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),&lt;br /&gt;NULL, NULL, hInstance, NULL);&lt;br /&gt;if (!hWnd)&lt;br /&gt;{&lt;br /&gt;return FALSE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// menciptakan library CE Grahpics&lt;br /&gt;m_ceDraw.Create( hWnd );&lt;br /&gt;&lt;br /&gt;ShowWindow(hWnd, nCmdShow);&lt;br /&gt;UpdateWindow(hWnd);&lt;br /&gt;&lt;br /&gt;return TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;strong&gt;Langkah 4: Menggunakan CE Draw secara bebas&lt;/strong&gt;&lt;br /&gt;LRESULT CALLBACK WndProc(HWND hWnd, UINT message,&lt;br /&gt;WPARAM wParam, LPARAM lParam)&lt;br /&gt;{&lt;br /&gt;HDC hdc;&lt;br /&gt;int wmId, wmEvent;&lt;br /&gt;PAINTSTRUCT ps;&lt;br /&gt;TCHAR szHello[MAX_LOADSTRING];&lt;br /&gt;&lt;br /&gt;switch (message)&lt;br /&gt;{&lt;br /&gt;case WM_PAINT:&lt;br /&gt;RECT rt;&lt;br /&gt;hdc = BeginPaint(hWnd, &amp;ps);&lt;br /&gt;GetClientRect(hWnd, &amp;rt);&lt;br /&gt;LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);&lt;br /&gt;DrawText(hdc, szHello, _tcslen(szHello), &amp;rt,&lt;br /&gt;DT_SINGLELINE DT_VCENTER DT_CENTER);&lt;br /&gt;EndPaint(hWnd, &amp;ps);&lt;br /&gt;&lt;br /&gt;Render(); // render layar&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Render( void )&lt;br /&gt;{&lt;br /&gt;POINT pt[5] ={ { 140, 100 }, { 70,120 }, { 104, 150 },&lt;br /&gt;{ 210, 122 }, { 75, 200 } };&lt;br /&gt;&lt;br /&gt;// menciptakan objek ce pen...&lt;br /&gt;CCEPen cePen;&lt;br /&gt;// mengubah warna RGB ke warna yang didukung oleh CE&lt;br /&gt;cePen.CreatePen( 1, 1, m_ceDraw.ConvertColor( 255, 0, 0 ) );&lt;br /&gt;&lt;br /&gt;// mengarahkan ke sistem grafik&lt;br /&gt;m_ceDraw.SetGDIObject( &amp;cePen );&lt;br /&gt;&lt;br /&gt;// menciptakan objek ce brush...&lt;br /&gt;CCEBrush ceBrush1, ceBrush2;&lt;br /&gt;ceBrush1.CreateBrush( 1, m_ceDraw.ConvertColor( 200, 200, 100 ), 1 );&lt;br /&gt;ceBrush2.CreateBrush( 1, m_ceDraw.ConvertColor( 0, 240, 0 ), 1 );&lt;br /&gt;&lt;br /&gt;// mengarahkan ke sistem grafik&lt;br /&gt;m_ceDraw.SetGDIObject( &amp;ceBrush1 );&lt;br /&gt;&lt;br /&gt;// mulai menggambar&lt;br /&gt;m_ceDraw.BeginDraw();&lt;br /&gt;m_ceDraw.Clear( (DWORD)255 ); // membersihkan layar menggunakan warna putih&lt;br /&gt;&lt;br /&gt;m_ceDraw.DrawLine( 1, 1, 100, 100 ); // menggambar garis&lt;br /&gt;&lt;br /&gt;m_ceDraw.DrawRect( 10, 10, 110, 80 ); // menggambar kotak&lt;br /&gt;&lt;br /&gt;m_ceDraw.FillRect( 30, 30, 50, 50 ); // mengisi kotak&lt;br /&gt;&lt;br /&gt;m_ceDraw.SetGDIObject( &amp;ceBrush2 ); // memilih warna kuas yang lain&lt;br /&gt;m_ceDraw.FillRect( 40, 40, 100, 100, 0.4 ); // mengisi kotak dengan alpha blend&lt;br /&gt;&lt;br /&gt;m_ceDraw.FillPolygon( pt, 5 ); // menggambar poligon&lt;br /&gt;m_ceDraw.SetGDIObject( &amp;ceBrush1 ); // memilih warna kuas yang lain&lt;br /&gt;m_ceDraw.FillPolygon( pt, 5, 40, 40 ); // menggambar poligon&lt;br /&gt;&lt;br /&gt;CCEBitmap ceBmp1,ceBmp2;&lt;br /&gt;&lt;br /&gt;// menampilkan gambar Gif dari file&lt;br /&gt;ceBmp1.LoadBitmap( &amp;m_ceDraw, L"windows\\wcelogo1.gif" );&lt;br /&gt;ceBmp2.LoadBitmap( &amp;m_ceDraw, L"windows\\welcomehead.gif" );&lt;br /&gt;&lt;br /&gt;// menggambar bitmap dengan alpha blend&lt;br /&gt;ceBmp2.BitBlt( &amp;m_ceDraw, 1, 80, 0, 0, 0, 0, SRCALPHA, 0.6f );&lt;br /&gt;ceBmp1.BitBlt( &amp;m_ceDraw, 1, 200, 0, 0, 0, 0, SRCALPHA, 0.6f );&lt;br /&gt;&lt;br /&gt;POINT ptText = { 1, 300 };&lt;br /&gt;// menggambar teks dengan warna pena&lt;br /&gt;m_ceDraw.DrawText( &amp;ptText, "Hello CE Graph!", 16, 1 );&lt;br /&gt;&lt;br /&gt;// selesai menggambar&lt;br /&gt;m_ceDraw.EndDraw();&lt;br /&gt;m_ceDraw.Flip(); // mengembalikan buffer back ke buffer video&lt;br /&gt;}&lt;br /&gt;&lt;strong&gt;Langkah 5: Jangan lupa untuk meluncurkan CEDraw:&lt;/strong&gt;&lt;br /&gt;case WM_DESTROY:&lt;br /&gt;m_ceDraw.Release();&lt;br /&gt;PostQuitMessage(0);&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tip:&lt;/strong&gt;&lt;br /&gt;Library grafik ini tidak dapat digunakan secara langsung dalam suatu frame yang dibangkitkan oleh MFC appwizard. Karena library grafik ini mempunyai dua window, yang pertama adalah frame window, yang lain adalah child window. Penulis sudah menulis suatu kerangka kerja yang mendukung MFC. Jika seorang yang ingin menggunakan library grafik ini dalam MFC, harap kirim e-mail ke penulis.&lt;br /&gt;CEGLDLLPrj adalah project dll dari library CE Graphics. Sangat disarankan untuk yang ingin menggunakan library ini, menggunakan project untuk membentuk file-file DLL dan Lib milik sendiri. Untuk membentuk project ini, pengguna dapat mengeset directory include and directory lib dengan ...\CEGraph\include dan ...\CEGraph\lib (sama seperti langkah 1: Directory).&lt;br /&gt;SDKSample Project adalah contoh yang TIDAK menggunakan MFC. Bentuklah library grafik ini sesudah mengeset dan meng-copy file-file library dan DLL.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/ce/CEGraph.asp"&gt;http://www.codeproject.com/ce/CEGraph.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115175211068984621?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115175211068984621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115175211068984621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115175211068984621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115175211068984621'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/library-grafik-berkecepata_115175211068984621.html' title='Library Grafik Berkecepatan Tinggi untuk WinCE pada Pocket PC'/><author><name>ch4rl35</name><uri>http://www.blogger.com/profile/09781489871053328794</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115174748872852616</id><published>2006-07-01T02:02:00.000-07:00</published><updated>2006-07-02T20:35:37.480-07:00</updated><title type='text'>Akses Mobile Cepat dan Mudah untuk Pocket Outlook Data</title><content type='html'>&lt;strong&gt;Yaufred Tambora&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;(202114726)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Akses Mobile Cepat dan Mudah untuk Pocket Outlook Data&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Untuk perkembangan fungsi alat baru supaya lebih berguna, alat tersebut harus mudah dijalankan, menyediakan fungsi penting untuk di gunakan di tangan, dan berjalan dengan baik. Sebagai pengembang Windows Mobile, saya percaya penambahan dari kelas pengaturan untuk akses dan berinteraksi dengan data seperti PocketOutlook (contacts, tasks, dan appointments) sesuai dengan semua kriteria diatas.&lt;br /&gt;&lt;br /&gt;Pencipta yang membangun .NET Compact Framework aplikasi untuk Pocket PCs dan Smartphones sudah terlalu sering menyediakan akses untuk data Pocket Outlook. Melihat kembali, ini berarti penggunaan P/Invoke maupun penelpon pengguna DLLs atau mengakses langsung penyimpanan di dalam data, atau memperoleh kode pengaturan pengetahuan kode third party. Hasilnya meningkatkan waktu perkembangan dan/atau menaikkan ongkos. Dengan pengaturan kelas baru, penemu C# dan VB.NET Compact framework dengan cepat dapat mengakses informasi penting dan memodifikasi nya (jika perlu) tanpa penambahan produk.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ABCs dari akses Pocket Outlook&lt;/strong&gt;&lt;br /&gt;Penggunaan pengaturan kelas untuk Pocket Outlook, Anda membutuhkan:&lt;br /&gt;&lt;br /&gt;- Visual Studio 2005&lt;br /&gt;- Sebuah Windows Mobile versi %.0 (Pocket PC, edisi telepon Pocket PC ayau Smartphone)&lt;br /&gt;&lt;br /&gt;Pengaturan kelas baru tidak bisa digunakan oleh Windows Mobile 2003 edisi kedua atau yang lebih lama. Anda dapat menggunkana jika menggunakan Visual Studio 2005 untuk menciptkan .NET Compact Framework 1.0 atau 2.0 proyek yang dapat menguntungkan pengaturan kelas baru.&lt;br /&gt;&lt;br /&gt;Anda mesti melaksanakan hanya dengan beberapa langkah mudah untuk mengakses Pocket Outlook data dari Smart Device projek di Visual Studio 2005:&lt;br /&gt;&lt;br /&gt;1. menambah referensi untuk membuat kumpulan&lt;br /&gt;2. membuat sebuah contoh variable untuk sesi Pocket Outlook&lt;br /&gt;3. mengakses kumpulan kebutuhan dari informasi ( janji, tugas, penelepon)&lt;br /&gt;4. bekerja dengan kumpulan-kumpulan&lt;br /&gt;5. mengatur sesi objek Pocket Outlook&lt;br /&gt;&lt;br /&gt;Dengan melaksanakan cara-cara tadi, anda dapat meningkatkan akses terhadap banyak indormasi yang anda butuhkan.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Menambah Referensi untuk Projek anda&lt;/strong&gt;&lt;br /&gt;Dalam meningkatkan akses terhadap pengaturan kelas baru dari Pocket Outlook, anda di tuntut untuk menambah referensi untuk kumpulan dua .NET compact framework di projek anda. Anda akan menemukan .Microsoft.WindowsMobile.dll dan Microsoft.WindowsMobile.PocketOutlook.dll di dalam dialog referensi, sebagaimana di lampirkan di gambar 1.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.developer.com/img/2005/10/PocketOutlook1.jpg"&gt;&lt;img style="WIDTH: 320px; CURSOR: hand" alt="" src="http://www.developer.com/img/2005/10/PocketOutlook1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 1. Referensi penting untuk Pocket Outlook Access&lt;br /&gt;&lt;br /&gt;Dari gambar pengkodean, anda mengakses kelas hanya di Microsoft.WindowsMobile.Pocketutlook spasinama. Kumpulan lain dibutuhkan, tetapi, sebagai kumpulan PocketOutlook mempunyai ketergantungan pada tempat pemasangan pertama dari alat penghubung.&lt;br /&gt;&lt;br /&gt;PocketOutlook spasinama terdiri dari banyak kelas. Gambar 2 memperlihatkan beberapa kelas yang tersedia yang dapat kamu lihat di Visual Studio Object Browser.&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook2.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 2. PocketOutlook Namespace diperlihatkan di perncarian object&lt;br /&gt;&lt;br /&gt;Melihat kedepan, artikel ini menjelaskan beberapa class yang bersangkutan untuk permulaan.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Membuat sebuah Outlook Session Instance&lt;/strong&gt;&lt;br /&gt;Untuk pembangun yang bekerja di model objek untuk Microsoft Outlook d desktop, model objek Pocket Outlook terlihat sama. Objek hirarki dan tugas yang berhubungan dengan programming seperti dengan model objek adalah sama. Satu contoh dari langkah awal programming untuk mengakses data Pocket Outlook: membuat contoh dari sesi Outlook.&lt;br /&gt;Di contoh proyek, saya membuat sebuah bentuk yang berisi control ListView (disebut lvAppt) dimana saya secara pemograman berhubungan dengan informasi Appointment. Gambar 3 memperlihatkan layar dalam design mode.&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook3.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 3. Layar Appointents&lt;br /&gt;&lt;br /&gt;Seperti yang anda lihat, saya dapat mengatur control Listview menjadi 3 kolom untuk informasi yang berhubungan dengan janji. Saya menggunakan objek ListViewItem dan itu bekerja sama dengan kumpulan SubItems untuk menempati informasi ini.&lt;br /&gt;&lt;br /&gt;Untuk mempertahan sebuah contoh dari sesi PocketOutlook, saya membuat sebuah contoh variable dalam form class yang dinamakan AppSession:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;private&lt;/span&gt; &lt;span style="color:#000099;"&gt;OutlookSession&lt;/span&gt; AppSession;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Untuk peragaan, saya menambahkan kode pada bentuk pembangun (segera perhatikan pemanggilan di InitializeComponent method yang membuat contoh dari PocketOutlook Session) &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;public&lt;/span&gt; Form1()&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;{ &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent(); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Create an instance of the Pocket Outlook session&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AppSession = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#000099;"&gt;OutlookSession&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mengakses kumpulan Appointment&lt;/strong&gt;&lt;br /&gt;Objek PocketOutlook hirarki menyediakan cara yang mudah untuk mengakses kumpulan dari informasi tersebut. Kumpulan tersebut diperlihatkan melalui properties mewakili folder yang berisi kumpulan beberapa item. Mereka diakses langsung dari sesi OutlookSession. Biasanya objek ini digunakan sebagai berikut:&lt;br /&gt;&lt;br /&gt;- Appointments (OutlookSession.Appointments)&lt;br /&gt;- Tasks (OutlookSession.Tasks)&lt;br /&gt;- Contacts (OutlookSession.Contacts) &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Setiap dari kategory ini juga sudah bekerja sama dengan kumpulan objek dalan bentuk dari AppointmentCollection, TaskCollection, and ContactCollection. Dalam contok projek saya, saya membutuhkan untuk mengakses appointments. Jadi saya membuat sebuat contoh variable untuk menahan kumpulan Appointment (dinamakan AppAppts). Untuk mengakses kumpulan appointments, saya menggunakan metode ini:&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#006600;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;//Capture the AppointmentCollection into a variable&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;AppAppts = AppSession.Appointments.Items;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;br /&gt;Setelah anda memilik kumpulan tersebut, anda akan dapat mengakses item demi item menggunakan objek Appointment. Dalam projek saya, saya mengunakan objek ini berkonjungsi dengan sebuah foreach loopp untuk berjalan melewati kumpulan tersebut: &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;//We now iterate through the entire collection with a foreach, using&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;//an appointment object...&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#000099;"&gt;Appointment&lt;/span&gt; appt &lt;span style="color:#3333ff;"&gt;in&lt;/span&gt; AppAppts)&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;{ &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Create a ListViewItem object&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#000099;"&gt;ListViewItem&lt;/span&gt; (); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Add the appointment date to the ListViewItem, and the time and &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//subject to ListViewItem SubItems&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt.Text = appt.Start.ToShortDateString();&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt.SubItems.Add(appt.Start.ToShortTimeString());&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt.SubItems.Add(appt.Subject); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Add the ListViewItem to the ListView&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lvAppts.Items.Add(lviAppt);&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Perhatikan objek &lt;span style="font-size:78%;"&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/span&gt; untuk tasks dan objek &lt;span style="font-size:78%;"&gt;&lt;strong&gt;Contact&lt;/strong&gt;&lt;/span&gt; untuk contacts dapat digunakan fungsi yang sama. Setiap objek menyediakan akses programmatic ke semua properties yang dpt disimpan di tempat itu juga di dalam data penyimpanan Pocket Outlook. Gambar 4 memperlihatkan beberapa properties yang berhubungan dengan sebuah objek Task di dalam Objek Browser. &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook4.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook4.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 4. Penampilan Task Object di dalam Object Browser&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Menghapus Pocket Outlook Session Object&lt;/strong&gt;&lt;br /&gt;Ketika anda sudah melengkapi pengunaan dari data PocketOutlook, kamu harus menghapus sesi objek supaya mengosongkan resource. Untuk melakukan ini, panggil saja metode Dispose dari session instance:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;color:#006600;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;//Don't forget to close the PocketOutlook session when done!&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;AppSession.Dispose();&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Menjalankan Projek Yang Lengkap&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;Pengkodean lengkap seperti contoh projek dibawah ini:&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Data;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Drawing;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Text;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.WindowsMobile;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.WindowsMobile.PocketOutlook;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;namespace&lt;/span&gt; OutlookMobileAPI&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public partial class&lt;/span&gt; &lt;span style="color:#000099;"&gt;Form1 : Form&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/span&gt; &lt;span style="color:#000099;"&gt;OutlookSession&lt;/span&gt; AppSession; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/span&gt; &lt;span style="color:#000099;"&gt;AppointmentCollection&lt;/span&gt; AppAppts; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/span&gt; &lt;span style="color:#000099;"&gt;ListViewItem&lt;/span&gt; lviAppt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/span&gt; Form1() &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Create an instance of the Pocket Outlook session&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AppSession = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#000099;"&gt;OutlookSession&lt;/span&gt;(); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Capture the AppointmentCollection into a variable&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AppAppts = AppSession.Appointments.Items; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//We now iterate through the entire collection with a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//foreach, using &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//an appointment object...&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&lt;/span&gt; (&lt;span style="color:#000099;"&gt;Appointment&lt;/span&gt; appt &lt;span style="color:#3333ff;"&gt;in&lt;/span&gt; AppAppts)&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Create a ListViewItem object&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#000099;"&gt;ListViewItem&lt;/span&gt;(); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Add the appointment date to the ListViewItem,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//and the time and &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//subject to ListViewItem SubItems&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt.Text = appt.Start.ToShortDateString(); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt.SubItems.Add( appt.Start.ToShortTimeString() ); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lviAppt.SubItems.Add(appt.Subject); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Add the ListViewItem to the ListView&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lvAppts.Items.Add(lviAppt); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Don't forget to close the PocketOutlook session &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//when done!&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AppSession.Dispose(); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sebelum menjalankan aplikasi di emulator, anda akan dibutuhkan menambah beberapa data untuk appointments. Anda dapat melakukan ini dengan mudah, pertama membuka emulator menggunakan &lt;strong&gt;Tools&lt;/strong&gt; -&gt; &lt;strong&gt;Connect to Device…&lt;/strong&gt; pilihan dari menu Visual Studio. Saya menambahkan 3 appointment ke emulator, seperti gambar 5.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook5.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 5. Pengetesan data dari conton Projek&lt;br /&gt;&lt;br /&gt;Ketika projek bekerja dan berjalan di emulator, emulator akan menampilkan 3 appointments, seperti diperlihatkan Gambar 6. &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook6.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook6.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 6. Contoh data yang ditampilkan di Sample Application&lt;br /&gt;&lt;br /&gt;Seperti yang anda lihat, sangat sedikit kode yang dibutukan untuk menjalankan Pocket Outlook data aplikasi ke .Net Compact Framework anda.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Menggunakan class ChooseContactDialog&lt;/strong&gt;&lt;br /&gt;Kelas lain yang berguna di dalam pengaturan baru APIs adalah ChooseContactDialog class (juga berhubungan sebagai Contact Picker). Dengan mudah, ggunakan kelas ini di aplikasi anda untuk menampilkan sebuah kumpulan dialog dan kembali memilih contact ke aplikasi anda. Ini akan sangat berguna sekali ketika anda ingin dengan cepat menyediakan user anda dalam arti memilih infomasi contact.&lt;br /&gt;&lt;br /&gt;Untuk menggunakan Contact Picker, kamu dibutuhkan untuk menambah sebuah referensi ke Microsoft.WindowsMobile.Forms.dll untuk menjalankan projek anda (ini dimana letak kelas ChooseContactDialog). Untuk mendemonstrasi kegunaan ini, saya membuat sebuah Smart Device projek yang terdiri dari satu kumpulan. Kumpulan tersebut berisi pemegang infomasi dari kumpulan TextBox dan objek Label, dan mempunyai satu tombol. (lihat gambar 7). &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook7.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook7.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;Gambar 7. Bentuk demonstrasi Contact Picker&lt;br /&gt;&lt;br /&gt;Ketika pengguna memilih tombol Select… di aplikasi, Contact Picker akan ditampilkan dan pengguna dapat memilih contact. Setelah di pilih, aplikasi memperlihatkan informasi dari Contact ke halaman tampilan.&lt;br /&gt;&lt;br /&gt;Untuk penyempurnaan ini, saya menambahkan kode berikut untuk pemegang tombol klik untuk menampilkan Contact Picker:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;//Create the instance of the Contact Picker and disable the ability to&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#006600;"&gt;//create new contacts from it.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#000099;"&gt;ChooseContactDialog&lt;/span&gt; appContactDialog = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#000099;"&gt;ChooseContactDialog&lt;/span&gt;();&lt;br /&gt;appContactDialog.HideNew = &lt;span style="color:#3333ff;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;appContactDialog.ShowDialog();&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Kemudian saya membuat logika (dengan cara.. menarik blok jikalau pengguna keluar dari proses) untuk penahanan pilihan contact ke sebuah contoh variable (dinamakan AppCOntact) dan diberikan dalam bentuk: &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#3333ff;"&gt;try&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;appContact = appContactDialog.SelectedContact; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textBox1.Text = appContact.FileAs; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lblMobile.Text = appContact.MobileTelephoneNumber.ToString(); &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lblPhone.Text = appContact.HomeTelephoneNumber;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;color:#3333ff;"&gt;catch&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;{ &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#000099;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox&lt;/span&gt;.Show(&lt;span style="color:#660000;"&gt;"No contact selected"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sebelum menjalankan kode ini di emulator, sekali lagi saya memastikan kalau saya mempunyai beberapa contact yang tersedia. Saya menggunakan &lt;strong&gt;Connect to Device…&lt;/strong&gt; menu di Visual Studio 2005 untuk membuat 2 record.&lt;br /&gt;&lt;br /&gt;Ketika saya jalankan aplikasi di emulator dan tekan tombol, Contact Picker akan muncul (lihat gambar 8)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook8.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook8.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 8 (Penampilan Contact Picker)&lt;br /&gt;&lt;br /&gt;Pilih sebuah kontak kemudian kembali ke aplikasi saya, menghasilkan penampilan data contact . (lihat gambar 9)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/4173/3257/1600/PocketOutlook9.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4173/3257/320/PocketOutlook9.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Gambar 9 (Penampilan Informasi penelepon di aplikasi)&lt;br /&gt;&lt;br /&gt;Sekali lagi, jumlah dari pengkodean dibutuhkan untuk kegunaan ini sangatlah sedikit. Ini adalah kode lengkap dari form class:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.ComponentModel;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Drawing;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.WindowsMobile;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.WindowsMobile.Forms;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.WindowsMobile.PocketOutlook;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;namespace&lt;/span&gt; ContactPickerDemo&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public partial class&lt;/span&gt; &lt;span style="color:#000099;"&gt;Form1&lt;/span&gt; : &lt;span style="color:#000099;"&gt;Form&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Contact object instance&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/span&gt; &lt;span style="color:#000099;"&gt;Contact&lt;/span&gt; appContact; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/span&gt; Form1()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private void&lt;/span&gt; button1_Click(&lt;span style="color:#3333ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Create the instance of the Contact Picker and&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//disable the ability to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//create new contacts from it.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ChooseContactDialog&lt;/span&gt; appContactDialog = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#000099;"&gt;ChooseContactDialog&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;appContactDialog.HideNew = &lt;span style="color:#3333ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;appContactDialog.ShowDialog();&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Assign the selected contact to a Contact&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//object&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;appContact = appContactDialog.SelectedContact;&lt;br /&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Populate the form fields&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textBox1.Text = appContact.FileAs;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lblMobile.Text = appContact.MobileTelephoneNumber.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lblPhone.Text = appContact.HomeTelephoneNumber;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color:#006600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//If the user backed out, display a message.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(&lt;span style="color:#660000;"&gt;"No contact selected"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Memberi penguna sebuah hasil yang tak ternilai&lt;/strong&gt;&lt;br /&gt;Untuk aplikasi yang membutuhkan perpanjangan kegunaan yang ada dari aplikasi Pocket Outlook atau penyatuan dengan data Pocket Outlook, pengatuan kelas baru ditampilkan di Windows Mobile 5.0 dan .NET Compact Framework adalah sebuah hasil yang tak bernilai. Dalam waktu dan usaha yang sedikit, projek Smart Device anda dapat membaca dan menggerakan tugas, daftar telepon dan infomasi janji. Jika anda ragu untuk menambah fungsi ini ke aplikasi anda sebelumnya, Saya mengajak anda untuk memikirkannya. Untuk lainnya, sekarang waktu yang tepat untuk mengevaluasikan keuntungan dari penyediaan tipe ini dari kegunaan untuk pengguna seperti anda.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tentang penulis&lt;/strong&gt;&lt;br /&gt;&lt;b&gt;Don Sorcinelli&lt;/b&gt; telah melibatkan di perancangan, pengembangan dan penyebaran dari perusahaan aplikasi software 15 tahun lamanya. Don juga bekerja dengan telepon genggam dan disalurkan arsitek sudah hamper 10 tahun lamanya, dan dia sudha bekerja dengan PDA dan Windows Mobile program partai sejak lahirnya mereka. Don adalah seorang presenter di pengembangan Windows Mobile dan teknologi MSDN, grup pengembang, dan konferensi. Dia juga sebagai manajer Boston Windows Mobile Developer Group dan pemilik dari &lt;a href=BostonPocketPC.com&gt;BostonPocketPC.com&lt;/a&gt;, sebuah website yang memfokuskan di teknologi Microsoft mobile.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Referensi :&lt;/b&gt;&lt;br /&gt;- &lt;a href="http://www.developer.com/ws/pc/article.php/10947_3556186_1"&gt;http://www.developer.com/ws/pc/article.php/10947_3556186_1&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.developer.com/ws/pc/article.php/10947_3556186_2"&gt;http://www.developer.com/ws/pc/article.php/10947_3556186_2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115174748872852616?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115174748872852616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115174748872852616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115174748872852616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115174748872852616'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/07/akses-mobile-cepat-dan-mudah-untuk.html' title='Akses Mobile Cepat dan Mudah untuk Pocket Outlook Data'/><author><name>ade</name><uri>http://www.blogger.com/profile/15998252580984416982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115168471265405561</id><published>2006-06-30T09:24:00.000-07:00</published><updated>2006-06-30T09:32:58.440-07:00</updated><title type='text'>Wideband CDMA Teknologi Wireless Generasi ke-3</title><content type='html'>Nama    : Andhi Saputra Gani&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Nrp        :  200113811&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Wideband CDMA Teknologi Wireless Generasi ke-3&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: justify; text-indent: 36pt; line-height: 150%;"&gt;Pada awal abad 21 teknologi komunikasi wireless sudah memasuki generasi ke tiga. Dimana teknologi komunikasi saat ini harus memenuhi persyaratan diantaranya service yang bersifat global dan portabel, mendukung untuk layanan pita lebar (multimedia) baik untuk mobile maupun WLL (Wireless Local Loop), Wireless BOD (Bandwidth on Demand) sampai rate 2 Mbps, interworking dengan sistem eksisting, performansi yang cukup baik terhadap problema propagasi (multi environment) dan harus memiliki efisiensi spektrum yang tinggi. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; text-indent: 36pt; line-height: 150%;"&gt;Menurut standar baik dari Eropa, Jepang maupun &lt;st1:country-region st="on"&gt;&lt;st1:place st="on"&gt;USA&lt;/st1:place&gt;&lt;/st1:country-region&gt; maka teknologi di atas dikenal dengan istilah IMT-2000 atau UMTS &lt;i&gt;(Universal Mobile Telecommunications System).&lt;/i&gt; Di sisi &lt;i&gt;air interface&lt;/i&gt;nya&lt;i&gt; &lt;/i&gt;teknologi akses yang dipakai bisa berupa : W-CDMA, TD-CDMA atau Wideband CDMAone tergantung dari kebijaksanaan negara masing-masing. &lt;/p&gt;   &lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; line-height: 150%;"&gt;Untuk lebih jelasnya dapat digambarkan sebagai berikut :&lt;/p&gt;&lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; line-height: 150%;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6075/3232/1600/Img1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 487px; height: 224px;" src="http://photos1.blogger.com/blogger/6075/3232/320/Img1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; line-height: 150%;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 108pt; text-align: justify; line-height: 150%;"&gt;&lt;a href="http://www.elektroindonesia.com/elektro/tel26a1.gif"&gt;&lt;span style="text-decoration: none; color: rgb(0, 0, 0);"&gt;Gambar 1&lt;/span&gt;&lt;/a&gt;. Air interface Sistem Generasi 3&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 108pt; text-align: justify; line-height: 150%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 19.85pt; text-align: justify; line-height: 150%;"&gt;&lt;b&gt;&lt;i&gt;Roadmap&lt;/i&gt; Menuju W-CDMA&lt;/b&gt; &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 19.85pt; text-align: justify; text-indent: 16.15pt; line-height: 150%;"&gt;Kebutuhan akses informasi yang cepat akan terus berkembang. Hal tersebut dipengaruhi dengan adanya kebutuhan fleksibilitas dan produktifitas yang lebih tinggi dan kebutuhan mengurangi "dead" time. Kebutuhan-kebutuhan tersebut setidaknya akan terpenuhi dengan munculnya sistem komunikasi generasi ke-3. Hal ini dapat kita lihat karena dengan persyaratan-persyaratan yang harus dipenuhi untuk memasuki ke generasi tersebut. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;Persyaratan yang dimaksud dapat diterangkan seperti di bawah ini : &lt;/p&gt;  &lt;!--[if !supportLists]--&gt;&lt;ul&gt;&lt;li&gt;Layanan-layanan komunikasi dengan data rate yang tinggi dan transmisi data asimetric &lt;/li&gt;&lt;li&gt;Mendukung untuk service baik packet maupun circuit switched, seperti Internet (IP) trafik dan video conference &lt;/li&gt;&lt;li&gt;Mekanisme charging yang baru, data volume vs time &lt;/li&gt;&lt;li&gt;Kapasitas jaringan yang lebih besar dengan efisiensi spektrum &lt;/li&gt;&lt;li&gt;Mendukung untuk koneksi yang besar dan simultan, contoh user dapat mengebrowse Internet dan menerima fax atau panggilan telpon &lt;/li&gt;&lt;li&gt;Mempunyai kapabilitas &lt;i&gt;interworking &lt;/i&gt;dengan sistem eksisting &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Portabilitas layanan secara global &lt;/li&gt;&lt;/ul&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;              &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;Sebelum menuju ke generasi di atas maka telah ada generasi sebelumnya yaitu generasi ke-1 dan generasi ke-2. Generasi ke-1 ditandai dengan teknologi analog sedangkan teknologi ke-2 yang ditandai dengan teknologi digital dengan kecepatan rendah. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; text-indent: 18pt; line-height: 150%;"&gt;Perkembangan menuju sistem komunikasi wireless generasi ke-3 (UMTS/IMT-2000) dapat diterangkan seperti gambar di bawah ini :&lt;/p&gt;&lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; text-indent: 18pt; line-height: 150%;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 59.55pt; text-align: justify; line-height: 150%;"&gt; &lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1026" type="#_x0000_t75" style="'width:294.75pt;height:180.75pt'" ole=""&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\Andhi\LOCALS~1\Temp\msohtml1\01\clip_image003.emz" title=""&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6075/3232/1600/Img2.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6075/3232/320/Img2.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:oleobject type="Embed" progid="Visio.Drawing.6" shapeid="_x0000_i1026" drawaspect="Content" objectid="_1213213479"&gt;  &lt;/o:OLEObject&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 119.1pt; text-align: justify; line-height: 150%;"&gt;&lt;a href="http://www.elektroindonesia.com/elektro/tel26a2.gif"&gt;&lt;span style="text-decoration: none; color: rgb(0, 0, 0);"&gt;Gambar 2&lt;/span&gt;&lt;/a&gt;. Evolusi menuju W-CDMA&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 119.1pt; text-align: justify; line-height: 150%;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;Di Eropa ETSI bekerja untuk UMTS yang menjadi International Telecommunication Unit (IMT-2000). W-CDMA adalah salah satu kandidat utama untuk standar UMTS atau IMT-2000.&lt;/p&gt;&lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; line-height: 150%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;b&gt;Teknologi Wideband CDMA&lt;/b&gt; &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; text-indent: 18pt; line-height: 150%;"&gt;Standar teknologi CDMA, dilihat dari spread signalnya relative lebih besar dari teknologi selular lainnya, pengurangan problem propagasi (multipath dan fading). Dikenal dua standar untuk aplikasi dengan metode akses CDMA. Standar yang dimaksud adalah IS-95 dan poprietary. Wideband CDMA mengambil konsep ini lebih lanjut dengan pengurangan multipath-fading, penawaran kapasitas dalam tiap cell dan kualitas suara yang lebih baik. Bandwidth yang luas juga membuat kemungkinan features ke depan termasuk ISDN dan bandwidth on demand. Bandwidth yang ditawarkan bersifat variatif dari mulai 1,26 MHz, 5 MHz, 10 MHz bahkan sampai 20 MHz. Wideband CDMA dengan wireless mempunyai potensi untuk menyediakan "transparan" local loop dengan fungsi penuh seperti wireline. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; text-indent: 18pt; line-height: 150%;"&gt;Wideband CDMA sebagai WLL didesain untuk menyediakan layanan fixed dan mobile yang dikoneksikan dengan PSTN dari layanan POTS (Plain Old Telephone Service) ke features-features selanjutnya seperti ISDN dan bandwidth on demand. Service-service akan termasuk voice, high speed fax, data dan multimedia, termasuk juga video. Teknologi ini memungkinkan aplikasi ISDN ke desktop fixed wiireless dan mobile wireless. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; text-indent: 18pt; line-height: 150%;"&gt;Peluncuran layanan-layanan wideband multimedia akan menambah performansi dibanding dengan standar wireless yang ada sekarang. W-CDMA sangat mendukung baik untuk komunikasi packet dan circuit switched seperti browsing Internet. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; text-indent: 18pt; line-height: 150%;"&gt;Dari awalnya, W-CDMA didesain untuk layanan data kecepatan tinggi seperti internet base packet data menawarkan sampai 2 Mbps dalam lingkungan kantor dan sampai 384 Kbps di outdoor atau lingkungan yang bergerak. Secara rinci hubungan antara besarnya carrier spacing dengan dengan bit rate maksimum yang dapat dicapai adalah sebagai berikut : &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;    &lt;table class="MsoNormalTable" style="margin-left: 67.75pt;" border="1" cellpadding="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;CARRIER SPACING (MHz)&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;MAKSIMUM BIT RATE&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;b&gt;1,26&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;13 kbps(~ 64 kbps)&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;b&gt;5&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;64 kbps ~ 384 kbps&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;b&gt;20&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;" valign="top"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;266 kbps ~ 2 Mbps&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;Sedangkan spesifikasi dari W-CDMA dapat dilihat seperti tabel di bawah ini : &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;    &lt;table class="MsoNormalTable" style="width: 384.05pt; margin-left: 31.05pt;" border="1" cellpadding="0" width="512"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;b style=""&gt;TYPE SPESIFIKASI&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;b style=""&gt;JENIS / NILAI&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Radio Access&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;DS-CDMA / FDD&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Carrier spacing&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;1,26 / 5 / 10 / 20   MHz&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Chip rate&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;4,096 Mcps (1,024   / 8,192 / 16,384 Mcps)&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Modulation&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Data-QPSK,   Spreading – QPSK&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Detection (Reverse &amp; Forward link)&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Pilot Symbol Aided   Coherent RAKE&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;TCH rate&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;Sampai 384 kbps (sampai 2 Mbps)&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Variable rate TCH&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Variable Spreading   Factor Multi code Transmission for High rate TCH&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Frame length&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;10 ms&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Voice codec&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;G.729 CS-ACELP&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Inter BS Synchronous&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Asynchronous&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Signaling Protoccol&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Layered Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;Multiple Protocol Control Entities&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;B-ISDN based Call Control&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Services&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; width: 202.6pt;" width="270"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 150%;" align="center"&gt;&lt;span style=""&gt;Voice, Packet data&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;Unrestricted information   transmission&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;  &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;Spektrum yang baru telah dialokasikan pada band frekuensi 2 GHz untuk sistem komunikasi wireless generasi ke-3. Sebagai gambaran spektrum frekuensi yang rencananya akan diperuntukkan di Eropa dapat dilihat seperti gambar di bawah ini :&lt;/p&gt;&lt;p style="margin: 6pt 0cm 0.0001pt 18pt; text-align: justify; line-height: 150%;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 54pt; text-align: justify; line-height: 150%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1028" type="#_x0000_t75" style="'width:320.25pt;height:130.5pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\Andhi\LOCALS~1\Temp\msohtml1\01\clip_image005.png" title="tel26a3"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6075/3232/1600/Img3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6075/3232/320/Img3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 126pt; text-align: justify; line-height: 150%;"&gt;&lt;a href="http://www.elektroindonesia.com/elektro/tel26a3.gif"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Gambar 3&lt;/span&gt;&lt;/a&gt;. Rencana band UMTS di Eropa&lt;/p&gt;  &lt;p style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size:14;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Gelombang Multimedia&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; text-indent: 36pt; line-height: 150%;"&gt;Salah satu karakteristik dari pelayanan dan aplikasi teknologi komunikasi wireless selular generasi ketiga adalah kemampuan masing-masing pengguna terminal selular untuk menjalankan beberapa aplikasi dan layanan secara bersamaan. Artinya masing-masing pelanggan teknologi baru ini dapat melakukan percakapan sekaligus mengakses intranet maupun internet untuk mendapatkan informasi penting yang dibutuhkan. Pelanggan juga dapat menggunakan terminal selularnya untuk video conference dan dalam waktu yang bersamaan dapat saling bertukar informasi melalui e-mail ataupun multimedia mail. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; text-indent: 19.85pt; line-height: 150%;"&gt;Beberapa layanan masa depan untuk wireless multimedia pita lebar adalah pengiriman berita/koran secara interaktif (berupa suara, video, teks, grafik/gambar), multimedia E-mail (berupa teks, gambar, klip video), Audio Interactive (suara berkualitas CD), video conference (konferensi melalui audio/video), web interactive (aplikasi Internet secara interaktif, contohnya permainan-permainan di Internet) dan transfer file berkapasitas besar dari intranet maupun internet (dalam waktu yang lebih singkat). &lt;/p&gt;  &lt;p style="margin-left: 19.85pt; text-align: justify;"&gt;&lt;b&gt;Aplikasi, Layanan dan Pemasaran dari 3G: &lt;/b&gt;&lt;/p&gt;  &lt;p style="margin-left: 19.85pt; text-align: justify;"&gt;3G menawarkan kepada pelanggan satu layanan multimedia berkecepatan tinggi dan  &lt;i&gt;user-friendly&lt;/i&gt;, sehingga operator mempunyai sumber pendapatan yang baru. Dengan perangkat handphone 2G/3G &lt;i&gt;quad-band &lt;/i&gt;(900/1800/1900/2200 Mhz)  / &lt;i&gt;dualmode&lt;/i&gt;, kelak pengguna akan menikmati layanan layanan seperti:&lt;/p&gt;  &lt;p style="margin-left: 55.85pt; text-align: justify; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;Always-on&lt;/i&gt;&lt;/b&gt;&lt;i&gt;—&lt;/i&gt;contohnya, e-mail, &lt;i&gt;personal organizer&lt;/i&gt;, otomatisasi, penjualan, dan lain sebagainya.&lt;/p&gt;  &lt;p style="margin-left: 55.85pt; text-align: justify; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style="font-weight: bold;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;Informasi&lt;/b&gt;&lt;i&gt;—&lt;/i&gt;contohnya, menjelajah web, Intranet perusahaan, game jaringan, musik, layanan berita, lokasi, kejadian dan layanan transportasi.&lt;/p&gt;  &lt;p style="margin-left: 55.85pt; text-align: justify; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;i&gt;Belanja&lt;/i&gt;&lt;/b&gt;&lt;i&gt;—&lt;/i&gt;contohnya, &lt;i&gt;on-line shopping&lt;/i&gt;, transaksi bank, judi (tidak direkomendasikan), dan pemesanan ticket..&lt;/p&gt;      &lt;p style="margin: 6pt 0cm 0.0001pt 19.85pt; text-align: justify; text-indent: 16.15pt; line-height: 150%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1027" type="#_x0000_t75" alt="" style="'width:337.5pt;height:246.75pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\Andhi\LOCALS~1\Temp\msohtml1\01\clip_image007.png" href="../BARU/Content-3G%20WCDMA_files/wcdma_world.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;    Diperkirakan bahwa tahun 2004, di luar Amerika Utara, 40% transaksi  e-commerce akan dilakukan melalui layanan sellular. Pengembangan yang significant dari komunikasi mobile membuka pintu untuk layanan multimedia baru. Di fixed telephone network, data traffic (termasuk penggunaan internet) tumbuh lebih cepat dibandingkan voice traffic. Dan para pakar industri percaya trend ini juga juga terjadi pada komunikasi wireless. Diharapkan orang akan membutuhkan untuk mengirim dan menerima wireless data, terutama di lingkungan bisnis. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 19.85pt; text-align: justify; text-indent: 16.15pt; line-height: 150%;"&gt;&lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;Gaya&lt;/st1:place&gt;&lt;/st1:city&gt; bekerja akan berubah, dan orang lebih suka bekerja di luar kantor, akses wireless ke ke perusahaan melalui jaringan komputer menjadi sangat penting. Bandwidth wireless yang lebar juga memungkinkan terminal mobile digunakan untuk aplikasi sperti high-quality videoconference dan mentransmisikan gambar-gambar dengan resolosi tinggi. Bandwidth air interface, bagaimanpun juga merupakan faktor penting yang dapat membatasi isi dari informasi yang dapat ditransmisikan antara terminal wireless dan jaringan. &lt;/p&gt;  &lt;p style="margin: 6pt 0cm 0.0001pt 19.85pt; text-align: justify; text-indent: 16.15pt; line-height: 150%;"&gt;Mobile phone generasi pertama dan kedua diperuntukan untuk mensupport komunikasi suara, meskipun sekarang sudah memungkinkan digunakan untuk transfer data dengan kecepatan rendah seperti mengirim dan menerima fax dan email. Kecepatan transmisi data sekitar 10 kbps. &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;Ada&lt;/st1:city&gt;&lt;/st1:place&gt; dua cara yang digunakan untuk memperbaiki kapabilitas dari komunikasi wireless, yang pertama meningkatkan kemampuan bandwidth dari jaringan digital (GSM, D-AMPS dan PDC). Teknologi baru yang disebut EDGE (Evolved Date Rates for GSM Evolution) dikembangkan untuk GSM dan D-AMPS, untuk meningkatkan kecepatan data sampai 384 kbps. Pendekatan yang kedua adalah memperbaiki system dengan teknologi radio generasi terbaru (teknologi radio generasi ketiga). &lt;/p&gt;  &lt;p style="margin-left: 19.85pt;"&gt;Kapabilitas yang diharapkan dari teknologi generasi ketiga adalah : &lt;/p&gt;  &lt;!--[if !supportLists]--&gt;&lt;ul&gt;&lt;li&gt;Kualitas suara yang lebih bagus. &lt;/li&gt;&lt;li&gt;Keamanan yang terjamin. &lt;/li&gt;&lt;li&gt;Kecepatan data mencapai 2 Mbps untuk lokal/Indoor/slow-moving access dan 384 kbps untuk wide area access. &lt;/li&gt;&lt;li&gt;Support beberapa koneksi secara simultan, sebagai contoh, pengguna dapat browse internet bersamaan dengan melalukan call (telepon) ke tujuan yang berbeda. &lt;/li&gt;&lt;li&gt;Infrastruktur bersama dapat mensupport banyak operator dilokasi yang sama. &lt;/li&gt;&lt;li&gt;Interkoneksi ke other mobile dan fixed users. &lt;/li&gt;&lt;li&gt;Roaming nasional dan internasional. &lt;/li&gt;&lt;li&gt;Bisa menangani packet-and circuit-switched service termasuk internet (IP) dan videoconferencing. Juga high data rate communication services dan asymetric data transmission. &lt;/li&gt;&lt;li&gt;Efiensi spektrum yang bagus, sehingga dapat menggunakan secara maksimum bandwidth yang terbatas. &lt;/li&gt;&lt;li&gt;Support untuk multiple cell layer. &lt;/li&gt;&lt;li&gt;Co-existance and interconnection dengan satellite-based services. &lt;/li&gt;&lt;li&gt;Mekanisme billing yang baru tergantung dari volume data, kualitas service dan waktu.&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style="line-height: 150%;"&gt;   &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; line-height: 150%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;span style="line-height: 150%;"&gt;Keuntungan W-CDMA&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 6pt 0cm 0.0001pt; text-align: justify; line-height: 150%;"&gt;Konsep W-CDMA yang baru beroperasi dengan besar kanal radio 5MHz sedang dikembangkan dengan menggunakan potensi keuntungan dari CDMA. Sistem yang baru ini mempunyai beberapa keuntungan dibandingkan dengan sistem narrowband CDMA generasi ke-2 sekarang. Fitur teknologi W-CDMA adalah sbb:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="margin-top: 6pt; text-align: justify; line-height: 150%;"&gt;Kapasitas lebih      tinggi dan penambahan coverage : sampai 8 kali lebih tinggi trafik per      carrier dibandingkan dengan carrier narrowband CDMA &lt;/li&gt;&lt;li class="MsoNormal" style="margin-top: 6pt; text-align: justify; line-height: 150%;"&gt;Variabel dan      kecepatan data yang tinggi, sampai 384 Kbps pada wide area dan 2 Mbps pada      lokal area &lt;/li&gt;&lt;li class="MsoNormal" style="margin-top: 6pt; text-align: justify; line-height: 150%;"&gt;Service packet dan      circuit switched &lt;/li&gt;&lt;li class="MsoNormal" style="margin-top: 6pt; text-align: justify; line-height: 150%;"&gt;Layanan multiple      simultan pada tiap mobile terminal &lt;/li&gt;&lt;li class="MsoNormal" style="margin-top: 6pt; text-align: justify; line-height: 150%;"&gt;Mendukung untuk      Hierarchical Cell Structures (HCS) pada metode handoff yang baru diantara      carrier CDMA &lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 36pt; text-align: justify; line-height: 150%;"&gt;Fitur-fitur di atas dapat dijelaskan seperti berikut :&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="margin-top: 6pt; text-align: justify; line-height: 150%;"&gt;Menambah kapasitas dan      coverage &lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin: 6pt 0cm 0.0001pt 36pt; text-align: justify; line-height: 150%;"&gt;&lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;Ada&lt;/st1:city&gt;&lt;/st1:place&gt; beberapa faktor yang menambah kapasitas dan coverage:&lt;/p&gt;  &lt;!--[if !supportLists]--&gt;&lt;ul&gt;&lt;li&gt;Sistem W-CDMA menggunakan 4 kali channel lebih besar dibanding dengan channel narrowband CDMA, kapasitas bertambah 4 kalinya. Dengan bandwidth lebih lebar memperbaiki efek frekuensi diversity dan oleh karena itu mengurangi efek fading &lt;/li&gt;&lt;li&gt;Demodulasi koheren pada uplink memperbaiki coverage &lt;/li&gt;&lt;li&gt;W-CDMA menggunakan demodulasi pada uplink. Hal itu akan memberi 2-3 dB gain demodulasi dan memperbaiki coverage.&lt;/li&gt;&lt;li&gt;Memperbaiki power control &lt;/li&gt;&lt;li&gt;Pengurangan efek fading pada channel yang besar, akurasi power kontrol akan diperbaiki. Power konrol pada up dan link, yang melawan efek fading dan mengurangi rata-rata level power, akan menambah kapasitas.&lt;/li&gt;&lt;li&gt;W-CDMA, variabel dan      high speed data rates &lt;/li&gt;&lt;li&gt;Air interface W-CDMA mendukung baik untuk low maupun high bit rates. Kecepatan samapai 384 Kbps untuk full mobility dan 2 Mbps untuk lokal area. Mendukung kepada pemakai untuk komunikasi yang berbagai macam dari voice sampai multimedia. &lt;/li&gt;&lt;li&gt;Variabel data rates dapat dicapai dengan penggunaan variabel orthogonal spreading codes dan adaptasi dari output power. &lt;/li&gt;&lt;li&gt;W-CDMA menawarkan      layanan untuk packet dan circuit swithed &lt;/li&gt;&lt;li&gt;Layanan berbentuk packet menawarkan kemungkinan selalu "&lt;i&gt;on-line&lt;/i&gt;" dengan aplikasi host tanpa menduduki kanal secara &lt;i&gt;dedicated.&lt;/i&gt; Service packet memungkinkan pemakai membayar hanya jumlah data yang ditransmisikan dan bukan waktu koneksinya. &lt;/li&gt;&lt;li&gt;Paket data service adalah penting untuk membangun aplikasi yang cost efektif untuk remote LAN dan wireless internet akses. &lt;/li&gt;&lt;li&gt;Layanan high speed circuit switched dibutuhkan untuk aplikasi komunikasi real time seperti video conference. &lt;/li&gt;&lt;li&gt;W-CDMA mendukung      layanan secara multiple simultan &lt;/li&gt;&lt;li&gt;Tiap terminal W-CDMA dapat menggunakan beberapa layanan secara simultan. Bagi pemakai akan mempercepat hubungan ke corporate LAN dan pada waktu yang sama dapat menerima Voice call, yang berarti tidak ada nada sibuk ketika line diduduki untuk data call.&lt;/li&gt;&lt;/ul&gt;        Kelebihan lain adalah      :&lt;ul&gt;&lt;li&gt;Mendukung untuk &lt;i&gt;Adaptive Antenna Arrays&lt;/i&gt; (AAA) &lt;/li&gt;&lt;li&gt;Teknik ini adalah untuk mengoptimalkan antena &lt;i&gt;pattern&lt;/i&gt; pada &lt;i&gt;mobile station&lt;/i&gt;. Hal ini akan memungkinkan penggunaan spektrum yang efektif dan akan menambah jumlah kapasitas.&lt;/li&gt;&lt;li&gt;Tidak memerlukan GPS untuk sinkronisasi di sisi base stations &lt;/li&gt;&lt;li&gt;W-CDMA mempunyai internal sistem untuk sinkronisasi pada base station, sehingga tidak membutuhkan eksternal sinkronisasi seperti GPS &lt;i&gt;(Global Positioning System).&lt;/i&gt; &lt;/li&gt;&lt;li&gt;Hal ini mempunyai masalah jika implementasi &lt;i&gt;base station&lt;/i&gt; dilakukan pada daerah rawan covergae satelit GPS seperti shoping center atau di subways suatu gedung.&lt;/li&gt;&lt;li&gt;Mendukung untuk &lt;i&gt;Hierarchical Cell Structures&lt;/i&gt; (HCS) &lt;/li&gt;&lt;li&gt;W-CDMA mendukung HCS denganmemperkenalkan metode handoff diantara carrier CDMA yang diberi nama Mobile Assisted Inter-Frequency Hand-off (MAIFHO)&lt;/li&gt;&lt;li&gt;Mendukung untuk deteksi multi user. &lt;/li&gt;&lt;li&gt;Deteksi multi user akan membatasi interferensi pada suatu cell dan memperbaiki kapasitas.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Sumber :&lt;br /&gt;1.&lt;a href="http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/wireless.pdf"&gt;http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/wireless.pdf&lt;/a&gt;&lt;br /&gt;2.&lt;a href="http://www.cisco.com/univercd/cc/td/doc/product/wireless/moblwrls/cmx/mmg_sg/cmxgsm.pdf"&gt;http://www.cisco.com/univercd/cc/td/doc/product/wireless/moblwrls/cmx/mmg_sg/cmxgsm.pdf&lt;/a&gt;&lt;br /&gt;3.&lt;a href="http://www.qualcomm.com/technology/index.html"&gt;http://www.qualcomm.com/technology/index.html&lt;/a&gt;&lt;br /&gt;4.&lt;a href="http://www.cs.bris.ac.uk/Teaching/Resources/COMSM0106/COMSM0106-10.p.pdf"&gt;http://www.cs.bris.ac.uk/Teaching/Resources/COMSM0106/COMSM0106-10.p.pdf&lt;/a&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;                                                &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div style="text-align: left;"&gt;  &lt;/div&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115168471265405561?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115168471265405561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115168471265405561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115168471265405561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115168471265405561'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/06/wideband-cdma-teknologi-wireless.html' title='Wideband CDMA Teknologi Wireless Generasi ke-3'/><author><name>Andhi Saputra Gani</name><uri>http://www.blogger.com/profile/16590229703828658822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115168329384990627</id><published>2006-06-30T09:00:00.000-07:00</published><updated>2006-06-30T09:01:37.196-07:00</updated><title type='text'>Relasi Antara WAP dan J2ME</title><content type='html'>WML bekerja baik untuk beberapa aplikasi seperti text-centric application seperti weather report, stock quotes, dll, tetapi terdapat beberapa kelemahan dengan WAP yaitu WAP-based application memerlukan koneksi terhadap network secara permanen, artinya koneksi terhadap internet harus terus dilakukan bilamana ingin menjalankan WAP-based application. Selain itu pula aplikasi WAP tidak baik digunakan pada aplikasi yang graphic intensive seperti games, interactive charting, dll. Selain dari itu isu security juga menimpa WAP gateway, dimana terjadi konversi protocol yaitu dari protocol internet menjadi protocol wireless. Teknologi Java dapat dijalankan pada devices dengan cara disconnected access dan inilah yang tidak dimiliki oleh WAP-based application. J2ME memberikan kemudahan bagi developer untuk membuat aplikasi grafis seperti color games, office application, dll. J2ME pula menyediakan end-to-end security HTTP seperti SSL Tetapi tidak berarti teknologi Java dan WAP berdiri sendiri dan justru sebaliknya merupakan teknologi komplementer dimana WAP browser (microbrowser) digunakan untuk surfing mencari Java Application kemudian AMS akan melakukan manajemen instalasi lalu KVM akan menjalankan aplikasi MIDlet secara disconnected access.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saat ini telah tersedia beberapa microbrowser yang ditulis dengan menggunakan bahasa Java. Tentu saja ini menguntungkan karena anda dapat melakukan proses updating secara OTA, sedangkan untuk microbrowser yang ditulis dengan bahasa selain Java tidak memiliki kemampuan untuk di-updated, dengan kata lain jika anda menginginkan microbowser versi terbaru anda harus membeli HP baru 􀀯. Openwave (merger dari www.software.com dan www.phone.com) yang merupakan founder dengan WAP Forum dan merupakan supporter utama dunia WAP telah mengumumkan major partnership dengan Sun Microsystem untuk mengintegrasikan J2ME dan WAP untuk release selanjutnya.&lt;br /&gt;&lt;br /&gt;Di bawah ini adalah contoh program relasi antara WAP dan J2ME :&lt;br /&gt;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;public class CityMIDlet extends MIDlet implements CommandListener {&lt;br /&gt;Display display;&lt;br /&gt;List menu;&lt;br /&gt;List food;&lt;br /&gt;List edu;&lt;br /&gt;String currentMenu;&lt;br /&gt;static final Command nextCommand = new Command("Next", Command.OK, 2);&lt;br /&gt;static final Command backCommand = new Command("Back", Command.BACK, 2);&lt;br /&gt;public CityMIDlet() {&lt;br /&gt;}&lt;br /&gt;public void startApp() {&lt;br /&gt;display = Display.getDisplay(this);&lt;br /&gt;menu = new List("Vancouver Guide", Choice.IMPLICIT);&lt;br /&gt;menu.append("Food", null);&lt;br /&gt;menu.append("Education", null);&lt;br /&gt;menu.addCommand(nextCommand);&lt;br /&gt;menu.setCommandListener(this);&lt;br /&gt;mainMenu();&lt;br /&gt;}&lt;br /&gt;public void pauseApp() {&lt;br /&gt;display = null;&lt;br /&gt;menu = null;&lt;br /&gt;}&lt;br /&gt;public void destroyApp(boolean unconditional) {&lt;br /&gt;notifyDestroyed();&lt;br /&gt;}&lt;br /&gt;public void mainMenu() {&lt;br /&gt;display.setCurrent(menu);&lt;br /&gt;currentMenu = "main";&lt;br /&gt;}&lt;br /&gt;public void foodMenu() {&lt;br /&gt;food = new List("Restaurants", Choice.IMPLICIT);&lt;br /&gt;food.append("Canadian", null);&lt;br /&gt;food.append("Chinese", null);&lt;br /&gt;food.append("Greek", null);&lt;br /&gt;food.addCommand(backCommand);&lt;br /&gt;food.addCommand(nextCommand);&lt;br /&gt;food.setCommandListener(this);&lt;br /&gt;display.setCurrent(food);&lt;br /&gt;currentMenu = "food";&lt;br /&gt;}&lt;br /&gt;public void eduMenu() {&lt;br /&gt;edu = new List("Education", Choice.IMPLICIT);&lt;br /&gt;edu.append("Schools", null);&lt;br /&gt;edu.append("Universities", null);&lt;br /&gt;edu.addCommand(backCommand);&lt;br /&gt;edu.addCommand(nextCommand);&lt;br /&gt;edu.setCommandListener(this);&lt;br /&gt;display.setCurrent(edu);&lt;br /&gt;currentMenu = "education";&lt;br /&gt;}&lt;br /&gt;public void commandAction(Command c, Displayable d) {&lt;br /&gt;String label = c.getLabel();&lt;br /&gt;if(label.equals("Next")) {&lt;br /&gt;if(currentMenu.equals("main")) {&lt;br /&gt;List down = (List) display.getCurrent();&lt;br /&gt;switch(down.getSelectedIndex()) {&lt;br /&gt;case 0: foodMenu(); break;&lt;br /&gt;case 1: eduMenu(); break;&lt;br /&gt;}&lt;br /&gt;} else if (currentMenu.equals("food")) {&lt;br /&gt;mainMenu();&lt;br /&gt;} else if (currentMenu.equals("education")) {&lt;br /&gt;mainMenu();&lt;br /&gt;}&lt;br /&gt;} else if(label.equals("Back")) {&lt;br /&gt;if(currentMenu.equals("food")) {&lt;br /&gt;mainMenu();&lt;br /&gt;} else if(currentMenu.equals("education")) {&lt;br /&gt;mainMenu();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ilmukomputer.com/populer/faisal-j2me.php"&gt;http://ilmukomputer.com/populer/faisal-j2me.php&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developers.sun.com/techtopics/mobility/midp/articles/midpwap/index.html"&gt;http://developers.sun.com/techtopics/mobility/midp/articles/midpwap/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115168329384990627?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115168329384990627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115168329384990627' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115168329384990627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115168329384990627'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/06/relasi-antara-wap-dan-j2me.html' title='Relasi Antara WAP dan J2ME'/><author><name>Tian Hok Lie</name><uri>http://www.blogger.com/profile/01407001549592734889</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115166798281898994</id><published>2006-06-30T04:40:00.000-07:00</published><updated>2006-06-30T04:46:30.393-07:00</updated><title type='text'>Sistem Keamanan Data Pada Ponsel Berbasis J2ME Menggunakan Profile MIDP 1.0</title><content type='html'>Sistem Keamanan Data pada Ponsel Berbasis J2ME Menggunakan Profile MIDP 1.0&lt;br /&gt;&lt;br /&gt;Pendahuluan&lt;br /&gt;Pada waktu dahulu, metode pengamanan data dilakukan dengan cara mengenkripsi data sebelum dikirimkan. Kekuatan enkripsi ini ditekankan pada kerahasiaan cara enkripsi data yang dilakukan, dan umum digunakan oleh raja-raja dahulu semacam Romawi. Saat ini kekuatan enkripsi data bukan lagi terletak dari kerahasiaan dari algoritma yang ada, namun terletak pada kemampuan sulit dipecahkannya dari sisi waktu. Semakin lama waktu yang diperlukan untuk memecahkan data yang dienkripsi dengan metode coba-coba, maka semakin bagus algoritma enkripsi yang ada.&lt;br /&gt;Banyak sekali aspek keamanan dalam transaksi di internet, namun dalam bahasan dengan MIDP hanya akan dibicarakan mengenai bagaimana membuat data yang dikirim dan diterima dapat diamankan, atau dengan kata lain dienkripsi sehingga terlindung dari pencuri data. Idealnya setiap data yang ditransmisikan harusnya terjamin :&lt;br /&gt;1. Integritas data&lt;br /&gt;Jaminan integritas data sangat penting, sehingga data yang dikirimkan akan sama persis dengan data yang diterima, tanpa mengalami perubahaan apapun selama ditransmisikan.&lt;br /&gt;2. Kerahasiaan data&lt;br /&gt;Jaminan kerahasiaan data juga penting, karena dengan ini maka tidak ada pihak lain yang bisa membaca data yang ada selama data tersebut ditransmisikan.&lt;br /&gt;3. Otentikasi akses data&lt;br /&gt;Mekanisme otentikasi akses data menjamin bahwa data ditransmisikan oleh pihak yang benar dengan tujuan transmisi pihak yang benar pula. Jika berbicara tentang keamanan, maka mau tak mau kita akan membicarakan tentang Kriptografi. Berbicara tentang Kriptografi, maka kita sedang membicarakan tentang cabang ilmu matematika yang memanfaatkan proses komputasi untuk mengacak data yang akan dikirimkan. Secara umum, Kriptografi didasarkan pada penggunaan kunci. Kunci adalah sebuah bilangan yang membuat sebuah persoalan matematika dapat diselesaikan. Untuk analogi perhatikan contoh berikut :&lt;br /&gt;3 + = 5&lt;br /&gt;Dari contoh diatas jika persoalan matematikanya adalah :&lt;br /&gt;3 + …. = 5&lt;br /&gt;Maka bilangan yang merupakan kunci untuk menyelesaikan problem matematika tersebut adalah&lt;br /&gt;Jika kunci yang digunakan untuk menyelesaikan problem tersebut bukan , maka persoalan tersebut tidak dapat diselesaikan dengan tepat.. Dalam kasus keamanan data, sebuah data harus diacak terlebih dahulu dan ditentukan komponen kuncinya sebelum dikirimkan ke tujuan. Setelah terkirim, di tempat tujuan, data yang teracak tersebut tidak mungkin dikonstruksi ke bentuk aslinya tanpa menggunakan komponen kunci tadi. Untuk itu, Kunci tersebut merupakan komponen yang rahasia. Sebagian besar kriptografi didasarkan pada pemanfaatan persamaan sederhana menggunakan sejumlah besar bilangan yang lebih besar daripada tipe data integer atau long. Algoritma yang memungkinkan data tersebut tetap rahasia selama pengacakan dinamakan dengan cipher. Algoritma ini dapat mentranslasikan data biasa yang dinamakan dengan plaintext dan data terenkripsi yang dinamakan cipertext. Jadi secara sederhana cipher adalah persamaan sederhana yang memungkinkan diperoleh data terenkripsi. Jika mengambil contoh penjumlahan diatas, maka yang dinamakan dengan plaintext adalah bilangan 3, dan yang dimaksud dengan cipher adalah fungsi + . Agar diperoleh data yang terenkripsi diperlukan key atau kunci seperti yang telah dikemukakan sebelumnya. Dalam contoh diatas, maka yang menjadi kuncinya adalah 2. Sehingga yang dimaksud dengan data terenkripsi adalah bilangan 5. Proses pengembalian hasil enkripsi ini dinamakan dengan dekripsi. Dunia kriptografi menawarkan beberapa solusi penting yang saat ini sudah sangat umum digunakan dalam jaringan internet, yakni :&lt;br /&gt;1. Chiper&lt;br /&gt;Tak lain adalah teknologi untuk enkripsi dan dekripsi data. Teknik kriptografi data untuk&lt;br /&gt;enkripsi ada 2 macam :&lt;br /&gt;a. Kriptografi simetrik&lt;br /&gt;Dengan model kriptografi ini data dienkripsi dan didekripsi dengan kunci rahasia yang&lt;br /&gt;sama.&lt;br /&gt;b. Kriptografi asitmetrik&lt;br /&gt;Dengan model kriptografi ini data dienkripsi dan didekripsi dengan kunci rahasia yang&lt;br /&gt;berbeda. Pasangan kunci untuk enkripsi dan dekripsi dikenal dengan private key atau&lt;br /&gt;secret key dan public key. Suatu data yang dienkripsi dengan suatu private key hanya&lt;br /&gt;bisa didekripsi dengan public key yang berkaitan dengan private key tersebut, demikian&lt;br /&gt;sebaliknya.&lt;br /&gt;&lt;br /&gt;Cipher Asymmetric menggunakan sepasang kunci yang berhubungan satu sama lain. Satu merupakan public key, sedangkan lainnya adalah private key. Data yang terenkripsi menggunakan kunci yang satu, harus didekripsi menggunakan kunci yang lain. Public key dapat didistribusikan secara bebas, akan tetapi private key harus tetap pribadi untuk menjaga keamanan data tersebut.&lt;br /&gt;Cipher Asymmetric berguna untuk tujuan otentifikasi yang berarti pula berfungsi sebagai identitas. Ketika seseorang mengirimkan sebuah pesan yang terenkripsi dengan memanfaatkan public key dimana anda yakin dengan private key yang anda miliki sajalah maka data tersebut dapat didekripsi oleh anda. Hal ini berarti bahwa telah terjadi proses otentifikasi kepada pengirim yaitu bahwa private key yang dikirimkan oleh si pengirim menjadi identitas dari pengirim pribadi. Tentunya cipher asymmetric jauh lebih kompleks dalam perhitungan matematis dibandingkan cipher symmetric. Namun biasanya enkripsi menggunakan Cipher symmetric berlangsung lebih cepat dibandingkan dengan bila menggunakan cipher asymmetric, terlebih lagi jika digunakan untuk mengenkripsi data yang lebih panjang. Selain itu sering pula memanfaatkan kedua jenis cipher tersebut secara bersamaan. Beberapa contoh algoritma cipher yang ada diantaranya adalah Rjndael, DES, Blowfish, ElGamal, dan sebagainya. Kunci dapat dibangkitkan dari bilangan acak. Public key dan private key merupakan pasangan kunci yang secara matematis berhubungan namun dapat dibangkitkan secara acak menggunakan apa yang dinamakan dengan pseudo-random number generator (PRNG), yang mampu menghasilkan sederetan bit yang berulang. bits. Penggunaan dua buah PRNG yang diinisialisasi secara identik akan menghasilkan deretan bit yang sama. Cara lain untuk membangkitkan kunci adalah penggunaan kunci yang dinamakan agreement protocol. Hal ini merupakan sebuah trik matematis yang memungkinkan dua pihak untuk menggunakan kunci tersebut pada sebuah session key. Untuk itu, masingmasing pihak harus mengerti pihak yang lain . Setiap perubahan dari pihak yang lain&lt;br /&gt;diperoleh melalui session key tersebut. Salah satu contohnya adalah Diffie-Hellman.&lt;br /&gt;2. Message Digest/Digital Fingerprint&lt;br /&gt;Idenya adalah membuat suatu ringkasan matematik atas sebuah data, dimana perubahan atas data tersebut akan menghasilkan ringkasan matematik yang berbeda. Sebagai contoh ada sebuah data X memiliki nilai digital fingerprint : d07182257bce13d49a5c183864e4a277, maka jika anda merubah barang 1 byte data tersebut, maka nilai digital fingerprint akan berbeda. Teknologi ini menyediakan solusi bahwa data selalu terjamin integritasnya karena perubahan atas data yang ditransmisikan akan terdeteksi dengan mudah. Contoh algoritma message digest adalah : MD2, MD4, MD5, SHA1, RIPEM160, dan RIPEM128. Sebuah message digest berfungsi sebagai sidik jari bagi sebuah data. Dengan Sidik jari yang berbeda, maka data yang diperoleh juga berbeda sekalipun perubahan tersebut hanya 1 bit saja. Jadi secara umum message digest digunakan untuk memeriksa integritas sebuah data. Hal tersebut bisa anda lakukan ketika anda mendownload sebuah file dari server, maka anda dapat menghitung nilai digest-nya dan membandingkannya dengan nilai hasil komputasi di server. Jika hasilnya sama, maka anda boleh yakin bahwa selama proses pengiriman, data tidak mengalami modifikasi oleh pihak lain.&lt;br /&gt;3. Digital Signatures&lt;br /&gt;Idenya adalah mengenkripsi message digest dari suatu data dengan kunci rahasia (private key) seseorang. Pihak lain kemudian dapat mendapatkan message digest aslinya dengan mendekripsi data dengan kunci publik dari orang tersebut. Pengembangan dari model ini adalah adanya certificate yakni setiap orang memiliki semacam certificate yang disahkan oleh pihak ketiga yang ditunjuk, misalnya pengadilan, yang bisa digunakan untuk identitas digital seseorang. Jadi fungsi certificate ini seperti kartu tanda penduduk atau kartu SIM. Contoh algoritma signature adalah RSA dan DSA.&lt;br /&gt;Pada algoritma tersebut, data yang dikirimkan ke pihak penerima nantinya tidak sekedar data saja, tapi juga data ditambah dengan digital signature-nya. Berbicara mengenai digital signature, mungkin anda menjadi bertanya-tanya bagaimana cara penerima data mengetahui bahwa data yang diterima benar-benar terjamin keamanannya dan benar-benar dikirimkan oleh pihak yang benar? Penjelasannya adalah sebagai berikut, sebagaimana diketahui bahwa data dikirim bersama dengan digital signature-nya. Dari digital signature dilakukan dekripsi dengan menggunakan kunci public dari pihak yang bersangkutan. Jika gagal didekripsi, maka kunci publik tentunya tidak bersesuain dengan kunci privat (private key) dari pihak yang benar, sehingga dari sini kita sudah bisa menentukan bahwa pengirim data adalah pihak yang sah. Dari dekripsi yang dilakukan dihasilkan digest dari data, jika nilai digest ini sama dengan hasil nilai digest yang kita lakukan terhadap data maka data terjamin keamanannya.&lt;br /&gt;&lt;br /&gt;II Paket Bouncy Castle&lt;br /&gt;Dalam ruang lingkup J2SE (Java 2 Standar Edition) yang didedikasikan pada perangkat dengan memori yang besar semacam komputer PC, Sun Microsystem telah mengembangkan dukungan Java API untuk urusan kriptografi yakni berupa JCA (Java Cryptography Architecture) dan JCE (Java Cryptography Extension). Namun JCA dan JCE tidak cocok untuk digunakan dalam J2ME karena terlalu besar memori yang dibutuhkannya, padahal perangkat J2ME misal ponsel hanya memiliki kapasitas memori yang terbatas. Sebagai alternatif, untuk J2ME anda bias menggunakan paket kriptografi dari Bouncy Castle. Bouncy Castle Cryptography (http://www.bouncycastle.org) merupakan proyek open source yang berpusat di Australia. Selain menyediakan paket-paket API java kriptografi untuk J2SE, juga disediakan paket-paket kriptografi untuk J2ME. Dari paket Bouncy Castle, akan coba dijelaskan beberapa penggunaan kelas kriptografi dengan Java yang penting dalam bab berikutnya. Penggunaan lebih lanjut dari paket BouncyCastle ini dapat anda lihat di situsnya di &lt;a href="http://www.bouncycastle.org/"&gt;http://www.bouncycastle.org&lt;/a&gt;. Dalam kasus keamanan data pada Java, solusi menggunakan message digest juga dapat dilakukan. Idenya adalah kita membuat message digest dari nilai password yang ada untuk dikirimkan ke server. Di sisi server, cukup dilakukan penyamaan message digest yang dikirim dengan message digest dari password yang tersimpan di server, jika sama maka login sah, jika tidak maka sesi login tidak sah. Salah satu contoh algoritma Message Digest yang sering digunakan adalah MD5.&lt;br /&gt;Jika anda pernah menggunakannya pada pemrograman PHP, maka syntak-nya kurang lebih adalah :&lt;br /&gt;$mdigest = md5("aditya");&lt;br /&gt;Jika algoritma MD5 diterapkan pada pemrograman Java, maka implementasinya salah satunya dapat dilihat dari listing program berikut ini :&lt;br /&gt;/*&lt;br /&gt;* MD5 Message Digest Implementation&lt;br /&gt;* From Bouncycastle.org, rewritten by Antonius Aditya Hartanto&lt;br /&gt;*/&lt;br /&gt;class MD5Digest {&lt;br /&gt;private byte[] xBuf;&lt;br /&gt;private long byteCount;&lt;br /&gt;private static final int DIGEST_LENGTH = 16;&lt;br /&gt;private int xBufOff, xOff, H1, H2, H3, H4;&lt;br /&gt;private int[] X = new int[16];&lt;br /&gt;private static final char[] kDigits = {&lt;br /&gt;'0','1','2','3','4','5','6','7','8','9',&lt;br /&gt;'a','b','c','d','e','f' };&lt;br /&gt;public MD5Digest(){&lt;br /&gt;xBuf = new byte[4];&lt;br /&gt;xBufOff = 0;&lt;br /&gt;reset();&lt;br /&gt;}&lt;br /&gt;public String calculate(String m){&lt;br /&gt;update(m.getBytes(), 0, m.getBytes().length);&lt;br /&gt;byte[] digestValue = new byte[DIGEST_LENGTH];&lt;br /&gt;doFinal(digestValue, 0);&lt;br /&gt;return bytesToHex(digestValue);&lt;br /&gt;}&lt;br /&gt;public String bytesToHex(byte[] raw) {&lt;br /&gt;int length = raw.length;&lt;br /&gt;char[] hex = new char[length * 2];&lt;br /&gt;for (int i = 0; i &lt; length; i++) {&lt;br /&gt;int value = (raw[i] + 256) % 256;&lt;br /&gt;int highIndex = value &gt;&gt; 4;&lt;br /&gt;int lowIndex = value &amp; 0x0f;&lt;br /&gt;hex[i * 2 + 0] = kDigits[highIndex];&lt;br /&gt;hex[i * 2 + 1] = kDigits[lowIndex];&lt;br /&gt;}&lt;br /&gt;return (new String(hex)).toString();&lt;br /&gt;}&lt;br /&gt;public void reset(){&lt;br /&gt;byteCount = 0;&lt;br /&gt;xBufOff = 0;&lt;br /&gt;for(int i = 0; i &lt; xBuf.length; i++ ){ xBuf[i] = 0; }&lt;br /&gt;H1 = 0x67452301; H2 = 0xefcdab89;&lt;br /&gt;H3 = 0x98badcfe;&lt;br /&gt;H4 = 0x10325476;&lt;br /&gt;xOff = 0;&lt;br /&gt;for (int i = 0; i != X.length; i++){ X[i] = 0; }&lt;br /&gt;}&lt;br /&gt;public void finish(){&lt;br /&gt;long bitLength = (byteCount &lt;&lt; 3);&lt;br /&gt;update((byte)128);&lt;br /&gt;while (xBufOff != 0){&lt;br /&gt;update((byte)0);&lt;br /&gt;}&lt;br /&gt;processLength(bitLength);processBlock();&lt;br /&gt;}&lt;br /&gt;public void update(byte in){&lt;br /&gt;xBuf[xBufOff++] = in;&lt;br /&gt;if (xBufOff == xBuf.length){&lt;br /&gt;processWord(xBuf, 0);&lt;br /&gt;xBufOff = 0;&lt;br /&gt;}&lt;br /&gt;byteCount++;&lt;br /&gt;}&lt;br /&gt;public void update(byte[] in, int inOff, int len){&lt;br /&gt;while ((xBufOff != 0) &amp;&amp;amp; (len &gt; 0)){&lt;br /&gt;update(in[inOff]);&lt;br /&gt;inOff++;len--;&lt;br /&gt;}&lt;br /&gt;while (len &gt; xBuf.length){&lt;br /&gt;processWord(in, inOff);&lt;br /&gt;inOff += xBuf.length; len -= xBuf.length;&lt;br /&gt;byteCount += xBuf.length;&lt;br /&gt;}&lt;br /&gt;while (len &gt; 0){&lt;br /&gt;update(in[inOff]);&lt;br /&gt;inOff++;len--;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;protected void processWord(byte[] in, int inOff){&lt;br /&gt;X[xOff++] = (in[inOff] &amp; 0xff)  ((in[inOff + 1] &amp;amp; 0xff) &lt;&lt; 8)&lt;br /&gt; ((in[inOff + 2] &amp; 0xff) &lt;&lt; 16)&lt;br /&gt; ((in[inOff + 3] &amp;amp; 0xff) &lt;&lt; 24);&lt;br /&gt;if (xOff == 16){&lt;br /&gt;processBlock();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;protected void processLength(long bitLength){&lt;br /&gt;if (xOff &gt; 14){ processBlock(); }&lt;br /&gt;X[14] = (int)(bitLength &amp; 0xffffffff);&lt;br /&gt;X[15] = (int)(bitLength &gt;&gt;&gt; 32);&lt;br /&gt;}&lt;br /&gt;private void unpackWord(int word, byte[] out, int outOff){&lt;br /&gt;out[outOff] = (byte)word;&lt;br /&gt;out[outOff + 1] = (byte)(word &gt;&gt;&gt; 8);&lt;br /&gt;out[outOff + 2] = (byte)(word &gt;&gt;&gt; 16);&lt;br /&gt;out[outOff + 3] = (byte)(word &gt;&gt;&gt; 24);&lt;br /&gt;}&lt;br /&gt;public int doFinal(byte[] out, int outOff){&lt;br /&gt;finish();&lt;br /&gt;unpackWord(H1, out, outOff);&lt;br /&gt;unpackWord(H2, out, outOff + 4);&lt;br /&gt;unpackWord(H3, out, outOff + 8);&lt;br /&gt;unpackWord(H4, out, outOff + 12);&lt;br /&gt;reset();&lt;br /&gt;return DIGEST_LENGTH;&lt;br /&gt;}&lt;br /&gt;// round 1 left rotates&lt;br /&gt;private static final int S11 = 7;&lt;br /&gt;private static final int S12 = 12;&lt;br /&gt;private static final int S13 = 17;&lt;br /&gt;private static final int S14 = 22;&lt;br /&gt;// round 2 left rotates&lt;br /&gt;private static final int S21 = 5;&lt;br /&gt;private static final int S22 = 9;&lt;br /&gt;private static final int S23 = 14;&lt;br /&gt;private static final int S24 = 20;&lt;br /&gt;// round 3 left rotates&lt;br /&gt;private static final int S31 = 4;&lt;br /&gt;private static final int S32 = 11;&lt;br /&gt;private static final int S33 = 16;&lt;br /&gt;private static final int S34 = 23;&lt;br /&gt;// round 4 left rotates&lt;br /&gt;private static final int S41 = 6;&lt;br /&gt;private static final int S42 = 10;&lt;br /&gt;private static final int S43 = 15;&lt;br /&gt;private static final int S44 = 21;&lt;br /&gt;// rotate int x left n bits.&lt;br /&gt;private int rotateLeft(int x,int n){&lt;br /&gt;return (x &lt;&lt;&gt;&gt;&gt; (32 - n)); }&lt;br /&gt;// F, G, H and I are the basic MD5 functions.&lt;br /&gt;private int F(int u, int v, int w){ return (u &amp; v)  (~u &amp;amp;&lt;br /&gt;w); }&lt;br /&gt;private int G(int u, int v, int w){ return (u &amp; w)  (v &amp;amp;&lt;br /&gt;~w); }&lt;br /&gt;private int H(int u, int v, int w){ return u ^ v ^ w; }&lt;br /&gt;private int K(int u, int v, int w){ return v ^ (u  ~w); }&lt;br /&gt;protected void processBlock(){&lt;br /&gt;int a = H1; int b = H2;&lt;br /&gt;int c = H3; int d = H4;&lt;br /&gt;// Round 1 - F cycle, 16 times.&lt;br /&gt;a = rotateLeft((a + F(b, c, d) + X[ 0] + 0xd76aa478), S11) + b;&lt;br /&gt;d = rotateLeft((d + F(a, b, c) + X[ 1] + 0xe8c7b756), S12) + a;&lt;br /&gt;c = rotateLeft((c + F(d, a, b) + X[ 2] + 0x242070db), S13) + d;&lt;br /&gt;b = rotateLeft((b + F(c, d, a) + X[ 3] + 0xc1bdceee), S14) + c;&lt;br /&gt;a = rotateLeft((a + F(b, c, d) + X[ 4] + 0xf57c0faf), S11) + b;&lt;br /&gt;d = rotateLeft((d + F(a, b, c) + X[ 5] + 0x4787c62a), S12) + a;&lt;br /&gt;c = rotateLeft((c + F(d, a, b) + X[ 6] + 0xa8304613), S13) + d;&lt;br /&gt;b = rotateLeft((b + F(c, d, a) + X[ 7] + 0xfd469501), S14) + c;&lt;br /&gt;a = rotateLeft((a + F(b, c, d) + X[ 8] + 0x698098d8), S11) + b;&lt;br /&gt;d = rotateLeft((d + F(a, b, c) + X[ 9] + 0x8b44f7af), S12) + a;&lt;br /&gt;c = rotateLeft((c + F(d, a, b) + X[10] + 0xffff5bb1), S13) + d;&lt;br /&gt;b = rotateLeft((b + F(c, d, a) + X[11] + 0x895cd7be), S14) + c;&lt;br /&gt;a = rotateLeft((a + F(b, c, d) + X[12] + 0x6b901122), S11) + b;&lt;br /&gt;d = rotateLeft((d + F(a, b, c) + X[13] + 0xfd987193), S12) + a;&lt;br /&gt;c = rotateLeft((c + F(d, a, b) + X[14] + 0xa679438e), S13) + d;&lt;br /&gt;b = rotateLeft((b + F(c, d, a) + X[15] + 0x49b40821), S14) + c;&lt;br /&gt;// Round 2 - G cycle, 16 times.&lt;br /&gt;a = rotateLeft((a + G(b, c, d) + X[ 1] + 0xf61e2562), S21) + b;&lt;br /&gt;d = rotateLeft((d + G(a, b, c) + X[ 6] + 0xc040b340), S22) + a;&lt;br /&gt;c = rotateLeft((c + G(d, a, b) + X[11] + 0x265e5a51), S23) + d;&lt;br /&gt;b = rotateLeft((b + G(c, d, a) + X[ 0] + 0xe9b6c7aa), S24) + c;&lt;br /&gt;a = rotateLeft((a + G(b, c, d) + X[ 5] + 0xd62f105d), S21) + b;&lt;br /&gt;d = rotateLeft((d + G(a, b, c) + X[10] + 0x02441453), S22) + a;&lt;br /&gt;c = rotateLeft((c + G(d, a, b) + X[15] + 0xd8a1e681), S23) + d;&lt;br /&gt;b = rotateLeft((b + G(c, d, a) + X[ 4] + 0xe7d3fbc8), S24) + c;&lt;br /&gt;a = rotateLeft((a + G(b, c, d) + X[ 9] + 0x21e1cde6), S21) + b;&lt;br /&gt;d = rotateLeft((d + G(a, b, c) + X[14] + 0xc33707d6), S22) + a;&lt;br /&gt;c = rotateLeft((c + G(d, a, b) + X[ 3] + 0xf4d50d87), S23) + d;&lt;br /&gt;b = rotateLeft((b + G(c, d, a) + X[ 8] + 0x455a14ed), S24) + c;&lt;br /&gt;a = rotateLeft((a + G(b, c, d) + X[13] + 0xa9e3e905), S21) + b;&lt;br /&gt;d = rotateLeft((d + G(a, b, c) + X[ 2] + 0xfcefa3f8), S22) + a;&lt;br /&gt;c = rotateLeft((c + G(d, a, b) + X[ 7] + 0x676f02d9), S23) + d;&lt;br /&gt;b = rotateLeft((b + G(c, d, a) + X[12] + 0x8d2a4c8a), S24) + c;&lt;br /&gt;// Round 3 - H cycle, 16 times.&lt;br /&gt;a = rotateLeft((a + H(b, c, d) + X[ 5] + 0xfffa3942), S31) + b;&lt;br /&gt;d = rotateLeft((d + H(a, b, c) + X[ 8] + 0x8771f681), S32) + a;&lt;br /&gt;c = rotateLeft((c + H(d, a, b) + X[11] + 0x6d9d6122), S33) + d;&lt;br /&gt;b = rotateLeft((b + H(c, d, a) + X[14] + 0xfde5380c), S34) + c;&lt;br /&gt;a = rotateLeft((a + H(b, c, d) + X[ 1] + 0xa4beea44), S31) + b;&lt;br /&gt;d = rotateLeft((d + H(a, b, c) + X[ 4] + 0x4bdecfa9), S32) + a;&lt;br /&gt;c = rotateLeft((c + H(d, a, b) + X[ 7] + 0xf6bb4b60), S33) + d;&lt;br /&gt;b = rotateLeft((b + H(c, d, a) + X[10] + 0xbebfbc70), S34) + c;&lt;br /&gt;a = rotateLeft((a + H(b, c, d) + X[13] + 0x289b7ec6), S31) + b;&lt;br /&gt;d = rotateLeft((d + H(a, b, c) + X[ 0] + 0xeaa127fa), S32) + a;&lt;br /&gt;c = rotateLeft((c + H(d, a, b) + X[ 3] + 0xd4ef3085), S33) + d;&lt;br /&gt;b = rotateLeft((b + H(c, d, a) + X[ 6] + 0x04881d05), S34) + c;&lt;br /&gt;a = rotateLeft((a + H(b, c, d) + X[ 9] + 0xd9d4d039), S31) + b;&lt;br /&gt;d = rotateLeft((d + H(a, b, c) + X[12] + 0xe6db99e5), S32) + a;&lt;br /&gt;c = rotateLeft((c + H(d, a, b) + X[15] + 0x1fa27cf8), S33) + d;&lt;br /&gt;b = rotateLeft((b + H(c, d, a) + X[ 2] + 0xc4ac5665), S34) + c;&lt;br /&gt;// Round 4 - K cycle, 16 times.&lt;br /&gt;a = rotateLeft((a + K(b, c, d) + X[ 0] + 0xf4292244), S41) + b;&lt;br /&gt;d = rotateLeft((d + K(a, b, c) + X[ 7] + 0x432aff97), S42) + a;&lt;br /&gt;c = rotateLeft((c + K(d, a, b) + X[14] + 0xab9423a7), S43) + d;&lt;br /&gt;b = rotateLeft((b + K(c, d, a) + X[ 5] + 0xfc93a039), S44) + c;&lt;br /&gt;a = rotateLeft((a + K(b, c, d) + X[12] + 0x655b59c3), S41) + b;&lt;br /&gt;d = rotateLeft((d + K(a, b, c) + X[ 3] + 0x8f0ccc92), S42) + a;&lt;br /&gt;c = rotateLeft((c + K(d, a, b) + X[10] + 0xffeff47d), S43) + d;&lt;br /&gt;b = rotateLeft((b + K(c, d, a) + X[ 1] + 0x85845dd1), S44) + c;&lt;br /&gt;a = rotateLeft((a + K(b, c, d) + X[ 8] + 0x6fa87e4f), S41) + b;&lt;br /&gt;d = rotateLeft((d + K(a, b, c) + X[15] + 0xfe2ce6e0), S42) + a;&lt;br /&gt;c = rotateLeft((c + K(d, a, b) + X[ 6] + 0xa3014314), S43) + d;&lt;br /&gt;b = rotateLeft((b + K(c, d, a) + X[13] + 0x4e0811a1), S44) + c;&lt;br /&gt;a = rotateLeft((a + K(b, c, d) + X[ 4] + 0xf7537e82), S41) + b;&lt;br /&gt;d = rotateLeft((d + K(a, b, c) + X[11] + 0xbd3af235), S42) + a;&lt;br /&gt;c = rotateLeft((c + K(d, a, b) + X[ 2] + 0x2ad7d2bb), S43) + d;&lt;br /&gt;b = rotateLeft((b + K(c, d, a) + X[ 9] + 0xeb86d391), S44) + c;&lt;br /&gt;H1 += a; H2 += b; H3 += c; H4 += d;&lt;br /&gt;xOff = 0;&lt;br /&gt;for (int i = 0; i != X.length; i++) { X[i] = 0; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Simpan kode implementasi MD5 diatas file bernama MD5Digest.java, dan anda sekarang sudah punya pustaka tambahan untuk MD5 ini. Penggunaan dari kelas MD5 diatas sangat sederhana, semacam ini :&lt;br /&gt;M5Digest s = new MD5Digest();&lt;br /&gt;String val = s.calculate(“TES DATA”);&lt;br /&gt;Jadi fungsi yang dipanggil dari objek MD5Digest yang dibuat adalah calculate() saja. Contoh penggunaanya adalah :&lt;br /&gt;import java.io.*;&lt;br /&gt;class sampleMD5Usage {&lt;br /&gt;public static void main(String args[]){&lt;br /&gt;try {&lt;br /&gt;String s;&lt;br /&gt;BufferedReader b;&lt;br /&gt;MD5Digest m = new MD5Digest();&lt;br /&gt;b = new BufferedReader(new InputStreamReader(System.in));&lt;br /&gt;System.out.print("Masukkan data : ");&lt;br /&gt;s = b.readLine();&lt;br /&gt;System.out.println("Digest of \"" + s + "\" is " +&lt;br /&gt;m.calculate(s));&lt;br /&gt;}catch(IOException e){&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Jika anda eksekusi aplikasi Java di atas pada console, maka akan diperoleh hasil semacam ini :&lt;br /&gt;C:\javaprog&gt;javac -target 1.1 MD5Digest.java&lt;br /&gt;C:\javaprog&gt;javac -target 1.1 sampleMD5Usage.java&lt;br /&gt;C:\javaprog&gt;java sampleMD5Usage&lt;br /&gt;Masukkan data : data1&lt;br /&gt;Digest of "data1" is 89d903bc35dede724fd52c51437ff5fd&lt;br /&gt;Jika anda akan memakainya untuk aplikasi MIDlet simpan file MD5Digest.java pada&lt;br /&gt;direktori src dari proyek J2ME anda. Kembali ke aplikasi MIDlet, coba buat proyek “proteksi”&lt;br /&gt;dengan J2ME Wireless Toolkit dan buatlah kode MIDlet berikut :&lt;br /&gt;/*&lt;br /&gt;* Nama File:c:\J2mewtk\apps\proteksi\src\formMD5.java(J2ME Toolkit 1.0.3)&lt;br /&gt;c:\WTK104\apps\proteksi\src\formMD5.java (J2ME Toolkit 1.0.4)&lt;br /&gt;* Deskripsi: MIDP client untuk akses form login dengan memberikan password&lt;br /&gt;dengan message digest MD5&lt;br /&gt;*/&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;import java.io.*;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;import java.util.*;&lt;br /&gt;public class formMD5 extends MIDlet&lt;br /&gt;implements CommandListener {&lt;br /&gt;private Display display;&lt;br /&gt;private Command openCmd =&lt;br /&gt;new Command("Login",Command.OK,1);&lt;br /&gt;private Command exitCmd =&lt;br /&gt;new Command("Keluar",Command.EXIT,2);&lt;br /&gt;private Command backCmd =&lt;br /&gt;new Command("Kembali",Command.EXIT,2);&lt;br /&gt;private Form f1,f2;&lt;br /&gt;private TextField t1,t2,t3;&lt;br /&gt;private String URL =&lt;br /&gt;new String("http://127.0.0.1/someaction.php");&lt;br /&gt;public formMD5(){}&lt;br /&gt;public void startApp(){&lt;br /&gt;display = Display.getDisplay(this);&lt;br /&gt;f1 = new Form("Form Login");&lt;br /&gt;t1 = new TextField("Username","",256,TextField.ANY);&lt;br /&gt;t2 =&lt;br /&gt;new TextField("Password","",256,TextField.PASSWORD);&lt;br /&gt;f1.append(t1); f1.append(t2);&lt;br /&gt;f1.addCommand(openCmd); f1.addCommand(exitCmd);&lt;br /&gt;f1.setCommandListener(this); display.setCurrent(f1);&lt;br /&gt;}&lt;br /&gt;public void formHasilUrl(){&lt;br /&gt;f2 = new Form("Status Login");&lt;br /&gt;t3 = new TextField("",null,1024,TextField.ANY);&lt;br /&gt;bukaUrl(); f2.append(t3); f2.addCommand(backCmd);&lt;br /&gt;f2.setCommandListener(this);&lt;br /&gt;display.setCurrent(f2);&lt;br /&gt;}&lt;br /&gt;public void bukaUrl(){&lt;br /&gt;HttpConnection c = null;&lt;br /&gt;InputStream is = null;&lt;br /&gt;byte[] data;&lt;br /&gt;try{&lt;br /&gt;// Create the message digest.&lt;br /&gt;MD5Digest digest = new MD5Digest();&lt;br /&gt;// Calculate the digest value &amp; send to web server&lt;br /&gt;c = (HttpConnection)Connector.open(URL&lt;br /&gt;+"?login=" + t1.getString()&lt;br /&gt;+ "&amp;amp;p=" + digest.calculate(t2.getString()));&lt;br /&gt;is = c.openInputStream();&lt;br /&gt;f2.setTitle("Status Login");&lt;br /&gt;if(c.getResponseCode() == HttpConnection.HTTP_OK){&lt;br /&gt;data = new byte[(int)c.getLength()];&lt;br /&gt;int actual = is.read(data);&lt;br /&gt;t3.setString((new String(data)).toString());&lt;br /&gt;}&lt;br /&gt;if (is != null){ is.close();}&lt;br /&gt;if (c != null){ c.close(); }&lt;br /&gt;}catch(IOException e){&lt;br /&gt;t3.setString("Error I/O : " + e.toString());&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public void keluar(){ destroyApp(true); }&lt;br /&gt;public void kembali(){ display.setCurrent(f1); }&lt;br /&gt;public void commandAction(Command c, Displayable d){&lt;br /&gt;String lbl = c.getLabel();&lt;br /&gt;if(lbl.equals("Keluar")){&lt;br /&gt;keluar();&lt;br /&gt;}else if(lbl.equals("Login")){&lt;br /&gt;formHasilUrl();&lt;br /&gt;}else if(lbl.equals("Kembali")){&lt;br /&gt;kembali();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public void pauseApp() {}&lt;br /&gt;public void destroyApp(boolean unconditional){notifyDestroyed();}&lt;br /&gt;}&lt;br /&gt;MIDlet sederhana diatas akan mengakses aplikasi PHP sederhana untuk pengecekan password. Perhatikan hasil eksekusi berikut dengan proses koneksi HTTP via MIDlet yang terjadi, dimana tampak password tidak dikirimkan apa adanya lagi tapi sudah berupa message digest dari password. Pendekatan diatas tentulah tidak sempurna, jadi jika anda ingin transaksi internet yang aman gunakanlah SSL. Sayang sekali spesifikasi MIDP 1.0 yang ada saat ini belum mendukung penggunaan SSL, karena implementasi untuk SSL relatif rumit. Dukungan SSL ini akan ada pada MIDP 2.0.&lt;br /&gt;&lt;br /&gt;III Enkripsi Simetrik RC4 untuk Proteksi Data&lt;br /&gt;Pendekatan lain untuk mengamankan data anda selama transaksi network selama MIDP 1.0 belum mendukung SSL adalah dengan menggunakan metode enkripsi baik simetrik atau asitemetrik. Penulis akan mencoba mengulas penggunaan algoritma RC4 yang merupakan algoritma enkripsi simetrik untuk pengamanan data ini. Algoritma RC4 ini diciptakan oleh ahli matematik Ron Rivest penemu algoritma RSA yang kemudian dipatenkan dan menjadi nama perusahaan keamanan data terkemuka, yakni RSA (www.rsa.com). RC4 digunakan oleh banyak sekali aplikasi besar semacam Oracle dan Microsoft SQL Server. Kembali ke aplikasi yang akan mencoba RC4, skenario yang terjadi antara aplikasi client dan server digambarkan sebagai berikut:&lt;br /&gt;1. Client MIDlet pada ponsel ingin mengirimkan data rahasia ke web server&lt;br /&gt;2. Web server telah menyimpan informasi password pengguna, misalnya “rahasia”. Informasi password ini hanya dimiliki oleh web server dan pengguna ponsel.&lt;br /&gt;3. Client MIDlet mengirimkan data yang dienkripsi dengan RC4, dimana kunci enkripsi yang&lt;br /&gt;digunakan adalah passwordnya. Dalam hal ini hasil enkripsi hanya akan bisa dibuka dengan algoritma RC4 dan kunci dekripsi password yang diketahui oleh pengguna ponsel dan web server saja.&lt;br /&gt;Implementasi dari algoritma RC4 ini ditulis ulang oleh penulis dari kode asli di&lt;br /&gt;www.bouncycastle.org sebagai berikut :&lt;br /&gt;/* Implementasi enkripsi simetrik&lt;br /&gt;RC4, kode diambil dari www.bouncycastle.org&lt;br /&gt;Nama file : RC4Engine.java&lt;br /&gt;*/&lt;br /&gt;class KeyParameter{&lt;br /&gt;private byte[] key;&lt;br /&gt;public KeyParameter(byte[] key){&lt;br /&gt;this(key, 0, key.length);&lt;br /&gt;}&lt;br /&gt;public KeyParameter(byte[] key, int keyOff,&lt;br /&gt;int keyLen){&lt;br /&gt;this.key = new byte[keyLen];&lt;br /&gt;System.arraycopy(key, keyOff, this.key, 0, keyLen);&lt;br /&gt;}&lt;br /&gt;public byte[] getKey(){&lt;br /&gt;return key;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;class EncRC4Engine{&lt;br /&gt;private final static int STATE_LENGTH = 256;&lt;br /&gt;private byte[] engineState = null, workingKey = null;&lt;br /&gt;private int x = 0, y = 0;&lt;br /&gt;private static final char[] kDigits = {&lt;br /&gt;'0','1','2','3','4','5','6','7','8','9',&lt;br /&gt;'a','b','c','d','e','f' };&lt;br /&gt;EncRC4Engine(){} // Konstruktor&lt;br /&gt;/**&lt;br /&gt;* Inisialisasi chiper RC4&lt;br /&gt;* Parameter "forEncryption" harus diset&lt;br /&gt;- true jika akan dilakukan proses enkripsi&lt;br /&gt;- false jika akan dilakukan proses dekripsi&lt;br /&gt;* Parameter "params" merupakan kunci untuk proses enkripsi/dekripsi&lt;br /&gt;*/&lt;br /&gt;public void init(boolean forEncryption,&lt;br /&gt;KeyParameter params){&lt;br /&gt;if (params instanceof KeyParameter){&lt;br /&gt;workingKey = ((KeyParameter)params).getKey();&lt;br /&gt;setKey(workingKey);&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;throw new&lt;br /&gt;IllegalArgumentException("invalid parameter passed to RC4 init - "&lt;br /&gt;+ params.getClass().getName());&lt;br /&gt;}&lt;br /&gt;public void processBytes(byte[] in, int inOff,&lt;br /&gt;int len, byte[] out,int outOff){&lt;br /&gt;if ((inOff + len) &gt; in.length){&lt;br /&gt;throw new RuntimeException("input buffer too short");&lt;br /&gt;}&lt;br /&gt;if ((outOff + len) &gt; out.length){&lt;br /&gt;throw new RuntimeException("output buffer too short");&lt;br /&gt;}&lt;br /&gt;for (int i = 0; i &lt; len ; i++){&lt;br /&gt;x = (x + 1) &amp; 0xff;&lt;br /&gt;y = (engineState[x] + y) &amp; 0xff;&lt;br /&gt;// swap&lt;br /&gt;byte tmp = engineState[x];&lt;br /&gt;engineState[x] = engineState[y];&lt;br /&gt;engineState[y] = tmp;&lt;br /&gt;// xor&lt;br /&gt;out[i+outOff] = (byte)(in[i + inOff]&lt;br /&gt;^ engineState[(engineState[x] + engineState[y])&lt;br /&gt;&amp; 0xff]);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public String bytesToHex(byte[] raw) {&lt;br /&gt;int length = raw.length;&lt;br /&gt;char[] hex = new char[length * 2];&lt;br /&gt;for (int i = 0; i &lt; length; i++) {&lt;br /&gt;int value = (raw[i] + 256) % 256;&lt;br /&gt;int highIndex = value &gt;&gt; 4;&lt;br /&gt;int lowIndex = value &amp; 0x0f;&lt;br /&gt;hex[i * 2 + 0] = kDigits[highIndex];&lt;br /&gt;hex[i * 2 + 1] = kDigits[lowIndex];&lt;br /&gt;}&lt;br /&gt;return (new String(hex)).toString();&lt;br /&gt;}&lt;br /&gt;public void reset(){&lt;br /&gt;setKey(workingKey);&lt;br /&gt;}&lt;br /&gt;// Private implementation&lt;br /&gt;private void setKey(byte[] keyBytes){&lt;br /&gt;workingKey = keyBytes;&lt;br /&gt;x = 0; y = 0;&lt;br /&gt;if (engineState == null){&lt;br /&gt;engineState = new byte[STATE_LENGTH];&lt;br /&gt;}&lt;br /&gt;// reset the state of the engine&lt;br /&gt;for (int i=0; i &lt; STATE_LENGTH; i++){&lt;br /&gt;engineState[i] = (byte)i;&lt;br /&gt;}&lt;br /&gt;int i1 = 0, i2 = 0;&lt;br /&gt;for (int i=0; i &lt; STATE_LENGTH; i++){&lt;br /&gt;i2 = ((keyBytes[i1] &amp; 0xff) + engineState[i] + i2) &amp;amp; 0xff;&lt;br /&gt;// do the byte-swap inline&lt;br /&gt;byte tmp = engineState[i];&lt;br /&gt;engineState[i] = engineState[i2];&lt;br /&gt;engineState[i2] = tmp;&lt;br /&gt;i1 = (i1+1) % keyBytes.length;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Jika anda ingin menggunakan kelas tersebut dalam sebuah program, silakan coba listing berikut ini:&lt;br /&gt;import java.io.*;&lt;br /&gt;class tesRC4Engine {&lt;br /&gt;public static void main(String args[]){&lt;br /&gt;try {&lt;br /&gt;String myKey1,myKey2,text2Encrypt,text2Decrypt;&lt;br /&gt;BufferedReader b;&lt;br /&gt;byte[] ciphertext1,ciphertext2;&lt;br /&gt;RC4Engine s1 = new RC4Engine();&lt;br /&gt;RC4Engine s2 = new RC4Engine();&lt;br /&gt;b = new BufferedReader(new InputStreamReader(System.in));&lt;br /&gt;System.out.print("Masukkan data untuk dienkripsi : ");&lt;br /&gt;text2Encrypt = b.readLine();&lt;br /&gt;System.out.print("Masukkan kunci enkripsi : ");&lt;br /&gt;myKey1 = b.readLine();&lt;br /&gt;s1.init(true,new KeyParameter(myKey1.getBytes()));&lt;br /&gt;ciphertext1 = new byte[text2Encrypt.length()];&lt;br /&gt;s1.processBytes(text2Encrypt.getBytes(),&lt;br /&gt;0, text2Encrypt.length(), ciphertext1, 0);&lt;br /&gt;System.out.print("Hasil Enkripsi dari \"" + text2Encrypt );&lt;br /&gt;System.out.println("\" adalah " + s1.bytesToHex(ciphertext1));&lt;br /&gt;text2Decrypt = s1.bytesToHex(ciphertext1);&lt;br /&gt;System.out.print("Masukkan kunci untuk dekripsi : ");&lt;br /&gt;myKey2 = b.readLine();&lt;br /&gt;s2.init(false,new KeyParameter(myKey2.getBytes()));&lt;br /&gt;ciphertext2 = new byte[ciphertext1.length];&lt;br /&gt;s2.processBytes(ciphertext1, 0, ciphertext1.length,&lt;br /&gt;ciphertext2, 0);&lt;br /&gt;System.out.print("Hasil Dekripsi dari \"" + text2Decrypt);&lt;br /&gt;System.out.println("\" adalah "&lt;br /&gt;+ (new String(ciphertext2)).toString());&lt;br /&gt;}catch(IOException e){&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Kompilasi dan hasil eksekusinya adalah sebagai berikut :&lt;br /&gt;C:\&gt;javac RC4Engine.java&lt;br /&gt;C:\&gt;javac tesRC4Engine.java&lt;br /&gt;C:\&gt;java tesRC4Engine&lt;br /&gt;Masukkan data untuk dienkripsi : coba crack data ini&lt;br /&gt;Masukkan kunci enkripsi : rahasia&lt;br /&gt;Hasil Enkripsi dari "coba crack data ini"&lt;br /&gt;adalah c983fc14279dbe0a657cfd0e6fe95819382008&lt;br /&gt;Masukkan kunci untuk dekripsi : rahasia&lt;br /&gt;Hasil Dekripsi dari "c983fc14279dbe0a657cfd0e6fe95819382008"&lt;br /&gt;adalah coba crack data ini&lt;br /&gt;C:\&gt;java tesRC4Engine&lt;br /&gt;Masukkan data untuk dienkripsi : tes2&lt;br /&gt;Masukkan kunci enkripsi : rahasia&lt;br /&gt;Hasil Enkripsi dari "tes2" adalah de89ed47&lt;br /&gt;Masukkan kunci untuk dekripsi : tidak tahu&lt;br /&gt;Hasil Dekripsi dari "de89ed47" adalah ]å_é&lt;br /&gt;Perhatikan bahwa pada contoh eksekusi kedua hasil dekripsi salah, karena kunci dekripsi&lt;br /&gt;tidak sama dengan kunci enkripsi. Penggunaan kelas RC4Engine di atas sederhana, yakni sebagai&lt;br /&gt;berikut :&lt;br /&gt;Kajian dan Implementasi Sistem Keamanan Data pada Ponsel Berbasis J2ME Menggunakan Profile MIDP 1.0&lt;br /&gt;Halaman 19&lt;br /&gt;1. Buatlah sebuah objek RC4Engine kemudian inisialisasi&lt;br /&gt;RC4Engine enkripsi = new RC4Engine()&lt;br /&gt;RC4Engine dekripsi = new RC4Engine()&lt;br /&gt;2. Inisialisasi mesin enkripsi/dekripsi berikut kunci yang akan digunakan untuk&lt;br /&gt;enkripsi/dekripsi. Untuk proses enkripsi :&lt;br /&gt;String kunciEnkripsi = “akey”;&lt;br /&gt;enkripsi.init(true,new KeyParameter(kunciEnkripsi.getBytes()));&lt;br /&gt;Untuk proses dekripsi&lt;br /&gt;String kunciDekripsi = “suatukunci”;&lt;br /&gt;dekripsi.init(false,new KeyParameter(kunciDekripsi.getBytes()));&lt;br /&gt;3. Buat sebuah variabel array of bytes yang besar buffernya sepanjang panjang string data&lt;br /&gt;yang akan dienkripsi/dekripsi&lt;br /&gt;String data1 = “data rahasia”; // Data untuk dienkripsi&lt;br /&gt;byte[] hasilenkripsi = new byte[data1.length()];&lt;br /&gt;// Data untuk didekripsi&lt;br /&gt;String data2 = “c983fc14279dbe0a657cfd0e6fe95819382008”;&lt;br /&gt;byte[] hasildekripsi = new byte[data2.length()];&lt;br /&gt;4. Lakukan proses enkripsi/dekripsi dengan memanggil fungsi processByte(). Untuk enkripsi :&lt;br /&gt;enkripsi.processBytes(data1.getBytes(), 0, data1.length(), hasilenkripsi,&lt;br /&gt;0);&lt;br /&gt;Untuk dekripsi :&lt;br /&gt;dekripsi.processBytes(data2.getBytes(), 0,data2.length(), hasildekripsi,&lt;br /&gt;0);&lt;br /&gt;5. Hasil enkripsi dan dekripsi ada pada buffer pada poin 3&lt;br /&gt;Sekarang mari kita coba penggunaanya dalam lingkungan J2ME, dalam kasus dimana kita ingin mengirim sebuah data yang sangat rahasia ke sebuah web server untuk disimpan. Kunci yang dipakai untuk enkripsi dan dekripsi telah dishare secara offline atau manual dan hanya diketahui oleh web server dan pengguna ponsel yang bersangkutan. Aplikasi pada sisi server akan menggunakan servlet Java, dimana panduan instalasinya bisa anda peroleh pada bagian lampiran.&lt;br /&gt;Jangan lupa, anda copy file RC4Engine.java ke direktori src/ dari proyek J2ME wireless toolkit anda sebelum mengkompilasi kode MIDP ini. Dan kode MIDlet untuk simpan data rahasia tersebut adalah :&lt;br /&gt;/* NamaFile:c:\J2mewtk\apps\proteksi\src\secretData.java(J2METoolkit 1.0.3)&lt;br /&gt;c:\WTK104\apps\proteksi\src\secretData.java (J2ME Toolkit 1.0.4)&lt;br /&gt;Deskripsi: MIDP client untuk akses form penyimpan data rahasia dengan&lt;br /&gt;memberikan data yang dienkripsi dengan RC4&lt;br /&gt;*/&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;import java.io.*;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;import java.util.*;&lt;br /&gt;public class secretData extends MIDlet&lt;br /&gt;implements CommandListener {&lt;br /&gt;private Display display;&lt;br /&gt;private Command openCmd =&lt;br /&gt;new Command("Simpan",Command.OK,1);&lt;br /&gt;private Command exitCmd =&lt;br /&gt;new Command("Keluar",Command.EXIT,2);&lt;br /&gt;private Command backCmd =&lt;br /&gt;new Command("Kembali",Command.EXIT,2);&lt;br /&gt;private Form f1,f2;&lt;br /&gt;private TextField t1,t2;&lt;br /&gt;private String URL =&lt;br /&gt;new String("http://127.0.0.1:8080/examples/servlet/saveData");&lt;br /&gt;// Ini kunci untuk enkripsi dan dekripsi pada RC4&lt;br /&gt;private String KUNCI_RAHASIA = "secretWord2003";&lt;br /&gt;public secretData(){}&lt;br /&gt;public void startApp(){&lt;br /&gt;display = Display.getDisplay(this);&lt;br /&gt;f1 = new Form("Data Rahasia");&lt;br /&gt;t1 = new TextField("Masukkan Data","",1024,TextField.ANY);&lt;br /&gt;f1.append(t1);&lt;br /&gt;f1.addCommand(openCmd); f1.addCommand(exitCmd);&lt;br /&gt;f1.setCommandListener(this); display.setCurrent(f1);&lt;br /&gt;}&lt;br /&gt;public void formHasilUrl(){&lt;br /&gt;f2 = new Form("Status Penyimpanan");&lt;br /&gt;t2 = new TextField("",null,1024,TextField.ANY);&lt;br /&gt;bukaUrl(); f2.append(t2); f2.addCommand(backCmd);&lt;br /&gt;f2.setCommandListener(this);&lt;br /&gt;display.setCurrent(f2);&lt;br /&gt;}&lt;br /&gt;public void bukaUrl(){&lt;br /&gt;HttpConnection c = null;&lt;br /&gt;InputStream is = null;&lt;br /&gt;byte[] data;&lt;br /&gt;String text2Encrypt;&lt;br /&gt;byte[] ciphertext1,ciphertext2;&lt;br /&gt;RC4Engine s1;&lt;br /&gt;try{&lt;br /&gt;// --- Enkripsi password RC4 dengan KUNCI_RAHASIA&lt;br /&gt;s1 = new RC4Engine();&lt;br /&gt;text2Encrypt = t1.getString();&lt;br /&gt;s1.init(true,new KeyParameter(KUNCI_RAHASIA.getBytes()));&lt;br /&gt;ciphertext1 = new byte[text2Encrypt.length()];&lt;br /&gt;s1.processBytes(text2Encrypt.getBytes(), 0,&lt;br /&gt;text2Encrypt.length(), ciphertext1, 0);&lt;br /&gt;// Kirim password yang terenkripsi ke server&lt;br /&gt;System.out.println("Accessing " + URL + "?dt="&lt;br /&gt;+ s1.bytesToHex(ciphertext1));&lt;br /&gt;c = (HttpConnection)Connector.open(URL + "?dt="&lt;br /&gt;+ s1.bytesToHex(ciphertext1));&lt;br /&gt;is = c.openInputStream();&lt;br /&gt;f2.setTitle("Respon Web Server");&lt;br /&gt;if(c.getResponseCode() == HttpConnection.HTTP_OK){&lt;br /&gt;data = new byte[(int)c.getLength()];&lt;br /&gt;int actual = is.read(data);&lt;br /&gt;t2.setString((new String(data)).toString());&lt;br /&gt;}else{&lt;br /&gt;t2.setString("HTTP " + c.getResponseCode()&lt;br /&gt;+ " " + c.getResponseMessage());&lt;br /&gt;}&lt;br /&gt;if (is != null){ is.close();}&lt;br /&gt;if (c != null){ c.close(); }&lt;br /&gt;}catch(IOException e){&lt;br /&gt;t2.setString("Error I/O : " + e.toString());&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public void keluar(){ destroyApp(true); }&lt;br /&gt;public void kembali(){ display.setCurrent(f1); }&lt;br /&gt;public void commandAction(Command c, Displayable d){&lt;br /&gt;String lbl = c.getLabel();&lt;br /&gt;if(lbl.equals("Keluar")){&lt;br /&gt;keluar();&lt;br /&gt;}else if(lbl.equals("Simpan")){&lt;br /&gt;formHasilUrl();&lt;br /&gt;}else if(lbl.equals("Kembali")){&lt;br /&gt;kembali();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public void pauseApp() {}&lt;br /&gt;public void destroyApp(boolean unconditional){notifyDestroyed();}&lt;br /&gt;}&lt;br /&gt;Adapun kode Servlet Java untuk menyimpan data rahasia, jangan lupa copy file&lt;br /&gt;RC4Engine.java ke direktori c:\jakarta-tomcat\webapps\examples\WEB-INF\classes dan kompilasi&lt;br /&gt;RC4Engine.java tesebut.&lt;br /&gt;/*Namafile:C:\jakarta-tomcat\webapps\examples\WEB-INF\classes\saveData.java&lt;br /&gt;Data hanya diterima dan didekripsi saja tidak disimpan sebagai file&lt;br /&gt;*/&lt;br /&gt;import java.io.*;&lt;br /&gt;import java.util.*;&lt;br /&gt;import javax.servlet.*;&lt;br /&gt;import javax.servlet.http.*;&lt;br /&gt;class HexCodec {&lt;br /&gt;private static final char[] kDigits = {&lt;br /&gt;'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',&lt;br /&gt;'a', 'b', 'c', 'd', 'e', 'f'&lt;br /&gt;};&lt;br /&gt;public static char[] bytesToHex(byte[] raw) {&lt;br /&gt;int length = raw.length;&lt;br /&gt;char[] hex = new char[length * 2];&lt;br /&gt;for (int i = 0; i &lt; length; i++) {&lt;br /&gt;int value = (raw[i] + 256) % 256;&lt;br /&gt;int highIndex = value &gt;&gt; 4;&lt;br /&gt;int lowIndex = value &amp; 0x0f;&lt;br /&gt;hex[i * 2 + 0] = kDigits[highIndex];&lt;br /&gt;hex[i * 2 + 1] = kDigits[lowIndex];&lt;br /&gt;}&lt;br /&gt;return hex;&lt;br /&gt;}&lt;br /&gt;public static byte[] hexToBytes(char[] hex) {&lt;br /&gt;int length = hex.length / 2;&lt;br /&gt;byte[] raw = new byte[length];&lt;br /&gt;for (int i = 0; i &lt; length; i++) {&lt;br /&gt;int high = Character.digit(hex[i * 2], 16);&lt;br /&gt;int low = Character.digit(hex[i * 2 + 1], 16);&lt;br /&gt;int value = (high &lt;&lt; 4)  low;&lt;br /&gt;if (value &gt; 127) value -= 256;&lt;br /&gt;raw[i] = (byte)value;&lt;br /&gt;}&lt;br /&gt;return raw;&lt;br /&gt;}&lt;br /&gt;public static byte[] hexToBytes(String hex) {&lt;br /&gt;return hexToBytes(hex.toCharArray());&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public class saveData extends HttpServlet {&lt;br /&gt;// Entri poin request GET dari klien akan dihandle oleh&lt;br /&gt;// Fungsi ini&lt;br /&gt;public void doGet(HttpServletRequest request,&lt;br /&gt;HttpServletResponse response)&lt;br /&gt;throws IOException, ServletException{&lt;br /&gt;// Ini kunci untuk enkripsi dan dekripsi pada RC4&lt;br /&gt;String KUNCI_RAHASIA = "secretWord2003";&lt;br /&gt;RC4Engine s = new RC4Engine();&lt;br /&gt;byte[] text;&lt;br /&gt;byte[] Bytes_ciphertext;&lt;br /&gt;response.setContentType("text/html");&lt;br /&gt;PrintWriter out = response.getWriter();&lt;br /&gt;String ciphertext = request.getParameter("dt");&lt;br /&gt;if(ciphertext == null){&lt;br /&gt;out.println("Data variabel dt tidak ada");&lt;br /&gt;}else{&lt;br /&gt;Bytes_ciphertext = HexCodec.hexToBytes(ciphertext);&lt;br /&gt;s.init(false,new KeyParameter(KUNCI_RAHASIA.getBytes()));&lt;br /&gt;text = new byte[Bytes_ciphertext.length];&lt;br /&gt;s.processBytes(Bytes_ciphertext, 0,&lt;br /&gt;Bytes_ciphertext.length, text, 0);&lt;br /&gt;System.out.println("Ciphertext = " + ciphertext);&lt;br /&gt;out.println("Data \"" + (new String(text)).toString()&lt;br /&gt;+ "\" .... Sudah diterima");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Hasil eksekusi dari MIDlet yang ada semacam ini :&lt;br /&gt;Jika anda perhatikan dari network monitoring pada J2ME toolkit versi 1.0.4, maka akan&lt;br /&gt;nampak MIDlet mengirimkan request ke Servlet Java dengan URL semacam ini :&lt;br /&gt;http://127.0.0.1:8080/examples/servlet/saveData?dt=8c8857f0de18fb255baf3000&lt;br /&gt;c8dfe647c951a1cfe36b16fb34ecbe4d37b05660213580c1ad1f8d4ad3ed6877&lt;br /&gt;Yang jika anda akses menggunakan Internet Explorer tampak hasil yang sama dengan tampilandi MIDlet ponsel anda.&lt;br /&gt;Seperti telah dikemukakan sebelumnya, pada MIDP versi 1.0, fasilitas untuk membuat aplikasi keamanan belumlah disiapkan secara khusus oleh sang pembuat J2ME. Pada MIDP 2.0 mulai diperkenalkan konsep yang dinamakan dengan trusted application yang memungkinkan untuk membatasi penggunaan sebuah aplikasi atau bahkan menolaknya jika MIDlet suite tidak dilengkapi dengan semacam kartu pas atau sertifikat.&lt;br /&gt;Sistem keamanan pada Trusted MIDlet Suite didasarkan pada protection domain. Protection domain ini berisi sertifikat yang dimaksudkan agar mengijinkan MIDlet yang bersangkutan bekerja dalam domain tersebut. Pemilik Protection Domain ini memberikan gambaran terlebih dahulu tentang bagaimana peralatan harus mengidentifikasi sebuah MIDlet suite. Dengan identifikasi ini, maka pemilik protection domain berarti telah mengikat sebuah aplikasi dengan sebuah protection domain dalam bentuk aturan permisi yang diwakili oleh sertifikat yang memungkinkan akses ke API atau fungsi yang dilindungi. Jadi Sertifikat ini diciptakan dahulu oleh pemilik protection domain sebelum aplikasi dikirimkan. Mekanisme pengenalan oleh peralatan ini dikirimkan secara terpisah bersamaan dengan dikirimkannya aplikasi yang dimaksud. Di tempat yang dituju, aplikasi akan dibuka dengan memperhatikan sertifikat tersebut.&lt;br /&gt;Trusted MIDlet Suite pada MIDP 2.0 menggunakan X.509 PKI yang berisi mekanisme untuk mengidentifikasikan trusted MIDlet suite melalui mekanisme pengenalan dan verifikasi signature atau tanda tangan digital.&lt;br /&gt;&lt;br /&gt;IV Model Otorisasi&lt;br /&gt;Model otorisasi dari sebuah MIDlet suite diperoleh dengan cara menghubungkan beberapa elemen berikut :&lt;br /&gt;·  Sebuah protection domain yang berisi sekumpulan aturan perijinan yang diperbolehkan termasuk perijinan terhadap user&lt;br /&gt;·  Sekumpulan perijinan yang diminta oleh MIDlet suite dalam bentuk atribut MIDlet- Permissions dan MIDlet-Permissions-Opt&lt;br /&gt;·  Sekumpulan perijinan untuk masing-masing API atau fungsi para peralatan yang merupakan gabungan dari semua perijinan yang didefinisikan oleh setiap API pada peralatan untuk melindungi fungsi tertentu.&lt;br /&gt;·  User yang menginginkan bantuan perijinan&lt;br /&gt;Dalam MIDP, digunakan apa yang dinamakan dengan TLS dan SSL.TLS atau Transport Layer Security adalah protokol yang memungkinkan otentifikasi dan enkripsi data melalui kondisi jaringan yang tidak aman. protocol. Sedangkan SSL atau Secure Socket layer adalah layer yang berada antara TCP/IP dan protokol jaringan di tingkat yang lebih tinggi seperti HTTP, SMTP, dan NNTP. Implementasi dari SSL dalam web browser bagi user bertujuan untuk menyediakan otentifikasi kriptografi, dan enkripsi berbasis session yang mudah digunakan.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IV.1 Transport Layer Security&lt;br /&gt;Protokol TLS merupakan versi update dari protokol SSLv3 yang dibuat oleh Netscape. Salah satu kelebihan TLS adalah bahwa TLS beroperasi diatas soket TCP/IP, dan memiliki perilaku seperti halnya soket TCP/IP. Oleh karena itulah maka relatif lebih mudah membuat aplikasi jaringan menggunakan soket TLS. Salah satunya adalah aplikasi yeng menggunakan HTTPS, yang merupakan protokol HTTP yang berjalan pada sebuah soket TLS atau SSL. Protokol TLS diawali dengan handshake, yaitu kondisi dimana client dan server mencoba untuk menyetujui sebuah cipher suite, yaitu sekelompok algoritma kriptografi yang akan digunakannya untuk otentifikasi dan enkripsi session. Ketika client dan server telah berhasil melakukan nogosiasi dalam bentuk cipher suite, maka mereka akan dapat mengotentifiaksi satu sama lain serta membangkitkan premaster secret, yang merupakan dasar dari session key. Session key ini digunakan untuk enkripsi dan dekripsi semua tafik data yang dikirim antara client dan server.&lt;br /&gt;IV.2 Otentifikasi SSL dan TLS&lt;br /&gt;Server akan melakukan proses otentifikasi dengan cara mengirimkan sertifikat yang berisi private key. Untuk memverifikasi sertifikat tersebut, client harus memiliki sertifikat root sebagai kunci yang digunakan untuk menandatangani sertifikat dari server.&lt;br /&gt;&lt;br /&gt;V. TLS pada MIDP 1.0&lt;br /&gt;Dalam MIDP 1.0, tipe koneksi jaringan yang dikenal hanyalah koneksi HTTP. Berdasarkan Generic Connection Framework (Silakan baca buku Tip dan Trik J2ME Tingkat Lanjutan), para pembuat aplikasi MIDP bebas untuk menggunakan tipe koneksi tambahan termasuk  diantaranya&lt;br /&gt;adalah penggunaan soket TLS maupun koneksi HTTPS. Untuk mendapatkan koneksi HTTPS dapat dilakukan seperti contoh berikut :&lt;br /&gt;HttpConnection hc = (HttpConnection)&lt;br /&gt;Connector.open("https://www.cert.org/");&lt;br /&gt;Apabila anda mendapati pesan ConnectionNotFoundException ketika mencoba terhubung ke sebuah server, berarti dapat disimpulkan bahwa implementasi tidak mendukung HTTPS.&lt;br /&gt;&lt;br /&gt;VI. TLS pada MIDP 2.0&lt;br /&gt;Dalam aplikasi MIDP 2.0 yang mampu mendukung HTTPS, maka data dapat dikirimkan melalui beberapa protokol berikut :&lt;br /&gt;·  TLS 1.0&lt;br /&gt;·  SSLv3&lt;br /&gt;·  Wireless Transport Layer Security (WTLS)&lt;br /&gt;·  WAP TLS Profile dan Tunneling Specification&lt;br /&gt;Dalam MIDP 2.0 terdapat API baru yang menyediakan bagi MIDlet informasi tentang koneksi yang aman. Spesifikasi MIDP 2.0 menggunakan antarmuka javax.microedition.io.HttpsConnection yang merupakan ekstensi untuk HttpConnection. Antarmuka yang baru ini memiliki metode getSecurityInfo() yang akan mengembalikan info dari antarmuka baru yang lain yaitu SecurityInfo. Antarmuka SecurityInfo merupakan metode yang akan mengembalikan informasi tentang sebuah koneksi yang aman misalnya :&lt;br /&gt;public String getProtocolName()&lt;br /&gt;public String getProtocolVersion()&lt;br /&gt;public String getCipherSuite()&lt;br /&gt;public Certificate getServerCertificate()&lt;br /&gt;Melalui metode-metode diatas, anda dapat mencari tahun nama dan versi dari protocol yang sedang digunakan apakah TLS, SSL, atau WTLS. Sedangkan metode getCipherSuite() akan mengembalikan nama dari cipher suite, Sebagai contoh, apabila koneksi referensi MIDP 2.0 dari emulator adalah https://www.cert.org/ maka nama cipher suite yang akan diperoleh adalah:&lt;br /&gt;TLS_RSA_WITH_RC4_128_SHA&lt;br /&gt;Dari format diatas, maka algoritma yang digunakan untuk pertukaran kuncinya adalah RSA. Selain itu cipher stream yang digunakan adalah RC4 dengan session key 128-bit yang digunakan untuk enkripsi data. Dan yang terakhir, fungsi message digest yang digunakan adalah SHA-1. Sedangkan merode getServerCertificate() akan mengembalikan contoh dari javax.microedition.pki.Certificate, yang merupakan representasi dari sertifikat kriptografi. Antarmuka sertifikat memiliki metode yang dapat digunakan untuk menentukan subyek dari sertifikat, pihak yang mengeluarkannya, tipenya, dan berbagai informasi lainnya. Sebagai contoh, mendapatkan nama pada sertifikat server dapat dilakukan sebagia berikut :&lt;br /&gt;String url = "https://www.cert.org/";&lt;br /&gt;HttpsConnection hc = null;&lt;br /&gt;hc = (HttpsConnection)Connector.open(url);&lt;br /&gt;SecurityInfo info = hc.getSecurityInfo();&lt;br /&gt;Certificate c = info.getServerCertificate();&lt;br /&gt;String name = c.getIssuer();&lt;br /&gt;&lt;br /&gt;VII Jenis Otentifikasi&lt;br /&gt;Dalam komunikasi jaringan yang melibatkan dua buah peralatan, client akan mencari layanan untuk melakukan inisialisasi koneksi dan server akan menerimanya. Otentifikasi antara dua peralatan tersebut akan mengalami dua proses :&lt;br /&gt;·  Otentifikasi Server yaitu proses dimana server membuktikan identitasnya ke client. Implementasi HTTPS pada MIDP 2.0 mendukung secara langsung otentifikasi server menggunakan sertifikat X.509.&lt;br /&gt;·  Otentifikasi Client yaitu proses dimana client membuktikan identitasnya ke server. Otentifikasi Server diperlukan karena user perlu diyakinkan bahwa transaksi adalah sah. Otentifikasi Server  iasanya ditangani dengan HTTPS. Otentifikasi Client diperlukan karena transaksi memerlukan jaminan bahwa user melakukan transaksi dengan tepat.&lt;br /&gt;&lt;br /&gt;VII.1 Otentifikasi Password pada MIDP&lt;br /&gt;Sebuah teknik otentifikasi yang banyak menggunakan aplikasi web adalah otentifikasi password. Seorang user mengirimkan login dan password rahasia, kemudian server memeriksanya di database. Jika password benar, maka user diberi otentifikasi untuk memasuki server. Skema password sederhana memiliki dua persoalan mendasar. Pertama adalah seringkali user tidak mampu menangani password ini dengan baik misalnya password mudah ditebak dan sebagainya. Persoalan kedua adalah proses otentifikasi password yang sederhana dimana password berbentuk teks sederhana dikirimkan antara client dan server. Ada dua solusi untuk masalah ini. Salah satunya adalah dengan mengirimkan informasi otentifikasi yang telah ternkripsi melalui jaringan. Pada MIDP, sebuah skema otentifikasi password sederhana dapat dihasilkan dengan menambahkan nama dan password ke sebuah URL HTTP atau HTTPS seperti contoh berikut :&lt;br /&gt;String user = "aditya";&lt;br /&gt;String password = "hartanto76";&lt;br /&gt;String base = "https://somehost.com/someservlet";&lt;br /&gt;String url = base + "?user=" + user + "&amp;password=" + password;&lt;br /&gt;HttpsConnection hc = (HttpsConnection)Connector.open(url);&lt;br /&gt;Karena masing-masing peralatan MIDP biasanya adalah milik pribadi seseorang, nama user dan password dapat disimpan didalam peralatan sehingga user tak perlu memasukkannya berulang-ulang setiap kali ingin menggunakan aplikasi.&lt;br /&gt;VII.2 Otentifikasi Client Menggunakan Sertifikat&lt;br /&gt;Jika anda ingin menambahkan informasi otentifikasi pada sebuah aplikasi client, maka anda dapat menggunakan sertifikat X.509. Prosesnya adalah dengan membuat sepasang root key dan sebuah root certificate yang merepresentasikan aplikasi tersebut. Selanjutnya, buatlah pasangan client key dan sertifikat yang ditandatangani oleh root key. Masing-masing copy dari software client dapat dipaket dengan sebuah client key dan sertifikat yang unik. Dan ketika client melakukan koneksi ke server, maka client dapat menggunakan private key yang dimilikinya untuk menandatangani atau mengenkripsi beberapa data, dan selanjutnya mengirimkan tanda tangan dan sertifikatnya ke server, seperti Gambar 10 berikut. Selanjutnya server akan menggunakan root certificate dari aplikasi untuk memverifikasi identitas dari client serta menggunakan client certificate untuk memverifikasi tanda tangannya.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VIII. Menandatangani sebuah MIDlet Suite&lt;br /&gt;Dalam sebuah model keamanan midlet, maka didalamnya akan melibatkan MIDlet suite, tanda tangan, dan sertifikat public key. Sebagai tambahan, sertifikat root dapat dihadirkan dalam bentuk removable media seperti SIM(WIM) card/modul USIM. Implementasi harus mendukung sertifikat X.509 beserta algoritma yang bersesuaian.&lt;br /&gt;Pemberi tanda tangan pada MIDlet suite bisa jadi adalah seorang developer atau beberapa entitas yang bertanggung jawab terhadap proses distribusi, supporti dan mungkin juga billing atas penggunaan MIDlet tersebut. Pemberi tanda tangan akan memerlukan sebuah sertifikat public key yang dapat divallidasi ke sebuah sertifikat root untuk perlindungan domain pada peralatan. Public key digunakan untuk memverifikasi tanda tangan pada MIDlet suite. Public key seperti telah disebutkan sebelumnya disediakan dalam bentuk sertifikat RSA X.509 yang terdapat dalam&lt;br /&gt;descriptor dari aplikasi.&lt;br /&gt;&lt;br /&gt;IX. Membuat Sertifikat Tanda Tangan&lt;br /&gt;Untuk membuat sebuah sertifikat tanda tangan digital, diperlukan beberapa proses sebagai berikut:&lt;br /&gt;1. Pemberi tanda tangan perlu mengetahui aturan otorisasi untuk peralatan menghubungi certificate authority (CA) yang berwenang. Sebagai contoh, pemberi tanda tangan perlu mengirimkan distinguished name (DN)-nya beserta public key (yang umumnya, disatukan dengan paket di sebuah permintaan sertifikatt) ke sebuah certificate authority.&lt;br /&gt;2. CA menciptakan sebuah sertifikat RSA X.509 (versi 3) dan mengembalikannya ke pemberi tanda tangan.&lt;br /&gt;3. Jika digunakan lebih dari satu CA maka sebuah pemberi sertifikat tanda tangan dalam descriptor aplikasi harus berisi public key yang sama.&lt;br /&gt;&lt;br /&gt;X. Menambahkan Sertifikat ke dalam descriptor Aplikasi&lt;br /&gt;Path sertifikat akan menyertakan sertifikat dari pemberi tanda tangan dan beberapa sertifikat yang diperlukan, namun akan mengabaikan sertifikat root. Sertifikat root akan ditemukan dalam peralatan yang digunakan. Masing-masing sertifikat pada path dikodekan dengan menggunakan base64 dan ditambahkan ke dalam descriptor aplikasi dengan format :&lt;br /&gt;MIDlet-Certificate-&lt;n&gt;-&lt;m&gt;: &lt;base64&gt;&lt;br /&gt;Server&lt;br /&gt;Root&lt;br /&gt;Certificate&lt;br /&gt;(Tanda&lt;br /&gt;tangan&lt;br /&gt;sendiri)&lt;br /&gt;Client&lt;br /&gt;Client&lt;br /&gt;Certificate&lt;br /&gt;(tanda&lt;br /&gt;tangan&lt;br /&gt;oleh root)&lt;br /&gt;Sertifikat&lt;br /&gt;Bilangan acak&lt;br /&gt;Timestamp&lt;br /&gt;Tanda tangan&lt;br /&gt;Dimana :&lt;br /&gt;&lt;n&gt;:= sebuah bilangan yang sama dengan 1 untuk path sertifikat yang pertama yang berada dalam&lt;br /&gt;path sertifikat dalam deskriptor atau 1 lebih besar daripada bilangan sebelumnya untuk path&lt;br /&gt;sertifikat tambahan.&lt;br /&gt;&lt;m&gt;:= bilangan yang sama dengan 1 untuk semua sertifikat pemberi tanda tangan yang berada&lt;br /&gt;dalam path sertifikat atau 1 lebih besa daripada bilangan sebelumnya untuk bagian sertifikat&lt;br /&gt;lanjutannya.&lt;br /&gt;&lt;br /&gt;XI. Menciptakan tanda tangan digital RSA SHA-1 signature dari file JAR&lt;br /&gt;Tanda tangan digital dari sebuah JAR diciptakan dengan menggunakan private key yang dimiliki pemberi tanda tangan sesuai dengan metode pengkodean EMSA-PKCS1-v1_5 dari standard PKCS #1 versi 2.0. Tanda tangan didasarkan pada metode pengkodean base64 yang diformat sebagai sebuah atribut MIDlet-Jar-RSA-SHA1 tunggal tanpa line break dan ditambahkan ke dalam descriptor aplikasi.&lt;br /&gt;MIDlet-Jar-RSA-SHA1: &lt;base64&gt;&lt;br /&gt;&lt;br /&gt;XII. Memverifikasi Sertifikat dari Pemberi Tanda Tangan&lt;br /&gt;Path Sertifikat berisi sertifikat dari pemberi tanda tangan dari descriptor aplikasi dan sertifikat lain yang diperlukan namun tidak termasuk didalamnya sertifikat root. Proses untuk memverifikasinya adalah :&lt;br /&gt;1. Mendapatkan path sertifikat untuk pemberi tanda tangan sertifikat yang dapat diperoleh dari atribut descriptor aplikasi yaitu&lt;br /&gt;MIDlet-Certificate-1-&lt;m&gt;&lt;br /&gt;Dimana &lt;m&gt; dimulai dari 1 dan akan terus bertambah 1 sampai tidak ada atribut dengan nama yang diberikan. Nilai dari masing-masing atribut didsarkan pada sertifikat pengkodean base64 yang nantinya juga diperlukan untuk proses dekode dan parsing.&lt;br /&gt;2. Memvalidasi path sertifikat menggunakan proses valildasi path dasar yang dideskripsikan dalam RFC2459 menggunakan perlindungan domain sebagai sumber otoritatif dari sertifikat root sebuah perlindungan domain&lt;br /&gt;&lt;br /&gt;XIII. Proses verifikasi MIDlet Suite JAR&lt;br /&gt;1. Dapatkan public key dari verifikasi sertifikat pemberi tanda tangan.&lt;br /&gt;2. Dapatkan atribut MIDlet-Jar-RSA-SHA1 dari descriptor aplikasi.&lt;br /&gt;3. Dekodekan nilai atribut dari hasil tanda tangan PKCS #1 menggunakan metode base64.&lt;br /&gt;4. Gunakan public key dari pemberi tanda tangan, tanda tangan, dan SHA-1 digest dari JAR,&lt;br /&gt;untuk memverifikasi tanda tangan tersebut. Jika verifikasi tanda tangan gagal, maka akan terjadi penolakan terhadap descriptor aplikasi dan MIDlet suite. Jika proses verifikasi sertifikat , tanda tangan, dan JAR berhasil maka isi dari MIDlet suite diketahui masih utuh dan identitas dari pemberi tanda tangan akan diketahui. Proses ini harus dilakukan selama instalasi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115166798281898994?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115166798281898994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115166798281898994' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115166798281898994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115166798281898994'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/06/sistem-keamanan-data-pada-ponsel.html' title='Sistem Keamanan Data Pada Ponsel Berbasis J2ME Menggunakan Profile MIDP 1.0'/><author><name>Andi Singgih</name><uri>http://www.blogger.com/profile/09233373681518396499</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115164527685632059</id><published>2006-06-29T22:26:00.000-07:00</published><updated>2006-07-05T00:45:51.790-07:00</updated><title type='text'>J2ME Profiling dengan Wireless Toolkit</title><content type='html'>&lt;p&gt;Yohanes Wayan &amp;mdash; 203115008&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Profiling adalah tindakan mencari bagian sistem yang performanya kurang untuk dioptimasi belakangan.&lt;br /&gt;&lt;br /&gt;Profiling cukup penting karena prosesor pada mobile device agak lambat sehingga operasi yang biasanya pada desktop tidak terasa lambatnya dapat jadi mengganggu pada mobile device.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Mencoba Profiling&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Buat new project dengan nama ProfileTest dan nama MIDlet ProfileTest. Program di bawah ini (ProfileTest.java) akan mendemonstrasikan salah satu hal yang banyak mengakibatkan alokasi objek tidak diperlukan yaitu penggunaan String secara tidak tepat (membuat string seperti "1, 2, 3, 4, ..." dari array). Sebagai perbandingannya digunakan StringBuffer dengan method &lt;code&gt;append()&lt;/code&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javax.microedition.lcdui.*;&lt;br /&gt;import javax.microedition.midlet.*;&lt;br /&gt;&lt;br /&gt;public class ProfileTest&lt;br /&gt;    extends MIDlet &lt;br /&gt;    implements CommandListener {&lt;br /&gt;  private Form mMainForm;&lt;br /&gt;  private StringItem mStringItem;&lt;br /&gt;  private Command mExitCommand, mTestStringCommand, mTestStringBufferCommand;&lt;br /&gt;  private int[] mSomeIntegers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };&lt;br /&gt;  private static int TIMES = 10;&lt;br /&gt;  &lt;br /&gt;  public ProfileTest() {&lt;br /&gt;    mMainForm = new Form("HelloMIDlet");&lt;br /&gt;    mStringItem = new StringItem(null, "Hello, MIDP!");&lt;br /&gt;    mMainForm.append(mStringItem);&lt;br /&gt;    mExitCommand = new Command("Exit", Command.SCREEN, 0);&lt;br /&gt;    mTestStringCommand = new Command("Test String", Command.SCREEN, 0);&lt;br /&gt;    mTestStringBufferCommand = new Command("Test StringBuffer", Command.SCREEN, 0);&lt;br /&gt;    mMainForm.addCommand(mExitCommand);&lt;br /&gt;    mMainForm.addCommand(mTestStringCommand);&lt;br /&gt;    mMainForm.addCommand(mTestStringBufferCommand);&lt;br /&gt;    mMainForm.setCommandListener(this);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public void startApp() {&lt;br /&gt;    Display.getDisplay(this).setCurrent(mMainForm);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public void pauseApp() {}&lt;br /&gt;  &lt;br /&gt;  public void destroyApp(boolean unconditional) {}&lt;br /&gt;  &lt;br /&gt;  public void commandAction(Command c, Displayable s) {&lt;br /&gt;    if (c == mExitCommand)&lt;br /&gt;      notifyDestroyed();&lt;br /&gt;    else if (c == mTestStringCommand) &lt;br /&gt;      testString();&lt;br /&gt;    else if (c == mTestStringBufferCommand)&lt;br /&gt;      testStringBuffer();&lt;br /&gt;  }&lt;br /&gt;  public void testString() {&lt;br /&gt;    String temp = "";&lt;br /&gt;    for (int times = 0; times &amp;lt; TIMES; times++) {&lt;br /&gt;      for (int i = 0; i &amp;lt; mSomeIntegers.length; i++) {&lt;br /&gt;        temp = temp + mSomeIntegers[i];&lt;br /&gt;        if (i &amp;lt;  mSomeIntegers.length - 1) temp = temp + ", ";&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    mStringItem.setText(temp);&lt;br /&gt;  }&lt;br /&gt;  public void testStringBuffer() {&lt;br /&gt;    StringBuffer temp = new StringBuffer();&lt;br /&gt;    for (int times = 0; times &amp;lt; TIMES; times++) {&lt;br /&gt;      for (int i = 0; i &amp;lt; mSomeIntegers.length; i++) {&lt;br /&gt;        temp = temp.append(mSomeIntegers[i]);&lt;br /&gt;        if (i &amp;lt;  mSomeIntegers.length - 1) temp.append(", ");&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    mStringItem.setText(temp.toString());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Nyalakan profiling di menu Edit &amp;gt; Preferences&amp;hellip; bagian Monitor. Centang &lt;q&gt;Enable Profiling&lt;/q&gt; dan &lt;q&gt;Enable Memory Monitor&lt;/q&gt;. Untuk mensimulasikan lambatnya prosesor, centanglah &lt;q&gt;Enable VM speed emulation&lt;/q&gt; pada tab Performance dan aturlah slidernya ke level yang sesuai.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Apabila program anda sekarang dijalankan dengan tombol Run maka akan muncul window Memory Monitor yang akan menampilkan jumlah byte yang dialokasi dan jumlah objek lengkap dengan graph alokasi. Cobalah menjalankan program dan mencoba pilihan &lt;q&gt;Test String&lt;/q&gt; dan &lt;q&gt;Test StringBuffer&lt;/q&gt; serta perhatikan bagaimana jumlah objek meningkat tajam ketika menggunakan String (di sini 248 (sesudah GC) jadi 1042) dan hanya meningkat sedikit saja ketika menggunakan StringBuffer (di sini 248 (sesudah GC) jadi 272). Ketika emulator ditutup maka akan tampak window Method Profiler dengan tampilan Call Graph di sebelah kiri dan tampilan method di sebelah kanan lengkap dengan berapa kali dipanggilnya dan jumlah Cycle yang dihabiskannya. Di sini meskipun sama-sama dipanggil dua kali, method &lt;code&gt;testString&lt;/code&gt; menghabiskan 512813191 cycle dan method &lt;code&gt;testStringBuffer&lt;/code&gt; menghabiskan 7781136 cycle. Tampak bahwa menggunakan StringBuffer lebih efisien.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Kesimpulan&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Profiling penting untuk mencari tempat yang potensial ditingkatkan performancenya. Meskipun Wireless Toolkit menyediakan Profiler tapi jangan lupa melakukan tes pada device yang sebenarnya. Juga jangan lupa bahwa bagi user performance yang kelihatan (perceived performance) lebih penting oleh karena itu jangan sampai aplikasi anda terlihat tidak responsif meskipun sedang melakukan proses. Lebih baik aplikasi anda menampilkan layar menunggu dengan Gauge meskipun akan memakan waktu sedikit lebih lama daripada tampak &lt;q&gt;hang&lt;/q&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Referensi&lt;/h3&gt;&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;  &lt;dt&gt;New Features in the J2ME Wireless Toolkit 1.0.4&lt;/dt&gt;&lt;br /&gt;  &lt;dd&gt;&lt;a href="http://developers.sun.com/techtopics/mobility/midp/articles/wtk104/"&gt;http://developers.sun.com/techtopics/mobility/midp/articles/wtk104/&lt;/a&gt;&lt;/dd&gt;&lt;br /&gt;  &lt;dt&gt;Wireless Development Tutorial Part I&lt;/dt&gt;&lt;br /&gt;  &lt;dd&gt;&lt;a href="http://developers.sun.com/techtopics/mobility/midp/articles/wtoolkit/"&gt;http://developers.sun.com/techtopics/mobility/midp/articles/wtoolkit/&lt;/a&gt;&lt;/dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29972156-115164527685632059?l=kuliahwireless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kuliahwireless.blogspot.com/feeds/115164527685632059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29972156&amp;postID=115164527685632059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115164527685632059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29972156/posts/default/115164527685632059'/><link rel='alternate' type='text/html' href='http://kuliahwireless.blogspot.com/2006/06/j2me-profiling-dengan-wireless-toolkit.html' title='J2ME Profiling dengan Wireless Toolkit'/><author><name>cocoaberry</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29972156.post-115160382111291583</id><published>2006-06-29T10:42:00.000-07:00</published><updated>2006-06-29T12:11:38.080-07:00</updated><title type='text'>AJAX pada IE Mobile</title><content type='html'>&lt;b&gt;AJAX untuk aplikasi web pada Windows Mobile (PocketPC dan Smartphone)&lt;/b&gt;&lt;br /&gt;Albinus Satrio - 201114349&lt;br /&gt;&lt;br /&gt;Apakah IE Mobile mendukung &lt;b&gt;AJAX&lt;/b&gt;? jawabannya &lt;b&gt;Ya&lt;/b&gt; (untuk PocketPC dan SmartPhone 2003 keatas). Jika ingin mengetahui lebih lanjut bagaimana menggunakan AJAX pada website anda dan dapat mempunyai fungsi yang baik pada browser Windows Mobile, berikut adalah hal yang penting yang perlu diketahui:&lt;br /&gt;    &lt;ol start="1"&gt;&lt;br /&gt;        &lt;li&gt;Pada SmartPhone/PocketPC 2003&lt;br /&gt;            &lt;ul&gt;&lt;br /&gt;                &lt;li style="list-style: square"&gt;Properties innerText dan innerHTML hanya mendukung element div dan span&lt;/li&gt;&lt;br /&gt;                &lt;li style="list-style: square"&gt;Element Form dapat diwujudkan dalam bentuk script&lt;/li&gt;&lt;br /&gt;            &lt;/ul&gt;&lt;br /&gt;        &lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Pada Windows Mobile 5&lt;br /&gt;            &lt;ul&gt;&lt;br /&gt;                &lt;li style="list-style: square"&gt;Properties innerText dan innerHTML mendukung semua element&lt;/li&gt;&lt;br /&gt;                &lt;li style="list-style: square"&gt;Sebagai tambahan, WM5 mendukung document.all dan object style&lt;/li&gt;&lt;br /&gt;            &lt;/ul&gt;&lt;br /&gt;        &lt;/li&gt;&lt;br /&gt;    &lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Contoh AJAX&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Bagi anda atau siapa saja yang tinggal didaerah kutub dan masih belum melihat badai geomagnetic. Ini kesempatan bagi anda untuk mengetahuinya. Badai geomagnetic dihasilkan ketika partikel cahaya dari matahari dibelokkan oleh daya magnet bumi yang menghasilkan cahaya pada langit di malam hari (juga biasa disebut dengan Aurora Borealis, Northern Lights, dsb)&lt;br /&gt;&lt;br /&gt;National Oceanographic dan Atmospheric Administration mengoperasikan sebuah serangkaian Magnetograph yang mencatat perubahan pada Magnetosphere sebagai hasil dari angin cahaya. Tiap 3 jam mereka mempublikasikan sebuah nilai index antara 0-9 yang disebut K-Index. Nilai ini merepresentasikan kerasnya gangguan yang dialami daya magnet bumi. Sejak interaksi yang fundamental ini menyebabkan badai geomagnetic, K-Index menjadi informasi ketika akan terjadi badai geomagnetic.&lt;br /&gt;&lt;br /&gt;Tujuan contoh dari AJAX diatas: untuk menulis sebuah webpage yang akan menampilkan K-Index saat ini untuk memberikan informasi pada orang-orang bahwa terjadi atau tidak badai geomagnetic pada suatu daerah.&lt;br /&gt;&lt;br /&gt;NOAA mempublikasikan K-Index untuk beberapa lokasi yang ditulis pada teks file, anda dapat melihatnya pada link: &lt;a href="http://www.sec.noaa.gov/ftpdir/latest/AK.txt"&gt;http://www.sec.noaa.gov/ftpdir/latest/AK.txt&lt;/a&gt;. File ini diupdate tiap 3 jam dan disimpan dalam format txt. Oleh karena itu tidak dapat di parse dengan XML parser, dengan sedikit code dalam Webservice yang mengambil file txt tersebut kemudian memparsenya dan membuat datanya sesederhana WebReference berikut: &lt;a href="http://iemobile.members.winisp.net/GeoMagneticData.asmx" target="_blank"&gt;http://iemobile.members.winisp.net/GeoMagneticData.asmx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sekarang dengan adanya data Magnetometer dalam bentuk XML, kita dapat mengakses data tersebut dari webpage atau dengan aplikasi lainnya.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Membangun Webservice&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Pada perintah untuk memanggil webservice GeoMagneticData.asmx, anda membutuhkan melakukan pengiriman sebuah HTTP POST yang tentunya header dan body-nya mengandung dokument XML SOAP. Berikut ini pesan HTTP yang seharusnya terlihat untuk webservice spesifik:&lt;br /&gt;&lt;br /&gt;&lt;div style="background: #FFFFF0; padding: 5;  font-size: 11px; color: #000000;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;                &lt;font color="brown"&gt;POST &lt;/font&gt;&lt;a href="http://iemobile.members.winisp.net/GeoMagneticData.asmx" target="_blank"&gt;&lt;font color="brown"&gt;http://iemobile.members.winisp.net/GeoMagneticData.asmx &lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;HTTP/1.1&lt;br /&gt;                Accept: */*&lt;br /&gt;                Accept-Language: en-us&lt;br /&gt;                Referer: &lt;/font&gt;&lt;a href="http://iemobile.members.winisp.net/ajax.html" target="_blank"&gt;&lt;font color="brown"&gt;http://iemobile.members.winisp.net/ajax.html&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;                &lt;font color="brown"&gt;soapaction: &lt;/font&gt;&lt;a href="http://tempuri.org/GetMagnetometerStation" target="_blank"&gt;&lt;font color="brown"&gt;http://tempuri.org/GetMagnetometerStation&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;                &lt;font color="brown"&gt;Content-Type: text/xml; charset=utf-8&lt;br /&gt;                Accept-Encoding: gzip, deflate&lt;br /&gt;                User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR&lt;br /&gt;                2.0.50727; .NET CLR 1.1.4322)&lt;br /&gt;                Host: iemobile.members.winisp.net&lt;br /&gt;                Content-Length: 469&lt;br /&gt;                Proxy-Connection: Keep-Alive&lt;br /&gt;                Pragma: no-cache&lt;br /&gt;&lt;br /&gt;                &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;                &amp;lt;soap:Envelope xmlns:xsi="&lt;/font&gt;&lt;a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank"&gt;&lt;font color="brown"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&lt;br /&gt;                xmlns:xsd="&lt;/font&gt;&lt;a href="http://www.w3.org/2001/XMLSchema" target="_blank"&gt;&lt;font color="brown"&gt;http://www.w3.org/2001/XMLSchema&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&lt;br /&gt;                xmlns:soap="&lt;/font&gt;&lt;a href="http://schemas.xmlsoap.org/soap/envelope/" target="_blank"&gt;&lt;font color="brown"&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&amp;gt;&lt;br /&gt;                &amp;lt;soap:Body&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;GetMagnetometerStation xmlns="&lt;/font&gt;&lt;a href="http://tempuri.org/" target="_blank"&gt;&lt;font color="brown"&gt;http://tempuri.org/&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;email&amp;gt;nobody@nobody.com&amp;lt;/email&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;password&amp;gt;blank&amp;lt;/password&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;station_name&amp;gt;Boulder&amp;lt;/station_name&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;/GetMagnetometerStation&amp;gt;&lt;br /&gt;                &amp;lt;/soap:Body&amp;gt;&lt;br /&gt;                &amp;lt;/soap:Envelope&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Sebagai response dari pesan ini, kita akan menerima:&lt;br /&gt;&lt;br /&gt;&lt;div style="background: #FFFFF0; padding: 5;  font-size: 11px; color: #000000;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;                &lt;font color="brown"&gt;HTTP/1.1 200 OK&lt;br /&gt;                Proxy-Connection: Keep-Alive&lt;br /&gt;                Connection: Keep-Alive&lt;br /&gt;                Content-Length: 648&lt;br /&gt;                Date: Tue, 15 Nov 2005 19:25:49 GMT&lt;br /&gt;                Content-Type: text/xml; charset=utf-8&lt;br /&gt;                Server: Microsoft-IIS/6.0&lt;br /&gt;                X-Powered-By: ASP.NET&lt;br /&gt;                MicrosoftOfficeWebServer: 5.0_Pub&lt;br /&gt;                X-AspNet-Version: 1.1.4322&lt;br /&gt;                Cache-Control: private, max-age=0&lt;br /&gt;&lt;br /&gt;                &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;                &amp;lt;soap:Envelope xmlns:soap="&lt;/font&gt;&lt;a href="http://schemas.xmlsoap.org/soap/envelope/" target="_blank"&gt;&lt;font color="brown"&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&lt;br /&gt;                xmlns:xsi="&lt;/font&gt;&lt;a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank"&gt;&lt;font color="brown"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&lt;br /&gt;                xmlns:xsd="&lt;/font&gt;&lt;a href="http://www.w3.org/2001/XMLSchema" target="_blank"&gt;&lt;font color="brown"&gt;http://www.w3.org/2001/XMLSchema&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&amp;gt;&lt;br /&gt;                &amp;lt;soap:Body&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;GetMagnetometerStationResponse xmlns="&lt;/font&gt;&lt;a href="http://tempuri.org/" target="_blank"&gt;&lt;font color="brown"&gt;http://tempuri.org/&lt;/font&gt;&lt;/a&gt;&lt;font color="brown"&gt;"&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;GetMagnetometerStationResult&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;StationName&amp;gt;Boulder&amp;lt;/StationName&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;lt;Latitude&amp;gt;49&amp;lt;/Latitude&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;lt;Longitude&amp;gt;42&amp;lt;/Longitude&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;lt;CurrentKIndex&amp;gt;1&amp;lt;/CurrentKIndex&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;lt;CurrentAIndex&amp;gt;1&amp;lt;/CurrentAIndex&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;/GetMagnetometerStationResult&amp;gt;&lt;br /&gt;                &amp;nbsp;&amp;lt;/GetMagnetometerStationResponse&amp;gt;&lt;br /&gt;                &amp;lt;/soap:Body&amp;gt;&lt;br /&gt;                &amp;lt;/soap:Envelope&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Sekarang pada JavaScript yang akan memanggil webservice dan response parse. Akan dipecah menjadi dua fungsi antara request dan response dari webservice, yakni:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;InvokeWebservice()&lt;br /&gt;&lt;br /&gt;ParseResponse()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Fungsi InvokeWebservice() akan melakukan HTTP POST yang kemudian diset untuk memanggil kembali fungsi yang memanggil ParseResponse() secara asynchronous ketika HTTP response diterima.&lt;br /&gt;&lt;br /&gt;&lt;div style="background: #FFFFF0; padding: 5;  font-size: 11px; color: #000000;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;                &lt;font color="blue"&gt;function&lt;/font&gt; InvokeWebservice(url)&lt;br /&gt;                {&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Memberitahu user untuk membangkitkan webservice&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.innerHTML = "&lt;font color="brown"&gt;Requesting Data...&lt;/font&gt;";&amp;nbsp;&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Membangun sebuah object XMLHTTP untuk menangani HTTP Request&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;var&lt;/font&gt; xmlHttpReq = false;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;try&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpReq = new ActiveXObject("&lt;font color="brown"&gt;Msxml2.XMLHTTP&lt;/font&gt;");&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;catch&lt;/font&gt; (err)&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;try&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpReq = new ActiveXObject("&lt;font color="brown"&gt;Microsoft.XMLHTTP&lt;/font&gt;");&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;catch&lt;/font&gt; (err2)&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Method khusus HTTP sebagai POST,&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// jadi kita dapat mengupload text dalam jumlah besar&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpReq.open('&lt;font color="brown"&gt;POST&lt;/font&gt;', url, true);&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set tipe isi menjadi text/xml, kalau tidak webservice tidak akan&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// menganggapnya sebuah dokumen XML yang valid&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpReq.setRequestHeader('&lt;font color="brown"&gt;Content-Type&lt;/font&gt;', '&lt;font color="brown"&gt;text/xml; charset=utf-8&lt;/font&gt;');&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set header SOAPAction, kalau tidak webservice tidak akan dibangkitkan.&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpReq.setRequestHeader('&lt;font color="brown"&gt;SOAPAction&lt;/font&gt;',&amp;nbsp;'&lt;font color="brown"&gt;http://tempuri.org/GetMagnetometerStation&lt;/font&gt;');&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set a callback untuk dibangkitkan ketika ReadyState berubah pada object XMLHTTP.&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// If nilai ReadyState value == 4, then the request is completed.&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// See for more info: &lt;/font&gt;&lt;a href="http://tinyurl.com/858me" target="_blank"&gt;http://tinyurl.com/858me&lt;/a&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpReq.onreadystatechange = &lt;font color="blue"&gt;function&lt;/font&gt;()&amp;nbsp;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (xmlHttpReq.readyState == 4)&amp;nbsp;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ParseResponse(xmlHttpReq);&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Insert nama station dalam dokumen XML&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// dan Send the HTTP Request&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// The XML has been snipped for presentation&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpReq.send("&lt;font color="brown"&gt;&amp;lt;?xml version=\"1.0\" â€¦ &amp;lt;station_name&amp;gt;&lt;/font&gt;" +&amp;nbsp;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.forms['f1'].stationname.value +&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;font color="brown"&gt;&amp;lt;/station_name&amp;gt;&amp;lt;/GetMagnetometerStation&amp;gt;&amp;lt;/soap:Body&amp;gt;&lt;/font&gt;"+&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;font color="brown"&gt;&amp;lt;/soap:Envelope&amp;gt;&lt;/font&gt;");&lt;br /&gt;                }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Fungsi ParseResponse() menerima instance object XMLHTTP dan mengambil nilai untuk StationName, Latitude, Longitude dan CurrentKIndex. Kemudian melakukan beberapa contoh logika pada nilai lat/long dan mengenerate sebuah deskripsi. Kemudian men-set property innerHTML dari tag div dengan text kita yang telah diolah terlebih dahulu.&lt;br /&gt;&lt;br /&gt;&lt;div style="background: #FFFFF0; padding: 5;  font-size: 11px; color: #000000;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;                &lt;font color="blue"&gt;function&lt;/font&gt; ParseResponse(xmlHttpReq)&lt;br /&gt;                {&lt;br /&gt;                &lt;font color="green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// mengambil nilai dari response XML kita&lt;/font&gt;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;var&lt;/font&gt; station_name =&amp;nbsp;xmlHttpReq.responseXML.getElementsByTagName('StationName')[0].text;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;var&lt;/font&gt; lat = xmlHttpReq.responseXML.getElementsByTagName('Latitude')[0].text;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;var&lt;/font&gt; lng&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;                = xmlHttpReq.responseXML.getElementsByTagName('Longitude')[0].text;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="blue"&gt;var&lt;/font&gt; kindex = xmlHttpReq.responseXML.getElementsByTagName('CurrentKIndex')[0].text;&lt;br /&gt;                &
