Raspberry Pi and Scala

This is a little experience report how to bring up Scala on my RaspberryPi

Raspberry Pi Image

Step 1: Java

I have connected my Raspberry only with power and network (no keyboard/mouse/display) for now and log in via ssh from my Linux desktop. Not only to save cables on the desk, but also to allow copy and paste between desktop and RaspberryPi. I am running Raspbian wheezy 2012-08-16 downloaded from the Raspberry website.

Java is installed quick and easy with:

sudo apt-get install openjdk-7-jdk

This pulls all its prerequisites and takes a few minutes. Next I was curious to check and just took a little test program like this “hello.java”

class hello
{  
        public static void main(String args[])
        {
           System.out.println("Hello World!");
        }
}

Just compile with

javac hello.java

and run with

java hello

Curious about performance I took some measurements, first measuring the speed of compilation for a minimal program like this:

time javac hello

results: 14 sec. Then I tried to measure the memory size and added a sleep in the program like this:

class hello
{
  public static void main(String args[])
  {
    System.out.println("Hello World!");
    try {
      Thread.sleep(10000); // 10 sec
    } catch (Exception e) {
    }
  }
}

and run with

java hello &

ps u

Result: Virtual Size (VSZ): 215 MB, Resident Size (RSS): 9MB

Step 2: set up sbt

download with

wget http://scalasbt.artifactoryonline.com/scalasbt/sbt-native-packages/org/scala-sbt/sbt/0.12.0/sbt.tgz

unpack and copy to a directory of your choice I have used

tar tvozf sbt.tgz

mv sbt $HOME

The sbt directory contains a "bin" directory which needs to go in your path by adding this to your $HOME/.bashrc:

export PATH=$HOME/sbt/bin:$PATH

open a new shell to reload .bashrc and execute

sbt -mem 128 -help

you should see a help message. The parameter -mem 128 will allow 128 MB for the JVM, the default of 1536 MB is way too big for the little Raspberry Pi.

Alternatively you can put a file .sbtopts in your current directory with the sbt command line switches required, in ths case "-mem 128".

Now, when starting

sbt

it will pull some files and updates, slowly, and after some minutes... The sbt prompt comes up fine.

Next I created a small "Hello world" program like this in "hello.scala":

package greeter
object Hello extends App {
  println("Hello, World!")
}

and started with

sbt run

this compiles the scala and java files in your directory - this takes a fair while  - and then success:

[info] Running greeter.Hello
Hello, World!
[success] Total time: 507 s, completed 16-Sep-2012 19:02:03

Wow, over 8 minutes for this little piece. but it worked.

What next? 

I have seen some discussion on the web that the Oracle JVM may be faster, but also not compatible with Raspbian, so this will be a topic for further investigation. For now it looks like we have to wait for Oracle to release a compatible version, or choose another OS for Raspberry, one alternative approach using Debian Wheezy instead of Raspbian Wheezy can be found here: http://www.savagehomeautomation.com/projects/raspberry-pi-installing-oracle-java-development-kit-jdk-170u.html

About these ads

2 thoughts on “Raspberry Pi and Scala

  1. Pingback: Raspberry PI and Scala: The Typesafe Stack | Tobias Abarbanell

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s