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 ^^

Thursday, January 3, 2013

Dekat dengan Allah SWT

Social media seperti twitter, facebook, path dan lain-lain membuat orang-orang jadi lebih cerewet, lebih suka mengoceh dan bahkan suka curhat dan mengobrol dengan orang lain. Gue sering memperhatikan celoteh-celoteh beberapa temanku. Ada yang mengeluh kesulitan lah,belum punya pacar lah, pekerjaan nyebelin lah. Pokoknya banyak dah.

Apa itu salah? Hmmm tergantung sih. Sulit bagi gue untuk bilang secara mutlak salah atau benar.

Namun terlepas salah atau ga-nya hal itu,ada pertanyaan yang lebih menggelitik. "Kenapa ga mengeluh kepada Allah SWT aja sih?", "Apa selain cerita dan mengeluh kepada teman-temannya, dia juga mengeluh kepada Allah SWT ya?".

Pertanyaan tersebut pada intinya adalah otokritik terhadap diri gue pribadi. Ketika gue naik haji dan sedang mabit di muzdalifah, gue ngobrol dengan Pak Haji Bachroni, salah satu pembimbing haji Wadi Fatimah. Ketika gue bercerita bahwa sekarang banyak orang menggunakan hp/smartphone untuk main game dan itu bisa berjam-jam, Pak Haji Bachroni bertanya "kenapa ga dipake waktu itu untuk mengaji saja?". Pertanyaan itu sontak membuatku tersadar. Iya ya....kenapa ya? Kok bisa gue menghabiskan waktu berjam-jam untuk main game tp membaca Quran 1 halaman saja (paling ga sampai 5 menit) susah/tidak sama sekali. Apa ini yang disebut tidak mengingat Allah SWT pada waktu lengang?

Kembali ke persoalan mengeluh tentang kehidupan. Pertanyaannya berubah menjadi "orang lain mungkin dapat membantu kita tapi yang PASTI BISA membantu kita kan Allah SWT. So, kenapa ga curhat ke Allah SWT saja?". Masalah tiap orang itu besar tapi Allah SWT itu Maha Besar. Ada kawan yang mungkin bijak tapi Allah SWT itu Maha Bijak dan Maha Berilmu lagi Maha Kuasa. Daripada capek-capek cerita ke orang lain, cerita dan berdoa ke Allah SWT saja. InsyaAllah akan ada jalan, akan ada petunjuk, akan ada ketenangan, akan ada bantuan.

Bukan berarti bercerita kepada orang lain itu salah karena bisa jadi bantuan Allah SWT itu datangnya lewat orang tersebut. Namun, mendekati Allah SWT pasti akan membuat semua hal jadi mudah. Itu pasti