Arsip

Archive for the ‘Java’ Category

Bilangan Prima (Rekursif)

[ You can find English version of this article here. ]

Definisi bilangan prima tidak lain adalah bilangan asli yang lebih besar dari 1 dan hanya habis dibagi oleh bilangan 1 dan bilangan itu sendiri. Contoh beberapa bilangan prima antara lain, 2, 3, 5, 7, 11, 13…

Nah, berikut ini aku akan share bagaimana membuat aplikasi Java untuk mencari bilangan prima secara rekursif.

/**
 *
 * @author secangkirkopipanas
 */
public class Prima {

    private static int ambilNilaiRekursif(int number, int index) {
        if (index == 1)
            return 1;
        else if (number % index == 0)
            return 1 + ambilNilaiRekursif(number, --index);
        else
            return 0 + ambilNilaiRekursif(number, --index);
    }

    public static boolean cekBilanganPrima(int num) {
        if (num > 1)
            return (ambilNilaiRekursif(num, num) == 2);
        else
            return false;
    }

    public static void main(String[] args) {
        int num = 3000;
        if (cekBilanganPrima(num))
            System.out.println("Bilangan Prima");
        else
            System.out.println("Bukan Bilangan Prima");
    }

}

Semoga bermanfaat!

Categories: Java

Aplikasi Java Untuk Instant Messaging Berbasis Jabber/XMPP

[ You can find English version of this article here. ]

Pasti teman-teman semua sudah pernah menggunakan aplikasi semacam Yahoo!Messenger, GoogleTalk, MSN, dan mIRC. Semua itu merupakan aplikasi yang digunakan untuk berkomunikasi melalui internet, atau istilah kerennya aplikasi chatting. Mungkin pernah berpikir, gimana sich cara buatnya?

Aku akan memberikan contoh sedikit cara membuat aplikasi chatting menggunakan Java dengan memanfaatkan protokol yang sudah tidak asing lagi, Jabber/XMPP. Pustaka yang akan aku pakai adalah Smack API, yang merupakan pustaka open source untuk membuat aplikasi chatting berbasis XMPP.

Sebelum teman-teman mulai mengembangkan aplikasi ini, tentunya dibutuhkan server XMPP, dan aku menggunakan Openfire, yang juga bersifat open source. Jadi jika belum ada di komputer, install-lah terlebih dahulu. Kalau sudah ter-install dengan baik, jalankan Openfire.

Kalau server XMPP (Openfire) sudah berjalan, coba lakukan pengetesan apakah server sudah terinstall dengan baik dengan menjalankan aplikasi XMPP client, aku mencoba dengan Pidgin, dengan konfigurasi seperti gambar di bawah ini.

Kalau teman-teman bisa login, berarti server sudah berjalan dengan baik.

Langkah berikutnya adalah membuat aplikasi Java. Berikut adalah program kecil yang berfungsi untuk mengirimkan pesan ke salah satu user Jabber yang sudah terdaftar di server:

/**
* Filename: SendJabberMessage.java
* @author secangkirkopipanas
*/
package jabber;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;

public class SendJabberMessage {

   public static void main(String[] args) {
      try {
         // Create a connection to the localhost server on a specific port (default is 5222)
         ConnectionConfiguration config = new ConnectionConfiguration("127.0.0.1", 5222);
         XMPPConnection conn = new XMPPConnection(config);
         conn.connect();
         conn.login("secangkirkopipanas", "password");

         ChatManager chatmanager = conn.getChatManager();
         Chat newChat = chatmanager.createChat("secangkirkopipanas@localhost", new MessageListener() {
            public void processMessage(Chat chat, Message message) {
               System.out.println("Received message: " + message);
            }
         });

         newChat.sendMessage("Hello World!");

      } catch (XMPPException xe) {
         xe.printStackTrace();
      }
   }
}

Kompilasi code di atas, dan jalankan. Jangan lupa untuk menjalankan aplikasi client terlebih dahulu untuk melihat hasilnya. Berikut hasil yang diperoleh jika menggunakan Pidgin:

Tidak sesulit yang dibayangkan, bukan? Good luck ya, semoga berhasil.

Categories: Java

Integrasi PHP Web Services dan J2ME Menggunakan KSOAP2

Mungkin temen-temen sudah sering mendengar istilah Web Services khan? Nah, dengan menggunakan teknologi ini, ternyata mimpi kita untuk membangun aplikasi multi-platform bisa menjadi kenyataan.

Kali ini aku akan menjelaskan cara mengintegrasikan teknologi PHP dan J2ME menggunakan teknologi Web Services. Pada sisi PHP, aku menggunakan pustaka NuSOAP, sedangkan di J2ME aku menggunakan pustaka KSOAP2.

Berikut code PHP untuk membangun server Web Services menggunakan NuSOAP (aritmatika.php):

<?php
// include NuSOAP library
require_once('nusoap-0.7.3/lib/nusoap.php');

// Create Web Service Server
$server = new soap_server;

$server->configureWSDL('aritmatikawsdl', 'urn:aritmatikawsdl');

// Register Services (Add)
$server->register('add',                                         // method name
    array('num1' => 'xsd:string', 'num2' => 'xsd:string'),       // input parameters
    array('result' => 'xsd:string'),                             // output parameters
    'urn:aritmatikawsdl',                                        // namespace
    'urn:aritmatikawsdl#add',                                    // soapaction
    'rpc',                                                       // style
    'encoded',                                                   // use
    'Add num1 and num2'                                          // documentation
);

// Define Services
function add ($num1, $num2) {
  return $num1 + $num2;
}

// Register Services (Substract)
$server->register('substract',                                   // method name
    array('num1' => 'xsd:string', 'num2' => 'xsd:string'),       // input parameters
    array('result' => 'xsd:string'),                             // output parameters
    'urn:aritmatikawsdl',                                        // namespace
    'urn:aritmatikawsdl#substract',                              // soapaction
    'rpc',                                                       // style
    'encoded',                                                   // use
    'Substract num1 and num2'                                    // documentation
);

// Define Services
function substract ($num1, $num2) {
  return $num1 - $num2;
}

$server->service($HTTP_RAW_POST_DATA);
?>

Berikut code J2ME untuk membangun client Web Services menggunakan KSOAP2:

package org.secangkirkopipanas.me.nusoap;</code>

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

import org.ksoap2.*;
import org.ksoap2.transport.*;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.xmlpull.v1.XmlPullParserException;

/**
 * @author secangkirkopipanas
 */
public class NuSOAPClient extends MIDlet {
   private Display display;
   private String url = "http://localhost:5000/php/nusoap-service/aritmatika.php";
   private TextBox textbox = null;

   public NuSOAPClient() {
      display = Display.getDisplay(this);
   }

   public void startApp() {
      try {
         testWebService();
      } catch (Exception ex) {
         System.out.println(ex);
      }
   }

   public void pauseApp() {
   }

   public void destroyApp(boolean unconditional) {
   }

   public void testWebService() throws Exception {
      StringBuffer stringBuffer = new StringBuffer();
      TextBox textBox = null;

      // First WebService - echos name that is passed in, in this case 'Robertus Lilik Haryanto'
      String method = "add";
      SoapObject client = new SoapObject(url, method);
      client.addProperty("num1", "5");
      client.addProperty("num2", "5");
      HttpTransport transport = new HttpTransport(url);

      // Creating the Soap Envelope
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
      envelope.bodyOut = client;

      // Call the WebService
      try {
         transport.call(method, envelope);
      } catch(XmlPullParserException io) {
         System.err.println(io);
      }

      // Format the Result
      String result = envelope.getResponse().toString();
      stringBuffer.append(result);

      // display results in textbox
      textBox = new TextBox("Hasil dari 5 + 5 adalah", stringBuffer.toString(), 1024, 0);
      display.setCurrent(textBox);
   }
}

Jika temen-temen sudah berhasil, kompilasi source code di atas. Temen-temen akan melihat hasil dari aplikasi J2ME seperti gambar berikut:

Semoga temen-temen berhasil dalam mengembangkan aplikasi ini.
Good luck!

Categories: Java

Kirim SMS dari SMSLib 3.3.0 ke MIDlet Menggunakan Port

Seringkali kita melihat banyak layanan SMS yang digembor-gemborkan pada media iklan. Dibandingkan dengan GPRS, SMS memang lebih sering digunakan berhubung dapat digunakan di kawasan terpencil sekalipun, walaupun dihitung dari segi biaya jauh lebih mahal dari koneksi GPRS. Hal tersebut dikarenakan banyak BTS (Base Transceiver Station) dari operator GSM maupun CDMA hanya menyediakan layanan untuk telepon dan SMS saja. Selain itu SMS juga bisa dengan mudah digunakan walaupun menggunakan mobile device yang lama sekalipun (baca: JADUL).

Di teknologi J2ME, SMS juga bisa digunakan sebagai format data antar aplikasi J2ME, bahkan dengan teknologi lain. Berdasarkan dari arsitektur paket SMS yang ada pada J2ME (JSR 120, JSR 205), aplikasi MIDlet yang menggunakan media SMS harus membuka port jika aplikasi tersebut berfungsi sebagai server (penerima SMS), mirip dengan konsep socket yang terdiri dari IP Address dan Port. Berbeda dengan SMS pada umunya yang tidak menggunakan port.

Tetapi jangan terlena dulu, dengan menggunakan SMSLib (versi yang aku gunakan, SMSLib-3.3.0), temen-temen bisa membuat aplikasi untuk mengirimkan SMS ke MIDlet menggunakan port. Bagian yang perlu diperhatikan pada saat pengiriman SMS yaitu:

Service srv;
OutboundMessage msg;

OutboundNotification outboundNotification = new OutboundNotification();
srv = new Service();

SerialModemGateway gateway = new SerialModemGateway("modem.com4", "COM4", 57600, "SonyEricsson", "W660i");
gateway.setInbound(true);
gateway.setOutbound(true);
gateway.setSimPin("0000");
gateway.setOutboundNotification(outboundNotification);
srv.addGateway(gateway);
srv.startService();

// Send a message synchronously.
msg = new OutboundMessage("+628170080078", "Hello guys!");

<strong>msg.setEncoding(MessageEncodings.ENC7BIT);
msg.setSrcPort(0);
msg.setDstPort(50000);</strong>

srv.sendMessage(msg);
System.out.println(msg);

System.out.println("Now Sleeping - Hit &lt;enter&gt; to terminate.");
System.in.read();
srv.stopService();

Kemudian code di MIDlet yaitu:

smsPort = getAppProperty("SMS-Port"); // 50000
String smsConnection = "sms://:" + smsPort;
if (smsconn == null) {
   try {
      smsconn = (MessageConnection)
      Connector.open(smsConnection);
      smsconn.setMessageListener(this);
   } catch (IOException ioe) {
      ioe.printStackTrace();
   }
}

Aku sudah mencoba dengan handphone K618 baik SMS Gateway maupun aplikasi MIDlet (kirim ke diri sendiri), dan bisa berjalan dengan lancar. Bagaimana dengan temen-temen?

Good luck ya!

Categories: Java

Integrasikan Web Anda dengan Yahoo User Interface (YUI) Calendar

Dalam menciptakan sebuah web, kita kadang dituntut untuk dapat membuat user interface yang mudah untuk digunakan oleh user, contohnya seperti Popup Calendar. Yahoo menyediakan komponen-komponen yang dapat Anda integrasikan pada web yang Anda buat, yang dikenal dengan nama Yahoo User Interface (YUI). Salah satunya adalah Yahoo Calendar, yang digunakan untuk membuat Popup Calendar, seperti halnya Date Picker yang merupakan istilah dari beberapa bahasa pemrograman.

Dalam menciptakan sebuah web, kita kadang dituntut untuk dapat membuat user interface yang mudah untuk digunakan oleh user, contohnya seperti Popup Calendar. Yahoo menyediakan komponen-komponen yang dapat Anda integrasikan pada web yang Anda buat, yang dikenal dengan nama Yahoo User Interface (YUI). Salah satunya adalah Yahoo Calendar, yang digunakan untuk membuat Popup Calendar, seperti halnya Date Picker yang merupakan istilah dari beberapa bahasa pemrograman.
Dengan menggunakan komponen ini, kita sebagai pengembang web, dapat memberikan kemudahan kepada user dalam mengisikan field tanggal, yaitu hanya dengan memilih tanggal pada popup yang diberikan.
Berikut langkah-langkah dalam pembuatan Popup Calendar menggunakan YUI versi 2.2.2:
a. Siapkan pustaka YUI.
b. Buatlah sebuah halaman web, sebagai contoh Anda dapat melihat pada kode sumber berikut:

<!-- Created by Robertus Lilik Haryanto (lilik.haryanto@gmail.com) !-->
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>YUI Calendar</title>
   <link rel="stylesheet" href="lib/calendar.css" type="text/css">
   <link rel="stylesheet" href="lib/examples.css" type="text/css"><script type="text/javascript" src="lib/YAHOO.js"></script>
   <script type="text/javascript" src="lib/event.js" ></script>
   <script type="text/javascript" src="lib/calendar.js"></script>
   <script>
   var cal, calFilter;

   function init() {
      cal = new YAHOO.widget.Calendar2up("cal", "calContainer");
      cal.setChildFunction("onSelect", setDate);
      cal.title = "Expired Date";
      cal.render();
      this.link = document.getElementById('dateLink');
   }

   function showCalendar() {
      cal.outerContainer.style.top = (link.offsetTop+link.offsetParent.offsetTop+link.height) + "px";
      cal.outerContainer.style.left = (link.offsetLeft+link.offsetParent.offsetLeft-104) + "px";
      cal.outerContainer.style.display = 'block';
   }

   function setDate() {
      var dt = cal.getSelectedDates()[0];
      var date = (dt.getDate() < 10) ? "0" + dt.getDate() : dt.getDate();
      var month = (dt.getMonth() < 10) ? "0" + (dt.getMonth()+1) : (dt.getMonth()+1);
      var year = dt.getYear();

      if (date.length == 3) date = date.substr(1, 2);
      if (month.length == 3) month = month.substr(1, 2);
      if (navigator.appName.indexOf("Netscape") > -1) {
         document.getElementById("txtDate").value = date + "/" + month + "/" + (year + 1900);
      } else if (navigator.appName.indexOf("Internet Explorer") > -1) {
         document.getElementById("txtDate").value = date + "/" + month + "/" + year;
         cal.hide();
      }

      window.onload = function() {
      init();
   }
   </script>
</head>
<body>
   <h2>YUI Calendar, oleh Robertus Lilik Haryanto</h2>
   <input type="text" name="txtDate" id="txtDate" size="10" maxlength="10" readonly="readonly" />
   <a href="#" onclick="showCalendar()"><img id="dateLink" src="lib/pdate.gif" border="0" style="vertical-align:middle;margin:5px"/></a>
   <input type="button" name="btnClearDate" id="btnClearDate" value="Reset" onClick="this.form.txtDate.value='';"/>
</body>
</html>
<span id="calContainer" style="position:absolute;display:none"></span>

c. Sesuaikan pustaka YUI yang telah Anda siapkan dengan path pada file html di atas (calendar.css, examples.css, YAHOO.js, event.js, calendar.js). Selain itu, sesuaikan pula file-file gambar pada file calendar.js.
d. Coba Anda jalankan web di atas.Calendare. Jika Anda mendapatkan tampilan seperti gambar di atas, Anda berarti telah berhasil membuat Popup Calendar ini.
f. Selamat mencoba, dan nikmatilah menggunakan komponen-komponen dari Yahoo User Interface lainnya.Untuk lebih memperdalam pengetahua mengenai Yahoo User Interface (YUI), Anda dapat membaca tutorial atau manual yang terdapat di http://developer.yahoo.co/yui/.