Monday, June 3, 2013

SCALA - Future untuk Proses Asynchronous

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.

SCALA - Menyediakan Konfigurasi bagi Aplikasi


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

SCALA - Menjalankan Aplikasi Scala sebagai Console

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"); 
}

Sunday, May 5, 2013

Belajar dalam 20 Jam

Artikel ini disarikan dari Ted Talks: The First 20 hours. Ini adalah ceramah singkat tentang bagaimana cara kita dapat mempelajari apapun untuk mencapai level "cukup baik" dalam waktu singkat. Pembicaranya adalah Josh Kaufman. Josh Kaufman melakukan riset kecil untuk mengetahui jawaban dari pertanyaan "Berapa waktu yang dibutuhkan untuk dapat melakukan sesuatu dengan baik". Jawaban yang didapat dari buku-buku dan internet adalah 10.000 jam.

Ternyata 10.000 jam ini sebenarnya didapat dari hasil penelitian terhadap para atlet profesional, pakar, dll. So, 10.000 jam adalah waktu yang dibutuhkan untuk dapat melakukan sesuatu dengan sangat baik di level pakar. So, berapa waktu yang dibutuhkan untuk melakukan sesuatu dengan baik, ternyata hanya 20 jam. Tentunya, ada beberapa syarat.

Yang perlu dilakukan untuk dapat melakukan pembelajaran dalam 20 jam adalah:
1. Deconstruct the skill
Tentukan apa yang ingin dapat dilakukan di akhir pembelajaran. Lalu bagilah kemampuan-kemampuan itu ke dalam bagian-bagian yang lebih kecil. Berdasarkan pembagian itu, kita akan dapat menentukan kemampuan-kemampuan (dasar) mana saja yang dapat membuat kita mencapai kemampuan yang diinginkan.

2. Learn enough to self-correct
Belajarlah dengan baik sampai mempunyai kemampuan untuk dapat mendeteksi kesalahan dan menemukan cara yang lebih baik untuk menghindari kesalahan itu.

3. Remove practice barrier
Fokuslah untuk belajar

4. Practice at least 20 hours

The major barrier to skill acquisition isn't intellectual...it's emotional

Thanx Josh...I want to learn German again ^^