if99.net

IF99 ITB

Archive for June, 2013

SCALA – Future untuk Proses Asynchronous

without comments

Kode program di bawah ini adalah penggunaan Future untuk sistem yang bertipe mendelegasikan suatu proses namun tidak mengharapkan (nilai) kembalian.


import scala.actors.Future
import scala.actors.Futures._

object App {
def main(args: Array[String]) = {

var results = List[Future[Int]]()
for (i <- 1 to 10) {
println("Sending " + i + "...")
val f = future {
println("Processing " + i + "...")
Thread.sleep(500)
println("Processed " + i)
i
}
println("Sent " + i)
results = results ::: List(f)
}

results.foreach(future =>
println("result: " + future()))
}
}

Hal yang perlu dicatat dari kode program di atas adalah:

  1. foreach pada baris terakhir bersifat blocking. Apabila pada suatu waktu T, dia telah memiliki nilai 1, 2, 3, 5, dan 7; dia akan memprint 1, 2, 3 lalu menunggu 4 selesai diproses, barulah dia lanjut ke 5
  2. TBD



Kode program yang mendelegasikan proses lalu mengharapkan (nilai) kembalian membutuhkan sistem Future dan Promise.

Written by Mohammad Ridwan Agustiawan

June 3rd, 2013 at 5:59 pm

SCALA – Future untuk Proses Asynchronous

without comments

Kode program di bawah ini adalah penggunaan Future untuk sistem yang bertipe mendelegasikan suatu proses namun tidak mengharapkan (nilai) kembalian.


import scala.actors.Future
import scala.actors.Futures._

object App {
def main(args: Array[String]) = {

var results = List[Future[Int]]()
for (i <- 1 to 10) {
println("Sending " + i + "...")
val f = future {
println("Processing " + i + "...")
Thread.sleep(500)
println("Processed " + i)
i
}
println("Sent " + i)
results = results ::: List(f)
}

results.foreach(future =>
println("result: " + future()))
}
}

Hal yang perlu dicatat dari kode program di atas adalah:

  1. foreach pada baris terakhir bersifat blocking. Apabila pada suatu waktu T, dia telah memiliki nilai 1, 2, 3, 5, dan 7; dia akan memprint 1, 2, 3 lalu menunggu 4 selesai diproses, barulah dia lanjut ke 5
  2. TBD



Kode program yang mendelegasikan proses lalu mengharapkan (nilai) kembalian membutuhkan sistem Future dan Promise.

Written by Mohammad Ridwan Agustiawan

June 3rd, 2013 at 5:59 pm

SCALA – Menyediakan Konfigurasi bagi Aplikasi

without comments


Asumsikan bahwa kita mempunyai struktur folder sebagai berikut:
PROJECT_NAME
+  conf
    +  datamover
        +  config.properties
+  libs
+  bin
    +  run.sh

Di file run.sh, pastikan bahwa semua folder (libraries, configurations) telah diinclude dalam CLASSPATH, sehingga CLASSPATH=conf;conf/datamover;libs;bin

Ada beberapa cara setting variables

1. Menggunakan config file
 
Untuk mengakses

import java.util.Properties
import java.io._ 

val DEFAULT_CONFIG : String = "config.properties"
val fileProperties : Properties 
def getFileProperties(propertiesFileName: String = DEFAULT_CONFIG): Properties = {
    if (fileProperties == null) {
      fileProperties = new Properties
      fileProperties.load(new FileReader(
          new File(AppDocExtractor.getClass.getResource(propertiesFileName).toURI)))
    }
    fileProperties
}
fileProperties = getFileProperties(DEFAULT_CONFIG)
if (fileProperties.getProperty("sleep.second") != null) {
    val sleepSecond : Int =  fileProperties.getProperty("sleep.second").toInt

2. Mengambil parameter dari pemanggilan aplikasi
    Misalnya ada aplikasi dipanggil dengan: java -Dusethread=1
USE_THREAD_PARAM = "usethread"
val isUseThread = if (System.getProperty(USE_THREAD_PARAM) != null)
     if ("1".equals(System.getProperty(USE_THREAD_PARAM))) true else false
  else false

Written by Mohammad Ridwan Agustiawan

June 3rd, 2013 at 11:38 am

SCALA – Menyediakan Konfigurasi bagi Aplikasi

without comments


Asumsikan bahwa kita mempunyai struktur folder sebagai berikut:
PROJECT_NAME
+  conf
    +  datamover
        +  config.properties
+  libs
+  bin
    +  run.sh

Di file run.sh, pastikan bahwa semua folder (libraries, configurations) telah diinclude dalam CLASSPATH, sehingga CLASSPATH=conf;conf/datamover;libs;bin

Ada beberapa cara setting variables

1. Menggunakan config file
 
Untuk mengakses

import java.util.Properties
import java.io._ 

val DEFAULT_CONFIG : String = "config.properties"
val fileProperties : Properties 
def getFileProperties(propertiesFileName: String = DEFAULT_CONFIG): Properties = {
    if (fileProperties == null) {
      fileProperties = new Properties
      fileProperties.load(new FileReader(
          new File(AppDocExtractor.getClass.getResource(propertiesFileName).toURI)))
    }
    fileProperties
}
fileProperties = getFileProperties(DEFAULT_CONFIG)
if (fileProperties.getProperty("sleep.second") != null) {
    val sleepSecond : Int =  fileProperties.getProperty("sleep.second").toInt

2. Mengambil parameter dari pemanggilan aplikasi
    Misalnya ada aplikasi dipanggil dengan: java -Dusethread=1
USE_THREAD_PARAM = "usethread"
val isUseThread = if (System.getProperty(USE_THREAD_PARAM) != null)
     if ("1".equals(System.getProperty(USE_THREAD_PARAM))) true else false
  else false

Written by Mohammad Ridwan Agustiawan

June 3rd, 2013 at 11:38 am

SCALA – Menjalankan Aplikasi Scala sebagai Console

without comments

Ada bermacam cara untuk menjalankan aplikasi scala sebagai console:

1. mendefinisikan fungsi main

object MainApplication {
    def main (args: Array[String]) : Unit = {
        Console.println("Hello World"); 
    }
}



2. inherit App

object MainApplication extend App { 
    Console.println("Hello World"); 
}

Written by Mohammad Ridwan Agustiawan

June 3rd, 2013 at 10:38 am

SCALA – Menjalankan Aplikasi Scala sebagai Console

without comments

Ada bermacam cara untuk menjalankan aplikasi scala sebagai console:

1. mendefinisikan fungsi main

object MainApplication {
    def main (args: Array[String]) : Unit = {
        Console.println("Hello World"); 
    }
}



2. inherit App

object MainApplication extend App { 
    Console.println("Hello World"); 
}

Written by Mohammad Ridwan Agustiawan

June 3rd, 2013 at 10:38 am