Tak terasa, hampir 8 tahun, 1/3 masa hidup gw tinggal dikota ini. Dulu datang ke Jakarta dengan segudang mimpi. Tapi pada kenyataannya, jakarta begitu keras untuk di taklukkan.
Berbagai kisah sudah dilalui di kota ini. Senang, sedih, stress, bingung, galau, campur aduk. Semua pernah dialami dikota ini.
Jadi inget lagi waktu masa kuliah masa culun teramat sangat dengan idealisme yang menggebu gebu dan kostan yang tidak layak huni, kemudian saat diterima sebagai Marketing di Binus sambil kuliah (untuk pertama kalinya kerja full time, dan untuk pertama kali nya menerima SP II, walaupun di block jalan mau jadi aslab walapun udah lulus ujian nya tapi benar2 kerasa manfaat nya), trs skripsi yang dikerjain cuman 1 minggu disaat tahun baru. Trs keterima kerja di Singapore walaupun akhir nya gagal kerja gara2 ijazah yang belum keluar. Trs kerja IT pertama kali dengan bos yang suka sesama jenis, sukur nya disana kurang dari seminggu. Selanjutnya bekerja di Real Networks selama 1 1/2 tahun, di tempat ini gw kerja yang paling lama. Dan hari ini sempet juga pamitan disana. Trs pindah ke FF dari rekomendasi sodara reza. Saat ini lah gw mulai terjerumus dengan dunia gelap yang ada di Jakarta. Bekerja di MIK yang cuman bertahan selama tidak lebih dari 5 bulan. kemudian bekerja serabutan tapi happy dan memulai membenarkan hidup, kembali ke jalan yang benar dan menatap masa depan.
Dan sekarang, sudah saatnya gw pulang ke kampung halaman. Mengubur cita - cita yang pernah dimimpikan di Jakarta, dan memulai merubah mimpi itu menjadi kenyataan di Bali.
Om Awignam Astu Namas Sidam.
Wednesday, December 14, 2011
Tuesday, December 6, 2011
Idea vs Execution. Fight!
Belakangan ini sangat tinggi hype tentang startup lokal. Beberapa kali juga saya sempat terlibat menjadi bagian dari salah satu nya, tapi hanya sebagai pekerja. Walaupun sempat juga menjadi calon pemilik. Baru calon. Haha.
Ada hal yang saya sangat cermati terhadap startup tersebut. Beberapa dari startup tersebut memiliki ide yang sangat brilian. Bahkan saya pun berdecak kagum akan prospek dari startup tersebut. Tapi setelah saya bergabung kesana, saya melihat sedikit keganjilan didalam nya. Seperti ada lubang yang mereka tinggalkan begitu saja. Tanpa ada yang berusaha menutupi nya.
Beberapa kali saya berfikir, kenapa perusahaan ini tidak dapat berkembang. Setiap saya melihat kebelakang, apakah ada yang salah dengan ide nya, saya selalu melihat sebuah prospek besar didepan. Tapi kenapa perusahaan ini tidak dapat berkembang seperti yang diinginkan?
Perlahan saya pun mengerti, esensi dari suatu usaha tidak hanya dalam Ide. Eksekusi dengan cara yang tepat jauh lebih dibutuhkan dari pada sebuah ide yang Brilian untuk mencapai hasil yang maksimal.
Sebagai contoh nyata, Bhinneka.com adalah sebuah website yang sangat sangat terkenal di indonesia. Bahkan website nya masuk kedalam 100 besar website yang paling sering dikunjungi di Indonesia. Tapi pada kenyataannya, mereka hanya membukukan revenue 10% dari online transaction, dan sisa nya dari Offline transaction. Jumlah item yang dibeli dari online transaction pun hanya 10 - 20 item perhari. FYI bhinneka rata - rata mencapai 50 ribu hit perhari nya. Konversi hit dan pembeliannya sangat - sangat rendah.
Terlepas dari prilaku masyarakat indonesia dalam pembelian online retail, bhinneka tetap dapat survive sampe sekarang dan tetap menjadi leader retailing dalam bidang elektronika khusus nya perangkat komputer di Indonesia.
Dari contoh bhinneka tersebut kita dapat melihat bagaimana sebuah ide yang biasa biasa saja bisa menjadi suatu bisnis yang berevenue puluhan milyar setiap tahunnya. Padahal sampai sekarang potensi penjualan online di indonesia masih cukup jauh dengan offline store. Tanpa eksekusi yang baik, saya sangat yakin nasib dari bhinneka tidak jauh seperti start up lainnya yang cuman Numpang Lewat.
Ada hal yang saya sangat cermati terhadap startup tersebut. Beberapa dari startup tersebut memiliki ide yang sangat brilian. Bahkan saya pun berdecak kagum akan prospek dari startup tersebut. Tapi setelah saya bergabung kesana, saya melihat sedikit keganjilan didalam nya. Seperti ada lubang yang mereka tinggalkan begitu saja. Tanpa ada yang berusaha menutupi nya.
Beberapa kali saya berfikir, kenapa perusahaan ini tidak dapat berkembang. Setiap saya melihat kebelakang, apakah ada yang salah dengan ide nya, saya selalu melihat sebuah prospek besar didepan. Tapi kenapa perusahaan ini tidak dapat berkembang seperti yang diinginkan?
Perlahan saya pun mengerti, esensi dari suatu usaha tidak hanya dalam Ide. Eksekusi dengan cara yang tepat jauh lebih dibutuhkan dari pada sebuah ide yang Brilian untuk mencapai hasil yang maksimal.
Sebagai contoh nyata, Bhinneka.com adalah sebuah website yang sangat sangat terkenal di indonesia. Bahkan website nya masuk kedalam 100 besar website yang paling sering dikunjungi di Indonesia. Tapi pada kenyataannya, mereka hanya membukukan revenue 10% dari online transaction, dan sisa nya dari Offline transaction. Jumlah item yang dibeli dari online transaction pun hanya 10 - 20 item perhari. FYI bhinneka rata - rata mencapai 50 ribu hit perhari nya. Konversi hit dan pembeliannya sangat - sangat rendah.
Terlepas dari prilaku masyarakat indonesia dalam pembelian online retail, bhinneka tetap dapat survive sampe sekarang dan tetap menjadi leader retailing dalam bidang elektronika khusus nya perangkat komputer di Indonesia.
Dari contoh bhinneka tersebut kita dapat melihat bagaimana sebuah ide yang biasa biasa saja bisa menjadi suatu bisnis yang berevenue puluhan milyar setiap tahunnya. Padahal sampai sekarang potensi penjualan online di indonesia masih cukup jauh dengan offline store. Tanpa eksekusi yang baik, saya sangat yakin nasib dari bhinneka tidak jauh seperti start up lainnya yang cuman Numpang Lewat.
Thursday, November 24, 2011
40% of the inc500 CEOs had an entrepreneurial parent
Jadi orang tua adalah salah satu faktor penting.
Jika ingin menjadikan anak kita sebagai seorang pengusaha yang sukses, sangat penting jika kita membukakan jalan terlebih dahulu.
Paling tidak dengan pengalaman yang pernah kita dapat, sang anak mendapatkan pelajaran yang tidak perlu dia ulangi, sehingga perkembangannya menjadi lebih cepat.
Jika ingin menjadikan anak kita sebagai seorang pengusaha yang sukses, sangat penting jika kita membukakan jalan terlebih dahulu.
Paling tidak dengan pengalaman yang pernah kita dapat, sang anak mendapatkan pelajaran yang tidak perlu dia ulangi, sehingga perkembangannya menjadi lebih cepat.
Pengen punya keturunan pintar? ini tips nya!
- Jadikan diri anda pintar terlebih dahulu.
- Cari pasangan yang pintar kemudian menikah lah dengan nya.
- Tekankan anak anda untuk mengulangi langkah 1.
Thursday, November 17, 2011
Tuesday, November 1, 2011
Belajar Magento (Rute ke Controller)
Bulan ini kita mulai dengan mempelajari sesuatu yang baru. Nah bahan untuk belajar skrng adalah Magento.
Magento adalah salah satu shopping cart software yang sangat terkenal. Bukti nya saja dia dibeli oleh Ebay. Dan dari pengalaman menggunakan beberapa product shopping cart yang serupa (khusus nya yang menggunakan php), magento adalah yang paling kompleks, namun memiliki feature yang paling lengkap. Dan dari segi programming bnyk yang menganggap Magento adalah salah suatu masterpiece software yang berbasiskan php.
Setelah mempelajari magento beberapa saat, ternyata magento sangat menarik untuk dipelajari. Terdapat beberapa kekurangan dari magento, seperti contoh nya Magento membutuhkan resource yang cukup besar untuk meload suatu page. Tercatat magento membutuhkan sekitar 38 MB untuk meload suatu page yang mana diload tanpa cache dan hanya untuk 1 (satu) request. Besar kan? Maka oleh karena itu, hampir tidak mungkin magento dapat di host pada shared hosting yang biasa nya untuk mengeksekusi php saja dibatasi sebesar 32 MB.
Magento juga menggunakan framework MVC seperti kebanyakan product lainnya. Nah, seperti langkah belajar sebelumnya, mari kita cari tau, bagaimana alur sampai request yang masuk keserver sampai dihandle oleh controller dari Magento.
Magento adalah salah satu shopping cart software yang sangat terkenal. Bukti nya saja dia dibeli oleh Ebay. Dan dari pengalaman menggunakan beberapa product shopping cart yang serupa (khusus nya yang menggunakan php), magento adalah yang paling kompleks, namun memiliki feature yang paling lengkap. Dan dari segi programming bnyk yang menganggap Magento adalah salah suatu masterpiece software yang berbasiskan php.
Setelah mempelajari magento beberapa saat, ternyata magento sangat menarik untuk dipelajari. Terdapat beberapa kekurangan dari magento, seperti contoh nya Magento membutuhkan resource yang cukup besar untuk meload suatu page. Tercatat magento membutuhkan sekitar 38 MB untuk meload suatu page yang mana diload tanpa cache dan hanya untuk 1 (satu) request. Besar kan? Maka oleh karena itu, hampir tidak mungkin magento dapat di host pada shared hosting yang biasa nya untuk mengeksekusi php saja dibatasi sebesar 32 MB.
Magento juga menggunakan framework MVC seperti kebanyakan product lainnya. Nah, seperti langkah belajar sebelumnya, mari kita cari tau, bagaimana alur sampai request yang masuk keserver sampai dihandle oleh controller dari Magento.
- Semua request ke magento, akan selalu di redirect index.php oleh .htaccess. htaccess sendiri sebetulnya biasa digunakan untuk webserver apache. Tapi disebutkan juga bahwa beberapa webserver mensupport htaccess.
- Kemudian dari index.php, dilanjutkan ke Mage.php yang dinstantiate dan memanggil function run. Class Mage ini merupakan class penghubung dari sysem keseluruhan dari magento. Dan class Mage ini akan selalu digunakan dalam memanggil komponen komponen magento lainnya
- Dari fungsi run tersebut application model di instantiate (Mage_Core_Model_App) yang kemudian akan memanggil front controller (Mage_Core_Controller_Varien_Front).
- Class dari front controller tersebut adalah Mage_Core_Controller_Varien_Front. Fungsi init dari class tersebut mengambil configurasi yang didefinisikan pada file app/code/core/Mage/Core/etc/Config.xml untuk key di node stores/default/web/router. dan didapat 2 record yang merupakan Class Router. Yang pertama adalah router untuk admin area (Mage_Core_Controller_Varien_Router_Admin) dan router untuk frontend area (Mage_Core_Controller_Varien_Router_Standard)
- Dari Mage_Core_Model_App, front controller di dispatch. Pada proses dispatch ini, router akan memanggil function match, yang mana akan mengambil config sesuai dengan area dan module yang akan dituju. Pada admin akan diambil configurasi di node admin/routers/modulename, sedangkan pada frontend akan diambil configurasi di node frontend/routers/modulename. File dari configurasi tersebut semua terdapat pada file etc/config.xml untuk setiap module.
- Saat module, controller, dan action ditemukan maka Selanjutnya request akan dihandle oleh module/controller/action yang dituju.
- Note : Magento sendiri memiliki Mekanisme URL Rewrite tersendiri, tidak menggunakan .htaccess yang biasa digunakan pada applikasi lain. Pada product, category, URL rewrite disimpan pada database. Selain itu terdapat juga cara untuk rewrite melalui config dengan node global\rewrite. Contoh nya :
<global> <rewrite> <nama_unik_halaman> <from>halaman/yang/direwrite</from> <to>halaman/hasil/rewrite</to> </nama_unik_halaman> </rewrite> </global>
Dengan mengetahui alur kerja dari routing magento, tentu dengan mudah kita dapat menentukan controller yang mana yang akan di hit oleh magento untuk sebuah request. Selain itu kita juga bahkan dapat menciptakan sendiri page sendiri dari framework yang sudah terdapat pada magento ini sendiri.
Sunday, October 2, 2011
You are not alone
Jadwal hari ini adalah shopping di tanah abang sebelum pulang kampung lusa nanti. Cukup bnyk yang harus dibeli. Memang shopping ga bakal pernah jadi hobi deh. Cape, ga bisa nawar, completely a mess!
Lagi cari - cari celana, eh tau2 ketemu tmn di Binus dulu. Kita sempet ngobrol - ngobrol. Dia juga ternyata punya cita - cita seperti saya dulu, pengen jualan online ngambil barang - barang dari tanah abang. Hahaha, ternyata kita tidak sendiri kawan. Teman - temen sekitar sini juga bnyk yang memikirkan hal tersebut, udah bukan rahasia sih sebetulnya.
Kemudian ngobrol - ngobrol lagi. Tanya tentang kerjaan. Eh malah tanya, "ada kerjaan ga, bosen nih ditempat skrng". Yeah! Ternyata, bnyk orang yang tidak betah di tempat kerja nya dan berusaha mencari kerja baru. dan lagi lagi, bukan rahasia lagi sebetulnya. Tapi entah kenapa setelah ketemu dengan yang satu ini, saya merasa kalau saya tidak sendiri dijakarta ini. Mengais rejeki, mencoba peruntungan.
Memang ada saat nya kita merasa sangat jatuh, susah bgt merealisasikan mimpi. Tapi kalau inget tmn - tmn yang juga usaha, semangat muncul lagi. Karena benar kalau kita ini tidak sendiri.
Cool friend, keep struggling, and beat this Jakarta!
Lagi cari - cari celana, eh tau2 ketemu tmn di Binus dulu. Kita sempet ngobrol - ngobrol. Dia juga ternyata punya cita - cita seperti saya dulu, pengen jualan online ngambil barang - barang dari tanah abang. Hahaha, ternyata kita tidak sendiri kawan. Teman - temen sekitar sini juga bnyk yang memikirkan hal tersebut, udah bukan rahasia sih sebetulnya.
Kemudian ngobrol - ngobrol lagi. Tanya tentang kerjaan. Eh malah tanya, "ada kerjaan ga, bosen nih ditempat skrng". Yeah! Ternyata, bnyk orang yang tidak betah di tempat kerja nya dan berusaha mencari kerja baru. dan lagi lagi, bukan rahasia lagi sebetulnya. Tapi entah kenapa setelah ketemu dengan yang satu ini, saya merasa kalau saya tidak sendiri dijakarta ini. Mengais rejeki, mencoba peruntungan.
Memang ada saat nya kita merasa sangat jatuh, susah bgt merealisasikan mimpi. Tapi kalau inget tmn - tmn yang juga usaha, semangat muncul lagi. Karena benar kalau kita ini tidak sendiri.
Cool friend, keep struggling, and beat this Jakarta!
Sunday, September 18, 2011
Money, not the most important
Dan akhir nya saya pun menyadari, bahwa uang bukan lah suatu hal yang selama ini saya kejar. Tapi jalan menuju kesuksesan, dan grip yang kuat terhadap kehidupan lah yang menjadi target.
Grip yang kuat tersebut didapat hanya jika kita bisa mengendalikan semua sisi dalam kehidupan. Tentu saja termasuk sumber pendapatan. Selain itu kita juga bisa mengendalikan sumber pengeluaran. Dan kemampuan dalam berpikir secara rasional dan terarah merupakan essensi dalam kekuatan grip tersebut.
Sungguh saya sangat tidak ingin menjadi seperti darsem (yang setelah lepas dari hukuman maut, malah menjadi orang kaya mendadak), ataupun seperti DPR yang kaya, tapi tidak tau dapet nya dari mana. Karena saya pikir, pengalaman dalam mengarungi jalan panjang tersebut lah yang sangat berharga. Hal tersebut dapat di turunkan pada keturunan kita kelak sehingga paling tidak keturunan kita nanti tidak perlu mempelajari kembali dari awal, dan menginjak kerikil yang sama yang harus di injak oleh pendahulunya. Kemungkinan untuk melaju lebih cepat pun menjadi lebih besar. Seperti kata pepatah yang mengibaratkan hidup itu lebih seperti lari estafet jarak panjang, ketimbang lari sprint jarak dekat.
Dengan kombinasi dari kedua hal tersebut, dan dengan pembelajaran terus menerus, saya yakin sekali dikemudian hari, uang (money) tidak akan menjadi suatu hal yang mengatur hidup lagi. Karena semua aspek dalam menemukan dan mengatur dirinya sudah dikuasai.
Grip yang kuat tersebut didapat hanya jika kita bisa mengendalikan semua sisi dalam kehidupan. Tentu saja termasuk sumber pendapatan. Selain itu kita juga bisa mengendalikan sumber pengeluaran. Dan kemampuan dalam berpikir secara rasional dan terarah merupakan essensi dalam kekuatan grip tersebut.
Sungguh saya sangat tidak ingin menjadi seperti darsem (yang setelah lepas dari hukuman maut, malah menjadi orang kaya mendadak), ataupun seperti DPR yang kaya, tapi tidak tau dapet nya dari mana. Karena saya pikir, pengalaman dalam mengarungi jalan panjang tersebut lah yang sangat berharga. Hal tersebut dapat di turunkan pada keturunan kita kelak sehingga paling tidak keturunan kita nanti tidak perlu mempelajari kembali dari awal, dan menginjak kerikil yang sama yang harus di injak oleh pendahulunya. Kemungkinan untuk melaju lebih cepat pun menjadi lebih besar. Seperti kata pepatah yang mengibaratkan hidup itu lebih seperti lari estafet jarak panjang, ketimbang lari sprint jarak dekat.
Dengan kombinasi dari kedua hal tersebut, dan dengan pembelajaran terus menerus, saya yakin sekali dikemudian hari, uang (money) tidak akan menjadi suatu hal yang mengatur hidup lagi. Karena semua aspek dalam menemukan dan mengatur dirinya sudah dikuasai.
Curhat ah..
Gimana yah, susah juga ngomong nya. tapi dipaksain aja nulis, biar ada referensi untuk kedepan.
Memang untuk memulai usaha itu susah bgt. Betul sekali kata orang - orang, kalo mau usaha mending jng tengok kanan kiri. Yang penting tancap. Karena kelamaan berencana, semakin bnyk juga kendala. Tapi tanpa planing matang, ya usaha yang jadi ga matang.
Cerita tentang usaha kita sama orang lain terkadang akan memberikan sensasi negatif kepada orang tersebut. Entah kenapa, apa mungkin karena setiap kemungkinan yang di berikan terhadap mereka sudah bisa ditackle? Atau memang karakter orang tersebut yang seperti itu. Tapi masalah nya terkadang kita butuh orang lain untuk paling ga membantu memberikan informasi, tapi syarat nya kita harus memberi tahu bagaimana rencana kita.
Jika orang memiliki rencana, dengarkan dulu lah rencana orang tersebut. Ga semua orang kok rencana nya ga bagus. Beberapa orang bahkan memiliki rencana yang sangat mendetail. Pengalaman penting tapi di era internet seperti skrng, pengalaman yang didapat bertahun tahun dapat dipelajari hanya dalam beberapa menit cuman dengan membaca apa yang mereka tulis.
Terkadang lebih seneng ngobrol sama orang yang "bodoh", dari pada orang yang pinter. Paling ga orang bodoh akan mendengarkan apa yang kita ceritakan sampe selesai terlebih dahulu (karena mereka bodoh dan ingin tau), dari pada orang pintar yang udah kyk dukun, tau sebelum dikasi tau (apa sok tau?).
And last, your knowledge mean nothing if you don't share it. Really.
Memang untuk memulai usaha itu susah bgt. Betul sekali kata orang - orang, kalo mau usaha mending jng tengok kanan kiri. Yang penting tancap. Karena kelamaan berencana, semakin bnyk juga kendala. Tapi tanpa planing matang, ya usaha yang jadi ga matang.
Cerita tentang usaha kita sama orang lain terkadang akan memberikan sensasi negatif kepada orang tersebut. Entah kenapa, apa mungkin karena setiap kemungkinan yang di berikan terhadap mereka sudah bisa ditackle? Atau memang karakter orang tersebut yang seperti itu. Tapi masalah nya terkadang kita butuh orang lain untuk paling ga membantu memberikan informasi, tapi syarat nya kita harus memberi tahu bagaimana rencana kita.
Jika orang memiliki rencana, dengarkan dulu lah rencana orang tersebut. Ga semua orang kok rencana nya ga bagus. Beberapa orang bahkan memiliki rencana yang sangat mendetail. Pengalaman penting tapi di era internet seperti skrng, pengalaman yang didapat bertahun tahun dapat dipelajari hanya dalam beberapa menit cuman dengan membaca apa yang mereka tulis.
Terkadang lebih seneng ngobrol sama orang yang "bodoh", dari pada orang yang pinter. Paling ga orang bodoh akan mendengarkan apa yang kita ceritakan sampe selesai terlebih dahulu (karena mereka bodoh dan ingin tau), dari pada orang pintar yang udah kyk dukun, tau sebelum dikasi tau (apa sok tau?).
And last, your knowledge mean nothing if you don't share it. Really.
Thursday, September 15, 2011
Saturday, September 10, 2011
ACL on CI with Addendum
Seperti janji pada post sebelum nya, saya akan mengintegrasikan CI dan Addendum untuk membentuk suatu system Access Control List untuk sebuah applikasi website.
Ok sebelum lanjut ke code, sebelum nya ada baik nya untuk menjelaskan apa sih ACL yang saya maksudkan. Terdapat suatu penalaran berbeda dari suatu yang saya sebut sebuah ACL dan sistem yang biasa saya temukan dalam implementasi ACL ini. Seperti contoh nya pada ACL pada Zend Framework yang hanya melindungi sebuah resource, ataupun Spring Security yang hampir serupa dengan Zend yaitu dengan melindungi resource dengan annotation @Secured atau didefiniskan pada security XML file nya.
Saya lebih melihat ACL adalah suatu sistem yang mana tidak hanya melindungi resource, tapi juga melindungi action yang terdapat pada setiap controller yang akan di ekspose kepada user.
Contoh nyata pada web adalah sebagai berikut ; Misalkan suatu web applikasi memiliki beberapa level admin. Super admin, user admin, dan site admin dan pada suatu page (yang saya anggap sebagai resource), terdapat beberapa action yang dapat di lakukan oleh admin tersebut. Pada page ini, super admin memiliki semua akses, sedang kan user admin dapat mengedit dan melakukan delete pada page ini, dan site admin hanya bisa melakukan view pada page ini.
Dengan system ACL yang dikembangkan pada Zend maupun Spring, hanya mendeklarasikan apakah user memiliki akses atau tidak pada sebuah resource, tapi tidak terdapat pengaturan lebih lanjut apa saja action yang dapat dilakukan oleh user.
Oleh karena itu saya mencoba untuk mengembangkan sebuah sistem ACL pada Code Igniter (CI) yang dapat berfungsi seperti apa yang saya sebutkan diatas. Dengan sistem ACL ini admin dapat menentukan action yang dapat dilakukan setiap user pada sebuah resouce. (resource yang saya maksudkan disini adalah controller).
Code dapat di download pada : http://code.google.com/p/example-code/downloads/detail?name=crm.zip&can=2&q=
Kemudian contoh database di http://code.google.com/p/example-code/downloads/detail?name=db.sql&can=2&q=
Contoh aplikasi ini menggunakan Codeigniter sebagai framework. Kemudian Mysql sebagai database. Dan memerlukan PHP 5 untuk menjalankan web nya. Saya tidak menggunakan framework untuk Javascript. Dan web apps ini hanya saya coba jalankan pada versi firefox terbaru (firefox 6).
Web aplikasi ini tidak hanya akan mendefinisikan ACL pada annotasi nya, tapi juga akan membentuk Tree yang akan berkorelasi dengan ACL tersebut.
Terdapat 4 buah Annotasi pada contoh tsb. Yaitu :
Dimulai dari hooks. Seperti yang sudah diketahui, dalam lifecycle Codeigniter, Hooks pada Codeigniter dapat dieksekusi pada beberapa event tertentu. contoh nya sebelum controller di eksekusi. Nah tempat ini sangat cocok untuk mendefinisikan authorization pada website. Oleh karena itu saya menambahkan authorization yang akan dieksekusi sebelum request sampai pada controller.
Di fungsi authorize dari class Authorization ini, proses authorisasi dilakukan. Apakah user memiliki hak untuk melihat / mengeksekusi resource pada controller. Fugsi tersebut memanggil fungsi fungsi yang terdapat pada class acl yang di inisialisasi melalu autoload pada CI.
Pada saat penginisialisasian class ACL, class & function tujuan (routing) akan di parse oleh addendum, mencari annotation dengan nama RestrictUserLogin dan Actionlist. Dari meta data class & fungsi tersebut, kita dapat menentukan apakah user memiliki authorisasi terhadap resource yang dituju setelah di cocokkan dengan data yang diretrieve dari database.
Dan setelah user login, user akan mendapatkan tree dari setiap action dari role mereka. Tree navigation berfungsi untuk melakukan scan pada folder controller lalu melakukan parsing pada setiap class & dan function yang terdapat pada class tsb. Kemudian dari class tersebut didapatkan Tree (parent, child) yang akan dipopulate dan di bentuk oleh class tree navigation ini.
Untuk lebih lengkap nya, silahkan di coba saja program nya :p
Login dengan ID : admin, kemudian password admin juga.
Ok sebelum lanjut ke code, sebelum nya ada baik nya untuk menjelaskan apa sih ACL yang saya maksudkan. Terdapat suatu penalaran berbeda dari suatu yang saya sebut sebuah ACL dan sistem yang biasa saya temukan dalam implementasi ACL ini. Seperti contoh nya pada ACL pada Zend Framework yang hanya melindungi sebuah resource, ataupun Spring Security yang hampir serupa dengan Zend yaitu dengan melindungi resource dengan annotation @Secured atau didefiniskan pada security XML file nya.
Saya lebih melihat ACL adalah suatu sistem yang mana tidak hanya melindungi resource, tapi juga melindungi action yang terdapat pada setiap controller yang akan di ekspose kepada user.
Contoh nyata pada web adalah sebagai berikut ; Misalkan suatu web applikasi memiliki beberapa level admin. Super admin, user admin, dan site admin dan pada suatu page (yang saya anggap sebagai resource), terdapat beberapa action yang dapat di lakukan oleh admin tersebut. Pada page ini, super admin memiliki semua akses, sedang kan user admin dapat mengedit dan melakukan delete pada page ini, dan site admin hanya bisa melakukan view pada page ini.
Dengan system ACL yang dikembangkan pada Zend maupun Spring, hanya mendeklarasikan apakah user memiliki akses atau tidak pada sebuah resource, tapi tidak terdapat pengaturan lebih lanjut apa saja action yang dapat dilakukan oleh user.
Oleh karena itu saya mencoba untuk mengembangkan sebuah sistem ACL pada Code Igniter (CI) yang dapat berfungsi seperti apa yang saya sebutkan diatas. Dengan sistem ACL ini admin dapat menentukan action yang dapat dilakukan setiap user pada sebuah resouce. (resource yang saya maksudkan disini adalah controller).
Code dapat di download pada : http://code.google.com/p/example-code/downloads/detail?name=crm.zip&can=2&q=
Kemudian contoh database di http://code.google.com/p/example-code/downloads/detail?name=db.sql&can=2&q=
Contoh aplikasi ini menggunakan Codeigniter sebagai framework. Kemudian Mysql sebagai database. Dan memerlukan PHP 5 untuk menjalankan web nya. Saya tidak menggunakan framework untuk Javascript. Dan web apps ini hanya saya coba jalankan pada versi firefox terbaru (firefox 6).
Web aplikasi ini tidak hanya akan mendefinisikan ACL pada annotasi nya, tapi juga akan membentuk Tree yang akan berkorelasi dengan ACL tersebut.
Terdapat 4 buah Annotasi pada contoh tsb. Yaitu :
- RestrictUserLogin : untuk membatasi controller dari akses user yang belum login (level : Class & function)
- ActionList : List action yang tersedia pada controller (level : Class & function)
- TreeNav : jika di deklarasikan, maka fungsi tersebut akan dilist pada tree navigation, dan jika user memilki akses pada Tree tersebut, maka fungsi ini akan tampil setelah user login.
- NodeDesc : Mendeklarasikan mana dari node. akan digunakan oleh TreeNav
Dimulai dari hooks. Seperti yang sudah diketahui, dalam lifecycle Codeigniter, Hooks pada Codeigniter dapat dieksekusi pada beberapa event tertentu. contoh nya sebelum controller di eksekusi. Nah tempat ini sangat cocok untuk mendefinisikan authorization pada website. Oleh karena itu saya menambahkan authorization yang akan dieksekusi sebelum request sampai pada controller.
Di fungsi authorize dari class Authorization ini, proses authorisasi dilakukan. Apakah user memiliki hak untuk melihat / mengeksekusi resource pada controller. Fugsi tersebut memanggil fungsi fungsi yang terdapat pada class acl yang di inisialisasi melalu autoload pada CI.
Pada saat penginisialisasian class ACL, class & function tujuan (routing) akan di parse oleh addendum, mencari annotation dengan nama RestrictUserLogin dan Actionlist. Dari meta data class & fungsi tersebut, kita dapat menentukan apakah user memiliki authorisasi terhadap resource yang dituju setelah di cocokkan dengan data yang diretrieve dari database.
Dan setelah user login, user akan mendapatkan tree dari setiap action dari role mereka. Tree navigation berfungsi untuk melakukan scan pada folder controller lalu melakukan parsing pada setiap class & dan function yang terdapat pada class tsb. Kemudian dari class tersebut didapatkan Tree (parent, child) yang akan dipopulate dan di bentuk oleh class tree navigation ini.
Untuk lebih lengkap nya, silahkan di coba saja program nya :p
Login dengan ID : admin, kemudian password admin juga.
Thursday, September 8, 2011
PHP Annotation
Annotation memberikan meta data dari code yang dibuat oleh programmer sehingga code dapat lebih rapi dan mudah untuk di manage. Selain itu Annotation memberikan jalan pintas untuk boiler plate code. Tapi sayang PHP sendiri tidak memiliki native support terhadap Annotation.
Tapi beruntung sekali terdapat sebuah library yang memberikan support untuk php yang meng extend class reflection dari php. Library dapat di download di http://code.google.com/p/addendum/.
Library Addendum tersebut memberikan support kepada php yang mana menambahkan fungsi dari comment menjadi menjadi fungsi annotation. Sehingga class / method / property dapat memiki annotation layak nya bahasa pemrograman lain.
Cara penggunaan library ini juga sangat mudah , library tinggal di include ke source code, gunakan comment sebagai annotation, dan kita siap memecah - mecah class dan mengambil meta data yang terdapat pada annotation.
Misalkan kita memiliki class AdminResource seperti berikut :
kemudian kita ekstrak meta data dari class tersebut dengan :
Dengan annotasi ini, PHP juga dapat di transformasi sehingga memiliki kemampuan serupa dengan Spring framework pada java. Termasuk juga dependency injection dapat juga di clone pada php. Di tulisan saya selanjut nya, akan saya gabungkan Codeigniter dan Annotation tersebut sehingga dapat melindungi resource dalam implementasinya bersama dengan ACL.
Have fun !
Tapi beruntung sekali terdapat sebuah library yang memberikan support untuk php yang meng extend class reflection dari php. Library dapat di download di http://code.google.com/p/addendum/.
Library Addendum tersebut memberikan support kepada php yang mana menambahkan fungsi dari comment menjadi menjadi fungsi annotation. Sehingga class / method / property dapat memiki annotation layak nya bahasa pemrograman lain.
Cara penggunaan library ini juga sangat mudah , library tinggal di include ke source code, gunakan comment sebagai annotation, dan kita siap memecah - mecah class dan mengambil meta data yang terdapat pada annotation.
Misalkan kita memiliki class AdminResource seperti berikut :
/**
* @Secure("admin")
*/
class AdminResource{}kemudian kita ekstrak meta data dari class tersebut dengan :
require_once(dirname(__FILE__).'/annotations.php');
require_once(dirname(__FILE__).'/AdminResource.php');
// buat descripsi anotasi dengan nama Secure
class Secure extends Annotation {}
// instantiate class AdminResource
$resources = new AdminResource();
// instantiate class ReflectionAnnotatedClass
$annotatedReflection = new ReflectionAnnotatedClass($resources);
// ReflectionAnnotatedClass merupakan turunan dari ReflectionClass,
// sehingga memiliki akses ke semua method dari ReflectionClass
echo $annotatedReflection->getName() .
" is accessible for : " .
$annotatedReflection->getAnnotation('Secure')->value;
Keluaran dari code tersebut adalah : AdminResource is accessible for : AdminNah, annotasi tersebut juga dapat di deklarasikan pada method ataupun property dari class. Dengan penggunaan library ini, tentu sangat memudahkan programmer PHP untuk menciptakan sebuah program yang lebih rapi dan lebih mudah dibaca.
Dengan annotasi ini, PHP juga dapat di transformasi sehingga memiliki kemampuan serupa dengan Spring framework pada java. Termasuk juga dependency injection dapat juga di clone pada php. Di tulisan saya selanjut nya, akan saya gabungkan Codeigniter dan Annotation tersebut sehingga dapat melindungi resource dalam implementasinya bersama dengan ACL.
Have fun !
Don't Forget, Google Crawler
Hampir 3 hari mencari kenapa kok website menjadi sangat sangat lambat. Padahal sebelum nya tidak sebegini lambat. Dari tiga hari lalu mencari penyebab lambat nya website yang menjadi jadi. Sampai beberapa kali server harus direstart karena kepenuhan thread server yang terpakai sudah penuh.
Setelah dicari kemana - mana, improve website speed sana sini, akhir nya ketemu juga tersangka nya adalah ip ini : 66.249.69.44, 66.249.69.110, 66.249.68.246, 66.249.69.240. Nah setelah di whois, ternyata IP tersebut adalah IP dari Google bot alias google crawler ! HAHAHA. Jadi selama ini server berat karena Google yang melakukan invasi secara brutal kedalam server. Dan lebih bodoh nya lagi, tidak pernah teringat kalau google akan melakukan crawling ke website.
Dengan data yang cukup besar, dan link yang bejibun. Pantas saja website menjadi lambat. Mana lagi beberapa link menyebabkan database melakukan query yang sangat panjang.
Jadi ada satu lagi konsiderasi untuk menempatkan link. Lebih baik jng memberikan link yang dapat di crawl oleh google atau search engine manapun yang akan menyebabkan proses yang panjang pada server. Atau kalau pun harus memberikan link untuk suatu proses yang lama, lebih baik link nya di arahkan dengan menggunakan javascript atau dengan form. Dan tentu saja jng lupa untuk mendeklarasikan robots.txt pada webserver.
Pengalaman yang sangat menarik.
Setelah dicari kemana - mana, improve website speed sana sini, akhir nya ketemu juga tersangka nya adalah ip ini : 66.249.69.44, 66.249.69.110, 66.249.68.246, 66.249.69.240. Nah setelah di whois, ternyata IP tersebut adalah IP dari Google bot alias google crawler ! HAHAHA. Jadi selama ini server berat karena Google yang melakukan invasi secara brutal kedalam server. Dan lebih bodoh nya lagi, tidak pernah teringat kalau google akan melakukan crawling ke website.
Dengan data yang cukup besar, dan link yang bejibun. Pantas saja website menjadi lambat. Mana lagi beberapa link menyebabkan database melakukan query yang sangat panjang.
Jadi ada satu lagi konsiderasi untuk menempatkan link. Lebih baik jng memberikan link yang dapat di crawl oleh google atau search engine manapun yang akan menyebabkan proses yang panjang pada server. Atau kalau pun harus memberikan link untuk suatu proses yang lama, lebih baik link nya di arahkan dengan menggunakan javascript atau dengan form. Dan tentu saja jng lupa untuk mendeklarasikan robots.txt pada webserver.
Pengalaman yang sangat menarik.
Monday, August 8, 2011
Array Count Group dan Multidimension Array Sort pada PHP
Misalkan kita memiliki array sebagai berikut, kemudian ingin di group dan kemudian di sort seperti command di mysql.
Array
(
[0] => Array
(
[countryid] => ID
[countryname] => Indonesia
[totalaccess] => 31
)
[1] => Array
(
[countryid] => US
[countryname] => United States
[totalaccess] => 23
)
[2] => Array
(
[countryid] => ID
[countryname] => Indonesia
[totalaccess] => 5
)
[3] => Array
(
[countryid] => ID
[countryname] => Indonesia
[totalaccess] => 2
)
[4] => Array
(
[countryid] => ID
[countryname] => Indonesia
[totalaccess] => 2
)
[5] => Array
(
[countryid] => ID
[countryname] => Indonesia
[totalaccess] => 1
)
)
di group berdasarkan countryid dan di count totalaccess nya, sehingga menjadi
Array
(
[ID] => Array
(
[countryid] => ID
[countryname] => Indonesia
[totalaccess] => 41
)
[US] => Array
(
[countryid] => US
[countryname] => United States
[totalaccess] => 23
)
)
group menggunakan fungsi sebagai berikut :
function groupArray($result, $groupkey, $countkey)
{
$finalresult = array();
foreach($result as $res) {
$key = $res[$groupkey];
if(!isset($finalresult[$key])){
$finalresult[$key] = $res;
} else {
$finalresult[$key][$countkey] = $finalresult[$key][$countkey] + $res[$countkey];
}
}
return $finalresult;
}
kemudian di sort berdasarkan totalaccess
Array
(
[0] => Array
(
[countryid] => US
[countryname] => United States
[totalaccess] => 23
)
[1] => Array
(
[countryid] => ID
[countryname] => Indonesia
[totalaccess] => 41
)
)
sort menggunakan fungsi sebagai berikut :
function sortArray($a, $sortkey, $mode = "ASC")
{
foreach($a as $k=>$v) {
$b[$k] = strtolower($v[$sortkey]);
}
if($mode == "ASC") asort($b);
else arsort($b);
foreach($b as $key=>$val) {
$c[] = $a[$key];
}
return $c;
}
Sunday, August 7, 2011
Mysql function for URL record
Saya beberapa hari lalu membuat sendiri kembaran site tracking seperti google analytic untuk website pribadi. Sehingga website saya memiliki 2 jenis tracking, yaitu inhouse tracking dan google analytic sendiri. Tentu tidak bisa se kompleks google analytic dalam perhitungan analisis tracking nya.
Tapi terdapat beberapa perhitungan yang kostum yang tidak dapat dilakukan oleh google analytic. Seperti penggunaan bahasa (multi language site) dominan pada website.
Data dari tracking website tersebut tentu saja di simpan pada database. Dan database yang saya gunakan adalah MySql yang sudah disediakan oleh hosting.
Terdapat beberapa fungsi MySql yang sangat membantu dalam melakukan agregasi perhitungan tracking ini. Berikut adalah fungsi yang saya gunakan :
Tapi terdapat beberapa perhitungan yang kostum yang tidak dapat dilakukan oleh google analytic. Seperti penggunaan bahasa (multi language site) dominan pada website.
Data dari tracking website tersebut tentu saja di simpan pada database. Dan database yang saya gunakan adalah MySql yang sudah disediakan oleh hosting.
Terdapat beberapa fungsi MySql yang sangat membantu dalam melakukan agregasi perhitungan tracking ini. Berikut adalah fungsi yang saya gunakan :
Mendapatkan nama Server dari record pada MySql :
SELECT
SUBSTRING_INDEX(url_record, '/', 3)
FROM NAMA_TABLE
dari record :
http://agungbayuiswara.blogspot.com/2011/08/mencegah-akses-directory-pada-apache.html
mendapatkan hasil :
http://agungbayuiswara.blogspot.com
Mendapatkan nama domain dari record pada MySql :
SELECT
SUBSTRING_INDEX(
SUBSTRING_INDEX(url_record, '/', 3),
'/', -1)
FROM NAMA_TABLE
dari record :
http://agungbayuiswara.blogspot.com/2011/08/mencegah-akses-directory-pada-apache.html
mendapatkan hasil :
agungbayuiswara.blogspot.com
Mendapatkan URI dari record pada MySql :
SELECT SUBSTRING( referrer, LOCATE( '/', referrer, 5 ) + 1 )
FROM tracker
dari record :
http://agungbayuiswara.blogspot.com/2011/08/mencegah-akses-directory-pada-apache.html
mendapatkan hasil :
/2011/08/mencegah-akses-directory-pada-apache.html
Mencegah akses directory pada Apache
Terkadang developer (admin) tidak menutup akses user untuk melihat list dari suatu directory pada suatu webserver. Alhasil setiap orang dapat melihat isi folder dari website tersebut dan mungkin dapat melakukan hal2 yang berbahaya bagi site.
Oleh karena itu perlu bagi site admin untuk mencegah user melihat listing dari directory. Cara nya simple sekali. Hanya dengan menambahkan Options -Indexes pada .htaccess root folder dari website. Maka semua akses untuk listing directory akan dihilangkan.
Tapi jika ada folder yang diinginkan dapat di listing maka tinggal menambahkan Options +Indexes pada file .htaccess didalam folder tersebut.
Oleh karena itu perlu bagi site admin untuk mencegah user melihat listing dari directory. Cara nya simple sekali. Hanya dengan menambahkan Options -Indexes pada .htaccess root folder dari website. Maka semua akses untuk listing directory akan dihilangkan.
Tapi jika ada folder yang diinginkan dapat di listing maka tinggal menambahkan Options +Indexes pada file .htaccess didalam folder tersebut.
Sunday, July 31, 2011
Day one Prestashop
Dalam beberapa hari atau bahkan bulan kedepan tampaknya akan lebih banyak berhadapan dengan code Prestashop. Yang mana template engine nya menggunakan Smarty. Beberapa bulan yang lalu sudah berkutat dengan ecommerce yang padahal commercial tapi code nya awut2an. ahahaha. ga usah disebut deh apaan ecommerce nya.
Ok masalah pertama dari prestashop yang ditanya di thread http://www.prestashop.com/forums/topic/19816-change-the-urlbase-dir-when-moving-to-new-website/ (ga dpt link untuk aktivasi, entah kenapa, ga dikirim2 email nya :(, jadi ga bisa reply thread nya )
Masalah pertama adalah andaikata kita melakukan deployment di lokal, kemudian memindahkannya ke production server pasti menemui masalah seperti gimana yah caranya merubah url dari deployment lokal ke production server.
Solusi : di table [PREFIX]
Ok masalah pertama dari prestashop yang ditanya di thread http://www.prestashop.com/forums/topic/19816-change-the-urlbase-dir-when-moving-to-new-website/ (ga dpt link untuk aktivasi, entah kenapa, ga dikirim2 email nya :(, jadi ga bisa reply thread nya )
Masalah pertama adalah andaikata kita melakukan deployment di lokal, kemudian memindahkannya ke production server pasti menemui masalah seperti gimana yah caranya merubah url dari deployment lokal ke production server.
Solusi : di table [PREFIX]
configuration ini ada key yaitu PS_SHOP_DOMAIN dan PS_SHOP_DOMAIN_SSL, rubah dengan url production server. Simple bukan :p.
Monday, July 25, 2011
CSS Mastery
Ternyata sangat sangat susah untuk mencari seorang master (senior) CSS. Beberapa kali menginterview calon pegawai (yang katanya sering buat website), tapi ketika ditanya basic basic dari css mereka semua pada mencoba menghindar. Alasannya sangat classic "Biasanya saya sih pake program ini itu untuk buat css nya". atau ga "saya belajar css buat styling bukan teori". Jadi sebetulnya bisa ga sih CSS, kok ngeles mulu ditanya basic?
Memang untuk berkarir di dunia CSS diindonesia memang suatu hal yang tidak begitu menguntungkan. Apresiasi nya pun kecil. Para recruiter biasanya mencari seorang backend programmer dan designer. Dan biasanya mereka menyerahkan kemampuan css kepada programmer / designer tersebut. Padahal sebetulnya memilki seorang yang mengerti lebih dalam tentang user experience, CSS, ataupun JS itu sangat lah penting.
Ok lah, buat siapa saja yang ingin menjadi master di CSS, ada beberapa materi yang memang harus dimengerti secara mendalam :
Ada yang tambahan lagi tentang Skill CSS yang diperlukan untuk menjadi seorang master CSS?
Memang untuk berkarir di dunia CSS diindonesia memang suatu hal yang tidak begitu menguntungkan. Apresiasi nya pun kecil. Para recruiter biasanya mencari seorang backend programmer dan designer. Dan biasanya mereka menyerahkan kemampuan css kepada programmer / designer tersebut. Padahal sebetulnya memilki seorang yang mengerti lebih dalam tentang user experience, CSS, ataupun JS itu sangat lah penting.
Ok lah, buat siapa saja yang ingin menjadi master di CSS, ada beberapa materi yang memang harus dimengerti secara mendalam :
- CSS Selector : Untuk mencari element pada HTML yang akan dikenakan Style
- contoh ; id, class, mencari input sesuai type, anak dari suatu element, first child, last child, etc etc.
- CSS Positioning : http://www.barelyfitz.com/screencast/html-training/css/positioning/
- tipe tipe positioning pada CSS; fixed, absolute, static, relative dan kombinasi dari posisi tersebut
- Pembagian region menggunakan Div , layout dan penggunaan floating element (float right, left, clear right, left, both)
- Typography
- Font size (beda antara pt, px, em, %,)
- Penggunaan line-height
- Font stack (font family)
- Font embed technology (sifr, cufon, font face, etc)
- CSS Image Sprite (untuk buat button / background)
- Penggunaan css tool (firebug di firefox, developer tool di ie, inspect element di chrome)
- Sudah mulai merambah CSS 3
- Border, image shadow, gradient, etc etc.
- Compatibility disetiap browser.
Ada yang tambahan lagi tentang Skill CSS yang diperlukan untuk menjadi seorang master CSS?
Saturday, July 23, 2011
IE 6 CSS Quick Fix
Absolute overflow hidden bug di IE 6, overflow region masih kelihatan. Solusi dengan menambahkan Height : 100% pada element relative parent nya.
z-index ga berfungsi di IE 6. Solusi dengan memberikan z-index lebih tinggi pada parent element nya.
PNG fix di IE 6 : dari http://www.komodomedia.com/blog/2007/11/css-png-image-fix-for-ie/. Sangat handy, tanpa perlu processing dengan JS. css ini dapat merubah background image & filter pada saat runtime.
z-index ga berfungsi di IE 6. Solusi dengan memberikan z-index lebih tinggi pada parent element nya.
PNG fix di IE 6 : dari http://www.komodomedia.com/blog/2007/11/css-png-image-fix-for-ie/. Sangat handy, tanpa perlu processing dengan JS. css ini dapat merubah background image & filter pada saat runtime.
* html img,
* html .png{
behavior:
expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName
== "IMG" &&
this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage
= "none",
this.runtimeStyle.filter =
"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src +
"', sizingMethod='image')",
this.src = "transparent.gif"):(this.origBg = this.origBg?
this.origBg
:this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),
this.runtimeStyle.filter =
"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg
+ "', sizingMethod='crop')",
this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)
);
}
Monday, July 18, 2011
I'm so lucky to have you
Once in my life time. I discover someone.
Who touches, not only my heart, but also my soul.
Who stand beside me, not over me.
Who find me a way out when i lost.
Who keep me sane through my hardest time.
Who want to build future together with me.
And who always understand me.
The words will never enough to tell how lucky i have you in my live.
To: My Ratna
P.S I Love You
Who touches, not only my heart, but also my soul.
Who stand beside me, not over me.
Who find me a way out when i lost.
Who keep me sane through my hardest time.
Who want to build future together with me.
And who always understand me.
The words will never enough to tell how lucky i have you in my live.
To: My Ratna
P.S I Love You
Sunday, July 17, 2011
Javascript error pada IE 6 (Expected identifier)
Ada yang pernah mendapatkan error seperti ini (“Expected identifier, string, or number”)? Hal ini dapat disebabkan oleh koma dibelakang Last Item array.
Pada beberapa browser terkini error tidak terjadi. Tetapi pada IE 6 ini menyebabkan keseluruhan proses javascript menjadi terhenti.
Oleh karena itu kita musti hati2 kalau menambahkan array. agar JS bisa compatible juga pada IE 6.
Pada beberapa browser terkini error tidak terjadi. Tetapi pada IE 6 ini menyebabkan keseluruhan proses javascript menjadi terhenti.
Oleh karena itu kita musti hati2 kalau menambahkan array. agar JS bisa compatible juga pada IE 6.
Income Management
Pernah saya membaca, "Gaji berapa juga ga bakal cukup kalo gaya hidup naik terus". Hal tersebut sangat sangat tepat sasaran. Gaji besar bukan jaminan anda "punya". Tapi cara hidup yang benar adalah jaminan anda selalu "punya".
Setelah bekerja beberapa tahun, tentu saja pendapatan juga akan meningkat. Dan hal yang sangat wajar terjadi juga adalah pengeluaran yang semakin meningkat. Nah untuk bisa lepas dari lingkaran maut yang nama nya peningkatan pengeluaran itu lah yang harus selalu di cermati.
Sukur sekali, walaupun pendapat yang meningkat hampir empat kali dari pendapatan pertama kali didapat sewaktu bekerja tiga tahun lalu, pengeluaran tetap dapat terkontrol. Kemarin setelah dihitung, ternyata pengeluaran saya hanya naik setengah kali lipat dari pengeluaran tiga tahun lalu.
Seneng? tentu iya. Sudah ngerasa "punya"? sampai saat ini belum. Beberapa kali hasil nabung digunakan untuk mencoba investasi dan coba membuat usaha, tapi belum mencapai target yang sesuai yang diinginkan. Kapan merasa "punya"? Saat saya bisa membiayai hidup saya sendiri tanpa harus bekerja dibawah orang lain. Hahahaha.
Semangat kawan!
Setelah bekerja beberapa tahun, tentu saja pendapatan juga akan meningkat. Dan hal yang sangat wajar terjadi juga adalah pengeluaran yang semakin meningkat. Nah untuk bisa lepas dari lingkaran maut yang nama nya peningkatan pengeluaran itu lah yang harus selalu di cermati.
Sukur sekali, walaupun pendapat yang meningkat hampir empat kali dari pendapatan pertama kali didapat sewaktu bekerja tiga tahun lalu, pengeluaran tetap dapat terkontrol. Kemarin setelah dihitung, ternyata pengeluaran saya hanya naik setengah kali lipat dari pengeluaran tiga tahun lalu.
Seneng? tentu iya. Sudah ngerasa "punya"? sampai saat ini belum. Beberapa kali hasil nabung digunakan untuk mencoba investasi dan coba membuat usaha, tapi belum mencapai target yang sesuai yang diinginkan. Kapan merasa "punya"? Saat saya bisa membiayai hidup saya sendiri tanpa harus bekerja dibawah orang lain. Hahahaha.
Semangat kawan!
Saturday, July 16, 2011
Indonesian Ecommerce
Dua tahun yang lalu, saya sempat melakukan suatu research tentang ecommerce di Indonesia untuk tempat bekerja saya dahulu. Walaupun saya adalah seorang engineer, tapi saya sangat suka meresearch sesuatu. Menurut saya research adalah tempat yang sangat menarik dan membuat pemikiran tambah terbuka luas.
Waktu itu saya meresearch tentang Ecommerce di Indonesia. Dan saat itu saya mendapatkan bahwa saya mengkambing hitamkan perasaan keamanan dalam transaksi internet sebagai salah satu faktor yang menyebabkan terhambat nya indonesia mencapai peak point untuk ecommerce.
Sewaktu itu saya memberikan saran untuk perusahaan saya yang lama (karena memang diminta untuk mencari ide baru untuk menggantikan product lama yang sudah diterminate pihak tidak bertanggung jawab :p). Yaitu melakukan integrasi antara pembayaran & pengiriman barang. Sehingga paling tidak terdapat service yang dapat diandalkan untuk mendapatkan perasaan aman tersebut.
Selain itu ada juga faktor - faktor lain seperti prilaku masyarakat yang belum merasa yakin jika belum mencoba / memegang barang yang akan dibeli nya.
Lain dulu, lain juga sekarang. Setelah merantau kemana - mana haha. Keluar masuk perusahaan dan institusi. Saya pun mendapatkan pengetahuan tentang bagaimana kenyataan dilapangan dan yang terjadi sebenarnya.
Sebetulnya pasar indonesia tidak terlalu unik (menurut saya) seperti yang dianalisis oleh beberapa orang lainnya. Malahan pasar di Indonesia sudah menuju seperti pasar di negara - negara yang memang ecommerce sudah mencapai peak point.
Sebagai pembanding, sebuah perusahaan retail baju di prancis, mereka menjual rata - rata 20 potong baju sehari nya lewat internet. Di Indonesia juga ada sebuah perusahaan yang dapat menjual 20 - 30 potong baju setiap hari nya dari 10 - 15 transaksi dengan gross revenue hampir sekitar 5 juta sehari nya, walaupun mereka baru buka.
Tidak terlalu berbeda bukan? Jika transaksi seperti itu mungkin dibilang masih sedikit, ya wajar saja. Toko online tersebut baru buka belum ada setahun. Begitu juga yang diprancis, karena waktu bukanya hampir bersamaan.
Iya memang website tersebut memberikan kemudahan untuk pembayaran, seperti contoh nya memberikan 3 opsi pembayaran seperti bank transfer, paypal, dan juga kartu kredit (karena memang sudah ada payment gateway untuk kartu kredit di indonesia). Tampilan website yang baik dan mudah untuk dimengerti (fitting yang tepat), sehingga memberikan feel bahwa website itu adalah website serius. bukan website abal - abal yang setelah bayar kabur haha, selain itu juga barang yang dijual juga menarik.
Sehingga asumsi saya 2 tahun lalu, terpatahkan oleh pengalaman setelah menjadi bajing loncat di perusahaan orang. Potensi ecommerce di Indonesia sangat lah besar, dan saat ini masih jauh dari peak point tersebut. Selain itu juga prilaku masyarakat semakin lama, sudah semakin familiar dengan internet dan tentu nya memberikan implikasi positif pada ecommerce sendiri.
Jadi pesan saya jika ingin buat ecommerce, invest lah seperti anda membuat toko yang real. your investment will worth the same as real store!
Waktu itu saya meresearch tentang Ecommerce di Indonesia. Dan saat itu saya mendapatkan bahwa saya mengkambing hitamkan perasaan keamanan dalam transaksi internet sebagai salah satu faktor yang menyebabkan terhambat nya indonesia mencapai peak point untuk ecommerce.
Sewaktu itu saya memberikan saran untuk perusahaan saya yang lama (karena memang diminta untuk mencari ide baru untuk menggantikan product lama yang sudah diterminate pihak tidak bertanggung jawab :p). Yaitu melakukan integrasi antara pembayaran & pengiriman barang. Sehingga paling tidak terdapat service yang dapat diandalkan untuk mendapatkan perasaan aman tersebut.
Selain itu ada juga faktor - faktor lain seperti prilaku masyarakat yang belum merasa yakin jika belum mencoba / memegang barang yang akan dibeli nya.
Lain dulu, lain juga sekarang. Setelah merantau kemana - mana haha. Keluar masuk perusahaan dan institusi. Saya pun mendapatkan pengetahuan tentang bagaimana kenyataan dilapangan dan yang terjadi sebenarnya.
Sebetulnya pasar indonesia tidak terlalu unik (menurut saya) seperti yang dianalisis oleh beberapa orang lainnya. Malahan pasar di Indonesia sudah menuju seperti pasar di negara - negara yang memang ecommerce sudah mencapai peak point.
Sebagai pembanding, sebuah perusahaan retail baju di prancis, mereka menjual rata - rata 20 potong baju sehari nya lewat internet. Di Indonesia juga ada sebuah perusahaan yang dapat menjual 20 - 30 potong baju setiap hari nya dari 10 - 15 transaksi dengan gross revenue hampir sekitar 5 juta sehari nya, walaupun mereka baru buka.
Tidak terlalu berbeda bukan? Jika transaksi seperti itu mungkin dibilang masih sedikit, ya wajar saja. Toko online tersebut baru buka belum ada setahun. Begitu juga yang diprancis, karena waktu bukanya hampir bersamaan.
Iya memang website tersebut memberikan kemudahan untuk pembayaran, seperti contoh nya memberikan 3 opsi pembayaran seperti bank transfer, paypal, dan juga kartu kredit (karena memang sudah ada payment gateway untuk kartu kredit di indonesia). Tampilan website yang baik dan mudah untuk dimengerti (fitting yang tepat), sehingga memberikan feel bahwa website itu adalah website serius. bukan website abal - abal yang setelah bayar kabur haha, selain itu juga barang yang dijual juga menarik.
Sehingga asumsi saya 2 tahun lalu, terpatahkan oleh pengalaman setelah menjadi bajing loncat di perusahaan orang. Potensi ecommerce di Indonesia sangat lah besar, dan saat ini masih jauh dari peak point tersebut. Selain itu juga prilaku masyarakat semakin lama, sudah semakin familiar dengan internet dan tentu nya memberikan implikasi positif pada ecommerce sendiri.
Jadi pesan saya jika ingin buat ecommerce, invest lah seperti anda membuat toko yang real. your investment will worth the same as real store!
Monday, July 11, 2011
Servlet 3 Example
Untuk perkenalan dengan Servlet 3, saya mencoba membuat sebuah web app kecil dimana user yang pertama kali datang diharuskan untuk login terlebih dahulu (url / yang dirouting ke Servlet itu sendiri dengan menggunakan annotation @WebServlet tanpa harus susah2 mendeklarasikan pada web.xml)
User divalidasi dari list username yang diload kememory saat container hidup dengan menggunakan event listener ServletContextListener (Dengan menggunakan @WebListener lagi lagi tanpa perlu mendeklarasikan pada web.xml)
Saat User telah login credential mereka akan di simpan dimemory. Jika nanti ada orang yang berusaha login dengan credential tersebut maka akan di tolak. Tapi jika user telah logout maka user tersebut diperbolehkan untuk login kembali (menggunakan SessionListener lagi lagi dengan bantuan @WebListener dan tanpa harus mendeklarasikan pada web.xml)
Kemudian saat request dikembalikan menjadi response, response tersebut terlebih dahulu di filter untuk menghilangkan white space. Kita coba untuk memfilter semua page yang ada pada app (dengan menggunakan @WebFilter("/*") notice regex? , lagi lagi tanpa harus mendeklarasikan pada web.xml)
Ah kebanyakan teori, langsung saja praktek. Cekidot :
http://example-code.googlecode.com/files/servlet3example.zip
User divalidasi dari list username yang diload kememory saat container hidup dengan menggunakan event listener ServletContextListener (Dengan menggunakan @WebListener lagi lagi tanpa perlu mendeklarasikan pada web.xml)
Saat User telah login credential mereka akan di simpan dimemory. Jika nanti ada orang yang berusaha login dengan credential tersebut maka akan di tolak. Tapi jika user telah logout maka user tersebut diperbolehkan untuk login kembali (menggunakan SessionListener lagi lagi dengan bantuan @WebListener dan tanpa harus mendeklarasikan pada web.xml)
Kemudian saat request dikembalikan menjadi response, response tersebut terlebih dahulu di filter untuk menghilangkan white space. Kita coba untuk memfilter semua page yang ada pada app (dengan menggunakan @WebFilter("/*") notice regex? , lagi lagi tanpa harus mendeklarasikan pada web.xml)
Ah kebanyakan teori, langsung saja praktek. Cekidot :
http://example-code.googlecode.com/files/servlet3example.zip
Sunday, July 10, 2011
Life is just about choice
Menu makan siang hari ini adalah bakso, walaupun bukan makanan favorite, tp lumayan lah buat variasi biar ga bosen. Saat saya datang ternyata dagangan nya masih sepi. Mungkin karena belum waktunya makan siang. Sambil menunggu dia membuatkan saya bakso saya pun ngobrol dengan beliau. Bertanya - tanya berapa lama sudah buat bakso ini, kemudian punya dagang dimana aja. dan berbagai pertanyaan lain.
Dia pun bertanya kepada saya tentang pekerjaan saya. Kita ngobrol cukup lama. Kemudian tersirat keinginan saya untuk bertanya penghasilannya. Walaupun tampaknya dia sedikit menyembunyikan tapi dia tetap memberikan clue. Kata dia satu gerobak nya dapat menghasilkan 50 piring tiap hari. Anggap saja kalau harga 1 piring nya 8 ribu maka sehari dia membawa uang pulang sekitar 400 ribu. Kemudian dia juga memberikan info jika sebetulnya gerobak itu bukan lah milik nya. Tapi dia memiliki seorang bos yang memiliki sekitar 10 buah gerobak bakso. Jadi anggapan nya sehari mereka rata - rata dapat menjual 50 porsi tiap hari. Maka omset 4 juta sehari akan masuk ke kantong bos nya. sebulan? jadi 120 juta???!! Anggap saja jika untung bersih makan tersebut 50% maka setiap bulan bos nya mendapatkan 60 jt. Mungkin gaji sebegitu besar setara dengan pendapatan Direktur sebuah perusahaan di Jakarta dan tentunya perusahaan yang sudah cukup besar.
Jadi apakah yang anda pilih? kerjaan yang bergengsi atau cuman kerja serabutan?
Hidup ini memang pilihan. Sekolah tinggi, otak brilian, atau berbagai kelebihan yang diberikan oleh Tuhan akan percuma jika dalam hidup kita tidak bisa memilih jalan terbaik. Tetaplah semangat kawan. Jalan mu masih panjang.
Dia pun bertanya kepada saya tentang pekerjaan saya. Kita ngobrol cukup lama. Kemudian tersirat keinginan saya untuk bertanya penghasilannya. Walaupun tampaknya dia sedikit menyembunyikan tapi dia tetap memberikan clue. Kata dia satu gerobak nya dapat menghasilkan 50 piring tiap hari. Anggap saja kalau harga 1 piring nya 8 ribu maka sehari dia membawa uang pulang sekitar 400 ribu. Kemudian dia juga memberikan info jika sebetulnya gerobak itu bukan lah milik nya. Tapi dia memiliki seorang bos yang memiliki sekitar 10 buah gerobak bakso. Jadi anggapan nya sehari mereka rata - rata dapat menjual 50 porsi tiap hari. Maka omset 4 juta sehari akan masuk ke kantong bos nya. sebulan? jadi 120 juta???!! Anggap saja jika untung bersih makan tersebut 50% maka setiap bulan bos nya mendapatkan 60 jt. Mungkin gaji sebegitu besar setara dengan pendapatan Direktur sebuah perusahaan di Jakarta dan tentunya perusahaan yang sudah cukup besar.
Jadi apakah yang anda pilih? kerjaan yang bergengsi atau cuman kerja serabutan?
Hidup ini memang pilihan. Sekolah tinggi, otak brilian, atau berbagai kelebihan yang diberikan oleh Tuhan akan percuma jika dalam hidup kita tidak bisa memilih jalan terbaik. Tetaplah semangat kawan. Jalan mu masih panjang.
Friday, June 17, 2011
Great Move Nokia and Windows Phone 7
Beberapa tahun mengalami masa sulit setelah tergusur oleh iPhone dan Andriod, Nokia tampak nya mulai menemukan jalan untuk menyelamatkan perusahaannya dari kerusakan yang lebih fatal akibat market share yang terus tergerus oleh pesaing nya. Geliat iPhone saat mengeluarkan iPhone 3 seakan membunuh market smart phone yang telah lama dikuasai oleh nokia. Ditambah semakin banyak nya pesaing yang muncul seperti andriod dan Blackberry, nokia pun seperti mati suri. OS saait ini yang digunakan oleh Nokia yaitu Symbian dirasa tidak dapat mengimbangi perkembangan dari IOS yang diusung oleh Apple maupun Andriod pada pertarungan memperebutkan pasar smartphone.
Sejak keluar nya berbagai macam smartphone pada pasar, penetrasi smartphone semakin lama semakin meningkat. Bahkan pada tahun 2013 diprediksikan 1 (satu) dari 2 (dua) pengguna handphone menggunakan smartphone. Sehingga tidak salah jika setiap handset maker berlomba - lomba untuk menguasai pasar dari smartphone.
Pada Q4 Tahun 2007 Nokia masih menguasai 50% market share dari smart phone dengan Symbian OS yang diusung oleh Nokia pada device nya.
dan coba bandingkan dengan Market share smartphone pada Q1 tahun 2011. Symbian OS yang diusung oleh perangkat keras dari Nokia hanya memiliki 1% dari market share. Dan tentu nya Andriod adalah monster yang dapat menguasai pasar smart phone dalam waktu yang sangat cepat.
Sebetulnya nokia memiliki beberapa opsi untuk merebut kembali pasar smartphone. Salah satu nya adalah mengimplementasikan Andriod pada perangkat keras mereka keluarkan. Beberapa perusahaan seperti Motorola bahkan mengatakan Andriod adalah penyelamat bagi perusahaan mereka. Atau dengan menggunakan inhouse platform yang digadang gadang sebagai OS masa dengan untuk nokia, yaitu MeeGo. Tapi pada kenyataan Nokia tidak memilih antara Andriod atau bahkan Meego.
CEO nokia, yaitu Stephen Elop yang pernah bekerja untuk Microsoft ternyata lebih tertarik untuk mengimplementasikan Windows Phone 7 pada perangkat masa depan mereka. Entah ada keterkaitan terhadap masa lalu nya dengan microsoft atau tidak, tapi berbagai pihak mengatakan bahwa kerja sama antara microsoft dan nokia adalah suatu "Good Move".
Nokia mendiferensiasi diri nya dari hadangan pasaran yang mungkin sudah jenuh untuk handset andriod. Andriod sudah menguasai pasar tanpa smartphone bantuan dari Nokia sekalipun. Nokia yang terbiasa sebagai pemain utama tentu akan berpikir beberapa kali untuk menjadi pemain kesekian yang mengusung platform andriod. Sedangkan Microsoft menawarkan suatu tempat special untuk nokia bahkan untuk dapat meng-costumize segalanya pada level Operation System di Windows Phone 7 yang tidak didapat oleh handset maker lain seperti Samsung, LG, Dell, ataupun HTC. Hal tersebut yang menjadi alasan utama nokia untuk tidak ngusung platform andriod pada perangkat nya.
Microsoft sendiri bukan lah pemain amatir dalam dunia smartphone. Walaupun Windows Phone 6 banyak yang melabelkan gagal, tapi tampak nya Microsoft belajar banyak dari pengalaman nya. Mereka merevolusi User Interface (metro user interface, dengan live tiles nya) sehingga jauh lebih enak untuk dilihat dan digunakan. Integrasi yang sangat dalam untuk Office. Xbox yang biasanya hanya digunakan pada console, kini juga dapat dinikmati pada Windows Phone 7. Dan pada update mango, Microsoft memberikan integrasi yang sangat dalam pada berbagai social network besar serta system yang memudahkan kita untuk berkomunikasi tanpa harus menginstall berbagai aplikasi lagi seperti yahoo, msn, etc. Bing search dan berbagai feature lain nya.
Selain itu tidak lupa apps store yang dimiliki oleh Microsoft sudah mencapati 20.000 app yang hanya membutuhkan 219 hari sejak launching. dibanding Andriod yang membutuhkan waktu 419 hari. Tentu saja antusias dari developer sangat besar terhadap platform baru dari Microsoft ini.
Dengan berbagai feature yang dimiliki oleh Windows Phone 7 dan kemampuan dalam hal hardware yang dimiliki oleh Nokia tampak nya Nokia secara pelan tapi pasti akan dapat bersaing dengan pemain besar smartphone lainnya.
Mari kita tunggu saja seperti apa bentuk dan feature yang ditawarkan oleh Nokia dengan Windows phone 7 nya. CEO nya sendiri menjanjikan bahwa Nokia Windows Phone 7 akan memberikan suatu handphone yang tidak ditemui pada handphone lainnya.
Nokia memprediksikan akan merelease windows phone 7 pada akhir tahun 2011 ini. Dan akan menjadi the next gadget untuk menggantikan nokia jadul saya ini.
Sejak keluar nya berbagai macam smartphone pada pasar, penetrasi smartphone semakin lama semakin meningkat. Bahkan pada tahun 2013 diprediksikan 1 (satu) dari 2 (dua) pengguna handphone menggunakan smartphone. Sehingga tidak salah jika setiap handset maker berlomba - lomba untuk menguasai pasar dari smartphone.
Pada Q4 Tahun 2007 Nokia masih menguasai 50% market share dari smart phone dengan Symbian OS yang diusung oleh Nokia pada device nya.
dan coba bandingkan dengan Market share smartphone pada Q1 tahun 2011. Symbian OS yang diusung oleh perangkat keras dari Nokia hanya memiliki 1% dari market share. Dan tentu nya Andriod adalah monster yang dapat menguasai pasar smart phone dalam waktu yang sangat cepat.
Sebetulnya nokia memiliki beberapa opsi untuk merebut kembali pasar smartphone. Salah satu nya adalah mengimplementasikan Andriod pada perangkat keras mereka keluarkan. Beberapa perusahaan seperti Motorola bahkan mengatakan Andriod adalah penyelamat bagi perusahaan mereka. Atau dengan menggunakan inhouse platform yang digadang gadang sebagai OS masa dengan untuk nokia, yaitu MeeGo. Tapi pada kenyataan Nokia tidak memilih antara Andriod atau bahkan Meego.
CEO nokia, yaitu Stephen Elop yang pernah bekerja untuk Microsoft ternyata lebih tertarik untuk mengimplementasikan Windows Phone 7 pada perangkat masa depan mereka. Entah ada keterkaitan terhadap masa lalu nya dengan microsoft atau tidak, tapi berbagai pihak mengatakan bahwa kerja sama antara microsoft dan nokia adalah suatu "Good Move".
Nokia mendiferensiasi diri nya dari hadangan pasaran yang mungkin sudah jenuh untuk handset andriod. Andriod sudah menguasai pasar tanpa smartphone bantuan dari Nokia sekalipun. Nokia yang terbiasa sebagai pemain utama tentu akan berpikir beberapa kali untuk menjadi pemain kesekian yang mengusung platform andriod. Sedangkan Microsoft menawarkan suatu tempat special untuk nokia bahkan untuk dapat meng-costumize segalanya pada level Operation System di Windows Phone 7 yang tidak didapat oleh handset maker lain seperti Samsung, LG, Dell, ataupun HTC. Hal tersebut yang menjadi alasan utama nokia untuk tidak ngusung platform andriod pada perangkat nya.
Microsoft sendiri bukan lah pemain amatir dalam dunia smartphone. Walaupun Windows Phone 6 banyak yang melabelkan gagal, tapi tampak nya Microsoft belajar banyak dari pengalaman nya. Mereka merevolusi User Interface (metro user interface, dengan live tiles nya) sehingga jauh lebih enak untuk dilihat dan digunakan. Integrasi yang sangat dalam untuk Office. Xbox yang biasanya hanya digunakan pada console, kini juga dapat dinikmati pada Windows Phone 7. Dan pada update mango, Microsoft memberikan integrasi yang sangat dalam pada berbagai social network besar serta system yang memudahkan kita untuk berkomunikasi tanpa harus menginstall berbagai aplikasi lagi seperti yahoo, msn, etc. Bing search dan berbagai feature lain nya.
Dengan berbagai feature yang dimiliki oleh Windows Phone 7 dan kemampuan dalam hal hardware yang dimiliki oleh Nokia tampak nya Nokia secara pelan tapi pasti akan dapat bersaing dengan pemain besar smartphone lainnya.
Mari kita tunggu saja seperti apa bentuk dan feature yang ditawarkan oleh Nokia dengan Windows phone 7 nya. CEO nya sendiri menjanjikan bahwa Nokia Windows Phone 7 akan memberikan suatu handphone yang tidak ditemui pada handphone lainnya.
Nokia memprediksikan akan merelease windows phone 7 pada akhir tahun 2011 ini. Dan akan menjadi the next gadget untuk menggantikan nokia jadul saya ini.
Wednesday, June 15, 2011
Database [Mysql] error and troubleshoot
Pernah kan anda menemukan jika table pada database anda tidak dapat diakses, itu lah yang saya alami belakangan ini. Memang sangat buat stress jika table yang sangat penting mendadak tidak dapat diakses.
Error pertama yang saya temui adalah :
Command :
Selain itu ada cara untuk melakukan checking ke semua table didatabase, command nya adalah : mysqlcheck -B dbname -u username -p
dan jika ingin sekaligus merepair tinggal menambahkan -r
cheers!
Error pertama yang saya temui adalah :
ERROR 29 (HY000): File 'tablename.MYD' not found (Errcode: 13). Untuk merepair database dengan error seperti ini cukup lah mudah. Tinggal cari file dimana MYD tersebut berada. lalu rubah akses mode nya. Error code 13 tersebut berarti table memiliki hak akses yang salah.Command :
- temukan file tersebut : locate tablename.MYD
- kemudian pindah ke folder yang ada file tersebut yang biasanya berada difolder ini : cd /var/lib/mysql/database_name
- lalu rubah owner dari file sesuai dengan file lainnya : chown mysql:mysql tablename.MYD
Table is marked as crashed and should be repaired . Untuk memperbaiki nya sangat simple jg. Berikut langkah langkah nya :- Masuk ke console mysql dengan commadn : mysql -u root -p
- Kemudian pindah ke database dimana table yang error tersebut berada. use databasename;
- lalu eksekusi command repair pada table : repair table tablename;
Selain itu ada cara untuk melakukan checking ke semua table didatabase, command nya adalah : mysqlcheck -B dbname -u username -p
dan jika ingin sekaligus merepair tinggal menambahkan -r
cheers!
Thursday, June 9, 2011
Are you Likeable?
Kemarin sedang browsing - browsing di Papataka, ada buku gratis, lumayan juga gratisan haha. Judul nya You are likeable. Buku ini cukup menarik, isi buku ini tidak kalah dengan pembicara pembicara motifasi tenar indonesia. Oh ya buku ini dapat di download di sini.Dari berbagai bagian yang saya lihat, saya sangat tertarik dengan beberapa kata di bagian Positif Outlook. Saya sangat setuju dengan kata - kata dari buku tersebut. Yaitu nasib kita dimasa depan dapat diramalkan oleh kita sendiri. Dan kunci nya ada dikata memutuskan. Dulu sewaktu masih kecil, paman saya bercerita kepada saya. Bahwa hidup ini adalah pilihan, setiap apa pun keputusan yang akan kita ambil adalah pilihan. Dan semakin Bijaksana kita mengambil keputusan maka hidup kita pun akan lebih baik juga.
Dan pada akhir buku, penulis menegaskan jika kita harus mencintai diri kita sendiri. Karena kita adalah seseorang yang LIKEABLE.
Untuk cerita jelas nya silahkan saja baca buku nya, Buku nya "cuma" 59 halaman, tapi ga buat bosen kok baca nya.
Sunday, June 5, 2011
iPad 2 Unboxing
Setelah penantian lama (dari pertama kali launcing awal maret), akhir nya iPad 2 ini bisa saya miliki jg. Terima kasih pada sodara Kumis yang telah mengantarkan saya muter - muter bandung (i have a great time bro) dan sodara bettaquinox yang memberikan harga yang reasonable untuk iPad ini.
Sebetulnya iPad 2 ini belum release di indonesia, bahkan dari bisikan sumber yang dapat dipercaya, iPad 2 baru akan release di Indonesia akhir tahun ini. Sumber tersebut juga secara tepat memprediksi kapan iPad 2 release di Singapore yaitu pada akhir april kemarin. Cukup kecewa dengan apple dan sekaligus menjadi pertanyaan, kenapa barang apple sangat telat masuk ke Indonesia. Whatever lah, yang penting iPad 2 sudah ada ditangan.
iPad 2 merupakan product terbaru apple yang menggunakan processor dual core A5 cpu, processor build in dari apple sendiri. Memiliki 2 buah kamera, kamera belakang dan kamera depan. Dan lebih tipis dari iPad generasi sebelum nya. Kalau dulu iPad tidak dapat melakukan multitask, iPad 2 dapat bekerja secara multitask.
Beberapa waktu kemarin saya juga sempat menggunakan Galaxy Tab, dan jika dibandingkan, iPad 2 win hands down. Lag tidak terasa pada iPad 2 saat saya melakukan browsing. Tidak seperti Galaxy yang terasa tidak nyaman saat menscroll suatu page. dan saat membuka beberapa aplikasi, galaxy akan terasa lag. tapi tidak untuk iPad 2. Selain itu iPad 2 sangat tipis dibanding galaxy, dan juga jauh lebih ringan. Pokok nya, menang dimana mana deh iPad 2.
Dan ditambah dengan smart cover, membuat ipad menjadi hampir sempurna. Smart cover dapat meng -wake up kan iPad secara otomatis saat cover dibuka, dan akan men -sleep kan iPad saat cover ditutup. Sangat praktis. Tidak perlu lagi menekan tombol sleep.
Over all, saya bisa bilang gadget ini sangat cool. bahkan dengan harga nya yang cukup mahal dari pada gadget lain saya rasa itu sangat worthed. 9/10 rating untuk ipad ini.
Next gadget adalah Windows Phone 7 dari Nokia. Nokia menjanjikan smart phone yang lebih dari biasa nya. Semoga Nokia cepat merelease Windows Phone 7 nya. Dan semoga nokia merelease windows phone 7 lebih awal di Indonesia seperti nokia c4 nya.
Sebetulnya iPad 2 ini belum release di indonesia, bahkan dari bisikan sumber yang dapat dipercaya, iPad 2 baru akan release di Indonesia akhir tahun ini. Sumber tersebut juga secara tepat memprediksi kapan iPad 2 release di Singapore yaitu pada akhir april kemarin. Cukup kecewa dengan apple dan sekaligus menjadi pertanyaan, kenapa barang apple sangat telat masuk ke Indonesia. Whatever lah, yang penting iPad 2 sudah ada ditangan.
iPad 2 merupakan product terbaru apple yang menggunakan processor dual core A5 cpu, processor build in dari apple sendiri. Memiliki 2 buah kamera, kamera belakang dan kamera depan. Dan lebih tipis dari iPad generasi sebelum nya. Kalau dulu iPad tidak dapat melakukan multitask, iPad 2 dapat bekerja secara multitask.
Beberapa waktu kemarin saya juga sempat menggunakan Galaxy Tab, dan jika dibandingkan, iPad 2 win hands down. Lag tidak terasa pada iPad 2 saat saya melakukan browsing. Tidak seperti Galaxy yang terasa tidak nyaman saat menscroll suatu page. dan saat membuka beberapa aplikasi, galaxy akan terasa lag. tapi tidak untuk iPad 2. Selain itu iPad 2 sangat tipis dibanding galaxy, dan juga jauh lebih ringan. Pokok nya, menang dimana mana deh iPad 2.
Over all, saya bisa bilang gadget ini sangat cool. bahkan dengan harga nya yang cukup mahal dari pada gadget lain saya rasa itu sangat worthed. 9/10 rating untuk ipad ini.
Thursday, June 2, 2011
Java Robot
Beberapa hari yang lalu saya mendapatkan sebuah project untuk membuat sebuah program. Program nya sendiri berfungsi untuk dengan otomatis menjalankan program lain. Setelah berpikir, gimana sih cara buat nya, untung saja java ternyata memiliki package untuk melakukan hal tersebut. Sehingga kita tidakusah mengugnakan JNI untuk melakukan memanggil native OS API.
Package tersebut disebutkan dengan nama Robot. Sudah merupakan bawaan dari JRE sendiri. Sehingga tidak usah menginclude library apapun untuk menjalankan package ini.
Robot pada java dapat mensimulasikan Mouse click (dan tentu saja double click) , right click, Shortcut, printscreen. Sebetulnya sudah ada program dengan nama automouse clicker, tapi sayang nya tidak bisa digunakan denngan console dan dipanggil oleh Java.
Dengan membundle Sax Parser untuk action (action dari robot), saya membuat sebuah program kecil seperti automouse clicker tersebut. download : http://example-code.googlecode.com/files/bot.zip
Untuk menjalankan program, masuk ke dist, kemudian eksekusi dengan perintah java -jar autobot.jar action.xml, tetapi terlebih dahulu masukan java pada Windows Path.
source gambar : http://blogs.oracle.com/mgorshenev/entry/javaone_2007_part_3_cool
Tuesday, May 31, 2011
Tips searching di google
Search skill di google adalah suatu hal yang sangat penting saat ini. Terutama sebagai programmer yang sangat jarang mendapatkan supervision dan mentoring dari atasannya.
Terdapat beberapa tips yang sering saya pakai dalam menggunakan google :
Terdapat beberapa tips yang sering saya pakai dalam menggunakan google :
- Mencari keyword hanya dalam suatu site (ex : site:agungbayuiswara.blogspot.com google)
- Mencari file dari suatu keyword (ex : ijazah filetype:doc)
- Mendefinisikan kata : (ex : define : roflmao)
- Currency : (ex : 1 sgd in rupiah)
- Menampilkan waktu : (ex: time jakarta)
- Google juga bisa dipake calculator! (ex : 1 + 2 + 3 + 4)
Have fun!
Exhausted Body
Ternyata tidak cuma komputer yang bisa exhausted (seperti tulisan sebelum nya, exhausted memory). Tubuh ini ternyata lebih mudah untuk menjadi lelah. Setelah beberapa hari dijejali berbagai macam pekerjaan. Baik dikantor maupun di kost, baik fisik maupun pikiran, akhir nya tubuh ini menyerah juga. 3 hari terkapar lemas di kamar kost.
Memang belakangan ini saya sangat jarang memperhatikan kesehatan. Dulu biasanya saya membeli supplement untuk menjaga kebugaran, tetapi belakangan ini sudah sangat malas untuk membeli hal - hal seperti itu lagi..
Padahal menurut atasan saya dulu, "Tubuh manusia tidak dibentuk untuk bekerja lebih dari 8 jam". Tapi pada kenyataannya saya memaksa tubuh ini bekerja sedari mata mulai terbuka. Belum lagi kalau ada pekerjaan diluar kantor (seperti freelance) yang lain. Wah bisa jadi untuk tidur pun cuman sempat 1/6 hari.
Tampak nya cara hidup seperti ini bukanlah suatu cara hidup yang "baik". Priority Scale harus dirubah. Dari tubuh, baru ke pekerjaan. Sayangilah tubuh anda lebih dari apa pun! Kesehatan adalah priceless.
Memang belakangan ini saya sangat jarang memperhatikan kesehatan. Dulu biasanya saya membeli supplement untuk menjaga kebugaran, tetapi belakangan ini sudah sangat malas untuk membeli hal - hal seperti itu lagi..
Padahal menurut atasan saya dulu, "Tubuh manusia tidak dibentuk untuk bekerja lebih dari 8 jam". Tapi pada kenyataannya saya memaksa tubuh ini bekerja sedari mata mulai terbuka. Belum lagi kalau ada pekerjaan diluar kantor (seperti freelance) yang lain. Wah bisa jadi untuk tidur pun cuman sempat 1/6 hari.
Tampak nya cara hidup seperti ini bukanlah suatu cara hidup yang "baik". Priority Scale harus dirubah. Dari tubuh, baru ke pekerjaan. Sayangilah tubuh anda lebih dari apa pun! Kesehatan adalah priceless.
Monday, May 23, 2011
Memory size exhausted pada CI
Lama saya mentrace error yang terjadi pada Codeigniter (Memory Size Exhausted) saat akan melakukan insert ke import suatu table dalam jumlah yang cukup besar.
Cukup aneh karena error tersebut tidak terjadi jika saya melakukan import dengan Command mysql_query dari php sendiri.
Ternyata error nya berasal dari driver database dari CI. Pada class CI_DB_driver, di file system/database/DB_Driver.php terdapat satu variable yaitu $save_queries. Nilai nya TRUE, dan setiap kali saya melakukan query, isi dari variable tersebut selalu bertambah.
Setelah saya merubah nilai nya menjadi FALSE, error tersebut dapat diatasi.
Cukup aneh, karena saya sendiri tidak menemukan dimana saya bisa merubah nilai tersebut dari konfigurasi CI (configurasi database pada folder config).
Cukup aneh karena error tersebut tidak terjadi jika saya melakukan import dengan Command mysql_query dari php sendiri.
Ternyata error nya berasal dari driver database dari CI. Pada class CI_DB_driver, di file system/database/DB_Driver.php terdapat satu variable yaitu $save_queries. Nilai nya TRUE, dan setiap kali saya melakukan query, isi dari variable tersebut selalu bertambah.
Setelah saya merubah nilai nya menjadi FALSE, error tersebut dapat diatasi.
Cukup aneh, karena saya sendiri tidak menemukan dimana saya bisa merubah nilai tersebut dari konfigurasi CI (configurasi database pada folder config).
Thursday, May 12, 2011
Mouseover vs Mouseenter Jquery
Baru sadar kalau mouseover berbeda dengan mouseenter pada jquery.
Mouse over & mouse out event ditrigger saat mouse sama masuk / keluar dari element. Tapi dilanjutkan ke element child dimana event tersebut tertrigger. Jadi saat mouse masuk kedalam element, dan kemudian masuk lagi ke child dari element tersebut, event akan tertrigger kembali.
Sebalik nya mouseenter & mouseleave akan tertrigger saat masuk / keluar element, tapi event akan masih berlaku saat mouse masuk child dari element.
Mouse over & mouse out event ditrigger saat mouse sama masuk / keluar dari element. Tapi dilanjutkan ke element child dimana event tersebut tertrigger. Jadi saat mouse masuk kedalam element, dan kemudian masuk lagi ke child dari element tersebut, event akan tertrigger kembali.
Sebalik nya mouseenter & mouseleave akan tertrigger saat masuk / keluar element, tapi event akan masih berlaku saat mouse masuk child dari element.
Sunday, May 8, 2011
All about Diabetes
Mari kita gali lebih dalam tentang Diabetes. Artikel berasal dari berbagai sumber. Dan maaf jika tidak mencantumkan asal dari sumber tersebut.
Background, karena saya memiliki keturunan diabetes maka akan sangat penting untuk menghindari aktivitas dan makanan yang dapat memicu naik nya gula darah melebihi batas normal.
Sebetulnya inti utama dari pencegahan penyakit diabetes adalah dari pola makan. Beberapa makanan Sehat untuk mencegah diabetes :
Salah satu cemilan yang cocok buat saya : http://www.sedapur.com/cgi-bin/daftarmerchant.cgi?profilmerchant&1290740437&&&&
Background, karena saya memiliki keturunan diabetes maka akan sangat penting untuk menghindari aktivitas dan makanan yang dapat memicu naik nya gula darah melebihi batas normal.
Sebetulnya inti utama dari pencegahan penyakit diabetes adalah dari pola makan. Beberapa makanan Sehat untuk mencegah diabetes :
- Kacang polong : Kacang polong tinggi serat. Serat merupakan komponen tumbuhan yang membuat Anda kenyang, menstabilkan kadar gula darah, dan bahkan menurunkan kolesterol. Setengah cangkir kacang hitam mengandung sekitar tujuh gram serat. Selain itu, kacang polong juga mengandung kalsium, mineral yang terbukti membantu membakar lemak tubuh. Setengah cangkir mengandung sekitar 100 gram kalsium, sekitar 10 persen dari asupan harian. Di samping itu, kacang polong juga merupakan sumber makanan yang kaya protein. Berbeda dengan sumber protein hewan (daging), kacang polong rendah lemak jenuh, lemak yang menyumbat arteri dan memicu penyakit jantung.
- Susu : Produk susu, seperti susu, keju dan yogurt, kaya kalsium dan vitamin D. Sebuah studi, seperti dikutip situs perevention.com, menemukan, perempuan yang mengonsumsi lebih dari 1.200 mg kalsium atau lebihdari 800 internasional unit (IU) vitamin D sehari berisiko 33 persen lebih rendah menderita diabetes dibandingkan mereka yang mengonsumsi kedua nutrisi ini dalam jumlah kurang. Tapi, pastikan memilih produk susu yang rendah atau bebas lemak.
- Salmon :
Salmon kaya asam lemak omega-3. Tiga ons salmon menyediakan sekitar 1.800 mg omega-3. Jenis lemak sehat ini berfungsi mengurangi risiko penyakit jantung, menurunkan berat badan, mengurangi peradangan, serta memperbaiki resistensi insulin. Selain itu, ikan ini juga mengandung vitamin D. - Tuna :
Tuna merupakan jenis ikan sehat yang juga kaya asam lemak omega-3. Tiga ons tuna menyumbangkan 1.300 mg omega-3 dan sejumlah vitamin D. - Oats
Oats juga kaya serat, setengah cangkir oat instan menyumbangkan empat gram serat. Penelitian menunjukkan bahwa pencinta oat bisa menrunkan kadar kolesterol total dan kolesterol jahat LDL serta memperbaiki resistensi insulin. Kandungan serat dalam oat memperlambat proses pemecahan dan penyerapan karbohidrat. Karena itu, kadar gula darah Anda akan tetap stabil. - Biji rami
Biji rami kaya akan serat dan alpha-linolenic acid (ALA), yang akan diubah tubuh menjadi omega-3 EPA dan DHA. Beberapa studi besar telah menemukan hubungan antara peningkatan asupan ALA dan penurunan kejadian penyakit jantung, serangan jantung, serta gangguan kardiovaskular lainnya. Biji berukuran kecil ini juga dinyatakan bisa menurunkan kadar kolesterol dan gula darah. - Kenari
Satu ons kacang sehat ini (sekitar tujuh biji) mengandung dua gram serat dan dua koma enam gram ALA. Tapi, jumlah tersebut juga menyumbangkan 185 kalori. Jadi, perhatikan jumlah asupan jika Anda sedang mempertahankan berat badan.
- Selai kacang
Beberapa studi telah menyatakan bahwa selai kacang bisa mengurangi risiko diabetes. Kandungan serat di dalamnya (dua sendok makan mengandung dua gram serat) turut berperan dalam penurunan risiko ini. Selain itu, selai kacang juga mengandung lemak tunggal tidak jenuh yang baik untuk jantung. Tapi, makanan ini juga kaya kalori. Karena itu, perhatikan takaran asupan Anda. - Cokelat hitam
Cokelat ini kaya antioksidan flavonoid, yang berfungsi memperbaiki kadar kolesterol baik dan jahat serta mengurangi tekanan darah.(MI/ICH)
Salah satu cemilan yang cocok buat saya : http://www.sedapur.com/cgi-bin/daftarmerchant.cgi?profilmerchant&1290740437&&&&
Saturday, May 7, 2011
Highlight me - Jquery Plugin
Cukup lama meminta bantuan kepada mbah google untuk mencarikan plugin yang sesuai dengan apa yang saya inginkan, tetapi masih belum dapat juga. Putus asa mencari, akhir nya memutuskan untuk buat saja sendiri.
Berikut plugin Highlight me, yang akan menghighlight image dengan mem-fade image disekitarnya.
Berikut plugin Highlight me, yang akan menghighlight image dengan mem-fade image disekitarnya.
(function( $ ){
$.fn.highlightme = function(options) {
var defaults = {
fadespeed : "fast",
fadeopacity : 0.1
};
var options = $.extend(defaults, options);
return this.each(function() {
$(this).mouseenter(function(){
$.each( $(this).siblings() , function(k, v) {
$(v).find("img").stop().fadeTo(options.fadespeed, options.fadeopacity);
});
$(this).find("img").stop().fadeTo(options.fadespeed, 1);
});
$(this).parent().mouseout(function(){
$.each($(this).find("img"), function(k, v){
$(this).stop().fadeTo(options.fadespeed, 1);
});
});
});
};
})( jQuery );
Penggunaan nya :
$(".testah").highlightme({
fadespeed : "fast",
fadeopacity : 0.1
});
hasil nya :
Sunday, May 1, 2011
My Promise
In next 7 month from now i promise my self. i should prepare and be ready for that time. Time to prove to the world. This time i will never fallback again. I Promise.
Performa Web [Bandwidth | Latency]
Berbagai macam alat untuk mengakses performa dari sebuah website. Beberapa nama yang top seperti YSlow yang merupakan plugin dari Yahoo untuk browser mozilla, kemudian google juga mengeluarkan alat berupa website untuk mengukur performance yaitu pagespeed.googlelabs.com, dan beberapa website yang juga menghitung performa website, mereka kebanyakan tidak memberikan penjelasan detil terhadap beberapa hasil dari perhitungan mereka.
Dari segi network sendiri, sebetulnya terdapat 2 (dua) faktor yang menentukan kecepatan dari koneksi internet. Yang pertama adalah Bandwidth, kemudian Latency. Dua hal tersebut merupakan salah satu faktor sangat penting untuk di ingat jika untuk meningkatkan performa website.
Internet dengan bandwidth yang besar tidak selalu menyebabkan website terbuka dengan cepat. Biasanya internet dengan bandwidth yang besar cocok untuk membuka video secara streaming, atau mendownload file yang besar. Jadi semakin besar bandwidth tentu nya akan semakin bagus.
Berbeda dengan Latency, semakin kecil latency akan semakin bagus. Lantecy merupakan seberapa cepat client dapat berkomunikasi dengan server dan kemudian dari server bisa mengembalikan response. Setelah mereka membuat suatu koneksi, maka kecepatan internet selanjutnya akan bergantung pada bandwidth.
Latency & Bandwidth dapat di analogikan seperti Jalan raya. Lebar jalan adalah bandwidth, dan halus nya jalan adalah latency. Semakin besar jalan, maka semakin banyak kendaraan yang dapat melintas (bandwidth), dan semakin halus jalan maka semakin cepat kendaraan mencapai tujuan (lantecy).
Nah bagaimana hubungan nya dengan performa sebuah website?
Seperti yang disebutkan diatas setiap kali client mengirimkan request ke server maka server akan mengembalikan data yang sesuai dengan permintaan user. Semakin banyak request yang diminta oleh client, maka akan semakin lambat website tersebut, lebih lebih jika latency dari user besar. Oleh karena itu performa website akan lebih baik jika Request dikurangi.
Contoh pengimplementasian nya adalah dengan menggabung kan image (css sprite), kemudian menggabungkan JS & CSS menjadi satu file. Bayangkan saja jika sebuah website harus merequest 20 file css, dan 20 file js. dimana setiap request yang dminta memerlukan waktu sepertsekian detik untuk membuka koneksi, dibandingkan dengan hanya 1 file css dan 1 file js yang direquest.
Kemudian timbul pertanyaan, kalau file itu besar, lama dong download nya. Tentu saja. oleh karena itu kita perlu mengurangi size dari file tersebut. Beberapa cara untuk mengurangi besar file static (css, js, image).
Untuk CSS & JS dapat menggunakan script memperingkas syntax dari CSS & JS.
Untuk JS dapat menggukan tool berikut : http://dean.edwards.name/packer/ atau http://jscompress.com/
dan untuk CSS dapat menggunakan : http://www.minifycss.com/css-compressor/ atau http://www.csscompressor.com/
Dengan memahami konsep dari networking sendiri, akan banyak dapat melahirkan pemikiran pemikiran lain untuk memperbaiki performa dari sebuah website.
Dari segi network sendiri, sebetulnya terdapat 2 (dua) faktor yang menentukan kecepatan dari koneksi internet. Yang pertama adalah Bandwidth, kemudian Latency. Dua hal tersebut merupakan salah satu faktor sangat penting untuk di ingat jika untuk meningkatkan performa website.
Internet dengan bandwidth yang besar tidak selalu menyebabkan website terbuka dengan cepat. Biasanya internet dengan bandwidth yang besar cocok untuk membuka video secara streaming, atau mendownload file yang besar. Jadi semakin besar bandwidth tentu nya akan semakin bagus.
Berbeda dengan Latency, semakin kecil latency akan semakin bagus. Lantecy merupakan seberapa cepat client dapat berkomunikasi dengan server dan kemudian dari server bisa mengembalikan response. Setelah mereka membuat suatu koneksi, maka kecepatan internet selanjutnya akan bergantung pada bandwidth.
Latency & Bandwidth dapat di analogikan seperti Jalan raya. Lebar jalan adalah bandwidth, dan halus nya jalan adalah latency. Semakin besar jalan, maka semakin banyak kendaraan yang dapat melintas (bandwidth), dan semakin halus jalan maka semakin cepat kendaraan mencapai tujuan (lantecy).
Nah bagaimana hubungan nya dengan performa sebuah website?
Seperti yang disebutkan diatas setiap kali client mengirimkan request ke server maka server akan mengembalikan data yang sesuai dengan permintaan user. Semakin banyak request yang diminta oleh client, maka akan semakin lambat website tersebut, lebih lebih jika latency dari user besar. Oleh karena itu performa website akan lebih baik jika Request dikurangi.
Contoh pengimplementasian nya adalah dengan menggabung kan image (css sprite), kemudian menggabungkan JS & CSS menjadi satu file. Bayangkan saja jika sebuah website harus merequest 20 file css, dan 20 file js. dimana setiap request yang dminta memerlukan waktu sepertsekian detik untuk membuka koneksi, dibandingkan dengan hanya 1 file css dan 1 file js yang direquest.
Kemudian timbul pertanyaan, kalau file itu besar, lama dong download nya. Tentu saja. oleh karena itu kita perlu mengurangi size dari file tersebut. Beberapa cara untuk mengurangi besar file static (css, js, image).
Untuk CSS & JS dapat menggunakan script memperingkas syntax dari CSS & JS.
Untuk JS dapat menggukan tool berikut : http://dean.edwards.name/packer/ atau http://jscompress.com/
dan untuk CSS dapat menggunakan : http://www.minifycss.com/css-compressor/ atau http://www.csscompressor.com/
Dengan memahami konsep dari networking sendiri, akan banyak dapat melahirkan pemikiran pemikiran lain untuk memperbaiki performa dari sebuah website.
Menghindari karakter encoding aneh pada database - MySQL
Dahulu pada kantor yang lama, saat masih cupu - cupu nya, setiap kali XML merender error pada tampilan browser, selalu yang disalahkan content dari database nya. Padahal sebetulnya sebelum data di insert ke dalam database, data tersebut di proses terlebih dahulu melalui berbagai proses. Dan salah satu yang sering sekali terlupa oleh seorang programmer adalah encoding dari database.
Pada MySQL, standart collation dari database adalah Latin. Dimana collation tersebut, sesuai dengan nama nya hanya dapat menyimpan karakter - karakter latin. Saat table akan di insert dengan row baru, setiap karakter akan di convert menjadi collation yang berkesesuaian. Sehingga jika suatu saat table tersebut di insert dengan tulisan china, maka tulisan - tulisan tersebut akan di convert (biasa nya di convert menjadi "????" karena di collation latin tidak mengenali character tersebut).
Oleh karena itu sangat perlu di perhatikan Collation dari setiap field. Untuk aman nya lebih baik menggunakan Collation utf8-unicode-ci atau utf8-general-ci. Perbedaan antara kedua collation tersebut dapat dilihat pada pertanyaan berikut : http://stackoverflow.com/questions/2344118/utf-8-general-bin-unicode
Belum selesai sampai sana. Ada 1 lagi yang harus juga diperhatikan. Setiap kali melakukan query (ddl, dml, ataupun select), biasakan untuk mendefenisikan client character set. Untuk php dengan database MySql dapat menggunakan fungsi mysql_set_charset, dengan parameter utf8.
Dengan melakukan set pada database & php, maka akan terhindar dengan character - character aneh yang mungkin keluar dikemudian hari.
Pada MySQL, standart collation dari database adalah Latin. Dimana collation tersebut, sesuai dengan nama nya hanya dapat menyimpan karakter - karakter latin. Saat table akan di insert dengan row baru, setiap karakter akan di convert menjadi collation yang berkesesuaian. Sehingga jika suatu saat table tersebut di insert dengan tulisan china, maka tulisan - tulisan tersebut akan di convert (biasa nya di convert menjadi "????" karena di collation latin tidak mengenali character tersebut).
Oleh karena itu sangat perlu di perhatikan Collation dari setiap field. Untuk aman nya lebih baik menggunakan Collation utf8-unicode-ci atau utf8-general-ci. Perbedaan antara kedua collation tersebut dapat dilihat pada pertanyaan berikut : http://stackoverflow.com/questions/2344118/utf-8-general-bin-unicode
Belum selesai sampai sana. Ada 1 lagi yang harus juga diperhatikan. Setiap kali melakukan query (ddl, dml, ataupun select), biasakan untuk mendefenisikan client character set. Untuk php dengan database MySql dapat menggunakan fungsi mysql_set_charset, dengan parameter utf8.
Dengan melakukan set pada database & php, maka akan terhindar dengan character - character aneh yang mungkin keluar dikemudian hari.
Monday, March 21, 2011
Ikut bangga akan kesuksesan teman
Beberapa orang yang saya kenal merasa "jealous" terhadap keberhasilan teman nya dalam karir maupun usaha. Atas keahlian yang mereka punya sebab mereka bekerja keras. Terkadang saya bingung kenapa mereka berpilaku seperti itu. Padahal menurut saya, keberhasilan yang teman nya dapat adalah secara tidak langsung menguntungkan untuk mereka juga.
Anggap saja kalo teman anda menjadi seorang manager sebuah perusahaan. Paling tidak terdapat kesempatan yang lebih baik untuk menawarkan product yang anda punya ke perusahaan nya tersebut dengan lebih mudah, karena mereka memiliki power untuk membuat keputusan. Atau pun teman anda sukses menjadi seorang pengusaha sukses. Tanya tentang trik keberhasilan usaha nya adalah hal yang wajar, dan saya sangat yakin kalo mereka akan memberikan nya dengan senang hati juga. Bahkan mungkin saja mereka menawarkan untuk bekerja sama membangun usahanya dengan anda. Karena pasti nya seorang kawan akan lebih percaya dengan kawan nya dari pada orang asing.
Jadi kalo anda merasa kalau anda selalu "jealous" terhadap keberhasilan teman, perbaiki lah sekarang juga. Keberhasilan mereka harusnya menjadi motivasi terhadap kehidupan pribadi anda sendiri untuk menjadi lebih maju.
Anggap saja kalo teman anda menjadi seorang manager sebuah perusahaan. Paling tidak terdapat kesempatan yang lebih baik untuk menawarkan product yang anda punya ke perusahaan nya tersebut dengan lebih mudah, karena mereka memiliki power untuk membuat keputusan. Atau pun teman anda sukses menjadi seorang pengusaha sukses. Tanya tentang trik keberhasilan usaha nya adalah hal yang wajar, dan saya sangat yakin kalo mereka akan memberikan nya dengan senang hati juga. Bahkan mungkin saja mereka menawarkan untuk bekerja sama membangun usahanya dengan anda. Karena pasti nya seorang kawan akan lebih percaya dengan kawan nya dari pada orang asing.
Jadi kalo anda merasa kalau anda selalu "jealous" terhadap keberhasilan teman, perbaiki lah sekarang juga. Keberhasilan mereka harusnya menjadi motivasi terhadap kehidupan pribadi anda sendiri untuk menjadi lebih maju.
Sunday, March 13, 2011
Gagal dalam startup
Sejak kecil, saya sudah bercita - cita untuk menjadi seorang wirausahawan. Tak pernah sekalipun untuk bercita - cita menjadi seorang manager ataupun seorang direktur sebuah perusahaan. Semangat wirausaha itu pun masih tetap ada sampai saat ini. Kalau bisa dibilang, skrng bekerja hanya untuk bertahan hidup. Bukan suatu tujuan hidup utama. Disela - sela kesibukan kantor, selalu saya sempatkan untuk berpikir tentang usaha yang mau saya buat. Salah satu nya adalah membuat sebuah startup business dalam bidang website.
Tapi ternyata untuk membuat suatu usaha seperti ini membutuhkan suatu effort yang besar. Beberapa kali saya mencoba, selalu saja gagal (sampai saat saya menulis artikel ini). Saya pun berpikir, sebetulnya dimana sih letak kesalahan saya yang membuat saya selama ini gagal ditengah jalan.
Terlalu banyak interferensi pemikiran dari pihak luar
Saya membaca, menonton, bahkan mengikuti suatu acara startup yang berbayar untuk mengisi untuk menambah wawasan saya. Tapi sejujur nya, saya pikir itu bukanlah suatu yang essensial untuk diikuti. Dan beberapa acara / video / tulisan bukan lah merupakan suatu hal yang pantas untuk diikuti khusus nya untuk saya. Mungkin acara tersebut lebih tepat ditujukan untuk orang - orang sudah memiliki usaha langsung. Bahkan beberapa malah menyesatkan saya dalam usaha membangun start up.
Partner Startup
Salah satu pembicara yang sangat terkenal dan sering menjadi pembicara pada podcast yang ada pada stanford enterpreneur corner. yaitu Guy Kawasaki. Beliau memiki konsep yang membuat saya menjadi terpatok pada pemikiran nya. Beliau memiliki suatu pendapat bahwa untuk membangun startup business selayaknya tidak sendiri. Paling tidak ada 3 orang dalam satu team dalam memulai suatu start up business.
Saya pun awal nya berpikiran sama seperti beliau. Berusaha untuk mencari team yang dapat diajak untuk bekerja sama. waktu kemarin saya memikili team yang saya pikir cukup kuat. 3 orang yang memiliki back ground berbeda bekerja saya untuk mebuat suatu startup. Tapi ternyata suatu konsep tidak lah selalu sesuai dengan kenyataan yang ada. Satu persatu team member mengundurkan diri dalam project tersebut. Hingga akhir nya saya pun tinggal seorang diri.
Project yang terlalu besar
Dengan sedikit berat hati saya pun tetap melanjutkan project tersebut. Project tersebut dapat dibilang project yang cukup besar untuk dilakukan oleh team kecil. Bahkan kalau saya hitung, project tersebut dapat dilakukan oleh 10 orang bekerja fulltime itu pun menbutuhkan waktu yang cukup lama. mungkin setengah tahun.
Ide tanpa eksekusi yang baik
Beberapa hal yang sangat saya kecewakan pada team saya kemarin adalah kegiatan menggali ide tanpa suatu eksekusi yang baik.Bahkan saya sempat mengatakan bahwa suatu ide yang brilian tidak akan membuat program menjadi nyata. Tapi untuk membuat suatu program kita harus menuangkan ide tersebut kedalam ribuan baris code.
Kemarin saya sempat membaca suatu artikel , pada artikel tersebut dijelaskan bahwa suatu ide tidak akan membuat anda menjadi kaya. tapi eksekusi lah yang tepat lah yang membuat anda menjadi berharga.
Ketakutan untuk mencoba kembali
Setelah pengalaman tersebut, saat ini saya menjadi sangat terbebani oleh pemikiran saya sendiri. terkadang saya malah "takut" untuk memulai pemikiran baru. Karena takut akan kegagalan demi kegagalan dalam membangun ide menjadi suatu startup.
Beberapa hari kemarin, saya mencoba membangun diri saya kembali. Menelaah setiap sisi yang membuat saya gagal. Sampai akhir nya saya mencoba kembali untuk memberanikan diri untuk mencoba kembali menuangkan ide untuk dijadikan suatu start up. Setelah itu saya pun memiliki beberapa prinsip untuk memulai start up itu :
Tapi ternyata untuk membuat suatu usaha seperti ini membutuhkan suatu effort yang besar. Beberapa kali saya mencoba, selalu saja gagal (sampai saat saya menulis artikel ini). Saya pun berpikir, sebetulnya dimana sih letak kesalahan saya yang membuat saya selama ini gagal ditengah jalan.
Terlalu banyak interferensi pemikiran dari pihak luar
Saya membaca, menonton, bahkan mengikuti suatu acara startup yang berbayar untuk mengisi untuk menambah wawasan saya. Tapi sejujur nya, saya pikir itu bukanlah suatu yang essensial untuk diikuti. Dan beberapa acara / video / tulisan bukan lah merupakan suatu hal yang pantas untuk diikuti khusus nya untuk saya. Mungkin acara tersebut lebih tepat ditujukan untuk orang - orang sudah memiliki usaha langsung. Bahkan beberapa malah menyesatkan saya dalam usaha membangun start up.
Partner Startup
Salah satu pembicara yang sangat terkenal dan sering menjadi pembicara pada podcast yang ada pada stanford enterpreneur corner. yaitu Guy Kawasaki. Beliau memiki konsep yang membuat saya menjadi terpatok pada pemikiran nya. Beliau memiliki suatu pendapat bahwa untuk membangun startup business selayaknya tidak sendiri. Paling tidak ada 3 orang dalam satu team dalam memulai suatu start up business.
Saya pun awal nya berpikiran sama seperti beliau. Berusaha untuk mencari team yang dapat diajak untuk bekerja sama. waktu kemarin saya memikili team yang saya pikir cukup kuat. 3 orang yang memiliki back ground berbeda bekerja saya untuk mebuat suatu startup. Tapi ternyata suatu konsep tidak lah selalu sesuai dengan kenyataan yang ada. Satu persatu team member mengundurkan diri dalam project tersebut. Hingga akhir nya saya pun tinggal seorang diri.
Project yang terlalu besar
Dengan sedikit berat hati saya pun tetap melanjutkan project tersebut. Project tersebut dapat dibilang project yang cukup besar untuk dilakukan oleh team kecil. Bahkan kalau saya hitung, project tersebut dapat dilakukan oleh 10 orang bekerja fulltime itu pun menbutuhkan waktu yang cukup lama. mungkin setengah tahun.
Ide tanpa eksekusi yang baik
Beberapa hal yang sangat saya kecewakan pada team saya kemarin adalah kegiatan menggali ide tanpa suatu eksekusi yang baik.Bahkan saya sempat mengatakan bahwa suatu ide yang brilian tidak akan membuat program menjadi nyata. Tapi untuk membuat suatu program kita harus menuangkan ide tersebut kedalam ribuan baris code.
Kemarin saya sempat membaca suatu artikel , pada artikel tersebut dijelaskan bahwa suatu ide tidak akan membuat anda menjadi kaya. tapi eksekusi lah yang tepat lah yang membuat anda menjadi berharga.
Ketakutan untuk mencoba kembali
Setelah pengalaman tersebut, saat ini saya menjadi sangat terbebani oleh pemikiran saya sendiri. terkadang saya malah "takut" untuk memulai pemikiran baru. Karena takut akan kegagalan demi kegagalan dalam membangun ide menjadi suatu startup.
Beberapa hari kemarin, saya mencoba membangun diri saya kembali. Menelaah setiap sisi yang membuat saya gagal. Sampai akhir nya saya mencoba kembali untuk memberanikan diri untuk mencoba kembali menuangkan ide untuk dijadikan suatu start up. Setelah itu saya pun memiliki beberapa prinsip untuk memulai start up itu :
- Semakin sedikit membaca berita start up. Saya hanya mengikuti berita mainsteam seperti perkembangan google, apple. Tidak terlalu banyak kembali membaca berita - berita untuk start up. Terkadang kalau melihat ide kita sudah ada yang menerapkan, membuat kita menjadi down, bahkan terkadang kita bisa menanguhkan ide kita dan development yang sudah berjalan.
- Berusaha berjalan sendiri. Dengan pengalaman kemarin, sekarang saya befikir untuk berjalan sendiri. Kalaupun ada orang yang saya ajak bergabung, bukan lah orang yang saya buat menjadi suatu core dari team. Saya tetap hanya menganggap saya sebagai sole member dari project. Sehingga saya tidak terlalu banyak bergantung pada orang lain. Tapi lebih membebankan
- Memulai project kecil. Saat ini saya mencoba untuk memulai project yang tidak terlalu besar. Dan project tersebut cukup kecil untuk dilakukan oleh satu orang. Ide - ide yang saya buat skrng, lebih pada penggunaan pribadi. Semoga nanti dengan penggunaan pribadi saya bisa mem-persue teman - teman untuk menggunakan program yang saya buat.
- Mengeksekusi ide tersebut (terpenting). Sehebat apapun ide kita, tetap saya ide tersebut tidak berarti apa - apa tanpa suatu eksekusi.Suatu ide yang brilian dan eksekusi yang baik pasti akan menghasilkan product yang luar biasa.
- Berkomitment pada project. Ini hal yang sangat susah dilakukan.Agar kita tetap fokus pada project, kita harus berkomitment terhadap project tersebut. Pada hari libur, pasti otak jg bakal ikutan berlibur.Komitmen tersebut akan membuat kita bekerja lebih keras, mengerjakan project sebelum tidur. Tidak ikut jalan pada week end dengan teman, tapi mengisi nya dengan mengerjakan project. Walaupun lambat yang penting tetap mengerjakan project tersebut.
Monday, March 7, 2011
Perbedaan == dengan === pada PHP
PHP merupakan sebuah bahasa pemrograman yang unik. Salah satu keunikan dari PHP adalah operator == (equals) dan === (indentical). Kedua operator tersebut memiliki fungsi yang berbeda. Operator == (equals) akan memberikan nilai true jika nilai dari kedua variable yang dibandingkan memiliki nilai yang sama.
contoh :
Sedangkan operator === (identical) akan berlaku berbeda
contoh :
contoh :
var_dump (100 == "100"); var_dump (1 == true); var_dump (0 == false);ekspresi diatas akan mengembalikan nilai true walaupun jika dilihat semua variable yang dibandingkan diatas memiliki nilai yang tidak sama.
Sedangkan operator === (identical) akan berlaku berbeda
contoh :
var_dump (100 === "100"); var_dump (1 === true); var_dump (0 === false);Semua ekspresi diatas akan menghasilkan nilai false. Berbeda dengan operator equals, operator identical tidak hanya membandingkan nilai dari kedua variable tapi juga membandingkan tipe dari variable tersebut.
Thursday, March 3, 2011
Basic Http Authentication [Tomcat]
Basic authentication jg disupport oleh tomcat. Cara implementasi nya sedikit berbeda dengan basic authentication pada glassfish (http://agungbayuiswara.blogspot.com/2011/03/basic-http-authentication-sun-glassfish.html).
Untuk mengimplementasikan basic authentication pada tomcat, kita hanya perlu menambahkan beberapa line pada tomcat-user.xml pada folder instalasi tomcat, pada tempat saya berada pada D:\tomcat6\conf\tomcat-user.xml)
Untuk mengimplementasikan basic authentication pada tomcat, kita hanya perlu menambahkan beberapa line pada tomcat-user.xml pada folder instalasi tomcat, pada tempat saya berada pada D:\tomcat6\conf\tomcat-user.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<tomcat-users>
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
<role rolename="user"/>
<user username="user" password="password" roles="user" />
<user password="jegbagus" roles="manager,admin" username="jegbagus"/>
</tomcat-users>
Konfigurasi pada web.xml sendiri kurang lebih sama dengan implementasi pada glassfish.Sehingga source pada glassfish jg bisa digunakan untuk implementasi basic authentication pada tomcat.
Basic Http Authentication [Sun Glassfish]
Basic authentication merupakan salah satu jenis dari HTTP authentication.Sesuai dengan nama nya basic authentication berfungsi untuk mengauthentikasi user sebelum mengakses resource yang akan dilindungi oleh basic authentication ini.
Implementasi basic authentication pada setiap web server berbeda - beda.
Konfigurasi proteksi resource jg harus didefinisikan pada web.xml, seperti berikut :
Akses dibatasi oleh http basic authentication
- Implementasi basic authentication pada SunGlassFish :
Untuk mengaktifkan basic authentication pada sun glassfish, kita perlu menambahkan file sun-web.xml yang selevel dengan web.xml
<security-role-mapping>
<role-name>user</role-name>
<principal-name>user</principal-name>
<group-name>user</group-name>
</security-role-mapping>
Dan kemudian tambahkan user pada security configurasi pada glashfish.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>basic auth</display-name>
<description>basic auth</description>
<servlet>
<servlet-name>viewhello</servlet-name>
<servlet-class>com.jegbagus.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>viewhello</servlet-name>
<url-pattern>/view/hello</url-pattern>
</servlet-mapping>
<!-- HTTP authentication -->
<security-constraint>
<display-name>View Hello</display-name>
<web-resource-collection>
<web-resource-name>viewhello</web-resource-name>
<description>viewhello</description>
<url-pattern>/view/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description>view hello</description>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Application View Hello</realm-name>
</login-config>
<!-- HTTP authentication -->
</web-app>
Web.xml tersebut, kita bermaksud memproteksi
url view/* dari public akses dan hanya memperbolehkan user "user"
yang didefinisikan pada web-server untuk mengakses url tersebut.
contoh code dari http basic auth untuk glassfish ini dapat didownload di : http://example-code.googlecode.com/files/http-basic-auth.zip
Monday, February 28, 2011
Memindahkan path Java pada Windows
Java saat di install akan secara default di install di C:\Program Files\Java, kalo dilihat pada instalasi path terdapat character newline (spasi) pada program file. hal ini dapat menyebabkan berbagai error yang muncul. salah satu yang saya temui adalah plugin maven pada eclipse yang tidak berjalan lancar.
Oleh karena itu Java sebaiknya diinstall pada path tanpa character newline seperti program (spasi) tersebut. Sayang nya installer java skrng langsung menginstall java pada path tersebut. untuk menghindari dari error2 yang terjadi dikemudian hari, maka sebaik nya pindahkan saja instalasi JDK / JRE ke folder tanpa spasi
Berikut cara untuk memindahkan Instalasi java ke path yang baru :
1. Pindahkan JDK & JRE pada C:\Program Files\Java, ke C:\Java
2. Ketikkan Regedit pada windows run
3. Kemudian cari registry dengan path : HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
4. Kemudian rubah setiap nilai pada registry yang berawalan C:\Program Files\Java menjadi C:\Java
5. Pada C:\WINDOWS\system32 hapus setiap file java.exe, javaw.exe, dan javaws.exe
6. Kemudian tambahkan JAVA_HOME & path pada windows global path merujuk ke instalasi java baru
7. Check java dari command prompt
Dan selamat anda telah terhindar dari berbagai jenis error yang mungkin terjadi yang dikarenakan oleh path java dikemudian hari.
Oleh karena itu Java sebaiknya diinstall pada path tanpa character newline seperti program (spasi) tersebut. Sayang nya installer java skrng langsung menginstall java pada path tersebut. untuk menghindari dari error2 yang terjadi dikemudian hari, maka sebaik nya pindahkan saja instalasi JDK / JRE ke folder tanpa spasi
Berikut cara untuk memindahkan Instalasi java ke path yang baru :
1. Pindahkan JDK & JRE pada C:\Program Files\Java, ke C:\Java
2. Ketikkan Regedit pada windows run
3. Kemudian cari registry dengan path : HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
4. Kemudian rubah setiap nilai pada registry yang berawalan C:\Program Files\Java menjadi C:\Java
5. Pada C:\WINDOWS\system32 hapus setiap file java.exe, javaw.exe, dan javaws.exe
6. Kemudian tambahkan JAVA_HOME & path pada windows global path merujuk ke instalasi java baru
7. Check java dari command prompt
Dan selamat anda telah terhindar dari berbagai jenis error yang mungkin terjadi yang dikarenakan oleh path java dikemudian hari.
JAXP - SAX Parser & Validasi XML
JAXP (Java API for XML) merupakan API dari Java untuk pemprosessan XML. API ini memiliki fungsi untuk parsing, validasi xml dengan menggunakan DTD atau XSD.
JAXP sendiri dibagi menjadi 3 basic methode parsing, yaitu :
SAX parser merupakan parser yang paling ringan dari pada semua yang saya sebutkan diatas.SAX menggunakan urutan event untuk melakukan parsing.Tidak seperti DOM yang akan otomatis melakukan parsing pada XML dokument, SAX memberikan kebebasan kepada programmer untuk menentukan setiap element / attribute yang perlu untuk di proses untuk dimasukkan kedalam model object custom sesuai dengan isi dari XML tersebut.
Kapan menggunakan SAX atau DOM ?
XML file berbentuk seperti ini :
XML tersebut akan di validasi dengan DTD berikut :
XML dan DTD tersebut akan divalidasi dan di parsing melalui SAX implementasi. Berikut Class dari sax parser :
Mari kita breakdown code tersebut :
Parser
Dari hasil parsing yang disimpan pada object model, akan di proses sebagai sumber data untuk melakukan scheduler pada aplikasi.
Untuk lebih lengkap download source codenya pada : http://sax-dtd-example.googlecode.com/files/scheduler01.zip
aplikasi tersebut menggunakan maven untuk script build nya. Eksekusi mvn tomcat:run pada command prompt untuk menjalankan aplikasi ini.
JAXP sendiri dibagi menjadi 3 basic methode parsing, yaitu :
- SAX parser interface : Simple API for XML
- DOM interface : Document Object Model
- StAX : Streaming API for XML
SAX parser merupakan parser yang paling ringan dari pada semua yang saya sebutkan diatas.SAX menggunakan urutan event untuk melakukan parsing.Tidak seperti DOM yang akan otomatis melakukan parsing pada XML dokument, SAX memberikan kebebasan kepada programmer untuk menentukan setiap element / attribute yang perlu untuk di proses untuk dimasukkan kedalam model object custom sesuai dengan isi dari XML tersebut.
Kapan menggunakan SAX atau DOM ?
Saya pribadi akan lebih condong menggunakan SAX parser apabila tag dari document XML tersebut sudah dapat diterka. Dan tag dari xml tersebut tidak terlalu berubah banyak. Sedangkan DOM untuk memparsing XML document yang lebih complex contoh nya HTML file atau XML file yang susah untuk diparsing oleh SAX parser.Kali ini saya akan membahas tentang SAX parser baik method parsing maupun validasi xml dengan menggunakan DTD.XML yang saya buat berfungsi untuk memberikan kemudahan untuk mengconfigurasi scheduling task di java yang akan banyak menggunakan API dari Quartz untuk scheduler.
XML file berbentuk seperti ini :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE scheduleList PUBLIC "http://agungbayuiswara.blogspot.com//DTD Scheduler Module 1.0" "scheduler.dtd">
<schedulelist>
<scheduler concurrent="false" id="scheduler01">
<handler>com.jegbagus.util.scheduler.ExampleJob</handler>
<cron>*/5 * * * * ?</cron>
<group>Group01</group>
</scheduler>
</schedulelist>
Schedule list merupakan parent tag yang akan memuat list dari schedule - schedule yang akan dieksekusi. Attribute concurrent untuk menandakan scheduler dapat berjalan beriringan jika scheduler sebelum nya selesai. Name merupakan nama dari scheduler. Kemudian element handler menandakan class handler dari scheduler tersebut. Cron adalah aturan dari eksekusi scheduler. Group adalah group dari eksekusi scheduler.XML tersebut akan di validasi dengan DTD berikut :
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT scheduleList (scheduler*)> <!ATTLIST ScheduleList name CDATA #IMPLIED > <!ELEMENT scheduler (handler,cron,group)> <!ATTLIST scheduler id CDATA #REQUIRED concurrent (true|false) "false" > <!ELEMENT handler (#PCDATA)> <!ELEMENT cron (#PCDATA)> <!ELEMENT group (#PCDATA)>untuk informasi lebih tentang DTD silahkan refer ke website seperti http://www.w3schools.com/DTD/default.asp
XML dan DTD tersebut akan divalidasi dan di parsing melalui SAX implementasi. Berikut Class dari sax parser :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.jegbagus.util.scheduler.parser;
/**
*
* @author agung.iswara
*/
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.jegbagus.util.scheduler.domain.ScheduleConf;
public class SaxScheduleParser extends DefaultHandler implements SchedulerParserInterface, EntityResolver {
@SuppressWarnings("unused")
private static final Logger logger = LoggerFactory.getLogger(SaxScheduleParser.class);
private static final Map doctypeMap = new HashMap();
private HashMap hashConf;
private ScheduleConf tempConf;
private String tempVal;
private InputStream is;
static {
doctypeMap.put( "http://agungbayuiswara.blogspot.com//DTD Scheduler Module 1.0".toUpperCase(), "config/scheduler.dtd");
}
public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
if (publicId != null)
publicId = publicId.toUpperCase();
InputSource source = null;
try {
String path = (String) doctypeMap.get(publicId);
source = getInputSource(path, source);
} catch (Exception e) {
throw new SAXException(e.toString());
}
return source;
}
private InputSource getInputSource(String path, InputSource source) {
if (path != null) {
InputStream in = null;
try {
in = SaxScheduleParser.class.getClassLoader().getResourceAsStream(path);
source = new InputSource(in);
} catch (Exception e) {
e.printStackTrace();
}
}
return source;
}
public void initParser(String confLoc) {
hashConf = new HashMap();
is = SaxScheduleParser.class.getClassLoader().getResourceAsStream(confLoc);
}
public SaxScheduleParser(String confLoc) {
initParser(confLoc);
}
public HashMap startParse() {
return parseDocument();
}
private HashMap parseDocument() {
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = parserFactory.newSAXParser();
saxParser.parse(is, this);
} catch (SAXException se) {
se.printStackTrace();
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
return hashConf;
}
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
tempVal = "";
if (qName.equalsIgnoreCase("scheduler")) {
tempConf = new ScheduleConf();
tempConf.setSchedulerId(attributes.getValue("id"));
tempConf.setConcurent(new Boolean(attributes.getValue("concurrent")));
}
}
public void characters(char[] ch, int start, int length)
throws SAXException {
tempVal = new String(ch, start, length);
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equalsIgnoreCase("scheduler")) {
hashConf.put(tempConf.getSchedulerId(), tempConf);
} else if (qName.equalsIgnoreCase("handler")) {
tempConf.setHandlerName(tempVal);
} else if (qName.equalsIgnoreCase("cron")) {
tempConf.setCron(tempVal);
} else if (qName.equalsIgnoreCase("group")) {
tempConf.setGroup(tempVal);
}
}
}
Mari kita breakdown code tersebut :
Parser
- Sax Parser dapat merupakan turunan dari DefaultHandler, HandlerBase (deprecated pada java 1.6) atau handler lainnya yang terdapat pada package org.sax .kali ini saya akan menggunkan DefaultHandler sebagai base class.
- Method yang harus kita override dari DefaultHandler tersebut untuk mendapatkan Element & attribute adalah startElement & endElement
- startElement akan dieksekusi setiap menemui awal element seperti
, dan dari awal element tersebut akan didapat attribute - attribute dari element tersebut id & concurrent dari element scheduler. method startElement biasa digunakan jika menemui element yang memiliki attribute & memiliki child element. - endElement akan dieksekusi setiap parser menemu akhir element seperti . dari end element kita bisa mendapatkan isi dari element tersebut yang sebelum nya didapat dari method characters
- Untuk mem-validasi xml file perlu menambahkan doctype dan file yang berkesesuaian untuk memvalidasi file XML. Apabila anda menggunakan eclipse dengan DTD ini kita bisa memanfaatkan fasilitas autocomplete pada xml file yang kita buat jika XML file tersebut merujuk ke DTD file.
- Pada java class harus mengimplementasikan EntityResolver yang merujuk file dimana DTD itu tersimpan, dan XML file akan di validasi dari oleh DTD tersebut. Implementasi validasi dari DTD dapat dilihat pada method resolveEntity yang mengembalikan Object dari InputSource DTD tersebut.
Dari hasil parsing yang disimpan pada object model, akan di proses sebagai sumber data untuk melakukan scheduler pada aplikasi.
Untuk lebih lengkap download source codenya pada : http://sax-dtd-example.googlecode.com/files/scheduler01.zip
aplikasi tersebut menggunakan maven untuk script build nya. Eksekusi mvn tomcat:run pada command prompt untuk menjalankan aplikasi ini.
Subscribe to:
Comments (Atom)









