Showing posts with label hobiest. Show all posts
Showing posts with label hobiest. Show all posts

Saturday, October 10, 2009

render farm project on progress

in this year i hope i can finish my study in Gadjah Mada University might be many people known as UGM where it place in Yogyakarta. my first project is create render farm, i initiate it as my final exam or in my university called TA (Tugas Akhir), i build it using java RMI collaborate with blender render engine the idea is using java RMI for communicate between client and node through the server then the node will process render task from client using blender, in each node must have blender engine installed. there are three kind of application one will place in the client, second will place in the sever and third application will place in node, and i use master slave architecture for building the infrastructure.

this is illustration of my idea, may be it familiar to you:



there are three main application in the architecture picture AddJob class, JobManager class and JobProcessor class. Bellow picture will illustrate my final exam project work flow.











that’s my idea and had been implementing and work in progress. :D

Monday, June 23, 2008

Iseng-iseng eh ternyata ketemu



Apologize judul lagu dari onerepublic yang menjadi demam dikantor.., sebenarnya sih pas denger pertama kurang begitu memperhatikan tapi didengerin lama2 kok jadi bagus juga.. *ya emang bagus sih..
Setelah kuping ini habis dihajar seharian penuh dengan lagu apologize yang diputer anak2, entah kenapa sampai rumah masih terngiang-ngiang di kepala.. tanpa sadar sudah mengambil gitar sambil melepas lelah.. iseng-iseng genjrang-genjreng eh malah ketemu kuncinya...

*Note : klo salah diralat yoo..

"Apologize"

Bm
I'm holdin' on your rope,
G D
Got me ten feet off the ground.
Bm
And I'm hearin' what you say,
G D
But I just can't make a sound.
Bm
You tell me that you need me,
G D
Then you go and cut me down...
Em
But wait...
Bm
You tell me that you're sorry,
G D
Didn't think I'd turn around...
Em
And say...

Bm G
That it's too late to apologize.
D
It's too late...
Bm G
I said it's too late to apologize.
D
It's too late.
Yeah!

Bm
I'd take another chance,
G G
Take a fall, take a shot for you.
Bm
I need you like a heart needs a beat,
G G
But it's nothin' new.
Bm
I loved you with a fire red,
G D
Now it's turnin' blue...
Em
And you say...
Bm
Sorry, like an angel
G D
Heaven let me think was you...
Em
But I'm afraid...

It's too late to apologize.
It's too late.
I said it's too late to apologize.
It's too late.
Whoa!

It's too late to apologize.
It's too late.
I said it's too late to apologize.
It's too late.

It's too late to apologize. YEAH!
I said it's too late to apologize. YEAH!
I'm holdin' on your rope,
got me ten feet off the ground.

Wednesday, March 5, 2008

Just Intermezzo

Klo lagi suntuk dan banyak kerjaan sih biasanya klo ga denger murotal yah main music. bermain musik hanya sekedar melepas kepenatan di tengah sibuknya pekerjaan dan kuliah. Just get the guitar and playing it.. so easy tapi jangan sampai terlena dan kebanyakan ngelamun.. apalagi sampe melupakan ibadah..

Biasanya klo malem sambil ngerjain beberapa tugas kuliah diiringi dengan petikan guitar kesayangan yang telah menemaniku selama 9 tahun... *lama juga yah. biasanya sih mainnya yang slow-slow ajah sambil mengusir ngantuk.. klo ga ya dengerin murotal.

Ada lagu dari shania twain yang biasanya aku nyanyikan... this just song ;)

YOU'RE STILL THE ONE
(When I first saw you I saw love and the first time you touched me
I felt love and after all this time
D G A
You're Still The One I love) MMMM Yeah
D G A
Looks like we made it Look how far we've come my baby
D G A
We mighta took the long way We knew we'd get there someday

BRIDGE:
D G A
They said "I bet they'll never make it"
D G A
But just look at us holding on
D G A
We're still together still going strong

CHORUS:
D G
(You're Still The One) You're Still The One I run to
Em
The one that I belong to
D G A
You're Still The One I want for life
D G
(You're Still The One) You're Still The One that I love
Em A D G A
The only one I dream of You're Still The One I kiss good night
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
D G A
Ain't nothin' better We beat the odds together
D G A
I'm glad we didn't listen Look at what we would be missin'

BRIDGE
D
CHORUS You're Still The One

SOLO: G A A D G A A D
Yeah
CHORUS

D
I'm so glad we made it
G A
Look how far we've come my baby

Friday, January 25, 2008

Embebbded System


Apa sih Embedded System ?.Embedded System adalah kombinasi dari hardware dan software, dan mungkin dapat ditambahkan bagian yang berupa mekanik, yang didesain untuk fungsi yang spesifik.
Contoh yang bagus adalah microwave oven. Hampir kebanyakan orang menggunakannya, tetapi hanya sedikit orang yang menyadari bahwa prosessor dan software terdapat didalamnya sebagai pengontrol.

Ini sangat berbeda dengan PC(Personal Computer) yang sering kita gunakan. PC tidak didesain untuk fungsi yang spesifik. Tetapi, PC mampu melakukan banyak hal. Dari segi produsen-pun tidak mengetahui PC yang diperjual belikan kepada konsumen digunakan untuk apa. Mungkin konsumen yang satu menggunakannya untuk network file server dan yang lainnya menggunakannya untuk bermain game.

Embedded System adalah komponen dengan system yang lebih besar. Sebagai contoh, mobil modern dan truk terdiri dari banyak embedded system. Satu embeded system mengontrol rem anti-lock, yang lainnya memonitor dan mengontrol emissi dari kendaraan, dan menampilkan informasi pada dashboard.

Penting untuk diketahui bahwa komputer untuk tujuan umum(PC) juga disusun dari embedded system. Sebagai contoh komputer yang saya gunakan terdiri dari keyboard, mouse, video card, modem, hard drive, floppy drive, dan sound card setiap bagian tersebut adalah embedded system. Setiap dari bagian perangkat tersebut terdiri dari prosessor dan software dan didesain untuk tujuan yang spesifik. Sebagai contoh, modem didesain untuk mengirim dan menerima data digital di atas line telepon analog.

Tak dapat dielakkan bahwa embedded system akan berkembang secara cepat dan merupakan sasaran pasar yang sangat potensial. Kita lihat saat ini sudah banyak embedded system yang sudah seperti menjadi kebutuhan pokok bagi manusia yaitu sarana komunikasi seperti handphone, PDA serta banyak lagi yang mungkin tanpa kita sadari penggunaanya seperti mp3 player, IPOD, traffic light... banyak deh pokoknya.

Waaah.. jadi tetarik nih balajar embedded system. Sepertinya juga sangat menjanjikan dan mungkin di negara kita (Indonesia) masih belum banyak pengembang2 embedded system. Ayo kita majukan teknologi bangsa ini tapi juga jangan lupa selalu meningkatkan kualitas sosial kita.

Sunday, September 30, 2007

Part 1: Java Programming Using RMI (Remote Method Invocation)

Reference : http://java.sun.com

Aplikasi RMI biasanya mencakup dua program berupa server dan client.program pada server membuat remote objects kemudian membuat referensi ke object dan menunggu client untuk memanggil methods pada server.program pada client menentukan referensi ke satu atau lebih remote objects pada server dan kemudian memanggil methods2 pada server yang bisa terakses.RMI pada intinya merupakan sebuah mekanisme dimana server dan client berkomunikasi dan saling memberikan informasi, RMI sering kali dikaitkan dengan sistem terdistribusi.

ilustrasi di bawah ini menunjukkan applikasi terdistribusi menggunakan RMI :


registri digunakan untuk menentukan referensi ke remote object. Kemudian server memanggil registri untuk mencocokkan nama dengan remote object, client mencari remote object berdasarkan namanya pada server registri dan kemudian memanggil method pada object tersebut. Ilustrasi di atas juga menunjukkan bahwa sistem RMI menggunakan web server untuk meload class, dari server ke client dan dari client ke server sesuai dengan object yang dibutuhkan.

Keuntungan dari Dynamic Code Loading
Salah satu keunikan dari RMI adalah kemampuannya untuk mendownload object class jika class belum didefinisikan pada Java Virtual Machine penerima, tanpa ada perubahan ketika object dikirimkan ke Java Virtual Machine penerima. Object yang didownload secara dinamis dapat digunakan untuk sebuah aplikasi.

Remote Interface, Objects, dan Methods
Seperti aplikasi java pada umumnya, aplikasi RMI terdiri dari interface dan class. Interface mendefinisikan method sedang class mengimplementasikan methods yang didekrarasikan pada interface.
Agar object dapat menjadi remote object harus mengimplementasikan remote interface, yang mempunyai karakteristik sebaagai berikut:
1. Remote interface menurunkan sifat dari interface java.rmi.Remote.
2. Setiap method dari interface mendeclarasikan java.rmi.RemoteException menggunakan klausa throws

Membuat aplikasi terdistribusi menggunakan RMI
Membuat aplikasi terdistribusi menggunakan RMI mangikuti langkah-langkah umum sbb:
1. Mendesain dan mengimplementasikan aplikasi terdistribusi
2. Mengkompile source
3. Membuat class yang dapat diakses melalui netwotk
4. Menjalankan aplikasi

Membuat code RMI server
Mendesain Remote Interfce
Pada pembuatan aplikasi terdistribusi kali ini akan membuat sebuah "compute engine". Inti dari compute engine adalah sebuah protokol yang dapat menerima tugas/permintaan yang dikirim ke compute engine, kemudian compute engine menjalankan permintaan/tugas tersebut, dan hasil dari permintaan/tugas yang di jalankan akan dikembalikan lagi ke client. Komunikasi untuk protokol ini diilustrasikan sebagai berikut:

Pada aplikasi compute engine ini menggunakan 2 interface yaitu:
1. Compute.java --> merupakan compute engine remote interface yang digunakan untuk menangani permintaan/tugas yang dikirim ke compute engine (server)
2. Task.java --> merupakan client interface yang mendefinisikan bagaimana compute engine mengeksekusi tugas/permintaan yang dikirim oleh client.

compute.Compute interface mendefinisikan bagian dari compute engine yang dapat diakses secara remote. Berikut adalah source code untuk Compute interface:

package compute;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Compute extends Remote {
T excecuteTask(Task t) throws RemoteExcepation;
}

Dengan menurunkan interface java.rmi.Remote, Compute interface menandakan bahwa method pada interface ini dapat dipanggil dari Java Virtual Machine yang lain secara remote. Semua object yang mengimplementasikan interface ini akan dapat menjadi remote object. Dari kode Compute.java diatas terlihat bahwa method executeTask harus melemparkan sebuah exception yaitu java.rmi.RemoteException karena method ini merupakan bagian dari remote interface, sedangkan fungsi dari java.rmi.RemoteException ini digunakan untuk melemparkan exception jika terjadi kesalahan/kegagalan komunikasi antara client dengan server, exception kesalahan akan ditangani menggunakan klausa try-catch.

Interface yang kedua yaitu Task interface, interface ini digunakan sebagai parameter method executeTask pada Compute interface. compute.Task interface digunakan untuk menjembatani antara compute engine dengan task-task/tugas-tugas dari compute engine. Berikut adalah source code dari Task interface:

package compute;

public interface Task {
T execute();
}

Task interface mendefinisikan method tunggal yaitu execute tanpa parameter dan tidak melemparkan exeption apapun. Karena dalam interface Task tidak menurunkan interface Remote, Method ini juga tidak perlu melemparkan exception java.rmi.RemoteException karena exeption ini sudah ditangani oleh interface Compute.

Task interface mempunyai tipe parameter T, yang merupakan tipe dari hasil computasi/perhitungan. Method execute pada interface ini mengembalikan nilai berupa hasil dari perhitungan dimana bertipe T.

Sedangkan pada interface Compute, method executeTask akan mengembalikan hasil dari instance interface Task (dimana Task merupakan parameter dari method executeTask).

Implementing Remote Object
Pada bagian ini akan menjelaskan bagaimana mengimplemantasikan class untuk compute engine. Secara umum ada tiga tahapan dalam mengimplementasikan interface yang telah kita buat ke dalam sebuah class:
1. Mendeklarasikan remote interface yang telah diimplementasikan
2. Mendefinisikan construktor untuk setiap remote object
3. Mengimplementasikan setiap method yang telah dideklarasikan pada remote interface

Program RMI server perlu membuat inisial remote object dan mengexport inisial tersebut ke RMI runtime, yang akan membuat server dapat menerima pemanggilan secara remote terhadap method-method yang ada di server. Langkah inisialisasi:
1. Membuat dan menginstall security manager
2. Membuat dan mengexport satu atau lebih remote object
3. Lakukan register paling sedikit satu remote object dengan menggunakan RMI registri (atau menggunakan naming service yang lain, seperti JNDI) untuk bootstrap.

Berikut adalah source code untuk ComputeEngine.java:

package engine:

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import compute.Compute;
import compute.Task;

public class ComputeEngine implements Compute {
public ComputeEngine() {
super();
}

public T executeTask(Task t) {
return t.execute();
}

public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "Compute";
Compute engine = new ComputeEngine();
Compute stub =
(Compute)UnicastRemoteObject.exportObject(engine,0);
Registry registry = LocalRegistry.getRegistry();
registry.rebind(name, stub);
System.out.println("Compute Engine bound");
}catch (Exception e) {
System.out.println("Compute Engine exception");
e.printStackTrace();
}
}
}


Membuat program pada client
Program pada client akan lebih complex karena harus memanggil compute engine kemudian juga harus mendefinisikan task/tugas yang akan dikerjakan oleh compute engine.

Program pada client mempunyai dua class, yang pertama adalah class ComputePi yang akan mancari dan memanggil Compute object. Sedang yang kedua adalah class Pi yang mengimplementasikan Task interface dan mendefinisikan tugas/pekerjaan yang akan diselesaikan oleh compute engine.
Tugas dari class Pi adalah untuk menghitung nilai dari pi.

Code yang digunakan untuk memanggil method Compute object harus mereferensi ke object tersebut, membuat Task object, dan kemudian melakukan request yang berupa task/tugas.

Berikut adalah source code dari ComputePi:

package client;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.math.BigDecimal;
import compute.Compute;

publi class ComputePi {
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "Compute";
Registry registry = LocateRegistry.getRegistry(args[0]);
Compute comp = (Compute) registry.lookup(name);
Pi task = new Pi(Integer.parseInt(args[1]));
BigDecimal pi = comp.executeTask(task);
System.out.println(pi);
} catch (Exception e) {
System.err.println("ComputePi exception:");
e.printStackTrace();
}
}
}


Source code untuk class Pi:

package client;

import compute.Task;
import java.io.Serializable;
import java.math.BigDecimal;

public class Pi implements Task, Serializable {

private static final long serialVersionUID = 227L;

/** constants used in pi computation */
private static final BigDecimal FOUR =
BigDecimal.valueOf(4);

/** rounding mode to use during pi computation */
private static final int roundingMode =
BigDecimal.ROUND_HALF_EVEN;

/** digits of precision after the decimal point */
private final int digits;

/**
* Construct a task to calculate pi to the specified
* precision.
*/
public Pi(int digits) {
this.digits = digits;
}

/**
* Calculate pi.
*/
public BigDecimal execute() {
return computePi(digits);
}

/**
* Compute the value of pi to the specified number of
* digits after the decimal point. The value is
* computed using Machin's formula:
*
* pi/4 = 4*arctan(1/5) - arctan(1/239)
*
* and a power series expansion of arctan(x) to
* sufficient precision.
*/
public static BigDecimal computePi(int digits) {
int scale = digits + 5;
BigDecimal arctan1_5 = arctan(5, scale);
BigDecimal arctan1_239 = arctan(239, scale);
BigDecimal pi = arctan1_5.multiply(FOUR).subtract(
arctan1_239).multiply(FOUR);
return pi.setScale(digits,
BigDecimal.ROUND_HALF_UP);
}
/**
* Compute the value, in radians, of the arctangent of
* the inverse of the supplied integer to the specified
* number of digits after the decimal point. The value
* is computed using the power series expansion for the
* arc tangent:
*
* arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 +
* (x^9)/9 ...
*/
public static BigDecimal arctan(int inverseX,
int scale)
{
BigDecimal result, numer, term;
BigDecimal invX = BigDecimal.valueOf(inverseX);
BigDecimal invX2 =
BigDecimal.valueOf(inverseX * inverseX);

numer = BigDecimal.ONE.divide(invX,
scale, roundingMode);

result = numer;
int i = 1;
do {
numer =
numer.divide(invX2, scale, roundingMode);
int denom = 2 * i + 1;
term =
numer.divide(BigDecimal.valueOf(denom),
scale, roundingMode);
if ((i % 2) != 0) {
result = result.subtract(term);
} else {
result = result.add(term);
}
i++;
} while (term.compareTo(BigDecimal.ZERO) != 0);
return result;
}
}

Wednesday, July 25, 2007

Pengolah Multimedia dgn pymedia

apakah pymedia?, secara garis besar pymedia merupakan sebuah pustaka pada bahasa pemrograman python untuk pemrosesan multimedia seperti audio dan video selain itu pustaka ini juga mendukung untuk mengolah file audio seperti mp3, ogg, wmv dll. untuk lebih jelas mengenai pymedia serta instalasinya liat dong di http://pymedia.org/index.html.

>> Memutar wav file <<

Pada dasarnya file WAV dapat terdiri dari banyak format audio data yang berbeda, tapi 99% terdiri dari raw data audio.
Artinya bahwa WAV tidak dikompres dan tidak membutuhkan banyak pemrosesan ketika dijalankan.


yang kita perlukan hanya mengetahui tentang WAV header yang berisi informasi tentang audio data, sbb:
  • sampling frequency (8Khz, 11Khz, 22Khz, 44Khz dsb)
  • sample size (2 bytes atau 1 byte)
  • sample format (signed, unsigned)
  • channels (1 atau 2)

untuk memainkan file WAV dgn tepat 4 parameter diatas perlu dibaca

Parsing WAV header
Parsing wave header sangat sederhana kita hanya perlu menggunakan modul wave:

  • import time, wave, pymedia.audio.sound as sound
  • f = wave.open ('YOUR FILE WAV NAME', 'rb')
  • sampleRate = f.getframerate()
  • channels = f.getnchannels()

pada umumnya wave modul tidak memberikan informasi format audio data. tapi dapat kita asumsikan sebagai pymedia.audio.sound.AFMT_S16_LE

  • format = sound.AFMT_S16_LE

Memainkan suara
Setelah paremeter yang diperlukan sudah didapat, untuk memainkan file WAV cukup simpel, sbb:

  • snd = sound.Output (sampleRate, channels, format)
  • s = f.readframes (300000)
  • snd.play (s)

snd.play() akan mengembalikan informasi sebelum pemutaran file selesai ini sering juga disebut mode asinkron dalam memainkan audio.
jika ingin menunggu sampai semuanya selesai, tambahkan baris berikut:

  • while snd.isPlaying() : time.sleep (0.05)

begitulah kira2 cara memutar file WAV menggunakan pymedia.

untuk mengetahui lebih lanjut mengenai tutorial pymedia silahkan kunjungi link berikut :
http://pymedia.org/tut/