Archive

Author Archive

Simple Erlang – Java communication example

August 19, 2011 Leave a comment

If there is a need to communicate with Erlang processes or to build Erlang/Java distributed system, JInterface can be used.  I have written simple ping-pong application to communicate between Erlang and Java process.

Erlang module:

-module(hello_world).
-export([start/0,pong/0]).
	
pong() ->
	receive
		stop ->
			io:format("Pong finished...~n",[]);			
		{PingId,ping} ->
			io:format("Ping~n",[]),
			PingId ! {self(),pong},
			pong()
	end.

start() ->
		register(pong,spawn(hello_world,pong,[])).

In the start() function a process ‘pong’ is registered. Pong() functions when received {PingId,ping} tuple just print the ‘Ping’ message and send {self(),pong} tuples to process which initially ping this process. Here PingId is the process id of the process which send {PingId,ping} tuple to ‘pong’ process. Also, pong process terminate when it receive ‘stop’ message.

Now, lets write Java node which ping our Erlang pong process.

Java program

import java.io.IOException;
import com.ericsson.otp.erlang.OtpErlangAtom;
import com.ericsson.otp.erlang.OtpErlangDecodeException;
import com.ericsson.otp.erlang.OtpErlangExit;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangPid;
import com.ericsson.otp.erlang.OtpErlangTuple;
import com.ericsson.otp.erlang.OtpMbox;
import com.ericsson.otp.erlang.OtpNode;

public class JinterfaceHelloWorld {
	static String server = "server";

	public static void main(String[] _args) throws Exception {

		OtpNode self = null;
		OtpMbox mbox = null;
		try {
			self = new OtpNode("mynode", "test");
			mbox = self.createMbox("facserver");

			if (self.ping(server, 2000)) {
				System.out.println("remote is up");
			} else {
				System.out.println("remote is not up");
				return;
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		OtpErlangObject[] msg = new OtpErlangObject[2];
		msg[0] = mbox.self();
		msg[1] = new OtpErlangAtom("ping");
		OtpErlangTuple tuple = new OtpErlangTuple(msg);
		mbox.send("pong", server, tuple);

		while (true)
			try {
				OtpErlangObject robj = mbox.receive();
				OtpErlangTuple rtuple = (OtpErlangTuple) robj;
				OtpErlangPid fromPid = (OtpErlangPid) (rtuple.elementAt(0));
				OtpErlangObject rmsg = rtuple.elementAt(1);

				System.out.println("Message: " + rmsg + " received from:  "
						+ fromPid.toString());

				OtpErlangAtom ok = new OtpErlangAtom("stop");
				mbox.send(fromPid, ok);
				break;

			} catch (OtpErlangExit e) {
				e.printStackTrace();
				break;
			} catch (OtpErlangDecodeException e) {
				e.printStackTrace();
			}
	}
}

Creating Java node and process

In line 19, new Java node is created as follows:

     self = new OtpNode(“mynode”, “test”);

Here first argument ‘mynode’ is the name of the node and ‘test’ is a cookie of this node.

Next, we have to create process that runs in this node using mailbox:
     mbox = self.createMbox(“pingserver”);

The process is created with name ‘pingserver’

Sending message to Erlang process

In line 35 we create Erlang tuple containing two fields – porcess id of process itself and ‘ping’ atom. Finally, send(processName,nodeName,message) method of mailbox is used to send message to Erlang process.

     mbox.send(“pong”, server, tuple);

Receiving message from Erlang process

mailbox provides receive() method to receive message from other process. In line 40, OtpErlangObject robj is received:

      OtpErlangObject o = mbox.receive();

In line 42-43, process id of sender and message is extracted from received erlang tuple.

At the end, in line 48-49 stop message is send to Erlang process to stop the process.

Running Erlang node

In command prompt start erlang node as follows:

erl -sname server -setcookie test

In this command, ‘server’ is the name of erlang node and ‘test’ is the cookie. Note the use of this values in Java program.

Now, go to the folder where you have saved your Erlang module and compile the erlang code.

c(hello_world)

Start the erlang process:

hello_world:start().

Running Java node

This should be the simplest task :), compile the JinterfaceHelloWorld.java and run it.

Observe the erlang console and it should look like this:

Command and result

How to set higher screen resolution in Ubuntu guest OS on Virtualbox?

December 17, 2009 Leave a comment

I have Windows 7 as host OS and I installed Ubuntu 10.04 as a guest on Virtual box. Initially the screen resolution in guest screen was restricted to 800 X 600, although I have options of as high as 1280 X 800 in my host (Windows 7).

To change the display of guest Ubuntu OS on Virtualbox to a better screen resolution I installed Guest additions in Ubuntu and steps are explained below:

1. Install Guest Additions: Start guest Ubuntu on Virtualbox and select Devices > Install Guest Additions.


Now the ISO for Guest Additions will be mounted automatically and you should see the CD icon on your desktop (VBOXADDITIONS_3.2.10_66523).If it is not visible just restart Ubuntu.

2. Open the terminal. Applications->Accessories->Terminal. Now go to location where Guest Additions are stored. In my case it is in /media. Now run the appropriate installer. For example: for 32 bit computer and Ubuntu OS commands are shown below:

Provide the administrative password and install will begin.

3. After the installation completes restart the guest Ubuntu OS.

4. Now you can see the available resolution by going into System->Preferences->Monitors.


Go to Machine->Enter Fullscreen Mode and enjoy the higher display resolution.

Categories: Ubuntu Tags: , ,