Wednesday, December 29, 2010

Nirwana Bahari Derawan


Sebuah nirwana tropis berada di salah satu pulau wilayah Provinsi Kalimantan Timur, tepatnya Kabupaten Berau dan di Selat Sulawesi, tak jauh dari perbatasan Malaysia. Pulau Derawan menjadi sebuah destinasi wisata bahari pilihan menawan buat Anda yang menyukai pantai dengan hamparan pasir putih lembut berkilat serta air jernih. Apalagi ditambah bonus menjumpai penyu-penyu jinak yang berenang-renang riang saat kita melakukan penyelaman.

Terkadang saat duduk di ujung jembatan kayu yang mengarah ke laut, kita dapat menyaksikan penyu-penyu hijau itu hilir mudik di permukaan air yang bening. Sesekali bahkan penyu-penyu tersebut nampak berkeliaran di sekitar cottage yang berada di pesisir pulau. Saat malam tiba, beberapa penyu naik ke darat dan bertelur di sana.

Paduan warna laut dan lumut yang memukau menghasilkan gradasi warna biru dan hijau, serta hutan kecil di tengahnya, membuat pulau ini menyajikan pemandangan alam begitu indah yang sayang untuk dilewatkan begitu saja. Yang tersisa, kenangan mendalam.


Dr. Carden Wallace dari Museum Tropis Queensland, Australia pernah meneliti kekayaan laut Pulau Derawan dan menjumpai lebih dari 50 jenis Arcropora (hewan laut) dalam satu terumbu karang. Tak salah kiranya jika Pulau Derawan terkenal sebagai urutan ketiga teratas di dunia sebagai tempat tujuan menyelam bertaraf internasional

Pulau ini memang relatif kurang begitu dikenal khususnya di dalam negeri karena untuk mencapainya butuh perjuangan tersendiri yang cukup berliku. Anda mesti menuju ke Balikpapan dulu dari Jakarta, Surabaya, Yogyakarta atau Denpasar, untuk menuju pulau ini. Kurang lebih dua jam waktu tempuh penerbangan dari Jakarta ke Balikpapan.

Dari Balikpapan, Anda masih harus terbang menuju Tanjung Redeb selama satu jam dengan menaiki pesawat kecil yang dilayani oleh KAL Star, Deraya atau DAS. Selain itu, Tanjung Redeb juga bisa dicapai melalui laut, dengan menaiki kapal dari Samarinda atau Tarakan ke Tanjung Redeb dilanjutkan dengan menyewa motorboat menuju pulau Derawan dengan lama perjalanan kurang lebih 2 jam.


Banyak wisatawan manca negara yang baru turun dari pesawat di bandara Kalimarau, Tanjung Redeb langsung berangkat ke pulau Derawan dengan motorboat yang sudah ditambatkan di sebuah pelabuhan khusus.

Alternatif lain bisa juga melalui perjalanan darat dari Balikpapan ke Tanjung Batu lalu dari sana menyeberang ke Pulau Derawan. Hanya saja ini bukan pilihan yang bagus karena perjalanan penyeberangan itu sendiri memakan waktu hingga belasan jam dengan medan yang relatif tidak menyenangkan.

Meskipun begitu, tahukah Anda, justru banyak wisatawan asing yang sudah tahu lebih banyak soal keberadaan pulau eksotis ini. Sejumlah wisatawan Jepang dari Tokyo melalui travel yang ada di sana “tembak langsung” berangkat ke Singapura atau ke Sabah kemudian melanjutkan perjalanan ke Balikpapan, lalu ke Tanjung Redeb menggunakan pesawat kecil.

Mereka memanfaatkan waktu mereka selama di Derawan dengan menyelam, menyusuri keindahan bawah laut di pulau tersebut yang memang merupakan lokasi terbaik untuk olahraga selam. Apalagi dengan kondisi pulau yang terpencil dan “masih perawan” kian menambah pesona siapapun juga untuk menikmatinya selama mungkin.


Tak usah jauh-jauh, hanya dalam jarak 50 meter dari bibir pantai, kita sudah dapat menyaksikan terumbu karang yang indah dan ikan-ikan beraneka warna hilir mudik. Airnya sangat bening. Anda pun bisa menyewa snorkel seharga Rp 30 ribu per hari. Bila ingin menyelam lebih dalam, kita dapat menemukan ikan-ikan yang lebih “eksotis” seperti kerapu, ikan merah, ikan kurisi, ikan barracuda, teripang, dan kerang. Pada batu karang di kedalaman sepuluh meter, terdapat karang yang dikenal sebagai "Blue Trigger Wall" karena pada karang dengan panjang 18 meter tersebut banyak terdapat ikan trigger (red-toothed trigger fishes).

Pulau Derawan menyediakan fasilitas-fasilitas tempat penginapan (cottage), penyewaan peralatan menyelam dan juga restoran. Ada pula penginapan-penginapan bertarif murah yang dikelola oleh warga sekitar. Kisaran harganya mulai dari Rp 45 ribu sampai Rp 100 ribu/malam.

Masih belum puas?

Anda dapat meninjau juga pulau lainnya yang berada di sekitar Derawan. Misalnya: Pulau Sangalaki, Maratua, dan Pulau Kakaban yang mempunyai keunikan tersendiri. Ikan Pari Biru (Manta Rays) yang memiliki lebar mencapai 3,5 meter berpopulasi di Pulau Sangalaki. Malah bisa pula ditemui—jika cukup beruntung—ikan pari hitam dengan lebar “bentang sayap” 6 meter . Sedangkan Pulau Kakaban mempunyai keunikan yaitu berupa danau prasejarah yang ada di tengah laut, satu-satunya di Asia.

Sumber

Wednesday, December 8, 2010

Bahasa Alay

Dear Blogger,
Buat iseng aja nih mau membahas tentang bahasa alay, gosipnya lagi booming banget sih. Baik di dunia nyata maupun di dunia maya, ya seperti misalnya facebook, twitter. Sekedar melihat ke belakang, kayanya pertama-tama kita mesti tau dulu pengertian alay tuh apa. Alay pada dasarnya memiliki arti Anak LAYangan. Mungkin kata alay itu ada karena ada segerombolan anak kampung yang gayanya gitu lah, terus rambutnya merah, kaya orang keseringan main layangan (hehe). Kalo orang keseringan main layangan kan pasti rambutnya merah kena matahari, ya merahnya merah kaya gitu. Ngecatnya juga nggak ngerti tuh pake cat apa, mungkin cat air, cat minyak, cat tembok, atau jangan-jangan cat woman?

Nah... Huruf yang mereka pake nggak lazim banget. Allah aja waktu bikin Al-Quran nggak gitu-gitu amat kok hurufnya. Nah ini kaya gini nih. Ini kan namanya menentang Tuhan, ya nggak sih? Contohnya nih ya : "W 9Hy D! HuMZzZ. . . ? ? ?" Artinya : aku lagi di rumah. Sebenernya, kalo kita tulis dengan normal, it's so simple. aku di rumah. Tapi yang ini, udah simpel maunya malah jadi ribet. Udah gitu, pake tanda bacanya ngaco pula. "Gue di rumah." itu kan merupakan statement, alias kita menyatakan bahwa kita itu ada di rumah. Jadi kalimat itu bisa diselesaikan dengan tanda baca berupa titik. Tapi mereka beda, malah pake ". . . ? ? ?" So, what's that? mau ngomong, apa lo mau nanya lagi sih? Kaya gini nih yang bikin bacanya ribet, orang harusnya bisa baca beberapa detik, karena keanehan tulisannya, jadi perlu sekitar beberapa menit buat ngerti.

contoh kalimat dalam bahasa alay beserta artinya dalam bahasa indonesia (alay curhat) :

QmO dLaM iDopQhO (kamu dalam hidupku..)

q tWo……………… (aku tau……)
qMo mANk cLiD wAd cYanK m qHo…………. (kamu memang sulit buat sayang sama aku…)
tPhE qMo pLu tHwO„„„ (tapi kamu perlu tau….)

mY LuPi”………… (my love, cintaku, lupi lupi di kuping gue kedengerannya kayak permen yupi)
aLwaYs 4’U…………… (always for you, cuman buat kamu)

cO’nA cMa qMo YaNk Co WaD qHo cYuM………… (soalnya cuma kamu yang cowo buat aku senyum -oke ni si ophi jelas jelas tidak mengikuti kaidah yang benar dalam membuat struktur kalimat)
k’tHwA„„„„„„„„„„ (ketawa…)
n cNeNk…………….. (dan senang)

tHanKz b’4„„„„„„ (thanks before, terimakasih sebelumnya)
yOz aLaWAiCe d bEzT……………. (you always the best, kamu selalu yang terbaik -ALAWAICE? WTF?)
iN meYe heArD„„„„„„, (in my heart, dalam hatiku -btw MEYE? APA ITU HAHA)

tHo_tHo………….. (dadah -ini dadah doang ribet banget nulisnya)
LupHz yOu„„„„„„, (love you, sayang kamu)
bU_bU„„„„„„(bubu)

satu lagi..

I’m ReGrEeEeeEEeeEet nOw……………. (aku menyesal sekarang)

naFaZ„„„„„„„„„, (napas)
bNcHi qOh nGmBAnK………………. (benci aku ngambang)
hOeKkkKKk…………….. (sound effect muntah, HOEEEKK -tuh kan muntah HAHA)
.

nPhA jDe gnE??????????????? (mengapa jadi begini?)
i dOn’t LiKe tHaT………….. (I don’t like that, aku tidak suka itu)
qOh g Mo iDoP dLAM kmNfqAn………. (aku ga mau hidup dalam kemunafikan -WUESSS angin berhembus)

tHiZ iZ buLLsHiT!!!!!!!!!!! (this is bullshit!, ini semua omong kosong!!! -penuh amarah membara)

sHiT!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! (shit!!!!!! TA* )

SADAM WITHOUT WORD!!!!!!!!!!!!!!!!!!! (sadam without word, sadam tanpa kata -WTF tiba tiba bawa sadam? ato DIAM maksudnya? oh diam deh kayaknya)

HAifTf……………… (huff)

satu lagi deh…

TaKe mE 2 yOuR hEaRtZzz?????????????????? (take me to your heart, bawa aku ke dalam hatimu)

cXnK qMoh tO cKiDnAAAAaaaAaAaaaa……. (sayang kamu tuh sakitnya…)

m_tHa apOn YoH……………… (minta ampun ya…)
qoH tLuZ”aN uCHA bWaD tTeP qEqEUh cXnK qMo………. (aku terus terusan berusaha buat tetep kekeuh sayang kamu…)

bUD„„„„„„„„„, (but, tetapi…)
hUhuHuHfTFTf………….. .. (huft huft -ehem ophi centil deh)
cIa” adJA………………… (sia sia aja -CIA? yang di amerika?)

shIt???????????? (TA*??????)
maYbe??????????????? (maybe, mungkin?????)

ckIdDDdddDDDd„„„„„„, „„„„„„„„„„„„„ „„ (SAKIIIIIIT! -ini ngomong sakit doang kayak suara ban ngerem ehm)
pGEn qOh tO bLanK…………………….. (pengen aku tuh bilang)
U bLOkE mY hEaLtH!!!!!!!!!!!!!!!! (you bloke my health, kamu cowo kesehatanku, atau kamu merusak kesehatanku? -HAHAHAHAHA YOU BROKE MY HEART KOK JADI YOU BLOKE MY HEALTH? jauh gitu artinyaaaa! LOL)

i tHinK…………….. (aku pikir…)
it’Z DISGUSTING vOiCE……………….. (itu suara menjijkan -ga nyambung)
anDeE…………………. (andaiii…)
adJA g2 dRe wAL…………….. (aja gitu dari awal)
qTaH gAg mKeN dIEM”aN gNe tOh???!?@??@?@??@@?@? (kita ga makin diem dieman gini tho’?)


Friday, November 26, 2010

Aini dan Sakit Maagnya

berikut adalah cerita menarik yang aku dapat dari blog Aini mengenai sakit maagnya.

Cerita dari awal, deh. Aku memang sudah terkena maag sejak SMP. Parah, ya? Umumnya orang baru sakit maag waktu kuliahan, tapi aku sejak SMP. Yah, waktu itu sakitnya masih standar, paling perut perih, atau kembung, atau mencret, atau muntah. Mungkin karena pola makanku yang buruk juga. Waktu kelas 6 SD, guruku sering mengadakan pemantapan untuk menghadapi EBTANAS. Nah, akibatnya aku sering terlambat makan siang. Pola hidupku sebenarnya teratur. Sarapan jam 6, makan siang jam 12, makan malam jam 6. Pola hidup sehat banget, lah. Tapi pola itu kacau gara-gara pemantapan itu. Soalnya sering kali pemantapan diadakan dadakan. Jadi bisa aja tiba-tiba guruku bilang, “nanti kita pemantapan, ya.” Nah, kalau sudah begini aku jadi nggak makan siang, deh. Nggak bawa bekal, soalnya. Atau jajan dan beli mie. Biasanya mie itu kami remes-remes sampai hancur lalu dimakan kering-kering dengan bumbunya. Enak.

Saat duduk di SMP pola makanku juga makin kacau. Sarapan tetap pagi jam setengah enam karena sekolahku jauh di Taruna Bakti. Nah, makan siang biasanya telat. Paling cepat jam setengah tiga sore karena aku baru pulang sekolah jam setengah dua. Makan malam jam 6 atau jam 7 malam gitu. Mungkin karena pola makan waktu SMP yang buruk begitu, akhirnya saat SMA sakit maag-ku semakin parah. Pola makan waktu SMA rasanya nggak separah SMP, tapi tetap saja telat makan siang karena aku pulang dari sekolah jam satu dan sampai rumah jam dua. Kadang-kadang siang juga nggak makan nasi.

Aku pernah sakit maag sampai demam dan pusing. Mulanya disangka tifus (karena demam tadi). Setelah konsultasi via telepon ke tanteku yang dokter dan punya sakit maag juga, ternyata itu bukan tifus tapi maag. Aneh banget karena aku nggak mencret, nggak kembung, perutku juga nggak perih, bahkan nggak muntah. Pokoknya tanda-tanda maag yang sudah kukenal tidak ada yang muncul. Yang aku rasakan hanya demam, pusing, tak nafsu makan, dan ulu hatiku terasa dingin. Tanteku menyuruh aku menekan ulu hatiku. Sakit. “Nah, itu tanda sakit maag,” begitu katanya. Akhirnya tanteku memberikan resep:

  1. Makan makanan yang lunak seperti bubur.
  2. Makan marie setiap jam.
  3. Minum obat maag lima belas menit sebelum makan besar, di antara dua waktu makan, dan sebelum tidur.
  4. Jangan makan vitamin C (vitamin C = asam askorbat. Asam!!)
  5. Jangan makan jeruk, jambu biji, mangga, nangka, pisang ambon.
  6. Jangan makan makanan yang berbumbu merangsang seperti cabe, sambel, merica, asam.
  7. Jangan minum kopi, jangan minum soda, jangan minum teh. Kalau mau minum teh, hanya boleh yang encer.

Setelah menuruti resepnya, sakit maag-ku pun reda. Bisa makan lagi dengan bebas.

Waktu kuliah S1 rasanya jam makanku sudah membaik, tapi mungkin masih belum teratur banget. Apalagi aku kuliah jurusan Biologi yang setiap harinya sibuk dengan kuliah dan praktikum. Maag-ku semakin parah. Sering hilang timbul gitu. Kadang sakit sampai perih, tapi nanti sembuh. Yah, pokoknya begitu maag aku langsung menerapkan resep dari tanteku itu. Bekal marie ke mana-mana.

Tapi tahun lalu (akhir 2007 sampai 2008 ) maag-ku kumat dan nggak sembuh-sembuh. Akhir 2007 atau awal 2008 sakit maag-ku kumat. Perutku perih dan kembung. Aku menerapkan resep yang diajarkan tanteku itu. Tetap saja kembung dan perih. Kayanya obat maag yang kupunya sudah tak mempan lagi. Lalu temanku, Celine, mengajarkan resep jamu untuk orang maag. Resepnya seperti ini : Pagi hari saat perut masih kosong, sebelum sarapan, kunyah kunyit sejempol dengan bawang putih. Aku coba. Toh gimana juga kunyit dan bawang putih itu antibiotik alami. Tapi aku nggak mau ngunyah. Baru mikir mau ngunyah kunyit sejempol dan bawang putih rasanya sudah iyaa~akh banget. Akhirnya kunyit dan bawang putih itu diparut lalu diambil airnya. Mentah-mentah diminum. Aku langsung muntah. Nggak kuat sama baunya. Akhirnya aku bikin jamu kunyit saja. Kunyit bubuk dilarutkan dengan air panas, dikasi madu atau gula supaya manis, airnya diminum. Tetap nggak sembuh. Memang minumnya juga baru beberapa hari. Akhirnya aku tak tahan juga. Aku pergi ke dokter minta resep obat maag selain yang biasa aku minum. Setelah menghabiskan obat itu, maag-ku tetap tak kunjung sembuh. Duh! Parah banget, nih!

Akhirnya aku memutuskan untuk akupunktur karena teringat temanku yang maag dan diakupunktur lalu sembuh. Aku diakupunktur oleh dokter yang kebetulan teman kami berdua waktu S2 di Biologi. Dia dokter (asli dokter!) yang juga mempelajari ilmu akupunktur. Jarang-jarang ada, deh. Biasanya kan dokter nggak mau belajar ilmu kedokteran timur seperti akupunktur (karena berbeda dengan ilmu kedokteran barat). Ahli akupunktur juga biasanya nggak belajar ilmu kedokteran barat.

Oleh dokter itu aku dikasi tau tentang maag. Jangan dipandang enteng karena maag dapat menyebabkan kematian jika diremehkan. Maag-ku ini sudah aku anggap parah karena berbulan-bulan tak sembuh juga. Tapi ternyata masih ada lagi sakit maag yang lebih parah. Salah satunya seperti yang dialami oleh pasien dokterku ini. Saking parahnya sampai harus makan segala macam obat yang harganya mahal-mahal. Mulai dari pelapis lambung, enzim untuk membantu pencernaan, dan entah apalagi. Aku tak terbayang, deh. Satu butirnya harganya saja sudah aduhai. Untung si pasien itu punya pekerjaan yang bayarannya mantap jadi dia nggak terlalu masalah dengan harga obat yang ia makan. Tapi tetap saja, kan? Rugi duit. Mana obat itu harus dikonsumsi tiga kali sehari dan tak hanya satu macam. Euh…tak terbayang, deh kalau aku yang mengalami itu. Bikin kanker alias kantong kering.

Selain itu, maag juga bisa bikin lambung bolong. Nah, kalau udah kaya gini artinya udah parah banget dan bisa bikin orang meninggal. Jadi inget pembantuku dulu. Ibuku yang cerita karena dia yang ingat. Si pembantu ini sering mual dan muntah-muntah. Katanya sih sakit maag. Tapi walaupun ibuku sudah sering menyuruhnya ke dokter dan mengingatkan dia supaya nggak makan sambel, dia bandel. Tetep rajin makan sambel. Yang super pedas pula. Emang doyanannya, sih. Waktu itu aku masih kecil, paling baru berapa tahun gitu. Yang aku ingat dengan jelas adalah waktu tiba-tiba ada banyak laki-laki datang ke rumah dan masuk ke kamar pembantuku itu. Sudah itu mereka keluar sambil menandu pembantuku ini ke rumah sakit. Pembantuku ini sudah muntah-muntah darah gitu. Aku ingat seprainya yang ternoda darah. Akhirnya dia meninggal dunia karena maag. Makanya jangan anggap enteng sakit maag. Nyawa taruhannya! Ini termasuk penyakit yang killing you slowly.

Selain menusuk jarum, dokterku ini juga memberikan wejangan-wejangan. Yah, untuk sembuh pasien dan dokter harus bekerja sama. Walaupun dokter sudah kita beri kepercayaan untuk membantu menyembuhkan kita, pasien kan tetap bertanggung jawab pada dirinya sendiri (selama dia masih bisa bertanggung jawab pada dirinya tentunya). Maka itu pasien harus mematuhi rambu-rambu yang diberikan dokter. Dokterku memberikan rambu-rambu sakit maag yang harus aku taati. Ini dia:

  1. Makan NASI tiga kali sehari, dengan jam dan porsi yang teratur. Dokter menyarankan untuk sarapan jam 7, makan siang jam 1, dan makan malam jam 5. Tapi aku biasa sarapan jam 6, makan siang jam 12, dan makan malam jam 6 jadi jam inilah yang aku pakai. Jumlah teratur maksudnya porsinya tetap, cukup kenyang, nggak kurang dan nggak berlebihan sampai kekenyangan. Boleh sarapan dengan Havermouth. Nggak boleh nasi goreng karena berminyak dan berbumbu (lihat nomor 7 dan 8). Sarapan dengan roti jelas tak diperbolehkan (lihat nomor 5 dan 6).
  2. Makanan harus dikunyah dengan baik. 32 kali. Tujuannya supaya makanan yang masuk ke lambung sudah cukup halus. Kalau makan cuma dikunyah sekali dua kali dan langsung telan, kan makanan yang masuk ke lambung masih kasar-kasar terus nanti kena ke luka di lambung. Sakit! (Bayangkan sariawanlah. Sakit kalau tersenggol, kan?). Ini kebiasaan paling berat. Waktu membiasakan diri mengunyah 32 kali, selain waktu makanku jadi lama, rahangku juga pegal-pegal. Tak terbiasa, sih. Soalnya biasanya aku makan dengan cepat (ngunyahnya nggak benar). Ini juga resep untuk yang diet. Tujuannya supaya kita sempat merasakan rasa kenyang. Kalau makan cepat-cepat kan rasa kenyang itu baru terasa kalau makanan yang masuk sudah terlalu banyak atau lima menit setelah berhenti makan.
  3. Minum harus sopan santun. Maksudnya jangan ditenggak habis satu gelas. Gleg-gleg-gleg gitu. Minum seteguk, diem, minum seteguk lagi, diem. Ini supaya lambung nggak melar. Resep ini terutama ditekankan untuk yang ingin melangsingkan badan (sering denger kalau dokter sedang memberi wejangan pada pasien yang menurunkan berat badan).
  4. Tak perlu makan marie tiap jam. Agak aneh memang. Ternyata alasannya adalah begini. Aku kan sedang mengembalikan fungsi tubuh agar normal kembali. Inti akupunktur kan mengembalikan fungsi-fungsi organ tubuh agar normal kembali. Saat perawatan itu aku kan sedang mengajarkan dan membiasakan tubuhku agar normal kembali dan hanya memproduksi asam lambung tiga kali sehari (saat makan besar). Nah, kalau aku membiasakan untuk makan marie tiap jam, nanti lambungku akan terbiasa untuk memproduksi asam lambung terus-terusan. Nanti lambungku ketergantungan makanan. Kalau nggak dikasi makan tiap jam, nanti bisa sakit maag lagi karena dinding lambung terkikis dan luka lagi.
  5. Nggak boleh makan makanan yang dibuat dari tepung seperti roti, mie, dan lain-lain. Psst! Sebenarnya tepung inilah turut andil dalam menggemukkan tubuh. Pasien yang diakupunktur untuk melangsingkan badan juga dilarang makan tepung-tepungan oleh dokterku ini. Pasien lain yang nggak melangsingkan badan juga dilarang makan tepung-tepungan dan akibatnya berat badannya langsung turun.
  6. Nggak boleh makan makanan yang beragi dan mengembang jika dimasak, seperti kue bolu, cake, roti, mie.
  7. Kurangi lemak. Terutama nggak boleh makan gorengan. Why? Karena lemak sulit dicerna. Kasian, kan lambung yang sudah luka-luka disuruh kerja keras.
  8. Jangan makan makanan yang berbumbu merangsang seperti merica, cabai, asam karena bumbu ini merangsang keluarnya asam lambung. Termasuk juga saus tomat (asam). Sambal botol dan mustard juga jelas tak boleh.
  9. Jangan minum kopi maupun teh karena mengandung kafein yang bisa merangsang pengeluaran asam lambung. Kalaupun mau minum teh harus yang super encer. Itu juga baru boleh minum kalau sakit maag-nya sudah mendingan.
  10. Jangan minum soda. Jelas banget. Selain bikin gas di perut, soda juga mengiritasi lambung.
  11. Jangan makan sayur keluarga kubis-kubisan seperti brokoli, kembang kol, daun kol, selada karena keluarga kubis-kubisan ini banyak menghasilkan gas. Jadi tujuannya supaya perut nggak kembung.
  12. Nggak boleh terlalu banyak makan buncis karena buncis juga menghasilkan gas walaupun tidak sebanyak keluarga kubis-kubisan tadi. Begitu pula dengan kacang tanah karena menyebabkan gas juga.
  13. Jangan makan buah-buah yang asam dan mengiritasi seperti jeruk, jambu (terutama jambu batu karena kandungan vitamin C-nya tinggi, ingat vitamin C = asam askorbat. Asam!), tomat (buat atau sayur?), mangga, entah apa lagi. Hiks…. Padahal aku suka banget mangga :(
  14. Jangan makan nangka. Jelas banget. Nangka bikin perut perih dan kembung. Nangka ini agak menipu. Rasanya manis, tapi sebenarnya menyakiti lambung.
  15. Buah yang paling aman untuk dimakan adalah pepaya dan mungkin juga melon (tak tahu pasti karena aku tak suka melon). Kandungan serat pepaya kan bagus, cocok untuk aku yang kurang suka makan sayur. Gara-gara sakit maag ini aku jadi sering makan pepaya padahal aku sebenarnya nggak menggemari pepaya. Habis mau gimana lagi, melon aku nggak suka, buah-buahan yang kusuka seperti mangga nggak boleh. Nah, daripada kekurangan vitamin dan kekurangan serat akhirnya makan pepaya, deh.
  16. Susu dan pisang tidak dilarang. Walaupun begitu, sebenarnya ini tergantung individunya juga. Ada orang yang punya sakit maag tapi bisa minum susu atau makan pisang tapi ada juga orang yang nggak bisa begitu. Aku sih biasanya malah jadi mules kalau minum susu. Aku juga kembung kalau makan pisang ambon. Pisang lain sih katanya aman tapi karena aku nggak mau coba-coba akhirnya semua pisang kujauhi.
  17. Waktu aku tanya apakah boleh minum jamu kunyit itu, ternyata kata dokter tak apa-apa. Memang itu obat maag juga. Jadi buat kamu yang lebih suka minum jamu, silahkan saja. Sudah banyak juga kok yang sembuh dengan minum jamu kunyit itu (menurut cerita dari berbagai orang). Tentunya harus rutin tiap hari, ya. Aku sih kurang telaten bikinnya, nggak terlalu suka pula. Makanya lebih baik akupunktur. Hehehe.

Itu soal makanan, selanjutnya soal pola hidup dan stress. Baru inget setelah ada komentar dari Mas Oscar (diasumsikan sebagai Pria)

  1. Dilarang bergadang. Tidur paling lama jam 11.00 malem. Alasan : Agar badan tidak stress. Stress itu ngaruh banget ke maag. Yang maag pasti taulah. Begitu stress, langsung perut perih. Selain itu, untuk yang diet…kalau kamu bergadang, pastinya kamu bakal laper lagi, kan? Pasti kamu makan lagi, tuh. Nggak turun-turun, dong berat badannya? Terus…begitu tubuh mendapatkan sinyal stress, misalnya karena terlambat tidur, bergadang, kecapaian, lupa makan, dan sebagainya, tubuh dengan otomatis akan menimbun makanan. Nah, lho!
  2. Kurangi stress. Stress fisik (terlalu lelah, terlalu banyak kerja) ataupun stress mental (terlalu banyak pikiran, marah-marah). Dekatkan diri pada Tuhan (rajin ibadah, baca kitab suci), atau pun cara-cara relaksasi lain seperti yoga, memanjakan tubuh (biasa cewe, nih), nyanyi, nonton, apapun. Aku biasanya baca, nonton, atau main game. Tapi kalau stressnya lumayan, bisa juga nyanyi teriak-teriak. Biarin kaya orang gila! Daripada dipendem terus jadi penyakit? Ya, nggak? Asal jangan ngamuk-ngamuk ke semua orang aja, termasuk yang nggak punya masalah ama kita. Itu mah bukan nyembuhin, malah nambahin masalah. Jangan juga ngerokok dan mabuk-mabukan! Itu cuma bikin seneng sesaat, buntutnya panjang. Malah ngerusak badan, soalnya. Jadi tulisan ini jangan dijadikan alasan untuk melakukan hal-hal yang tidak baik, ya! Ada resep dari Dr. Oz (yang suka liat Oprah pasti tau) : Resep pertama : basahi bibir, terus dimonyongin kaya orang mau bersiul, terus hisap (jadi bukan dihembus). Nah, ntar kan terasa tuh ada hawa dingin di bibir. Itu yang mengirimkan sinyal rileks ke otak. Begitu katanya. Resep satu lagi : Gigit kepalan tangan anda (jangan keras2, yang penting mulut terbuka), atau gigit gabus. Fungsinya untuk merilekskan otot rahang dan mengirim sinyal2 ke otak agar rileks.
  3. Olah raga. Tapi jangan olah raga saat tubuh sudah kelelahan, ya. Kasian :P Ntar malah stress pula. Kecapaian.

Intinya : Sayangi diri Anda! Cintai diri Anda! Perhatikan diri Anda! Jalankan pola hidup sehat!

Ada satu lagi resep untuk sakit maag. Ini resep dari temanku, Alia, mungkin berguna. Makan kuning telur ayam kampung mentah pagi hari saat perut masih kosong. Resep yang ini belum kucoba, sih. Heu…. Mentah, gitu. Jadi aku nggak tau kemanjurannya bagaimana. Tapi yang jelas sakit maag Alia langsung sembuh setelah sepuluh hari mengkonsumsi kuning telur ayam kampung mentah.

Aku menjalani terapi akupunktur selama tiga bulanan. Lumayan lama juga. Dikasi peer pula. Aku diharuskan mencatat apa-apa saja yang kumakan dalam sehari. Setiap habis makan apa, langsung catat. Tiap yang dirasakan perut juga harus dicatat. Kapan aku merasa kembung, kapan merasa mual, kapan merasa perih. Untuk kontrol. Setelah lebih baik, mulailah aku agak-agak bandel. Coba makan pisang goreng tiga biji, perutku agak kembung. Karena ada catatannya dokter bisa bilang, “Wah! Ini pisang gorengnya terlalu banyak! Makanan yang lain bagus, tapi pisang gorengnya itu kebanyakan!” Coba makan es krim, tak apa-apa. Laporan ke dokter, “Dok, aku dah bisa makan es krim dan perutku nggak kenapa-kenapa.” Yah, begitulah. Jadi belajar lagi untuk mendengarkan tubuh sendiri.

Setelah tiga bulan di akupunktur, akhirnya aku bisa dilepas. Nggak perlu akupunktur lagi. Tapi, ya itu. Tetap harus jaga makan. Selalu makan nasi tiga kali sehari. Aku kapok makan mie atau roti sebagai pengganti nasi. Selain itu, karena selama tiga bulan itu aku selalu memperhatikan makanan yang akan kumakan, sampai sekarang kebiasaan itu terus terbawa. Kalau liat menu di rumah makan, otomatis otakku berpikir. Bahannya apa? Berbumbu merangsang atau nggak? Tepung? Gitu, deh. Sudah jadi bagian dari gaya hidup, sih.

Sekarang sih sudah berani nyemil-nyemil biskuit, makan pizza sepotong, tapi tetap nggak berani banyak-banyak. Kapok banget! Sakit maag tuh nggak enak. Banyak makanan enak yang tak bisa kumakan. Oh, minggu lalu akhirnya aku makan burger! Ah, senang! Setelah sekian lama nggak makan burger :) Perutku aman damai saja. Syukurlah.

Efek samping dari makan nasi tiga kali sehari : berat badanku turun empat kilo. Kemaren sudah kegemukan. Setelah akupunktur dan makan nasi tiga kali sehari berat badanku kembali ideal. Hehehe. Yakin karena nasi karena sampai sekarang berat badanku nggak naik lagi. Yah, paling naik sekilo tapi setelah itu turun lagi. Memang dokternya bilang begitu, “Nasi tuh yang paling bagus. Coba aja kamu makan nasi tiga kali sehari, jangan makan tepung-tepungan (mie, roti, kue) tapinya, nanti berat badan kamu bakal ideal dengan sendirinya. Kalau emang kegemukan, nanti bakal turun sendiri lalu berhenti di titik ideal. Tentunya makan nasinya jangan berlebihan, ya! Seporsi biasa kamu aja.”


sumber


Monday, November 22, 2010

Testing form pada google

mau coba testing form yang dibuat dari google

Friday, October 29, 2010

Tips Melaporkan Error

Sebagai programmer, setiap hari kita menghadapi software yang error. Bentuknya macam-macam, misalnya:

  • Aplikasi yang kita buat error
  • Peserta milis menggunakan framework X dan mengalami masalah
  • Rekan sesama programmer membutuhkan bantuan
  • dsb

Pada sebagian besar kasus, kita dengan senang hati akan membantu. Sudah menjadi sifat programmer untuk memiliki rasa keingintahuan yang tinggi dan senang terhadap teka-teki. Aplikasi yang error adalah teka-teki yang menarik.

Sayangnya, seringkali informasi error yang kita terima tidak lengkap sehingga butuh usaha tambahan untuk mengorek kejadian yang sebenarnya. Inilah yang membuat programmer seringkali keburu malas, sehingga akhirnya kegiatan solving error menjadi tidak fun lagi.

Berikut adalah beberapa tips untuk membuat laporan error yang baik, supaya programmer yang akan memecahkan masalah tersebut bisa segera bekerja dengan efektif.

Prinsip utama dalam melaporkan error adalah sebagai berikut

Programmer bukan Mama Loren Baby Djenar atau Ki Joko Bodo. Dia tidak bisa membaca pikiran ataupun melakukan telepati. Jadi jangan menganggap programmer melihat apa yang dilihat user. User harus menjelaskan apa yang dia lihat.

Jelaskan lokasinya

Seringkali si informan error berkata seperti ini,

Help, aplikasinya error nih

Nah, yang menerima informasi jelas bingung. Aplikasi yang mana?
Kalo client yang jadi informan, bisa jadi kita punya banyak project di sana.
Walaupun projectnya cuma satu, tapi aplikasi kan bisa terdiri dari banyak modul, screen, fitur, dsb.

Jadi, jelaskan di mana errornya. Di aplikasi apa, modul apa, screen yang mana. Terdengar simple, tapi nyatanya ada saja yang melewatkan hal pertama ini.

Mari kita lanjutkan.

Tujuan

Kita menggunakan aplikasi tentu ingin mencapai tujuan tertentu. Ingin menyimpan data customer, menampilkan laporan bulanan, dan lain sebagainya. Nah, tujuan ini harus disampaikan ke programmer. Soalnya sering terjadi percakapan seperti ini :

User (U) : Pak, fitur daftar produknya error.
Programmer (P) : Harusnya bisa kok, sudah kami test di sini tidak ada masalah.
U : Tapi saya coba tidak bisa
P : Coba jelaskan langkahnya
U : Saya buka menu daftar produk, muncul tabel berisi produk.
Kemudian saya klik dua kali nama produk dalam tabel, saya ganti isinya.
Setelah itu, saya tutup screennya.
Pas dibuka lagi, datanya tetap sama.
P : Lho, memangnya Ibu mau melakukan apa?
U : Saya mau edit harga produknya
P : Walah, bukan dari situ Bu. Gunakan menu edit produk

Nah, seringkali tujuan user tidak sesuai dengan fitur aplikasi. Jadi, beri tahukan tujuan user pada programmer.

Langkah Reproduksi

Begitu programmer akan mencoba memperbaiki error, dia akan mencoba mereproduksi error tersebut di komputernya sendiri. Nah di sinilah biasanya terjadi percakapan seperti ini :

U : Ini aplikasi error, tidak bisa simpan data
P : Oh, di sini saya coba bisa kok
U : Di sini tidak bisa
P : Di sini bisa
U : Tidak bisa
P : Bisa
dst

Akan lebih produktif kalau percakapannya seperti ini :
U : Ini aplikasi error, tidak bisa simpan data
P : Apa yang dilakukan?

U : Seperti ini :
1. Buka screen Edit Produk
2. Pilih kategori Komputer dan Elektronik
3. Isi kode produk
4. Isi nama produk
5. Harga dikosongkan
6. Tekan tombol simpan

Nah, dengan percakapan seperti ini, programmer bisa mengulangi apa yang dilakukan user.
Apakah langkah repro saja sudah cukup? Belum, masih ada 1 hal penting lainnya.

Harapan dan Kenyataan

Mari kita lanjutkan percakapan di atas.

U : Setelah ditekan tombol simpan, datanya tidak tersimpan.
P : Di tempat saya masuk kok ke database.
U : Di sini, setelah ditekan simpan tidak terjadi apa-apa
P : Maksudnya?
U : Ya harusnya kan ada pesan, “Data sudah tersimpan”
Ini tidak ada.

Nah, di sini harapan user adalah ada notifikasi dari aplikasi bahwa data sudah tersimpan. Tapi kenyataannya tidak ada notifikasi apa-apa dari aplikasi. User mengira ini error,
padahal programmer memang tidak menyediakan notifikasi tersebut, walaupun datanya sudah masuk ke database. Dari sini, programmer bisa menambahkan notifikasi sesuai harapan user.

Jadi, harapan dan kenyataan harus disampaikan pada programmer.

Environment

Ini maksudnya adalah kondisi di mana aplikasi dijalankan, seperti

  • Sistem Operasi
  • Versi Aplikasi
  • Aplikasi lain yang terinstal

Sering terjadi aplikasi error hanya di Linux saja, atau di Mac saja, tapi berjalan lancar di Windows. Atau sebaliknya. Dengan memberi informasi ini, programmer bisa lebih terarah dalam mencari kesalahan dalam kode program.

Demikian juga dengan versi aplikasi dan aplikasi lain yang terinstal. Seringkali sudah diketahui bahwa aplikasi kita tidak kompatibel dengan versi library tertentu, versi OS tertentu, atau dengan aplikasi lain. Misalnya seperti ini :

Tanya (T) : Saya instal Tomcat tapi error
Jawab (J) : Errornya gimana?
T : Katanya port 8080 tidak bisa digunakan.
J : Apakah ada webserver lain yang terinstal?
T : Web server sih tidak ada, saya cuma install database Oracle saja.
J : Oh, Oracle itu membawa web server sendiri, jalannya juga di 8080.
Coba matikan Oraclenya, atau ganti port Tomcat ke angka lain.

Demikian beberapa tips melaporkan error.

Berikut ringkasannya :

  1. Jelaskan Lokasinya
  2. Sebutkan Tujuan
  3. Langkah Reproduksi
  4. Harapan dan Kenyataan
  5. Environment
Dengan mengikuti tips ini berarti Anda sudah membantu kami untuk membantu Anda.

Sumber : Blog Endy

Prototyping

Pada waktu kita melakukan requirement gathering, harapan kita adalah agar requirement yang kita dapatkan di fase requirement tidak jauh bergeser dari requirement final setelah project closing. Kalau pergeserannya jauh, akan mengakibatkan waktu dan biaya pengerjaan project menjadi molor dan akibatnya kedua belah pihak akan dirugikan.

Pergeseran requirement ini bisa disebabkan beberapa hal, misalnya :

  1. business analyst (BA) kurang pengalaman, sehingga tidak bisa mengidentifikasi varian-varian skenario. Akibatnya terjadi banyak ‘hidden requirement’
  2. business analyst kurang teliti, sehingga salah memahami penjelasan user
  3. Perubahan bisnis client, sehingga requirementnya juga berubah
  4. perbedaan persepsi antara user dan analyst atau programmer

Untuk masalah 1 dan 2, solusinya adalah dengan mengganti BA dengan orang yang lebih berpengalaman. Newbie sebaiknya tidak menjadi BA. Bolehlah magang BA, tapi jangan diandalkan untuk jadi BA utama.

Poin 3 juga biasanya tidak masalah. Client biasanya cukup tahu diri kalau terjadi hal ini, sehingga tidak keberatan dimintai charge tambahan.

Nah untuk poin 4, biasanya sulit dideteksi sampai aplikasi kita deliver. Sering terjadi, usernya OK OK saja pada fase requirement, dan tiba-tiba pada waktu kita deliver aplikasinya, dia langsung bingung karena aplikasinya ‘aneh’.

Agar poin 4 ini tidak terjadi, sebaiknya kita melakukan prototyping. Bagaimana cara melakukan prototyping yang baik?

Prototyping itu idealnya :

1. Murah meriah dan cepat
Dalam 1 hari kita harus bisa menggambar minimal 10 screen.
Begitu usernya selesai ngomong/gambar di papan tulis, screennya juga harus langsung jadi.
Jangan sampai effort untuk prototyping lebih besar dari effort untuk coding.

2. Gampang diubah
Tujuan prototype adalah supaya user bisa merasakan seperti apa aplikasinya nanti.
Kalau dirasakan kurang sesuai, tentunya dia ingin mengubahnya.
Nah, jangan sampai minta geser tombol aja harus nunggu 30 menit.

3. Mirip aslinya.
Kalo ini lebih ke sisi development.
Biar efisien, begitu prototype sign off, kita bisa mulai paralel coding dan bikin user manual.
Kalo prototypenya udah bener2 mirip, bisa langsung discreenshot dan dipasang di user manual.
Jadi begitu aplikasi jadi, user manual juga selesai.

4. Terlihat belum selesai
Ini agak kontradiktif dengan tips #3. Kalau prototype kita sangat mirip aplikasi betulan, client akan memiliki persepsi bahwa aplikasinya sudah hampir selesai. Padahal belum ada coding sama sekali. Oleh karena itu, sangat penting kita tekankan ke client bahwa masih ada jangka waktu yang lama sebelum aplikasi betulannya selesai.

Untuk project web, biasanya kita langsung coding di HTML, tentunya tanpa koneksi ke back end atau database. Sebagai nilai tambah lain, setelah prototype di-approve client, programmer bisa langsung meneruskan coding.

Demikianlah sedikit tips dan trik. Semoga bermanfaat.

sumber : Blog Endy


Sunday, October 17, 2010

"Rahasia" Alessandro Del Piero

"Selalu menetapkan tujuan untuk diri sendiri, bekerja sembari menikmati pekerjaan itu, bekerja dengan perasaan antusias dan gairah, dan total pada profesi ini"

"
Always set goals for yourself, working while enjoying the job, working with feelings of enthusiasm and passion, and the total in this profession"

Wednesday, September 29, 2010

Mendebug Database Production

Suatu aplikasi, walaupun sudah go-live di environment production, tetap bisa saja mengalami error dan bug. Bug ini seringkali tidak ditemukan di environment development karena berbagai hal, misalnya variasi data, jumlah data, dan sebagainya.

Langkah pertama ketika kita mengetahui ada bug tentunya adalah melokalisir masalah. Pada kondisi mana saja bug tersebut muncul. Setelah itu, kita dapat memfokuskan pencarian masalah di lokasi tersebut. Ini lebih efisien daripada kita harus menelusuri keseluruhan sistem.

Misalnya kita sudah berhasil melokalisir masalah, yaitu transaksi di bulan tertentu. Langkah selanjutnya adalah memindahkan data production di lokasi tersebut ke environment development. Ini kita lakukan supaya kita bebas bereksperimen dengan data tersebut tanpa khawatir membahayakan data production.

Masalahnya, tools backup database yang tersedia biasanya tidak bisa digunakan untuk mengambil sebagian data. Walaupun bisa (mysqldump menyediakan opsi where untuk membatasi record yang diambil), biasanya terbatas hanya di satu tabel saja. Sedangkan untuk bisa merestore-nya di development, kita butuh semua relasinya.

Sebagai contoh, coba lihat skema berikut.

Untuk mengambil data payment, tentunya kita juga harus menarik data lain yang berelasi dengannya, yaitu di tabel grup loket, loket, payment value, payment info dan fee loket. Ini sangat sulit dilakukan, apalagi kalau data payment tersebut jumlahnya ratusan ribu record.

Untunglah ada tools untuk mengatasi masalah ini, namanya Jailer. Dengan menggunakan Jailer, kita dapat menentukan tabel mana yang akan diambil datanya (payment), kriteria pengambilan (bulan tertentu saja), dan relasi mana saja yang ingin kita ambil. Hasilnya adalah satu set data lengkap dengan dependensinya yang bisa kita restore di development.

Persiapan Jailer

Pertama, tentunya kita unduh dulu Jailer di websitenya. Jangan lupa teriakkan, “Hidup Open Source !!!”, karena aplikasi ini tersedia secara gratis berkat gerakan open source.

Setelah berhasil diunduh, extract ke folder tertentu. Jailer tidak menyertakan driver untuk koneksi ke database, sehingga kita harus sediakan sendiri. Karena saya menggunakan MySQL, saya masukkan file mysql-connector.jar ke dalam folder lib. Kita mengikutkan driver database ke folder Jailer karena nantinya folder ini akan kita pack dan upload ke server production.

Jailer ini akan kita jalankan di mesin development yang sudah terisi skema database. Kita akan coba dulu ambil data di development, kalau sudah sukses baru kita jalankan di production.

Ada dua script untuk menjalankan jailer, yaitu jailerGUI dan jailer. jailerGUI digunakan untuk mendesain pengambilan data, sedangkan jailer adalah antarmuka command line untuk menjalankan pengambilan data. Karena kita ingin mendesain proses pengambilannya, kita gunakan jailerGUI.

  1. $ sh jailerGUI.sh

Berikut adalah tampilan awal Jailer.



Jailer memberitahu kita bahwa belum ada data model yang bisa dikerjakan, dan menyarankan kita untuk menganalisa database. Klik Analyze Database. Selanjutnya Jailer akan meminta informasi cara koneksi ke database.


Isikan informasi koneksi database dan driver yang digunakan. Driver yang kita gunakan adalah yang tadi sudah kita copy ke folder lib.


Klik OK untuk menganalisa database.


Setelah itu, Jailer akan menghubungi database untuk mengambil informasi. Lognya akan ditampilkan di log output. Jailer akan memberi tahu kita tabel-tabel yang tidak ada primary keynya. Jailer tidak dapat memproses tabel tanpa primary key.


Klik tabel yang berwarna merah, dan definisikan primary keynya. Primary key yang kita definisikan di sini hanya digunakan Jailer, sehingga tidak perlu khawatir skema aslinya akan berubah.


Setelah itu, klik OK. Jailer akan menampilkan screen Extraction Model Editor. Pilih tabel payment, di dropdown subject, karena inilah tabel yang akan kita gunakan sebagai pusat extraction.


Jailer mendeteksi relasi antar tabel berdasarkan constraint foreign key yang kita pasang di database. Kadangkala ada tabel-tabel yang berelasi, namun tidak ada constraintnya. Entah karena malas mendefinisikan, atau memang sengaja tidak dikaitkan. Kita bisa mendaftarkan relasi tanpa constraint ini dengan membuka lagi Data Model Editor, kemudian klik Add di kotak Association sebelah kanan.

Relasi non Foreign Key

Setelah diklik OK, maka skema relasi di Extraction Model Editor akan berubah sesuai relasi yang ditambahkan. Sama dengan definisi primary key di atas, relasi ini hanya disimpan oleh Jailer dan tidak diaplikasikan ke skema database.


Relasi Payment - Loket

Kita perlu mendefinisikan batasan record payment yang akan diambil, yaitu yang terjadi di bulan Juni 2010. Dalam bentuk SQL, berikut adalah query yang digunakan

  1. select * from payment where date_format(paid_date, '%Y-%m') = '2010-06'

Kita ambil expression setelah where dan pasang di textfield where dalam Extraction Model Editor.



Restriction

Simpan dulu extraction modelnya.



Save Extraction

Beri nama yang representatif, misalnya payment-201006. Jailer akan menyimpan extraction model ini dalam format csv. Kalau sudah memahami formatnya, kita bisa membuatnya dengan text editor tanpa GUI (kalau mau).

Setelah tersimpan, kita bisa klik Export Data sehingga memunculkan dialog berikut.



Export Data

Di screen tersebut kita bisa mengatur konfigurasi pengambilan data. Bagi saya, nilai defaultnya sudah memadai sehingga tidak ada yang diubah.

Di box paling bawah ada command line yang bisa kita copy-paste untuk dijalankan tanpa GUI. Copy saja isinya ke text file untuk digunakan nanti.

Yang harus kita isi di screen ini adalah textfield Into. Ini adalah nama file yang akan menampung script SQL berisi data yang diinginkan. Isi saja dengan nama payment-201006.sql.



Export Into File

Setelah itu, klik Export Data. Jailer akan segera bekerja dan menampilkan hasilnya dalam bentuk tree.


Hasil Export

Di situ kita bisa lihat berapa row yang akan diambil dari masing-masing tabel.
Seperti kita lihat, cukup signifikan, yaitu 2000an record. Ini disebabkan karena jailer mengambil record secara rekursif tanpa ada batasan.

Setelah dianalisa, kita hanya ingin mengambil tabel-tabel yang berkaitan langsung, yaitu payment, payment_info, payment_value, dan fee_loket. Sedangkan tabel sisanya dapat diabaikan karena bersifat pelengkap atau master data yang sudah ada di database development.

Dengan melihat ke tree-nya, kita bisa memutus relasi fee_loket ke loket, karena dari situlah semua data lain akan ikut terbawa.

Tutup screennya, dan kembali ke Extraction Model Editor.




Membatasi Relasi

Di kotak Association, expand node yang ingin kita putuskan, yaitu fee loket. Klik relasi loket, dan centang checkbox disabled di pojok kiri bawah. Setelah itu, jalankan lagi Export Data.


Warning Restricted Dependency

Jailer akan mengingatkan bahwa dengan membatasi dependensi, referential integrity akan rusak, karena relasi foreign key dari fee_loket ke loket akan terputus. Klik saja Yes, karena di database development kita tabel loket sudah terisi lengkap.

Inilah hasilnya

Hasil Export setelah dibatasi

Seperti kita lihat di atas, kita cuma mendapatkan 84 record dan pengambilan data berhenti di tabel fee_loket.
Periksa output payment-201006.sql di folder Jailer untuk memastikan hasilnya sudah benar.

Setelah sukses dijalankan di database development, compress lagi jailer yang sudah dimodifikasi barusan dan upload ke server production. Setibanya di server production, extract, kemudian jalankan script yang tadi kita copy-paste.

Kalau baru pertama kali dijalankan, script ini akan menimbulkan error sebagai berikut :

  1. $ ./export-payment-201006.sh
  2. 2010-06-28 14:15:08,114 [main] INFO - Jailer 3.4.5
  3. 2010-06-28 14:15:08,117 [main] INFO - added 'lib/mysql-connector-java-5.1.6-bin.jar' to classpath
  4. 2010-06-28 14:15:08,119 [main] INFO - exporting 'extractionmodel/payment-201006.csv' to 'payment-201006.sql'
  5. 2010-06-28 14:15:08,700 [main] INFO - begin guessing SQL dialect
  6. 2010-06-28 14:15:08,711 [main] INFO - end guessing SQL dialect
  7. 2010-06-28 14:15:08,718 [main] ERROR - Can't find working tables! Run 'bin/jailer.sh create-ddl' and execute the DDL-script first!
  8. java.lang.RuntimeException: Can't find working tables! Run 'bin/jailer.sh create-ddl' and execute the DDL-script first!
  9. at net.sf.jailer.entitygraph.EntityGraph.create(EntityGraph.java:122)
  10. at net.sf.jailer.Jailer.export(Jailer.java:1142)
  11. at net.sf.jailer.Jailer.jailerMain(Jailer.java:1064)
  12. at net.sf.jailer.Jailer.jailerMain(Jailer.java:989)
  13. at net.sf.jailer.Jailer.main(Jailer.java:967)
  14. Caused by: java.sql.SQLException: "Table 'ppobgsp_test.JAILER_GRAPH' doesn't exist" in statement "Insert into JAILER_GRAPH(id, age) values (2104021762, 1)"
  15. at net.sf.jailer.database.Session.executeUpdate(Session.java:470)
  16. at net.sf.jailer.entitygraph.EntityGraph.create(EntityGraph.java:120)
  17. ... 4 more
  18. Error: java.lang.RuntimeException: Can't find working tables! Run 'bin/jailer.sh create-ddl' and execute the DDL-script first!
  19. 2010-06-28 14:15:08,724 [main] ERROR - working directory is /opt/downloads/java/tools/test/integration-test/jailer

Ini disebabkan karena Jailer ternyata membuat beberapa tabel di database untuk kebutuhan internalnya. Ini dapat dilihat pada database development kita.






Tabel Internal Jailer

Untuk menggenerate tabel di atas, kita jalankan jailer dengan opsi create-ddl. Ini akan menghasilkan SQL di layar. SQL ini harus kita jalankan di database production supaya tabelnya terbentuk.

  1. $ sh jailer.sh create-ddl
  2. DROP TABLE JAILER_ENTITY;
  3. DROP TABLE JAILER_DEPENDENCY;
  4. DROP TABLE JAILER_SET;
  5. DROP TABLE JAILER_GRAPH;
  6. DROP TABLE JAILER_CONFIG;
  7. DROP TABLE JAILER_TMP;

  8. CREATE TABLE JAILER_CONFIG
  9. (
  10. jversion VARCHAR(20),
  11. jkey VARCHAR(200),
  12. jvalue VARCHAR(200)
  13. ) ;

  14. INSERT INTO JAILER_CONFIG(jversion, jkey, jvalue) values('3.4.5', 'magic', '837065098274756382534403654245288');

  15. CREATE TABLE JAILER_GRAPH
  16. (
  17. id INTEGER NOT NULL,
  18. age INTEGER NOT NULL

  19. -- ,CONSTRAINT jlr_pk_graph PRIMARY KEY(id)
  20. ) ;

  21. CREATE TABLE JAILER_ENTITY
  22. (
  23. r_entitygraph INTEGER NOT NULL,

  24. PK0 BIGINT , PK1 VARCHAR(255) , PK2 VARCHAR(255) , PK3 INT , PK4 VARCHAR(255) , PK5 BIGINT ,
  25. birthday INTEGER NOT NULL,
  26. type VARCHAR(120) NOT NULL,

  27. PRE_PK0 BIGINT , PRE_PK1 VARCHAR(255) , PRE_PK2 VARCHAR(255) , PRE_PK3 INT , PRE_PK4 VARCHAR(255) , PRE_PK5 BIGINT ,
  28. PRE_TYPE VARCHAR(120),
  29. orig_birthday INTEGER,
  30. association INTEGER

  31. -- , CONSTRAINT jlr_fk_graph_e FOREIGN KEY (r_entitygraph) REFERENCES JAILER_GRAPH(id)
  32. ) ;

  33. CREATE INDEX jlr_enty_brthdy ON JAILER_ENTITY (r_entitygraph, birthday, type) ;
  34. CREATE INDEX jlr_enty_upk1 ON JAILER_ENTITY (r_entitygraph , PK0, PK1, PK2, PK3, PK4, PK5, type) ;

  35. CREATE TABLE JAILER_SET
  36. (
  37. set_id INTEGER NOT NULL,
  38. type VARCHAR(120) NOT NULL,
  39. PK0 BIGINT , PK1 VARCHAR(255) , PK2 VARCHAR(255) , PK3 INT , PK4 VARCHAR(255) , PK5 BIGINT
  40. ) ;

  41. CREATE INDEX jlr_pk_set1 ON JAILER_SET (set_id , PK0, PK1, PK2, PK3, PK4, PK5, type) ;

  42. CREATE TABLE JAILER_DEPENDENCY
  43. (
  44. r_entitygraph INTEGER NOT NULL,
  45. assoc INTEGER NOT NULL,
  46. depend_id INTEGER NOT NULL,
  47. traversed INTEGER,
  48. from_type VARCHAR(120) NOT NULL,
  49. to_type VARCHAR(120) NOT NULL,
  50. FROM_PK0 BIGINT , FROM_PK1 VARCHAR(255) , FROM_PK2 VARCHAR(255) , FROM_PK3 INT , FROM_PK4 VARCHAR(255) , FROM_PK5 BIGINT ,
  51. TO_PK0 BIGINT , TO_PK1 VARCHAR(255) , TO_PK2 VARCHAR(255) , TO_PK3 INT , TO_PK4 VARCHAR(255) , TO_PK5 BIGINT

  52. -- , CONSTRAINT jlr_fk_graph_d FOREIGN KEY (r_entitygraph) REFERENCES JAILER_GRAPH(id)
  53. ) ;

  54. CREATE INDEX jlr_dep_from1 ON JAILER_DEPENDENCY (r_entitygraph, assoc , FROM_PK0, FROM_PK1, FROM_PK2, FROM_PK3, FROM_PK4, FROM_PK5) ;

  55. CREATE INDEX jlr_dep_to1 ON JAILER_DEPENDENCY (r_entitygraph , TO_PK0, TO_PK1, TO_PK2, TO_PK3, TO_PK4, TO_PK5) ;

  56. CREATE TABLE JAILER_TMP
  57. (
  58. c1 INTEGER,
  59. c2 INTEGER
  60. ) ;

  61. INSERT INTO JAILER_CONFIG(jversion, jkey, jvalue) values('3.4.5', 'upk', '679547784');

Setelah tabelnya siap, jalankan kembali script yang error di atas. Berikut outputnya.


  1. $ ./export-payment-201006.sh
  2. 2010-06-28 14:12:31,175 [main] INFO - Jailer 3.4.5
  3. 2010-06-28 14:12:31,190 [main] INFO - added 'lib/mysql-connector-java-5.1.6-bin.jar' to classpath
  4. 2010-06-28 14:12:31,191 [main] INFO - exporting 'extractionmodel/payment-201006.csv' to 'payment-201006.sql'
  5. 2010-06-28 14:12:32,850 [main] INFO - SQL dialect is MYSQL
  6. 2010-06-28 14:12:32,925 [main] INFO - gather statistics after 0 inserted rows...
  7. 2010-06-28 14:12:32,966 [main] INFO - reading file 'renew.sql'
  8. 2010-06-28 14:12:32,966 [main] INFO - 0 statements (100%)
  9. 2010-06-28 14:12:32,967 [main] INFO - successfully read file 'renew.sql'
  10. 2010-06-28 14:12:32,977 [main] INFO - exporting payment Where date_format(paid_date,'%Y-%m') = '2010-06'
  11. 2010-06-28 14:12:33,028 [main] INFO - day 1, progress: payment
  12. 2010-06-28 14:12:33,039 [main] INFO - starting 4 jobs
  13. 2010-06-28 14:12:33,040 [main] INFO - gather statistics after 3 inserted rows...
  14. 2010-06-28 14:12:33,041 [main] INFO - reading file 'renew.sql'
  15. 2010-06-28 14:12:33,042 [main] INFO - 0 statements (100%)
  16. 2010-06-28 14:12:33,042 [main] INFO - successfully read file 'renew.sql'
  17. 2010-06-28 14:12:33,047 [main] INFO - resolving payment -> payment_info (inverse-FKE25C3F47AB64A229) 1:n on B.id_payment=A.id...
  18. 2010-06-28 14:12:33,105 [main] INFO - 66 entities found resolving payment -> payment_info (inverse-FKE25C3F47AB64A229) 1:n on B.id_payment=A.id
  19. 2010-06-28 14:12:33,105 [main] INFO - resolving payment -> cetak_ulang (inverse-FK45B985E0AB64A229) 1:n on B.id_payment=A.id...
  20. 2010-06-28 14:12:33,126 [main] INFO - 0 entities found resolving payment -> cetak_ulang (inverse-FK45B985E0AB64A229) 1:n on B.id_payment=A.id
  21. 2010-06-28 14:12:33,126 [main] INFO - resolving payment -> fee_loket (inverse-FK9632AFFEAB64A229) 1:n on B.id_payment=A.id...
  22. 2010-06-28 14:12:33,129 [main] INFO - 3 entities found resolving payment -> fee_loket (inverse-FK9632AFFEAB64A229) 1:n on B.id_payment=A.id
  23. 2010-06-28 14:12:33,131 [main] INFO - resolving payment -> payment_value (inverse-FK69DD09F8AB64A229) 1:n on B.id_payment=A.id...
  24. 2010-06-28 14:12:33,142 [main] INFO - 12 entities found resolving payment -> payment_value (inverse-FK69DD09F8AB64A229) 1:n on B.id_payment=A.id
  25. 2010-06-28 14:12:33,143 [main] INFO - executed 4 jobs
  26. 2010-06-28 14:12:33,143 [main] INFO - day 2, progress: payment_info, fee_loket, payment_value
  27. 2010-06-28 14:12:33,144 [main] INFO - skip reversal association payment_info -> payment
  28. 2010-06-28 14:12:33,144 [main] INFO - skip reversal association fee_loket -> payment
  29. 2010-06-28 14:12:33,147 [main] INFO - skip reversal association payment_value -> payment
  30. 2010-06-28 14:12:33,147 [main] INFO - starting 1 jobs
  31. 2010-06-28 14:12:33,148 [main] INFO - executed 1 jobs
  32. 2010-06-28 14:12:33,149 [main] INFO - exported payment Where date_format(paid_date,'%Y-%m') = '2010-06'
  33. 2010-06-28 14:12:33,149 [main] INFO - total progress: payment_info, payment, fee_loket, payment_value
  34. 2010-06-28 14:12:33,149 [main] INFO - export statistic:
  35. 2010-06-28 14:12:33,169 [main] INFO - Exported Rows: 84
  36. 2010-06-28 14:12:33,169 [main] INFO - fee_loket 3
  37. 2010-06-28 14:12:33,169 [main] INFO - payment 3
  38. 2010-06-28 14:12:33,172 [main] INFO - payment_info 66
  39. 2010-06-28 14:12:33,172 [main] INFO - payment_value 12
  40. 2010-06-28 14:12:33,173 [main] INFO - writing file 'payment-201006.sql'...
  41. 2010-06-28 14:12:33,178 [main] INFO - independent tables: payment
  42. 2010-06-28 14:12:33,179 [main] INFO - starting 1 jobs
  43. 2010-06-28 14:12:33,380 [main] INFO - executed 1 jobs
  44. 2010-06-28 14:12:33,380 [main] INFO - independent tables: payment_info, fee_loket, payment_value
  45. 2010-06-28 14:12:33,384 [main] INFO - starting 3 jobs
  46. 2010-06-28 14:12:33,447 [main] INFO - executed 3 jobs
  47. 2010-06-28 14:12:33,447 [main] INFO - cyclic dependencies for:
  48. 2010-06-28 14:12:33,447 [main] INFO - starting 0 jobs
  49. 2010-06-28 14:12:33,448 [main] INFO - executed 0 jobs
  50. 2010-06-28 14:12:33,448 [main] INFO - gather statistics after 84 inserted rows...
  51. 2010-06-28 14:12:33,450 [main] INFO - reading file 'renew.sql'
  52. 2010-06-28 14:12:33,450 [main] INFO - 0 statements (100%)
  53. 2010-06-28 14:12:33,454 [main] INFO - successfully read file 'renew.sql'
  54. 2010-06-28 14:12:33,456 [main] INFO - starting 0 jobs
  55. 2010-06-28 14:12:33,467 [main] INFO - executed 0 jobs
  56. 2010-06-28 14:12:33,486 [main] INFO - file 'payment-201006.sql' written.
Selesai sudah, data yang kita inginkan ada di file payment-201006.sql, siap diunduh dan dijalankan di database development.

Semoga bermanfaat, kalau ada yang kurang jelas, silahkan baca tutorial resminya.


sumber : Blog Endy