Denny Depok IT Blog

Ngomongin Klorofil Project dan dunia IT, dari perkembangan, gosip sampe teori konspirasinya :D

Archive for the 'php' Category

[ IDE ] Paralax : Parallel Computing Over Ajax

Paralax, parallel computing over ajax

Sebenernya ide ini dah lama, mungkin 2 ato 3 tahun lalu dah kepikiran. Sempet jadi kandidat tesis saya tapi abis itu dilupain gara-gara asik maen workflow :D. Trus daripada sia-sia, saya publish disini, siapa tau ada yang mo implement ato mo ngembangin lebih lanjut.

Ide awal gini, kan sekarang jumlah komputer yang terhubung ke internet dah banyak banget, buktinya IPV4 sampe habis. Nah kebanyakan, komputer yang terhubung ke internet itu keseringan idle, terutama komputer client yang cuma dipake untuk browsing, chatting ato nyari gambar dan video ****** (edited -red). Nah komputer-komputer client yang idle itu, walaupun disebt client, tapi rata-rata punya prosessor yang keren-keren, apalagi sekarang jamannya core duo ato lebih. Kan sayang banget daya komputasi yang tersedia berlimpah itu terbuang percuma.

Nah ide dari Paralax ini adalah gimana caranya orang-orang yang punya resource terbuang sia-sia tadi bisa nyumbangin resource komputasinya untuk kegiatan yang lebih berguna. Jadi diminta untuk ngejalanin program yang berguna, tapi gak terlalu menganggu kegiatan dia. Pasti dah pada mikir “Bukannya udah ada parallel computing dari dulu ?“. He..he..he.. emang sih udah ada, bahkan kayaknya udah mature banget. Tapi saya mo nekanin karakteristik dari pengguna-pengguna tadi yaitu :

1. Koneknya gak dedicated
Maksudnya kadang konek, kadang enggak. Ya tergantung maunya di user aja. Jadi sistem paralax ini harus bersikap pesimis, maksudnya gak berharap banget komputer client bakal konek terus. Trus juga harus clientnya yang minta duluan (ini programnya aja, bukan usernya ngelakuin manual), soalnya server kan gak tau kapan client mo online ato enggak.

2. Susah disuruh nginstall program

Maunya gak usah download-download langsung jalan aja. Jadi model paralel komputing lama yang mengharuskan user untuk download program host program paralel susah diimplementasiin sekarang.

3. Susah disuruh update program
Disuruh install aja susah, apalagi disuruh update program kalo misalnya ada perubahan perhitungan/algoritma. Makanya model paralel computing baru perlu diciptain.

Trus gimana cara kerjanya ? Langkah-langkahnya seperti ini :1. Programmer ngebuat 3 bagian program

Pertama program inisialisasi, yaitu program yang menggenerate job kecil-kecil yang nanti dikerjain sama client.
Kedua adalah program worker yang nanti didownload dan dijalankan sama client
Ketiga adalah program handler yang menangani event, seperti job selesai ato job gagal (timeout)
2. Programmer install program di Paralax server dan menjalankan program inisialisasi, maka job akan dicreate dan ditaro di stack job
3. User membuka alamat server Paralax menggunakan browser, misalnya ke http://paralax.org/chain_reaction.php
4. Page yang dibuka user mengandung script untuk mendownload program paralel computing trus juga minta job yang bisa dikerjain sama dia.5. Browser client jalanin script job dia, dan kalo udah selesai ngelapor ke Paralax servernya lewat ajax6. Paralax server trus manggil program event handler ngasih tau kalo ada job yang selesai7. Client trus bisa meminta job yang lain

Jadi intinya nanti user yang mo nyumbang resource komputasinya tinggal ngebuka web browser dan menuju ke alamat tertentu. Bisa juga scriptnya diembed ke page lain dengan menggunakan iframe. Dengan berjalan di web browser, kan user gak perlu install apapun, kan hampir semua OS ada browsernya. Lagian dengan teknik Ajax, bisa dibuat kalo misal ada update algoritma di modul worker, bisa update otomatis tanpa campur tangan user.

Tapi yang jadi masalah mungkin javascript kan lambat, ya emang sih, tapi namanya juga nyumbang :D (walau yang ini keren banget, nyumbang resource komputasi). Trus javascript kan ada timeout eksekusi script ? Tenang…. ini bisa diakalin dengan memotong script kalo udah beberapa waktu untuk interval sesaat dan dipanggil lagi pake settimeout. Tapi yang saya suka dari web browser kan kerjanya kayak sandbox, jadi dari segi keamanan gak masalah, gak kayak program paralel komputing lain yang harus diinstal, masalah keamanan pasti jadi perhatian banget.
Mungkin yang perlu dipikirin gimana cara mrogram yang enak, misal pake bahasa yang biasa aja, trus ada kompiler yang bisa ngebuat kode yang siap dijalanin di server (php/jsp/ato yang lain) dan di client (java script)

Aplikasi yang kepikiran sama saya :

1. Simulasi reaksi kimia dan obat
2. Simulasi cuaca

3. Ngecrack kode keamanan

4. Pemetaan genetik

5. Ngegambar film 3D

Ato apa lagi deh yang perlu komputasi amat banyak tapi kalo dari segi waktu emang gak harus cepet-cepet banget. Sebenernya semua sisi udah kepikiran sama saya, tapi emang dari segi waktu saya gak punya. Tapi kalo ada yang mo ngembangin dipersilakkan :D :D :D

5 comments

Windows Service Dengan PHP

Kemaren saya nyari-nyari gimana bisa ngemulasiin Cronnya linux untuk diwindows. Solusi paling tepatnya tentu pake service-nya windows, soalnya kalo pake service bisa start program walaupun usernya belum login, trus kalo usernya logout programnya tetep jalan.

Hasil nyari-nyari diinternet akhirnya diputusin buat sendiri aja :D (abis enggak ada yang muasin sih) Apalagi nemu tehnik untuk membuat windows service dengan menggunakan PHP dari blognya Wez Furlong. Tehnik ini sebenernya udah cukup lama ada tapi referensi tentang penggunaannya masih sedikit banget, apalagi dalam bahasa indonesia. Karena menurut saya tehnik pembuatan windows service menggunakan PHP cukup penting, makanya saya ngebahas disini.
service_cron.PNG

Program windows service dengan PHP ngegunain model CLInya PHP (maksudnya PHP dirun langsung dari command prompt, bukan dari web server kaya Apache). Dalam implementasi, saya ngegunain PHP yang dipaket oleh WAMP 5 (sudah pake Apache 2 + PHP 5). Pertama, buka php.ini yang ada di :

c:\wamp\Apache2\bin

dan trus tambahin baris ini di bagian extention :

extension=php_win32service.dll

trus pastiin ada file :

c:\wamp\php\ext\php_win32service.dll

kemudian buat file cron.php di folder c:\wamp\www (posisi terserah sih, beda command jalaninnya aja nanti). isinya :

< ?php
if ($argv[1] == 'install')
{
win32_create_service(array(
'service' => ‘purefectCron’,
‘display’ => ‘purefectCron’,
‘path’    => ‘c:wampphpphp-win.exe’,
‘params’  => ‘-c c:wampApache2bin c:wampwwwcron.php run’));
}
else if ($argv[1] == ‘uninstall’)
{
win32_delete_service(’purefectCron’);
}
else if ($argv[1] == ‘run’)
{
chdir(’c:wampwww’);
win32_start_service_ctrl_dispatcher(’purefectCron’);
while (win32_get_last_control_message()!= WIN32_SERVICE_CONTROL_STOP)
{
echo(’[' . date('c') . '] checking…’);
// taro kode service disini
sleep(30);
}
}
?>

Kalo mau download, klik disini : cronphp.txt

Penjelasannya :

if ($argv[1] == ‘install’)
{

baris ini digunakan untuk mengecek parameter yang dipassing dari command line, bagian ini untuk proses install service.

win32_create_service(array(
'service' => 'purefectCron',
'display' => 'purefectCron',
'path' => 'c:wampphpphp-win.exe',
'params' => '-c c:wampApache2bin c:wampwwwcron.php run',
));

baris ini untuk mendaftarkan service dengan nama “purefectCron”. Service dan display boleh diganti, tapi saya saranin diisi dengan nilai yang sama.

path menunjuk ke exe dari PHP, saya gunain php-win.exe yang ada di c:\wamp\php

params adalah parameter yang akan dipassing ke php.exe saat menjalankan service.

-c c:\\wamp\\Apache2\\bin maksudnya adalah menggunakan konfigurasi php.ini yang ada di folder c:\wamp\Apache2\bin

c:\\wamp\\www\\cron.php run maksudnya php.exe menjalankan script cron.php yang ada di c:\wamp\www, dengan parameter “run”

else if ($argv[1] == ‘uninstall’)
{

baris ini untuk filter operasi uninstall service

win32_delete_service('purefectCron');

untuk menghapus service dari daftar service, parameternya adalah nama service yang sesuai dengan nama service/display waktu proses install.

else if ($argv[1] == ‘run’)
{

filter untuk proses ngejalanin service, bagian ini nanti yang dijalanin sama windows

chdir('c:\\wamp\\www');

Ganti working directory ke c:\wamp\www, maksudnya supaya kode selanjutnya berjalan di folder tersebut, jadi mirip sama kode web page punya kita.

win32_start_service_ctrl_dispatcher('purefectCron');

Baris ini untuk men-start servicenya, parameternya samain dengan nama service/display waktu proses install.

while (win32_get_last_control_message() != WIN32_SERVICE_CONTROL_STOP)
{

Kita looping selama belom di stop

writeln('[' . date('c') . '] checking…’);
// taro kode service disini
sleep(30);

Taro kode service anda disini, sebenernya gak masuk sense sih echoin string, tapi ini cuma contoh doang. Ubah kode diatas sesuai dengan kebutuhan service kamu.

trus untuk install servicenya, buat file :

c:\wamp\install.bat

yang isinya :

cd www
"../php/php.exe" -c ../Apache2/bin cron.php install
reg add HKLM\SYSTEM\CurrentControlSet\Services\purefectCron /V Description /t REG_SZ /d "Purefect Cron Daemon" /f
NET START purefectCron

kalo mau download, klik disini installbat.txt

Penjelasan :

cd www
"../php/php.exe" -c ../Apache2/bin cron.php install

Baris ini untuk jalanin cron.php untuk nginstall servicenya

reg add HKLM\SYSTEM\CurrentControlSet\Services\purefectCron /V Description /t REG_SZ /d "Purefect Cron Daemon" /f

Sebenernya baris ini optional, gunanya untuk mengeset description dari service (soalnya saya gak tau gimana ngesetnya dari php :D jadi manual aja)

NET START purefectCron

Baris ini untuk start jalanin servicenya

untuk uninstallnya, buat file :

c:\wamp\uninstall.bat

yang isinya :

NET STOP purefectCron
cd www
"../php/php.exe" -c ../Apache2/bin cron.php uninstall

kalo mau download, klik disini : uninstallbat.txt

Penjelasan :

NET STOP purefectCron

Kita berhentiin dulu sebelum uninstall

cd www
"../php/php.exe" -c ../Apache2/bin cron.php uninstall

panggil script cron.php, bagian uninstall.

Segitu aja penjelasan dari saya, kalo ada yang kurang jelas ato mau diskusi, bisa taro comment disini, ato kirim email ke denny(at)klorofil.org

8 comments