Kisah Sukses Google
Alhamdulillah, setelah sekian lama tak ada waktu buat membaca buku, weekend [sabtu, minggu] kemarin aku bisa mengurung diri di kamar. Pasang temperatur AC ke yang paling dingin, 2 bungkus snack merk Kusuka yang kubeli dari Alfamart, dua gelas air mineral , satu bungkus tahu sumedang dari penjaja di depan Alfa, lalu telentang di kasur, dan mulai membaca buku. Aih.. nikmatnyah… Bukunya cukup berbobot namun gaya penulisannya ringan dan menyenangkan. Thanks buat mas Joko (hormat pak komendan!) yang minjemi buku ini. Hehe.. modal buku pinjeman (masih ada lagi buku pinjaman yang belum aku habisin, Ayat-Ayat Cinta).
Well, seberapa penting kah Google Search itu? Percaya atau tidak, aku sudah sangat tergantung dengan keberadaan search engine satu ini. Masalah pekerjaan, produktivitasku sangat dipengaruhi Mbah Google. Entahlah jika tanpa Google, hidup mungkin akan terasa hampa *halah*. Mencari lirik lagu, gambar-gambar lucu, bahkan hingga cari hadist nabi tinggal ketik di search field-nya Firefox yang aku tancapkan untuk mengarah ke Google Search. Meskipun telah sejak tahun 1999 menggunakannya, hingga kini aku masih sering kagum dengan hasil pencariannya. Akurat, spesifik, dan sepertinya Mbah ini tahu benar apa yang kumaksud.
Karena buku ini cukup populer, reviewnya nggak akan diceritakan di sini, cari aja di google, udah banyak. Testimonial dariku adalah buku ini sangat inspiratif. Perjuangan duo Google Guys (Larry Page dan Sergey Brin) membesarkan brand Google dan bertahan dari raksasa-raksasa AltaVista, Yahoo!, hingga sang penguasa kegelapan Microsoft sangat
menarik untuk diikuti. Ini tentu saja terlepas dari klaim penulis bahwa Google adalah perusahaan yang jujur dan bersih dengan komitmennya yang terkenal: Don’t Be Evil.
Inilah beberapa filosofi yang menarik untuk dicermati yang sempat aku catat:
Ilham tetap menuntut kita bekerja keras sampai berkeringat
Satu-satunya cara untuk meraih sukses adalah mengalami kegagalan terlebih dahulu
Makin sering Anda tersandung, makin besar peluang Anda untuk tersandung sesuatu yang berharga
Larry Page: “Masalah dan kegagalan tidak asing bagi kami. Yang perlu kami perbuat tak akan ada habisnya. Namun andai tahun depan kami tidak menjadi jauh lebih baik, kami akan sudah dilupakan.”
Sangat direkomendasikan untuk baca buku ini. Bisa menambah semangat dan motivasi bekerja sampai titik keringat penghabisan. Selain itu, buku ini membedah apa saja rahasia di balik Googleplex, yang tak lain dan tak bukan lahir dari Stanford University, kampus tempat Sun Microsystem dan perusahaan raksasa lain muncul.
Self Portrait
Narsis mode: on. Karena narsis adalah bagian dari percaya diri :p
(klik pada foto untuk memperbesar)
Komponen foto: Fotoku dan foto langit jakarta arah Kuningan (HR. Rasuna Said).
Retouch: Adobe Photoshop 7, blended: hard light, opacity 75%
Namun aku tidak akan berbicara tentang photoshopnya! Aku akan nulis soal kopiah rajutan bulat yang menempel di kepalaku itu. Itulah kenang-kenangan satu-satunya darinya. Benda yang akan selalu aku pakai ketika shalat dan karena itu aku tidak akan lupa untuk selalu berdoa untuknya agar dia selalu bahagia, karena aku tahu bahwa dia sangat sayang dan perhatian padaku meskipun tidak seperti yang kuinginkan. Terima kasih ya nduk….
Administrasi Oracle Container 4 J2EE
Oracle memiliki application server yang handal bernama Oracle Application Server yang sebenarnya roh di dalamnya adalah Orion Application Server. OAS merupakan application server yang lengkap dan kokoh, mendukung servlet hingga webservice. OAS sendiri merupakan produk komersial yang mahal, namun servlet containernya yang populer disebut Oracle Container for J2EE (OC4J) didistribusikan dengan free.
Nah, kali ini aku berhasil menyusun dokumentasi semacam “getting started” yang membahas bagaimana melakukan administrasi awal OC4J. Versi mayor OC4J yang kubahas adalah versi 10.1.2.x, kompatibel dengan spesifikasi J2EE 1.3, meskipun versi mayor terbaru adalah 10.1.3.x yang kompatibel dengan J2EE 1.4. Sebabnya adalah adanya bug yang sangat menjengkelkan pada OC4J 10.1.3 sehingga membuat aplikasi gabungan maut webwork+hibernate+spring menjadi tidak berjalan semestinya.
File-nya dapat didownload di link di bawah ini, maaf menggunakan format Microsoft Word karena tidak punya Adobe PDF creator. Terima kasih untuk Mas Aby yang mengkoreksi dokumentasi ini.
Doa
Ya Allah,
Aku tahu apa yang menjadi kehendak-Mu adalah yang terbaik buatku
Engkau telah pertemukan dia denganku
Dia yang begitu berarti bagiku
Dia yang dengan kelembutan dan keceriaannya telah membawa kedamaian hatiku
Dia yang membawa banyak arti buatku
Dengan penuh syukurku kepada-Mu Ya Allah, aku berserah dan menyembahKalaulah ia memang jodohku, dekatkanlah kami
Namun jika bukan, kumohon karuniakanlah rasa ikhlas kepadaku
Agar aku bisa tetap tersenyum
Bukan senyum dalam tangis
Bukan pula gembira dalam hati yang teriris
Mungkin aku telah memperbaiki doaku dengan yang ini, karena aku baru saja sadar bahwa doaku selama ini jahat dan penuh emosi, memohon agar bisa melupakannya. Kini, aku hanya berdoa agar aku…. bisa ikhlas menerima apa adanya kenyataan yang terpampang di depan mataku.
Running Oracle Report
Salah satu tool reporting yang cukup handal adalah Oracle Report. Berbasis Oracle Container for J2EE (OC4J), tool ini menyediakan editor yang sedikit menjengkelkan. Namun demikian, tool ini cukup powerfull untuk membuat sebuah berkas reporting dalam bentuk PDF (paper based) atau HTML (web based). Seperti tool reporting lainnya, Oracle Report bisa mengambil dari data source, misalnya SQL.
Namun demikian, aku ndak akan tutorial tentang itu. Di sini aku hanya menunjukkan bagaimana mengakses report langsung dari URL dan mengirimkan parameter yang diperlukan data model. Silakan ganti variabel-variabel di sini dengan variabel yang sesuai dengan lingkungan pengembangan Anda. Inilah elemen-elemennya:
http://localhost:8889 : nama host dan port tempat OC4J server mendengarkan request
/rwservlet? : nama servlet yang akan menggenerate report
Berikutnya adalah parameter yang diperlukan:
destype: tipe device yang akan menerima output yang paper-based. Nilai yang valid adalah cache (langsung di web browser), localfile (ke file), file (file di server), printer (untuk langsung dicetak), sysout (sistem output dari mesin), mail (kirim email), oracleportal (ke oracle portal), ftp (upload ke FTP Server), webdav (upload ke webdav server). Keterangan selengkapnya ada di sini.
desformat: mendefinisikan format output. Salah satu format yang valid adalah PDF. Daftar format selengkapnya ada di sini.
userid: account yang digunakan untuk login ke database yang digunakan report sebagai sumber data. Formatnya adalah [username]/[password]@[TnsName]. TnsName adalah nama alias koneksi database yang didefinisikan di file tnsnames.ora di Oracle Client.
report: lokasi file pada report server. Berupa absolute path. Misalnya, D:\orareport\rigless\report.rdf
Dan sisanya adalah parameter-parameter yang diperlukan oleh data model. Parameter ini didefinisikan di data model sewaktu mendesain data modelnya (di workspace Oracle Report sudah disediakan editor yang cukup baik).
Demikian catatan mengenai Oracle Report. Mungkin lebih berguna bagi saya sendiri sebagai pengingat, tapi andai berguna pula buat Anda, alhamdulillah
Tag Baru: Brand
Posting ini menandai pembukaan tag baru blogku, yaitu Brand. Tag ini akan membahas soal bagaimana suatu korporat mengedukasi pasar dan membesarkan brand/merk-nya. Sejak bertemu dan akhirnya berkawan dengan Bang Uki, aku jadi tertarik dengan dunia komunikasi visual. Aku jadi suka berkomentar tentang desain iklan, baliho, poster, tentunya dari sudut pandang mata seorang awam yang hanya mengenal dunia ini secara otodidak. Tentu saja, posting dalam kategori ini tidak akan sedalam, seakurat, dan sebagus blog-nya Pak Itpin. Lebih subjektif, khas blog.galihsatria.com :p
Oke, untuk memulainya, aku akan cerita tentang brand galihsatria.com sendiri
Lama sebelum heboh web 2.0, galihsatria.com saya posisikan sebagai personal website, berbasis Java. Sebagai web personal, web ini sangat technology-minded (beberapa kawan malah menyebut java-minded). Menyediakan berbagai macam file-file hasil pekerjaan kuliahku. Menjadi berguna bagi orang lain adalah harapanku. Kalau setelah itu ternyata karyaku itu disalahgunakan, katakanlah untuk dibacem (baca: dibajak) habis-habisan, aku anggap itu adalah suatu kerugian untuk si pembajak. Kenapa? Karena ia tidak pernah mendapatkan semangat pembelajarannya. Padahal tujuan utamaku dengan mempublikasikan berbagai macam resource yang aku buat adalah untuk tujuan studi dan penelitian.
Pada waktu aku lulus kuliah dan melepaskan “jabatan” sebagai orang yang tinggal di lab ITSnet, aku juga harus kehilangan sebuah server Javaku. Nah, saat itu aku memutuskan untuk memati-surikan brand www.galihsatria.com dan mereposisi blog.galihsatria.com sebagai brand utama. Selain karena alasan tidak adanya server Java, tren web 2.0 dan gelombang blog begitu cepat membesar. Model website saat ini adalah berbasis komunitas, interaktif, dan dengan aksesbility yang nyaman. Blog, friendster, flickr, dan semacamnya adalah angin saat ini. Jadi, daripada susah-susah melakukan migrasi sistem www ke dalam sistem yang lebih kompatibel, aku memutuskan untuk mereposisi blog menjadi publikasi utama untuk seorang Galih Satriaji. Mungkin jika ada waktu nanti, aku akan menghidupkan lagi brand www. Entahlah.. who knows?
Catatan Kecil Tentang Javascript
Ini adalah saat-saat yang menjengkelkan sekaligus mengasyikkan: ngoprek Javascript. Kasusnya adalah dalam sebuah tabel, bagaimana kita menambahkan baris tabel (tag [tr]) secara dinamis lewat Javascript.
Sederhana, DOM HTML telah memiliki fungsi lengkap untuk melakukan hal itu. Lihat baris kode di bawah ini:
// mendapatkan objek tabel yang akan diambil
var table = document.getElementById(tableID);// mendapatkan jumlah baris
var lastRow = table.rows.length;// menambahkan baris baru dan menentukan CSS class ganjil dan genap
var tr = table.insertRow(lastRow);
tr.className = ( lastRow % 2 == 0 ) ? ‘form-table_tr-even’ : ‘form-table_tr-odd’;// first column
var td0 = tr.insertCell(0);
td0.align = ‘center’;
td0.vAlign = ‘middle’;
td0.innerHTML = ‘[input type="radio" value="' + lastRow + '" name="chkRow" /]‘;
Caranya cukup mudah. Namun bagaimana ketika elemen-elemen itu memiliki event, misalnya ketika diklik akan melakukan fungsi Javascript juga? Dulu aku membuat sebuah template blok-blok html tersebut dan kemudian aku copy-paste dengan perintah copyElement. Namun cara ini selain tak efisien juga tak fleksibel. Tidak dinamis lagi. Ketika keadaan memaksaku untuk tidak menggunakan cara ini, aku mencari dan akhirnya menemukan bahwa untuk menambahkan event handler ke elemen yang dibuat secara dinamis, ada perintah tersendiri untuk meregister event tersebut.
Masalahnya, tidak ada standar dalam hal ini. Khususon IE punya attachEvent. Sedangkan Opera, Firefox, dan Safari punya addEventListener. Perlakuan dua fungsi tersebut bisa dilihat di bawah ini:
var handler = new Object();
handler.onclick = function() {
setRow(lastRow-1);
}
if(window.addEventListener) { // Mozilla, Firefox, Netscape, dll
tr.addEventListener(‘click’, handler.onclick, false );
}
else { // IE
tr.attachEvent( ‘onclick’, handler.onclick );
}
Parameter pertama adalah event yang diregister. Perhatikan bedanya. IE memerlukan nama lengkap eventnya; onclick, onmouseover, dll. Tapi Firefox mengabaikan kata-kata on dan secara otomatis akan menambahkan kata itu didepan parameter yang diregister. Parameter kedua adalah pointer yang menunjukkan fungsi yang akan dikerjakan ketika event di-invoke (opo yo bahasa Indonesiane?). Di sini bisa langsung dimasukkan nama fungsi tanpa harus membuat Objek pointer jika fungsi yang akan dikerjakan tidak memiliki parameter. Tapi jika memiliki parameter, perlakuannya seperti di atas. Buat variabel bertipe function() dan didalamnya berisi fungsi yang dipanggil.
Kedengarannya gampang dan sederhana bukan? Tapi mencari petunjuk dan aturan ini lho susahnya bukan main. Masalahnya tetap, karena tidak ada standardisasi. Ketika aku telah menemukan attachEvent… eh ternyata Firefox hanya mau menerima addEventListener. Ketika fungsi yang harus di-invoke adalah fungsi berparameter, ternyata harus membuat sebuah pointer, karena fungsi berparameter tidak bisa langsung dipassing baik ke attachEvent maupun addEventListener.
Jadi.. Long Live Javascript!!!
Comments