Sunday, December 23, 2012

semuda aplikasi menua

assalamu'alaykum

akhir tahun enaknya sih nulis, dan kebeneran dapet ide dari eksplorasi yg baru dilakukan. oke dah langsung saja!

waktu liburan sih enaknya jangan kerja kan ya, tapi ga untuk coder di akhir tahun. kenapa dengan akhir tahun?  biasanya sih, yg punya duit pada menghabiskan anggaran gitu deh haha, termasuk yg satu ini. tadi malam, tiba-tiba ada yg menelpon saya. ternyata kenalan dari teman saya, dan dia menawarkan kerjaan singkat: bugfinder, bugtracker, bugfixer. saya ga perlu tau kliennya siapa, harga proyeknya berapa, dan siapa yang mengerjakan sebelumnya. saya cuma dikasih link ke aplikasinya, dokumen bug-nya, dan basis data-nya. juga pastinya saya dikasih tau honor yg akan dikasih lah haha. lalu saya pun mengiyakan, menimbang karena cukup menantang, dan honornya pastinya haha. kenapa cukup menantang?

ternyata teknologi yg dipakai di aplikasi ada yg ga familiar buat saya. PHP-nya oke --that's my hellish highest skill by the way--. basis data-nya postgre, oke juga. nah, yg terakhir ini, framework-nya postnuke. hah? saya emang tau ada framework namanya postnuke, tapi rasanya ada yg janggal dengan framework ini. ternyata benar, framework ini udah obsolete! tua! ga di-support! mati! ga dikembangin lagi, karena udah ada penerusnya, zikula namanya. waduh, saya langsung cemas. dan ternyata benar saja, ketika aplikasi tersebut saya jalankan di lingkungan yg cukup update (xampp 1.8.1, postgresql 9.2), boom! ga jalan. error dimana-mana. ketika mau import dump file sql-nya aja error. entah versi postgre berapa dulu mereka waktu buat pertama kalinya -_-.

lalu saya benerin query di dump file-nya. import basis data alhamdulillah akhirnya berhasil, dan konfigurasi di postnuke-nya juga bisa karena ga keluar lagi halaman error karena koneksi basis data salah. tapi ternyata yg keluar malah error yg lain. fungsi ga terdefinisi lah, modul ga ke-load lah -_-. akhirnya hingga detik ini saya menyatakan menyerah, gatau kalau nanti berubah pikiran. karena dalam hal ini udah masalah kekadaluarsaan teknologi, jadi kita sebagai coder ga bisa berbuat banyak, apalagi dipaksa untuk benerin dan mengerti, dan parahnya malah disalahkan. intinya mah, pakailah teknologi yg paling update ketika membuat aplikasi, dan upgrade-lah aplikasi ketika ada perubahan yg signifikan pada teknologi yg digunakan. atau lebih kasarnya mah, buat aja aplikasi yg baru, toh buat menghabiskan anggaran kan haha. yasud segitu aja racauan stres saya di liburan kali ini, semoga saya menjadi lebih sabar, lebih jago, dan dapet istri yg bisa mengerti pekerjaan saya sebagai coder --amin! eh apa ini tiba-tiba nyambungnya kesana haha--. ciao! 

wassalamu'alaykum

lampiran (yg ga mau baca teknis, silakan skip):
  • saya menemukan bahwa xampp 1.8.1 memerlukan perlakuan khusus agar dapat menggunakan basis data postgresql 9.2. berbeda dengan xampp 1.7.3 yg tinggal meng-uncomment baris di php.ini bagian 'extension=php_pgsql.dll', di xampp 1.8.1 selain men-uncomment ternyata kita juga harus meng-copy file pendukung postgresql 9.2 yg berada di '..\Program Files\PostgreSQL\9.2\bin' ke folder 'xampp\apache\bin', yaitu libiconv.dll, libintl.dll, dan libpq.dll. selamat mencoba!
  • saya lebih senang memakai phpPgAdmin daripada pgAdmin-nya si postgre, mungkin karena saya sering memakai phpMyAdmin kali ya haha. nah, ternyata postgresql 9.2 tidak kompatibel penuh dengan phpPgAdmin 5.0.4, jadi harus diperlakukan secara khusus juga haha. caranya seperti ini:
    • copy file Postgres84.php di 'phpPgAdmin\classes\database' ke folder itu sendiri dan rename menjadi Postgres92.php. intinya kita ingin membuat sebuah kelas driver baru untuk versi postgresql 9.2
    • pada file Postgres92.php itu ganti nama kelas dan fungsi konstruktor (84 ke 92), juga atribut 'major_version' (8.4 ke 9.2)
    • copy fungsi 'getTablespaces' dan 'getTablespace' dari file Postgres.php ke file Postgres92.php. intinya kita ingin meng-override dua fungsi ini dari versi sebelumnya (9.0), karena terdapat error ketika menjalankan fungsi ini untuk versi 9.2
    • pada file Postgres92.php, ganti kata 'spclocation' pada kedua fungsi yg baru di-copy tadi dengan 'pg_tablespace_location(oid) AS spclocation'
    • terakhir, tambahkan kode "case '9.2': return 'Postgres92'; break" pada file Connection.php di folder yg sama pada bagian 'Detect version and choose appropriate database driver'. intinya ini untuk regist
    • voila! sekarang phpPgAdmin udah bisa jalan di postgresql 9.2!

 

Tuesday, November 13, 2012

selintas amanah berskala

assalamu'alaykum

rasanya dah makin susah aja ini nulis, apa karena sibuk? malas? atau ga ada yg bisa ditulis? mungkin tiga-tiganya kali ya. nah, kali ini saya coba deh buat nulis lagi, karena ada beberapa hal yg kayaknya seru buat ditulis, oke kita mulai!

kehidupan saya belakangan ini hanya terdiri dari tiga hal: ngurus perusahaan, ngajar, dan tesis pastinya. walau yg terakhir sering dilupakan haha. saya merasa bahwa ternyata sangat susah untuk membuat semuanya seimbang. itu baru tiga hal loh, makanya saya ga kebayang klo ada orang yg lebih dari itu. ada usaha lain, ada anak-istri, tambah ngajar di tempat lain, dll. dan jika orang tersebut masih dapat meng-handle semuanya dengan baik, hebat! saya aja yg "baru" tiga hal itu belum optimal, karena si "lima huruf" tidak mendapat proporsi yg sama dengan dua hal yg lain haha.

nah, berkaitan dengan hal ini, berarti kan intinya kita harus menentukan skala prioritas, dan mengatur waktu pastinya. dua hal ini sangat berbeda bagi tiap orang. contohnya untuk pengaturan waktu: ada yg kerja siang ada yg malam, jam tidurnya berapa, hari kerjanya kapan, day-based atau goal-based, dll. untuk skala prioritas, ini lebih rumit lagi, yg biasanya dibagi empat: penting mendesak, penting tidak mendesak, kurang penting mendesak, dan kurang penting tidak mendesak. tapi nyatanya toh ga semuanya juga bisa dikategorikan seperti itu, karena kita sendiri yg malah biasanya bingung untuk mengkategorikan suatu hal itu berada di bagian mana haha.

selain itu, menurut saya ada hal lain lagi yg harus diperhatikan dari skala prioritas, yaitu hubungannya dengan orang lain. jadi apakah hal yg kita lakukan akan berpengaruh seperti apa kepada orang lain. saya ambil contoh dari tiga hal yg saya lakukan. ngurus perusahaan, berarti hubungannya sangat erat dengan orang lain, yaitu gimana saya bisa tetap membuat orang-orang yg bekerja betah, dan gimana mencari proyek yg hubungannya dengan perusahaan lain juga. jadi apa yg saya lakukan dapat berdampak ke orang lain. klo tesis, yg ini hubungannya lebih kepada diri sendiri, karena jika saya menyelesaikan atau tidak, toh dampaknya hanya ke saya saja. ngajar, yg ini juga hubungannya sama orang lain, karena kita berinteraksi dengan orang lain, pastinya apa yg kita lakukan akan ada dampaknya.

sekarang saya ingin cerita dua pengalaman saya tentang hal ini, yg pastinya sangat membuat saya kesal haha. seseorang dari perusahaan saya yg memegang jabatan penting, dan sedang memegang peran penting di beberapa proyek juga, tiba-tiba menghilang. kan parah tuh, karena yg dia lakukan benar-benar berdampak bagi orang lain, yaitu perusahaan, dan pastinya klien. ini adalah sebuah contoh dimana kita gagal untuk menentukan skala prioritas yg hubungannya dengan orang lain tadi. malah setelah seseorang tersebut dapat menyelesaikan masalah ini, dia lebih memilih untuk menghilang, lagi. yg berarti menurut saya, dia gagal lagi.

cerita lain, semester lalu saya ditunjuk untuk menjadi koordinator suatu mata kuliah. tugas koordinator adalah mengatur perkuliahan (kurikulum, ujian, dll) dan mengawas dosen lain yg juga mengajar mata kuliah yg saya koordinasikan. nah, dari enam dosen yg ada, satu diantaranya bermasalah. dosen ini sering ga masuk, menyuruh asisten untuk mengajar, dan banyak tidak mengikuti aturan yg saya berikan. ini juga merupakan contoh dari kegagalan untuk menentukan skala prioritas dalam hubungannya dengan orang lain. saya rasa kegagalan ini sangat berbahaya, karena akan berdampak juga di masa mendatang. kok bisa?

dua kasus diatas merupakan contoh kegagalan menentukan skala prioritas dalam hubungannya dengan orang lain, yg erat kaitannya dalam mengemban amanah. karena itulah dapat berdampak di masa mendatang, karena amanah sangat berkaitan dengan trust, yg jika tidak diemban dengan baik, kita akan susah mendapat trust itu lagi. jadi, kita jangan sampai salah dalam penentuan skala prioritas dan manajemen waktu. karena jika berhubungan dengan orang lain, skala prioritas tersebut dapat menjadi lebih tinggi dibandingkan dengan sebelumnya kita duga.

wassalamu'alaykum

Saturday, May 05, 2012

selembar kode eksplorasi

assalamu'alaykum

kembali punya ide, tapi kali ini tentang koding. sebenernya sih ga mau dan ga biasa posting yg beginian, tapi karena ga ada ide lain gapapa jugalah ya, siapa tau ada yg butuh nanti, termasuk saya juga :). jadi maaf klo bahasanya agak berantakan haha.

jadi selama sebulan terakhir saya mencoba beberapa framework PHP untuk coba dikoneksikan dengan DBMS yg "agak ga populer" di kalangan praktisi, yaitu oracle. setelah berhasil terkoneksi, saya coba performanya dengan membuat CRUD standar. lingkungan yg saya pakai yaitu windows 7, oracle 11g express (11.2.0), xampplite 1.7.3, code igniter 2.1.0, yii 1.1.10, dan zend 1.11.11 (minimal). berikut langkah-langkah dan hasil ujinya:

1. Instalasi Oracle 11g Express
yg belum punya software-nya, bisa di-download di situs oracle, besarnya sekitar 312 mb. tapi harus punya akun oracle dulu sih. daftar aja, gratis kok. lakukan instalasi seperti biasa, yg penting adalah isi password untuk akun SYSTEM (admin DB) dan jangan sampai lupa :)

2. Konfigurasi Apache HTTP Server
buka file php.ini (biasanya ada di folder "tempat_instalasi/php"), uncomment (hapus karakter ';') pada baris "extension=php_oci8.dll" (untuk ci dan zend) atau pada baris "extension=php_pdo_oci.dll" (untuk yii), untuk mengaktifkan library php oracle connection interface. save php.ini, jalankan (atau restart) apache. jika tidak terjadi error "oci missing" dsb, maka konfigurasi sukses. jika error, maka ada masalah dengan instalasi oracle atau konfigurasi apache-nya

3. Manajemen DB Oracle
kelola DB dengan memakai aplikasi bawaan instalasi oracle, sql*plus. aplikasi ini console-based, jadi kalau mau yg lebih ber-"UI" bisa menggunakan sqldeveloper, bisa di-download di situs oracle juga. oracle juga mempunyai aplikasi bawaan yg web-based yaitu application express (bisa diakses lewat browser di localhost:8080/apex). application express berguna untuk monitoring, maintenance, user management, workspacing, dan wizard untuk membuat aplikasi berbasis DB oracle. di oracle 10g, pengelolaan DB dapat dilakukan juga disini. tapi di oracle 11g tidak bisa, atau saya yg kurang eksplorasi :)

4. Code Igniter
nah sekarang sudah masuk ke tiap framework. untuk ci, ternyata mudah konfigurasinya. di file konfigurasi DB ("application/config/database.php") cukup bagian ini saja yg diganti:

$db['default']['hostname'] = ''; //kosongkan saja
$db['default']['username'] = 'SYSTEM'; //user
$db['default']['password'] = 'oracle'; //password
$db['default']['database'] = ''; //kosongkan saja
$db['default']['dbdriver'] = 'oci8'; //nama driver untuk oracle

setelah itu, buat CRUD standarnya. catatan untuk ci, nama tabel dan kolom yg diambil harus memakai huruf kapital, walau DB yg dibuat tidak memakai huruf kapital (behavior oracle). jika keluar error "$rowcount not defined" dsb, berarti tidak ada masalah dengan koneksi dan fetch datanya. ternyata ini adalah masalah (bug) pada file driver untuk koneksi PHP ke DB oracle. solusinya, ganti kata "$rowcount" menjadi "$this->num_rows" pada file "system/database/drivers/oci8/oci8_result.php". seharusnya sudah tidak error lagi :). untuk versi ci 2.1.0 ternyata terdapat lumayan banyak masalah (sumber: bugtracker ci), jadi jika tidak ingin mengambil resiko, silakan memakai ci 2.0.3, karena lebih stabil (setelah saya coba, langsung bisa dan tidak terjadi error seperti sebelumnya)

5. Yii
untuk yii, konfigurasi DB ("namafolderaplikasi/protected/config/main.php") seperti ini:

 'db'=>array(
     'connectionString' => "oci:dbname=XE;charset=UTF8",
     'username' => 'SYSTEM',
     'password' => 'oracle',
 ),

tetapi ketika mengakses gii untuk membuat kelas model dari DB dengan model generator-nya, maximum execution time of 60 seconds exceeded. jadi ganti dulu di php.ini variabel "max_execution_time" menjadi lebih besar. memang berat resource sekali oracle ini :)

6. Zend
untuk zend, agak sulit untuk meletakkan konfigurasi DB di "namafolderaplikasi/application/configs/application.ini", juga untuk generate kelas model dari DB. jadi saya langsung mencoba di controller, yaitu seperti ini:

 $db = Zend_Db::factory('oracle', array(
       'username' => 'SYSTEM',
       'password' => 'oracleplus',
       'dbname'   => '//localhost/XE'
 ));

jangan lupa, pengaksesan kolom memakai huruf kapital

7. Performa
sebenernya saya ga pakai metode atau aplikasi tes sih, cuma melihat dari sisi waktu load-time aja. dari ketiga framework itu, CI paling cepat, disusul zend, dan yg terakhir yii. perkiraan saya, mungkin karena yii memakai kelas model dan yii memakai PDO (PHP data object) untuk akses koneksinya

oke segitu dulu racauan dari saya, semoga membantu bagi yg mau coba-coba framework PHP dengan oracle

wassalamu'alaykum

Sunday, March 04, 2012

secarik kertas berita

assalamu'alaykum

kebeneran lagi dapet ide buat nulis, kali ini bertema romansa dikit biar seru --halah--. ayo kita mulai!

ga terasa udah setahun berlalu semenjak saya mulai mengajar, di samping kesibukan yg sekarang juga, masih menjadi mahasiswa dan pastinya, entrepreneur. juga, udah setahun berlalu juga ketika saya memutuskan untuk menjadi seorang lonewolf --halah--. banyak sekali hal yg udah terjadi setelah setahun berlalu ini. pengalaman baru, teman-teman baru, lingkungan baru, dan tantangan baru menjadi hal-hal yg sangat berharga, yg harus dibayar dengan ketiadaan seseorang spesial yg menemani. lagipula kenapa harus seseorang? harusnya yg spesial bagi kita tuh kan banyak, orang tua, kakak, dll. jadi ga bisa disebut someone toh? haha.

menjadi seorang lonewolf emang pasti ada baik dan buruknya. tapi kalau mau menganalisis lebih dalam, jika kita emang belum (mau) berkeluarga, maka jalan lonewolf adalah yg lebih banyak manfaatnya. paling ga kita melepas satu urusan, urusan hati. yg menurut saya, urusan ini lumayan berat loh haha. apalagi hal ini kan menyangkut masalah agama, karena berhubungan dengan nafsu, jadi lebih baik ditinggalkan jika lebih banyak mudharatnya, betul ga? yaa mungkin ada yg ga setuju, cuma pembenaran aja, dll, ya gapapa juga sih, namanya juga pendapat dan pemikiran, bebas toh? kan yg jalanin kita, jadi cuma kita yg tau rasanya kayak apa, betul-betul?

memutuskan menjadi seorang lonewolf secara sepihak, emang pastinya membawa masalah setelahnya. walaupun alasan saya bukan karena selingkuh, tapi kan tetep aja ada alasan yg ga bisa dikatakan, dicerna, ataupun diterima. bisa ditebak, saya jadi bulan-bulanan banyak orang yg masih bingung dengan alasan saya ataupun menganggap saya tega dan jahat. ya gapapa juga, toh itulah resiko yg emang harus saya terima. namanya juga keputusan yg udah diambil. jangan menyesal dan terima segala konsekuensinya. sang "pihak yg tersakiti" pun tiba-tiba jadi rajin curhat di media, yg istilahnya adalah masterpiece created by brokenheart haha.

sama halnya dengan masalah urusan hati yg sepertinya belum dapat terselesaikan --dari pihak sana--, datang masalah dari perkuliahan dan entrepreneur. dari perkuliahan, pastinya, tesis! kesibukan mengajar dan entrepreneur benar-benar melupakan saya untuk mengerjakan hal ini. padahal udah semester "terakhir". mendapat voucher beasiswa sepertinya agak mempengaruhi bertambah besarnya kemalasan saya juga haha. tapi sekarang udah mulai dikerjain kok, udah bab 2 loh! --baru bab 2? ngapain aja?--. sedangkan dari ranah entrepreneur, mundurnya CEO yg lama membuat para founder yg lain secara aklamasi menunjuk saya sebagai penerus. apa? saya? CEO? yg bener aja!

saya seorang CEO. mungkin terdengar keren, tapi ga bagi saya. jobdesc CEO yg emang bukan saya banget membuatnya menjadi tidak efektif. hasilnya, dalam kurun hampir 5 bulan kepengurusan saya, saya tidak bisa menahan kepergian dua orang anggota, karena masalah finansial dan operasional. saya belum mengurus segi administratif juga. walau dari segi pemasukan sudah jauh meningkat, tetapi tetap saja ternyata beban ini terlalu berat, atau mungkin lebih tepatnya ga pas buat saya. jadinya malah muncul ketegangan internal yg disebabkan oleh saya. dibilang asshole dan hanya memikirkan diri sudah pernah saya terima. padahal saya berusaha sebaik-baiknya untuk perusahaan. tetapi ternyata faktor "anda adalah seorang CEO" membuat kesalahan saya menjadi melambung tinggi dan terasa tidak termaafkan. sekarang, doakan saja semoga ketegangan mereda haha.

karena masalah-masalah itulah, saya menjadi lebih passionate ketika mengajar. karena disinilah, saya dapat merasakan aktivitas yg bagi saya menyenangkan dan tidak membuat saya pusing haha. ya, di tempat inilah saya masih bisa berbagi keceriaan dengan orang lain, mahasiswa lebih tepatnya. apalagi kelas yg saya ajar sekarang lumayan semangat sehingga membuat saya juga lebih bersemangat lagi. kabur dari kenyataan? ga lah. saya tetep akan mengubur urusan hati hingga waktunya tepat, mengerjakan tesis, dan mengurus perusahaan. saya ga akan lari dari semua itu. karena akademis dan wiraswasta adalah dua ranah yg ga mau saya pilih hanya salah satu haha.

yah mungkin segitu dulu aja update dan curhat dari saya, doakan saya semoga dimudahkan dan dilancarkan, dan semoga Anda yg membaca ini juga, amin! tetaplah bermimpi, berusaha, berdoa, dan bersyukur kawan! 

servare somniare, servare pug, servare orantes, esse gratum!

wassalamu'alaykum