if99.net

IF99 ITB

Archive for the ‘Programming’ Category

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

Segmentation Fault di PHP

without comments

Tadi siang tiba-tiba file bot PHP gw mati. Setelah gw cek, ternyata ada 1 line code yang selalu menyebabkan file tersebut mati, yaitu str_get_html . Matinya pun aneh, berenti tiba-tiba tanpa permisi ataupun teriak-teriak di log. Akhirnya kucoba memasang try-and-catch-exception, eh anehnya tetap lolos.

Pusing begitu, akhirnya bertanyalah ke mbah google, stackoverflow, dll. Disarankan untuk verbosing, aku memasang kode berikut ini:

error_reporting(E_ALL);  
ini_set('display_errors', 1);

Dan voila, muncullah si brengsek satu itu "segmentation fault". Wuahhh, langsung deh teringat dengan nostalgia masa kuliah, ketika memprogram dengan bahasa C ^^. Ternyata, segmentation fault itu terjadi akibat PHP kehabisan jatah memori untuk memproses string kode HTML menjadi linked-DOM-object.

Akhirnya diputuskan, kalau ternyata panjang stringnya udah keterlaluan, maka ga usah diparse menjadi linked-DOM-object.

So, kode programnya menjadi seperti ini:


$html_code_str = get_html_code($link);
$html = null;
if (strlen($html_code_str) < 500000) {
    $html = str_get_html($html_code_str);
} else {
    print "exceed max string length => unprocessed";
}

Written by Mohammad Ridwan Agustiawan

November 18th, 2011 at 2:26 pm

Posted in php,Programming,trick

Segmentation Fault di PHP

without comments

Tadi siang tiba-tiba file bot PHP gw mati. Setelah gw cek, ternyata ada 1 line code yang selalu menyebabkan file tersebut mati, yaitu str_get_html . Matinya pun aneh, berenti tiba-tiba tanpa permisi ataupun teriak-teriak di log. Akhirnya kucoba memasang try-and-catch-exception, eh anehnya tetap lolos.

Pusing begitu, akhirnya bertanyalah ke mbah google, stackoverflow, dll. Disarankan untuk verbosing, aku memasang kode berikut ini:

error_reporting(E_ALL);  
ini_set('display_errors', 1);

Dan voila, muncullah si brengsek satu itu "segmentation fault". Wuahhh, langsung deh teringat dengan nostalgia masa kuliah, ketika memprogram dengan bahasa C ^^. Ternyata, segmentation fault itu terjadi akibat PHP kehabisan jatah memori untuk memproses string kode HTML menjadi linked-DOM-object.

Akhirnya diputuskan, kalau ternyata panjang stringnya udah keterlaluan, maka ga usah diparse menjadi linked-DOM-object.

So, kode programnya menjadi seperti ini:


$html_code_str = get_html_code($link);
$html = null;
if (strlen($html_code_str) < 500000) {
    $html = str_get_html($html_code_str);
} else {
    print "exceed max string length => unprocessed";
}

Written by Mohammad Ridwan Agustiawan

November 18th, 2011 at 2:26 pm

Posted in php,Programming,trick

Kamus: iPhone app for Kateglo

without comments

My humble friend (tw: @arifwidi) creates this litte and nice apps for you who use iPhone to get word (in Indonesian) definition.

While it is still buggy, he promises to update the application as soon as possible.

Nice work, Arif!

EDIT: Ups, the itunes link

Related posts:

  1. Apps Versioning: Another Problems of AppStore
  2. Google Talk Translator
  3. Kamus Besar Bahasa Indonesia di Mac

Kamus: iPhone app for Kateglo originally appeared on satukubik on June 18, 2010.

Written by Nanda Firdausi

June 18th, 2010 at 5:07 pm

Maven Plugin: Java Code Formatter

without comments

Enforcing code format in an organization needs discipline. And the best way to do that is by doing some automation. A plugin for Maven will be a easy decision if your organization has used Maven to manage the build.

This plugin is one plugin that exactly does that. The backbone on the plugin comes from Eclipse Java Formatter, which I still endorse as the best in the industry.

Compared to Jalopy, which is now not free, I find Eclipse formatter has the flexibility we often needed. Although it is not bug-free, for most cases it is more than enough.

However, I concerned by the fact that official maven doesn’t have the latest jar of Eclipse JDT. It still only has version 3.3 of it. Hopefully they will have it soon, especially after Helios is released, which bring a lot of improvement to the Java formatter.

Related posts:

  1. Java Formatter Improvement on Eclipse Helios
  2. My Eclipse Code Formatter
  3. Eclipse plugin: Introduce Static Imports

Maven Plugin: Java Code Formatter originally appeared on satukubik on June 10, 2010.

Written by Nanda Firdausi

June 10th, 2010 at 3:30 pm