The Denny Depok

The Denny Depok

Gosipin IT Bareng Mas Denny Depok Yuk…

The Denny Depok RSS Feed
 
 
 
 

[ 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

Grafik 3D Di Web

AutoBatik 3D on Web
Walau gaungnya gak sekenceng Ajax, usaha untuk menampilkan grafik 3D di web saat ini sebenernya mulai menunjukkan geliat yang cukup menarik untuk diamatin. Maksud saya bukan sekedar gambar 3D loh, tapi sistem grafik 3D yang interaktif, ya kayak digame-game 3D gitu deh. Sebenernya keinginan (ato obsesi malah) untuk menampilkan grafik 3D di web udah lama banget, mungkin ada yang masih inget sama VRML jaman dulu ?

Trus kalo emang udah lama kenapa baru mulai ribut-ribut sekarang ? jawabannya adalah dulu lingkungan yang tersedia untuk 3D di web feasible banget. Trus sekarang udah ? jawabannya belum :D :D :D.

OK gini deh saya mulai cerita dari VRML. Yang buat VRML sadar kalo projek mereka gagal, alasannya sih macem-macem, saya gak mau bahas disini ato malah debat kusir disini, tapi yang pasti makin lama suara VRML makin gak kedengeran. Melihat kenyataan tersebut, tim VRML mencoba untuk memperbaiki spek VRML agar dapat mengikuti struktur modern a.k.a XML, sehingga lahirlah X3D. Selain spek sintaks, X3d juga menambah kemampuan interaksi antara model 3D dengan lingkungan pemrograman yang diberi nama X3D SAI (scene application interface). Ya akhirnya model 3D dengan X3D ini bisa untuk membuat aplikasi 3D yang lumayan kompleks. Saya dah pernah buat aplikasi pake X3D, screenshotnya seperti gambar diatas itu. Gambar tersebut adalah gambar fraktal 3D dengan pendekatan LSystem.

Walaupun X3D punya banyak fitur, tapi gaungnya tetep gak kenceng, sampe nyoba membajak nama Ajax sehingga munculah Ajax3D seperti yang ada diweb www.ajax3d.org. Tapi tetep gak banyak yang tertarik, kalo dari analisa saya sih kebanyakan developer trauma dengan kegagalan VRML yang dulu sempet ngebooming banget tapi abis itu mati pelan-pelan. Menurut saya lagi ditambah kurangnya dukungan web browser (yang bagusnya sih otomatis include kemampuan X3d), trus apalagi belum ada plugin X3D yang bener-bener free ngebuat orang males make. Disuruh download plugin yang free untuk personal sebesar 5MB aja males, apalagi harus bayar kalo mo ngembangin aplikasi komersial untuk plugin yang performansinya gak begitu bagus.

Perkembangan lain dateng dari munculnya tag canvas di browser selain IE (firefox + opera tentunya, tapi google udah nyediain emulasinya untuk IE). Tag ini memungkinkan developer web unutk menggambar secara programming di dalam area canvas tersebut. Developer yang seneng maen grafik (termasuk saya :D :D :D) langsung excited banget untuk mengexploitasi fitur ini, dan tentu aja mulai berfikir untuk menampilkan grafik 3D dengan canvas tersebut. Dari percobaan saya untuk membangun 3D engine diatas canvas, hasilnya gak feasible banget :D :D :D, walau baru wireframe + shadding flat, untuk 100 surface aja dah lambat banget :D :D :D. Dari beberapa orang lain yang mencoba hasilnya gak jauh beda. Ya gimana lagi, canvasnya gak dioptimasi untuk pemrograman grafik yang rumit ditambah kecepatan javascript yang you know lah :P

Tapi sebenernya canvas memang sudah didesain untuk mengantisipasi grafik kompleks seperti 3D. Karena memang saat ini baru konteks 2D yang didukung, makanya ngebuat engine 3D manual pake javascript diatas konteks 2D seperti jamannya program DOS pengen nampilin 3D. Ada beberapa tim yang nyoba untuk ngebuat konteks 3D diatas canvas, minimal ada 2 yang udah saya denger, dari orang firefox dan orang opera. Tapi sayang kedua tim tadi memilih pendekatan yang berbeda.

Tim firefox mencoba mengembangkan dari OpelGL embedded, sedangkan opera mengembangkan dari model engine yang gak tergantung sama library 3D pipenya. Sebenernya sih keduanya ada keuntungannya, tapi sayang kalo gak sepakat. Tim opera berargumentasi kalo engine yangh gak tergantung library mudah unutk diimplementasikan diberbagai sistem sampe hardware seperti handphone. Kalo saya nempati diri sebagai orang manajemen, saya pasti ngedukung opera, ya kan enak sekali implementasi bisa buat hampir semua hardware. Tapi kalo sebagai programmer yang pernah maen-maen sama 3D, tim firefox tuh sangat benar sekali. Bukan apa-apa, kalo kita mrogram 3D, pasti ada aja yang harus kita buat sendiri, dan semakin low level (OpenGL kan langsung maen ke hardware) performansinya pasti lebih yahud. Lagian buat apa punya hardrware 3D bagus tapi gak bisa dipake optimal, ya tau sendiri lah, engine 3D kan dibangun berdasarkan ketersediaan hardware saat dibangun dan harus mengakomodasi banyak orang jadi mungkin gak optimal untuk kebutuhan tertentu.

OK deh, mungkin perlu waktu beberapa saat lagi sebelum canvas 3D didukung secara default di browser (firefox + opera ya, IE sih saya gak berharap banyak :D). Tapi percaya deh kalo tim-tim diatas akan menuntaskan tujuannya, untuk perkembangan yang firefox bisa dilihat di Canvas3D Forum Mozilla. Tapi sebenernya ada satu hal lagi yang belum dipegang sama tim-tim tersebut, yaitu matematika 3D. Pasti langsung banyak yang mikir kenapa harus khusus bikin untuk matematika 3D, kan tinggal bikin aja di javascript. Saya tau, saya tau. Tapi jangan lupa, kalo program 3D yang profesional tuh enggak ngitung matematika 3D secara programming standar, tapi make bantuan hardware. Ya kalo lupa saya bilangin deh, inget sama MMX/3D Now/SSE ? He..he..he.. emang gak banyak yang tau sih. Tapi intinya semua istilah tadi ngacu sama teknologi SIMD (Single Instruction Multiple Data). Maksudnya dengan sekali instruksi (jadi satu cycle CPU) bisa mengoperasikan perhitungan matematika terhadap beberapa data. Ya bayangin aja 3D kan maennya vektor yang berisi 3 data floating point, plus matriks 4×4 biasanya. Kalo pake programming biasa pasti prosesnya sebanyak datanya, tapi kalo pake SIMD cuma sekali jalan, asik kan ? Jadi mungkin objek Math-nya javascript harus dikembangin untuk operasi 3D dan matriks, tapi tentu aja mengeksploitasi MMX/3D Now/SSE. Nunggu ato harus saya sendiri yang buat ya :D :D :D

Walau banyak yang skeptis terhadap 3D di web seperti bilang buat apa, ya terserah mereka sih. Tapi saya yakin aplikasi 3D on web dimasa depan akan banyak banget. Kondisinya kayak gini deh, dulu orang nonton TV/Video ato denger radio/ nelpon lewan internet juga banyak yang bilang gak mungkin dan untuk apa, tapi setelah ada youtube + skype malah jadi makanan sehari-hari. Dan 3D di web, saya rasa bakan booming banget gak lama lagi, tinggal kita liat aja. Dari saya sendiri sih dah punya banyak benget ide 3D di web, tinggal ada yang mo sponsorin gak :D :D :D

Ribetnya System Integration

Baru beberapa menit lalu saya ngobrol-ngobrol dengan teman saya tentang ribetnya system integration diperusahaan dia. Memang sih perusahaan tempat dia bekerja berurusan dengan data yang disharing beberapa pihak (ngambil dari beberapa tempat dan memberi ke beberapa tempat). Kebayang gak sih, disaat perusahaan-perusahaan lain di indonesia baru ribut-ributin masalah mo milih desktopbased/web based ato windows/linux, perusahaan dia dah ngurusin gimana gabungin beberapa sistem yang bener-bener beda (karena emang yang bangun beda-beda) trus ditambah usia masing-masing sistem berbeda-beda banget ada sistem baru yang dilengkapin fitur canggih kaya web service/corba/EJB, tapi gak sedikit sistem yang lahir waktu jaman-jamannya cobol/fortran :D :D :D

Saya excited banget untuk ngobrolinnya secara emang dah lama saya tertarik dengan system integration. Mungkin awalnya sewaktu saya bekerja di vendor salah satu bank swasta dan bertugas untuk membangun sistem yang bekerja dengan berbagai system core banking di bank itu yang kebanyakan masih jalan di IBM AS400 dan komputer-komputer server/mainframe lain yang saya gak pernah lihat wujudnya tapi sering saya akses lewat layar warna ijo :D.

System integration mungkin gak bisa dihindari oleh kita. Saat ini banyak perusahaan sudah punya puluhan hingga ratusan aplikasi yang perlu untuk saling bekerja sama agar makin efektif. Apalagi saat ini di dunia IT sepertinya ada semacam kesepakatan bahwa perbedaan platform mungkin sudah bukan hal yang perlu diperdebatkan lagi. Sekarang semua orang bebas untuk membangun aplikasi di platform/bahasa/framework manapun karena sulit untuk menentukan yang mana yang lebih unggul daripada yang lain. Tapi permasalahnnya muncul kalau aplikasi-aplikasi tadi harus diintegrasikan, baik diintegrasikan antar aplikasi internal perusahaan bahkan dengan aplikasi dengan pihak luar. Ada perusahaan yang mengambil keputusan dengan menstandarisasikan bagaimana aplikasi dibangun (mulai dari bahasa, framework, platform, database sampe style pemrograman), tapi jujur bagi saya sih langkah itu seperti minum racun untuk ngilangin sakit sekarang, tapi ngebuat mati di kemudian hari. Gimana ya, tehnik pembangunan perangkat lunak kan berkembang dengan cepat juga. Kalo distandarin, mungkin setengah/satu tahun kemudian muncul tehnik baru yang lebih efektif dan efisien dan ngebuat yang distandarin jadi gak menarik lagi. Bahkan ada perusahaan yang demi keidealannya menjaga standar akhirnya kesulitan untuk mencari programmer yang bisa menangani standar yang udah mulai ditinggalin itu.

Trus bagaimana dong untuk menghadapi integrasi antar aplikasi diperusahaan yang jumlahnya puluhan (bahkan ratusan sampe ribuan) ? Sayang gak ada cara mudah untuk menjawab tantangan tadi. Cara standarisasi (yang diatas sudah saya tentang) mungkin bisa menjawab sedikit masalah di integrasi sistem, ya paling enggak disisi cara komunikasi, tapi masih belum menjawab banyak tantangan lain.

Kalo dari saya, mungkin yang paling utama adalah kemauan dari sisi manajemen. Yup, sekali lagi kemauan manajeman. Kenapa saya bilang gitu ? Karena sesuai dengan pengalaman saya, kalo kemauan manajemennya kuat, kalo perlu sampe terobsesi, semua tantangan integrasi sistem tuh gak ada apa-apanya. Karena biasanya rintangan terbesar tuh adalah kemalasan para staf untuk melakukan integrasi itu. Ya biasa lah, staf kan maunya kerja dengan irama yang itu-itu aja, kalo udah bisa jalan (walau ada anomali dikit) gak pa pa lah, dari pada harus berubah dan nambah kerjaan (saat itu). Makanya orang manajemennya gak boleh berpikiran yang sama. Harus punya visi yang jelas tentang keuntungan yang bakal diraih dari mengintegrasikan sistem tadi dan bagaimana merencanakan pengintegrasian tersebut.

Yang kedua adalah kebijakan manajemen untuk mendorong semua aplikasi baru didesain untuk mengakomodasi akan diintegrasi di suatu saat nanti. Mungkin sekarang enggak, tapi harus mikir nanti bakalan diintegrasiin dengan yang lain. Kebijakan ini mirip dengan standarisasi, tapi cuma dilevel desain, jadi gak terlalu mengekang developernya tapi ngasih dorongan kedeveloper agar jangan berpikiran sempit. Hal ini bisa ngurangin kepusingan dikemudian hari.

Dan terakhir yang paling penting adalah milih staf yang akan melakukan integrasi adalah staf yang tingkat komprominya tinggi. Kenapa saya bilang gini ? Karena kita semua tau lah gimana sih gayanya programmer, sebagian besar nganggep dirinya sebagai artis besar yang egonya tinggi banget. Padalah disaat integrasi programmer tadi harus menghadapi desain/tehnik dari berbagai developer yang berbeda-beda yang mungkin berlawanan dengan keidealan keartisannya dia. Makanya staff yang kompromistis, yang milih cari solusi daripada nyari konfrontasi diperluin banget (i’ve been there  and see how bad things happen :D :D :D).

He..he..he.. sorry deh kalo disini cuma cuap-cuap dikit tentang system integration, kalo mo diskusi panjang tentang system integration sampe turun ke tehnik bisa email ke saya ke denny[at]klorofil.org.

Menggunakan Ulang XMLHTTPRequest di IE

Halo.halo..halo…

Dah lama ya saya gak posting disini. Soalnya lagi sibuk (dalam arti baik dan buruk :D). Dah sebulan ini saya porting purefect desktop untuk bisa jalan di IE (ver >= 7 only, makruh hukumnya megang yang lama :D :D :D). Kesimpulan sementara saya, IE 7 lebih baik di beberapa bagian dibandingin Firefox 2 (wah orang microsoft seneng banget nih ada pendukung baru) –> mungkin statement ini perlu data pendukung, nanti ya saya posting percobaan tentang itu. Tapi pendukung microsoft jangan seneng dulu, mrogram di IE 7 tuh perlu banyak banget trik karena ada banyak bug kecil-kecil yang agak mengganggu. Salah satu trik yang diperluin adalah penggunaan ulang XMLHTTPRequest.

Pertama-tama, saya mo bilang kalo purefect desktop tuh salah satu aplikasi AJAX yang bergantung banget dengan XMLHTTPRequest. Jadi sepanjang berjalannya purfect desktop mungkin ada ratusan ato ribuan request yang dibuat melalui XMLHTTPRequest. Sebenernya sih bisa aja untuk tiap request dibuat satu object, kan sistem di javascript pake garbage collector dimana tiap object yang udah gak dipake langsung dibuang (teorinya..). Tapi masalahnya untuk create object tuh nyebabin performance hit yang lumayan (apalagi di IE yang pake ActiveX yang tentu aja prosesnya makin berat karena pernyiapan ActiveX — memori, container proses — lumayan lama).

Salah satu solusinya adalah penggunaan ulang object XMLHTTPRequest (sederhana banget ya solusinya, semua programmer juga tau :D). OK.. OK.. OK.. mungkin gak perlu banget saya posting tentang hal sederhana ini, tapi saya mo bagi pengalaman soal penggunaan ulang XMLHTTPRequest di IE yang perlu trik dikit, soalnya dikit banget referensi yang ngebahas tentang hal ini. Hampir semua site AJAX cuma ngasih contoh melakukan request di XMLHTTPRequest baru, gak pernah menggunakan ulang. Ya wajar sih, soalnya penggunaan ulang kan harusnya sama dengan request baru (di Firefox, Opera, Safari berjalan baik). Tapi di IE perlu trik dikit. Btw ini khusus asynchronous, kalo synchronous gak masalah kayaknya.

Kalo dilihat dari contoh penggunaan AJAX, mungkin penggunaan XMLHTTP Request mirip kaya gini (sorry IE only, yang lain minta bantuan om Google aja) :

// initialization –> biasanya onLoad

var http = new ActiveXObject(”Msxml2.XMLHTTP”);
http.onreadystatechange = requestReady;

function doRequest(url)
{
http.open(”GET”, url, true); // true buat asynch
http.send(”");
}

function requestReady()
{
if (htpp.readyState == 4)
{
// do domething
}
}

nah masalahnya di IE, kalo kita manggil untuk kedua kalinya, maka fungsi requestReady gak pernah dipanggil lagi. Loh padahal kan onreadystatechangenya dah diset ? masalahnya apa ?

Ternyata pas saya coba-coba, di IE, saat kita manggil :

http.open(”GET”, url, true);

semua property dari http direset ulang, makanya supaya bisa dipake ulang kita ubah kodenya sedikit jadi :

// initialization –> biasanya onLoad

var http = new ActiveXObject(”Msxml2.XMLHTTP”);

function doRequest(url)
{
http.open(”GET”, url, true);
http.onreadystatechange = requestReady; // set ulang property setelah open
http.send(”");
}

Coba lagi, pasti jalan :D. Ya emang gak penting banget sih postingannya, tapi lumayan lah ngebantu temen-temen yang pusing kenapa di IE XMLHTTPRequestnya agak beda prilakunya dengan browser lain.

Klorofil Explained - Part 1

Sambil merefactor kode klorofil/purefect untuk rilis yang sebentar lagi dilakukan, saya mo bagi motivasi, idealisme dan cerita-cerita dibalik project klorofil. Tujuannya sih supaya yang lain bisa ngerti dan ikut ngembangin, ato kalo tiba-tiba saya harus cabut dari project ini, mudah-mudahan project ini tetep bisa jalan.

Pada bagian ini saya mo nerangin tentang klorofil. Dibagian-bagian selanjutnya nanti saya akan menjelasin tentang purefect desktop, dan hubungan antar klorofil platform dan purefect desktop dan teknologi-teknologi spesifik yang ada klorofil seperti object serialization dan distributed object (televoke).

More »

The Good And The Evil Of InnerHTML

Sejak AJAX dan Web 2.0 jadi tren di Web Programming, ada beberapa bagian web yang sebenernya udah ada dari dulu jadi hal yang penting. Pertama tentu aja XML (loh bukannya X di ajax itu XML ?? - red), trus CSS, dan terakhir tentu aja InnerHTML.

Buat yang udah ngoding AJAX tapi belum maen-maen dengan 3 hal diatas, kasian deh kamu… :D Apa enaknya maen ajax tapi gak ngulik XML, CSS dan InnerHTML ??

XML dan CSS standar lah ya… termasuk juga teriakan-teriakan bete programmer web karena IE gak beres banget ngedraw CSSnya. Masa sih hack XML/CSS khusus untuk IE doang sedang browser laen pada sepakat !!! Maka dari itu, mulailah tinggalkan IE :D :D :D –> walau saya ngakuin IE 7 OK juga speednya, mungkin speednya mirip FireFox, tapi masih kalah sama opera. Kalo IE 6 kebawah, kelaut aja deh, uninstall trus delete permanen (bisa gak pake low level delete ? :D).

Disini saya mo ngebahas InnerHTML. Apaan tuh ? Sebenernya InnerHTML tuh fungsi DOM browser, jadi kita bisa ngubah-ngubah isi suatu div / span / layer on the fly, jadi tampilan bisa dinamik.

jadi contoh kita punya html kayak gini…

<div id="pesan">Pesan Awal</div>

nah setelah dapet response dari AJAX, kita mo ganti isi dari div diatas, cara yang paling gampang adalah dengan :

document.getElementById("pesan").innerHTML = ajaxResponse;

emang sih dari referensi yang ada, pemakaian innerHTML gak disarankan, kita disarankan menggunakan fungsi-fungsi DOM untuk ngubah isi suatu node, tapi kalo ngerubahnya ribet banget, misalnya jadi nambah kontrol baru (ini biasa terjadi di purefect desktop), pemakaian fungsi dom berlebihan banget, maksudnya programmernya udah resign duluan sebelum programnya selesai :D :D :D

Makanya dengan pemakaian innerHTML, penambahan node baru jadi super gampang dan feasible untuk diprogram.

Tapi tunggu dulu, disamping kemudahan innerHTML, ada sisi gelapnya. Yaitu kalau anda melakukan set nilai ke innerHTML, maka proses yang dilakukan oleh browser adalah sebagai berikut :

1. delete node yang ada
2. parsing HTML yang baru di set
3. gambar sesuai dengan html baru

yang perlu diperhatiin adalah langkah 1. Dengan sifatnya begitu, maka gak feasible kalo kita melakukan proses penambahan innerHTML seperti ini :

document.getElementById("pesan").innerHTML += newAddedHTML;

kalo misalnya innerHTML sebelumnya udah kompleks banget maka proses diatas akan memakan waktu, mungkin menimbulkan kesan browsernya hang –> inget semua browser cuma punya 1 thread untuk ngegambar HTML, jadi kalo ada yang mo buat browser multithread, saya terima kasih banget –> bisa jadi bahan skripsi nih !

Jadi gimana dong ? masa untuk yang udah kompleks kita harus kembali ke fungsi DOM sih. Ya gimana lagi, tapi saya punya tips dikit. Daripada semua pake fungsi DOM, saya membatasi redraw innerHTML. Caranya ?? gini kalo mo tau…

skenarionya, udah ada HTML yang kayak gini :

<div id="pesan">
<div id=”pesan1″>ini yang pertama</div>
</div>

trus kita mo rubah jadi kayak gini :

<div id="pesan">
<div id=”pesan1″>ini yang pertama</div>
<div id=”pesan2″>ini yang kedua</div>
</div>

nah tehniknya adalah sebagai berikut :

// javascript code nih

var node = document.createElement("div");
node.id = “pesan2″;

// set style seperlunya, contoh :
node.style.color = “#FF00FF”;
node.innerHTML = “ini yang kedua”;

document.getElementById("pesan").appendChild(node);

Jadi idenya adalah kita nambahin dulu kontainernya. Penambahan kontainer pake fungsi dom appendChild enggak menyebabkan redraw keseluruhan HTML. Nah setelah kontainernya ada, yang kita set innerHTMLnya adalah kontainernya, jadi yang redraw cuma isi kontainernya aja –> yang mana tentu aja masih kosong.

Kalo htmlnya cuma kayak diatas sih gak ngaruh, tapi kalo kamu mrogram aplikasi Web 2.0 yang kompleks kayak purefect, maka teknik diatas ngaruh banget.

Gitu deh tips dari saya. Kalo ada yang mo nanya-nya silakan aja, mo pos di komen ato langsung email ke denny(at)klorofil.org

OpenSource, Hasil Ato Proses ?

Jujur saya sering heran kalo mendenger orang ngaku sebagai orang opensource karena udah nginstall program opensource di komputernya. Soalnya, apa bener kalo kita dah nginstall program opensource trus kita dah jadi bagian dari gerakan opensource ?

Opensource tuh bukan soal memakai produk-produk opensource (cmiiw). Bagi saya gak ada bedanya antara orang yang memakai software propitery sama orang yang pake software opensource. Saya gak bilang kedua-duanya salah loh, tapi saya melihat keduanya seperti orang yang beli makanan. Buat orang yang mampu, bisa beli makanan yang lebih mahal yang memang sesuai selera dia, buat orang yang gak mampu mungkin pilihannya jadi lebih sedikit (dari segi harga) tapi enggak berarti semua yang murah gak enak dan gak sesai selera loh. Jadi gak ada bedanya, sama-sama berusaha memenuhi kebutuhannya, gak beda.

Nah kalo menurut saya opensource itu bukan pada level itu, tapi pada level komunitas yang ingin memenuhi kebutuhan bersama dengan cara saling menyumbang ide, pemikiran, dan tenaga untuk mewujudkan hal-hal yang jadi kebutuhan bersama. Mungkin gotong-royong masyarakat indonesia adalah bentuk awal dari opensource. Makanya kalo kita masih pada level nuntut dan cuma pake, kita bukan masyarakat opensource, tapi masyarakt konsumen biasa.

Bangsa kita yang (katanya) ingin menggalakkan opensource, mungkin harus me-redefinisikan lagi opensource dari kamus kita. Kita hanya berorientasi pada hasil, yaitu harus terbuka sourcenya dan harus gratis, padahal source yang sudah terbuka itu juga tidak pernah dibuka apalagi dikembangkan.

Opensource tuh soal proses, bagaimana sih kebutuhan kita bisa kita penuhin dengan saling bekerja sama, saling mendukung dan saling menguntungkan. Bagusnya lagi kalo saling bekerja sama tadi bisa mempercepat pemenuhan butuhan kita dan penemuan tehnik-tehnik baru yang mungkin bisa meningkatkan kesejahteraan bersama.

Jadi jangan sampe lagi ada menteri (yang katanya) informatika nanya opensource sudah memberikan apa :D mudah-mudahan menteri yang baru bisa lebih mengerti… (amin)

I’m Back ! (—> again :D)

He..he..he.. jadwal rilis mundur terus-terusan, maaf deh :D kemaren sibuk banget, ada kerjaan di saltanera dan di kampus (—> bohong banget, padahal aslinya males :D)

OK deh, kemaren emang agak kehilangan semangat, padahal dari saltanera udah ngasih insentif yang OK banget, mulai dari komputer yang jauh lebih keren (cpu + memori + layar + printer) mungkin lebih tepat jadi komputer maen game kali ya, tapi enggak kok, isinya cuma Windows, Office, Apache, PHP sama PhpDesigner. Ditambah pasokan perbekalan :D :D :D

Tapi sekarang I’M Back !!! mulai malem ini saya dah semangat lagi. Udah penuh dengan ide-ide baru yang pasti bakal ngejutin semua. So… sabar ya Boss !!!

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

Surat Terbuka Untuk Pemerintah & OpenSource Indonesia

Ass.Wr.Wb.

Pertama-tama perkenalkan nama saya Denny, salah seorang developer di proyek open source Klorofil (www.klorofil.org). Melihat perkembangan perdebatan tentang MoU Indonesia dengan Microsoft, saya merasa perlu untuk urun pendapat masalah tersebut sebab sepertinya keterwakilan pihak developer opensource agak kurang dalam perdebatan ini.

Pertama-tama saya ingin memberitahukan posisi saya sebagai orang yang setuju dengan MoU tersebut, sebab MoU itu sejalan dengan salah satu tujuan kami, yaitu lepas dari Jeratan Pembajakan. Tidak bisa dipungkiri sebagian besar komputer dipemerintahan indonesia berbasis Windows yang (mungkin) bajakan. Kalau pemerintah hendak membeli produk microsoft yang nyata-nyata sudah dipakai dan memberikan kontribusi untuk jalannya pemerintahan Indonesia saat ini, menurut saya itu adalah keharusan.

Tapi melihat debat antar pemerintah dan komunitas (yang mengatas namakan) opensource, menurut saya ada beberapa hal yang terlupakan :

1. OpenSource != Linux

Yap, walaupun linux mungkin produk opensource yang paling terkenal, tapi mohon jangan samakan OpenSource dengan Linux. Masih banyak produk OpenSource lain yang hebat bahkan mungkin secara sadar-tidak sadar melayani aktivitas IT anda selama ini seperti :

- Apache Web Server
- SendMail Server
- QMail Server
- Mozilla FireFox
- OpenOffice
- FreeBSD
- BIND Name Server
- PHP
- dan pendatang baru Java

2. OpenSource != Gratis

Gratis mungkin hanya fitur tambahan dari OpenSource, hal utama dari OpenSource adalah kebebasan berkreasi, pemunculan ide dan teknologi baru lebih cepat dan dalam jangka panjangnya mencapai kesejahteraan bersama.

3. OpenSource != Produk Hobi

Kalau IBM bermain dengan Eclipsenya, Novell dengan Linuxnya, Sun dengan Javanya apa masih bilang opensource produk hobi ? Apa pernah lihat keteraturan organisasi Apache & Mozilla ? OpenSource bukan ajang pembuktian kehebatan hacker-hacker, tapi lebih dari itu, gerakan untuk kemaslahatan bersama.

4. OpenSource == Pilihan Realistis

Saya bukan penentang closed source software, bagi anda yang mampu untuk membeli (secara legal) dan puas dengan posisi sebagai konsumen yang hanya menunggu inovasi dari vendor software (dan membayar lagi untuk tiap versi yang berisi inovasi tadi) saya persilakkan.

5. Masyarakat OpenSource Indonesia Harus Realistis

Yap, kita tidak bisa memaksa suatu pihak untuk pindah ke opensource kalau opensource belum bisa menyediakan kebutuhan-kebutuhan pihak tersebut. Sekali lagi, OpenSource adalah pilihan dan untuk tidak memakai opensource juga adalah sebuah pilihan yang harus dihormati.

Moga-moga saja bisa memberi masukkan. Kalau ada rekan yang ingin berkomentar, membantah atau berdiskusi lanjut, saya persilakkan untuk menghubungi saya ke denny (at) klorofil.org

————————-

Ada yang bisa bantuin forward-in ke sofyan jalil :D :D :D