Archive for the ‘Programming’ Category
SCALA – Future untuk Proses Asynchronous
Hal yang perlu dicatat dari kode program di atas adalah:
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()))
}
}
- 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
- TBD
Kode program yang mendelegasikan proses lalu mengharapkan (nilai) kembalian membutuhkan sistem Future dan Promise.
SCALA – Future untuk Proses Asynchronous
Hal yang perlu dicatat dari kode program di atas adalah:
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()))
}
}
- 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
- 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 – 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
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");
}
SCALA – 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");
}
Segmentation Fault di PHP
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";
}
Segmentation Fault di PHP
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";
}
Kamus: iPhone app for Kateglo
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:
- Apps Versioning: Another Problems of AppStore
- Google Talk Translator
- Kamus Besar Bahasa Indonesia di Mac
Kamus: iPhone app for Kateglo originally appeared on satukubik on June 18, 2010.
Maven Plugin: Java Code Formatter
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:
- Java Formatter Improvement on Eclipse Helios
- My Eclipse Code Formatter
- Eclipse plugin: Introduce Static Imports
Maven Plugin: Java Code Formatter originally appeared on satukubik on June 10, 2010.