Wednesday, October 20, 2010

Mengikuti Young Alumni ITS Leadership & management Program 2010

Sabtu Minggu Tanggal 24-25 Juli ini alhamdulillah saya diterima mengikuti acara Program Leadership Young Alumni 2010. Program ini yang pertama diadakan oleh PP IKA-ITS dan akan diadakan tahunan sebagai kaderisasi IKA yang kedepannya diharapka bisa menciptakan kekuatan bersama yang selama ini dirasakan para almuni berjalan sendiri-sendiri, untuk prolead yang pertama ini acara bersamaan dengan acara Fun Futsal IKA ITS Jakarta Raya di Citos. Prolead berlangsung di Hotel Park Cawang. Hotel Park sendiri ternyata milik pak Musyanif, Teknik Sipil 73, presdir PP (Pembangunan Perumahan), BUMN yang didirikan Pak Karno karena punya keinginan untuk membangun perumahan untuk rakyat Indonesia, tapi dalam perjalanan aktualnya, saat ini PP membangun Hotel Indonesia Kempinski, Sampoerna Strategic Square, dan Hotel Park. Selain bekerja di PP, pak Musyanif juga mempunyai banyak usaha termasuk membangun Hotel Park berikut Park Apartement yang terletak bersebelahan. Ketika pak Musyanif dihubungi panitia prolead (mas Arief Hermawan Tekkim 95) untuk menjadi salah satu nara sumber, pak Musyanif bertanya tempatnya dimana, ketika dijawab di hotel Park, pak Musyanif berkata: "Loh itu khan hotel saya, ya sudah saya beri discount 50% buat bayar tempatnya". Ketika manajemen hotel menghubungi panitia untuk pembayaran, panitia bilang bahwa gak bayar penuh karena diminta sendiri oleh pemilik hotel dan minta agar bayarnya sabtu sore saja menunggu pak Musyanif datang mengisi acara jam 1, daripada nanti manajemen malah dimarahi oleh pak Musyanif karena memang diberi discount 50%.

Sabtu jam setengah tujuh pagi saya berangkat dari rumah menuju kantor untuk menitipkan motor, kemudian jalan kaki sekitar seratus meter ke halte bus depan German Center menunggu bus Mayasari Bakti 117 warna hijau jurusan Poris - Pulo Gadung. Sekitar jam tujuh kurang sepuluh busnya datang, busnya buatan agak lama, berusia lebih dari sepuluh tahun, tapi cukup terawat meski sudah mulai berkarat dan berbunyi ketika berjalan. Saya turun di UKI Cawang bayar sembilan ribu, setelah itu naik ojek bayar lima ribu, ternyata gedungnya cukup dekat bahkan dilewati oleh bus tadi tetapi putar jalan dulu lewat bawah tol, tukang ojeknya bilang bahwa nanti juga busnya lewat depan gedung untuk pulang ke BSD. Saya sendiri tidak tahu kalo ternyata dekat UKI dan dilewati bus 117, informasi yang saya dapat dari wikimapia dekat UKI dan UKI sendiri merupakan pemberhentian bus 117, jadi memang sudah saya rencanakan kalau turun di UKI dan jalan kaki jika nama hotelnya kelihatan, dan naik ojek jika tidak kelihatan.

Ketika sampai di hotel, saya dikasih tahu pihak informasi bahwa acara ITS ada di lantai 1, ruang Cendana 1 sebelah kanan lift, hotelnya kecil, baru beroperasi juga, dibangun 2002, tapi cukup rame, saya satu lift dengan seorang asing bersama anak laki-lakinya berusia sepuluh tahunan. Disebelah lift yang ada dua itu ada tangga yang pendek sekali jika lewat ke lantai satu. Saya menunggu dua lift itu sampai ground floor lumayan lama karena memang liftnya meski baru tapi diset jalan pelan biar lebih nyaman, dan lebih cepat sampainya kalo naik tangga karena memang hotelnya kecil tapi bermodel modern bersih. Sampai di depan ruang Cendana 1 saya bertemu cak Arief, cak Hamdani, dan Allaq. Semua anak tekkim berbeda angkatan. Cak Hamdani tekkim angkatan 91 jadi moderator di hari pertama, sedangkan Allaq peserta, tekkim 2003.

Acara dimulai pukul 8.30, para peserta memasuki ruangan Cendana 1, meskipun ada beberapa yang datang terlambat, kemudian mas Arief berpidato pembukaan, dan mengatakan bahwa selamat datang
kemudian memberi waktu sepuluh menit dan meminta kepada para peserta menentukan nama-nama yang menjadi koordinator angkatan, pembawa acara, pembaca doa, dirijen lagu Indonesia Raya, dan pembaca kesimpulan masing-masing materi karena di prolead ini tiap akhir materi akan dibacakan kesimpulan selama lima menit oleh peserta bukan oleh moderator. Mas arief kemudian keluar ruangan selama sepuluh menit meninggalkan peserta. Kemudian Fibrina T. Industri 99 maju didepan membacakan sekilas kertas yang berisi table peran-peran yang perlu diisi nama para peserta. Untuk pembawa acara Allaq karena sudah berpengalaman, sedangkan moderator dari panitia, moderator hari pertama cak Hamdani, hari kedua cak Jafar, T. Fisika 96 dan Ning Umi, T. Informatika 94. Koordinator angkatan prolead Fibrina T. Industri 99, Nizar TC02 baca doa pembukaan, begitu pula ditentukan para pembaca resume tiap session, semua peserta diserahi tugas. Saya sendiri diminta sebagai dirijen mengiringi lagu Indonesia Raya, ketika ditanya siapa yang mau jadi dirijen, semua peserta ga ada yang mau, ada rekan yang bilang saya saja jadi dirijen, yasudah ga masalah saya jadi dirijen, tetapi sampai acara prolead selesai tidak jadi ada menyanyikan lagu Indonesia Raya.

Acara selesai pukul 17.30, saya pulang bareng mas Hanif, T. Sipil 96, dibayari naik taksi sampai BSD, rumahnya mas Hanif satu jurusan, ditengah perjalanan mas Hanif cerita ternyata temannya mas Torped T. Fisika 96 sama mas Jagir T. Mesin 96, sama mas Andri T. Informatika 97, SC Bakti Kampus saya dulu, mas Hanif dulu juga sama-sama jadi SC BK tapi di gugus yang berbeda.

Hari kedua, saya datang lebih siang karena sudah tahu tempatnya, naik bus 117 saya berhenti tepat di depan hotel Park bukan di perempatan UKI, sama dengan hari pertama saya aktif mengacungkan tangan untuk bertanya kepada para pembicara di setiap session tapi hanya beberapa kali diapprove oleh moderator karena teman-teman peserta yang lain juga melakukan hal yang serupa.

Tuesday, January 12, 2010

Regex

Regex kepanjangan dari Regular Expression, juga biasa disingkat RE, saya ingat mendapatkannya di Otomata atau Matematika Diskrit ketika kuliah. Pada dasarnya regex adalah suatu pola yang menggambarkan suatu text. Namanya muncul dari teori matematika. Kebanyakan dari post ini di copy dari http://www.regular-expressions.info, dan posting ini saya terjemahkan dari postingan saya sebelumnya Regex dalam Bahasa Inggris.

Regex adalah alat yang ampuh ketika kita sudah mempelajarinya, di project saya yg terdahulu menggunakan regex sebagai validator dari pojo-pojo saya dan sebagai validator dari nama file yg diapload ke aplikasi. Fyi, di aplikasi itu terdapat bagian upload file, dan file itu difilter terlebih dahulu oleh aplikasi, karena merupakan aplikasi report bank bulanan, jadi butuh mengetahui bahwa file yang diupload itu di bulan apa, maksud saya file itu harus diberi nama dengan pola tahun dan bulan di belakangnya.

11 Karakter Khusus (metacharacters)
- kurung kotak [
- backslash \
- the caret ^
- dollar $
- titik .
- the vertical bar or pipe symbol |
- tanda tanya ?
- tanda bintang *
- tambah +
- kurung buka (
- kurung tutup )
Jika ingin menggunakan metacharachter itu perlu didahului backslash, atau dua backslash kalo di program java.

Karakter yang tidak bisa dicetak
- \t untuk mencocoki karakter tab (ASCII 0x09)
- \r untuk enter (0x0D)
- \n untuk baris baru (0x0A)
- lebih jauh ada \a (bell, 0x07), \e (escape, 0x1B), \f (form feed, 0x0C) dan \v (vertical tab, 0x0B).
Dan sekali lagi kita butuh double backslash di java, satu backslash untuk regex biasa.

Mesin Regex
Merupakan software yang bisa memproses regex, mencoba untuk mencocokkan pola dari string yang diberikan.

Terdapat dua macam mesin regex: mesin text-directed dan mesin regex-directed. Jeffrey Friedl menyebutnya mesin DFA and NFA. http://www.regular-expressions.info berdasarkan mesin regex-directed, dan situs itu berdasarkan bahasa pearl. Pertama, saya mengira java juga regex-directed, tapi ternyata tidak, saya membuat program mini seperti yang ditulis di situs untuk mengetahui apakah java itu text-directed atau regex-directed, dan ternyata text-directed. Regexnya berupa regex|regex not dan stringnya berupa regex not, jika hasil pencocokannya regex maka mesin regex-directed. Jika hasilnya berupa regex not maka tex-directed. Dibawah ini code program saya dan outputnya berupa "Found 'regex not' at position 0":


public static void main(String[] args) {
Pattern p = Pattern.compile ( "regex|regex not", Pattern.CASE_INSENSITIVE ) ;
String text = "regex not";
Matcher m = p.matcher ( text ) ;
if ( m.matches() ) {
System.out.println ( "Found '" + m.group ( 0 ) + "' at position " + m.start ( 0 ) ) ;
}
else {
System.err.println("No found match");
}
}

Regex-directed selalu mengembalikan leftmost match, jika kita menerapkan regex cat ke string He captured a catfish for his cat, mesin akan mencoba mencocokkan token yang pertama di regex c ke karakter pertama di match H. Dan gagal. Tidak ada kemungkinan permutasi lain di regex ini, karena terdiri atas urutan karakter huruf. Sehingga mesin regex mencoba untuk mencocokkan c dengan e. Gagal juga, sampai mencocokkan dengan spasi. Sampai karakter keempat pencocokkan, c mencocoki c. Mesin akan mencoba mencocokkan token kedua a kekarakter kelima, a. Sukses juga. Namun kemudian t gagal mencocoki p. Di titik itu mesin mengetahui bahwa regex tidak bisa match dimulai dari karakter keempat. Maka berlanjut ke karakter kelima: a. Lagi c gagal cocok dan mesin berlanjut. Di posisi karakter ke15 dalam pencocokan, c bertemu c dan match. Mesin kemudian mencoba untuk match regex pada karakter 15 dan menemukan bahwa a match dengan a dan t match dengan t.

Regex tadi bisa match diposisi karakter 15. Mesin melaporkan match. Kemudian akan melaporkan tiga karakter dari catfish sebagai match yang valid. Dari titik ini mesin tidak pernah lagi memproses untuk melihat apakah ada match yang lebih baik.

Tapi di java yang termasuk text-directed, dia melaporkan tidak ada yg match, karena dia string yang dicocokkan ke regex, saya sudah mencoba regex cat dengan He captured a catfish for his cat, dan dia melaporkan bahwa tidak ada match, dia hanya menerima string cat.

Himpunan Karakter atau Kelas Karakter "[ ]"
Dengan himpunan karakter kita bisa memberi tahu mesin regex untuk match hanya satu dari beberapa karakter. Hanya dengan cara menempatkan karakter yang ingin dicocokkan diantara kurung kotak. Kita bisa menggunakan tanda hubung didalam kelas karakter untuk menentukan range karakter. [0-9] mencocokkan satu digit antara 0 sampai 9.

- \d untuk [0-9]
- \w singkatan untuk "word character", biasanya [A-Za-z0-9_]. Termasuk didalamnya garis bawah dan angka.
- \s untuk spasi
- Negasi, \D sama dengan [^\d], \W is untuk [^\w] and \S untuk [^\s]

Hati-hati ketika menggunakan negasi didalam kurung kotak. [\D\S] tidak sama dengan [^\d\s]. Yang terakhir akan match semua karakter yang bukan angka atau spasi. Sehingga akan match x, tapi tidak 8. Yang sebelumnya akan match semua karakter yang bukan angka, atau bukan spasi. Karena angka bukan spasi dan spasi bukan angka, [\D\S] akan match dengan semua karakter, angka, spasi atau lainnya.

Jika kita mengulangi satu kelas karakter dengan menggunakan operator ?, * atau +, kita akan mengulangi seluruh kelas karakter, dan bukan hanya karakter yang match. Regex [0-9]+ bisa match 837 juga 222. Tapi jika kita ingin mengulangi karakter, bukannya class, maka dibutuhkan backreference. ([0-9])\1+ akan match 222 dan bukan 837.

Negasi Kelas Karakter
Menulis ^ setelah kurung kotak akan menegasi kelas karakter. Hasilnya kelas karakter akan match dengan karakter apapun yang tidak ada di kelas karakter. Penting untuk diingat bahwa negasi kelas karakter masih harus matsh satu karakter. q[^u] tidak berarti: "sebuah q tidak diikuti sebuah u". Tapi artinya "Sebuah q diikuti oleh satu karakter yang bukan u". Ini akan tidak match q di Iraq. Akan match dengan q dan sapsi setelah q di Iraq is a country. Begitu pula spasi akan menjadi bagian dari match keseluruhan, karena merupakan "karakter yang bukan u" yang match dengan negasi kelas karakter regex diatas.

Metakarakter didalam Kelas Karakter
Bahwa karakter khusus atau metakarakter didalam kelas karakter adalah tutup kurung kotak (]), backslash (\), karet (^), dan tanda hubung (-). Metakarakter reguler adalah karakter normal didalam kelas karakter, dan tidak butuh didahului dengan backslash. Untuk mencari bintang atau plus, gunakan [+*]. Regex kamu akan berfungsi baik jika diberi backslash metakarakter didalam kelas karakter, tapi melakukannya akan membuat susah untuk dibaca.

Untuk memasukkan backslash sebagai karakter tanpa maksud khusus didalam kelas karakter, perlu diberi backslash lagi. [\\X] match sebuah backslash atau sebuah x. Tutup kurung kotak (]), karet (^) dan tanda hubung (-) bisa dimasukkan dengan ditambah backslash, atau dengan menempatkannya dalam posisi dimana mereka tidak butuh arti khusus. Direkomendasikan metode terakhir karena lebih mudah untuk membacanya. Untuk memasukkan karet, tempatkan dimanapun selain setelah kurung buka. [x^] match x atau karet. Kamu bisa meletakkan kurung tutup setelah kurung buka atau karet negasi. []x][^]x] match semua karakter yang bukan kurung tutup atau x.Tanda hubung bisa diletakkan setelah kurung buka, sebelum kurung tutup, atau setelah karet negasi. Dua duanya [-x] dan [x-] match x atau tanda hubung.

Dot Match (Hampir) Semua Karakter
Dot match satu karakter, tanpa memperhatikan karakter apa itu. Hanya ada satu pengecualian yaitu karakter baris baru. Sehingga dot kependekan dari [^\n].

Anchor

Anchor tidak match karakter apapun, dia match satu posisi sebelum, setelah, atau diantara karakter. Dan mereka match yang Zero-Length.
• karet match posisi sebelum karakter pertama dari string
• $ match setelah karakter terakhir dari string
• \b match di posisi yang disebut "word boundary"

Menerapkan ^a dengan abc match a. ^b tidak match dengan abc karena b tidak bisa dimatch setelah awal dari string, yang dimatch oleh ^. Sedangkan c$ match c di abc, sedangkan a$ tidak match.

Ada empat posisi berbeda yang memenuhi kualifikasi sebagai word boundary:
• sebelum karakter pertama dari string, jika karakter pertama adalah \w
• setelah karakter terakhir dari string, jika karakter terakhir adalah \w
• Diantara sebuah \w dan sebuah karakter non-word mengikuti setelah \w
• Diantara sebuah \W dan sebuah \w mengikuti setelah \W

Di mesin regex, \bis\b akan match This island is beautiful. Spasi adalah karakter non-word, dan yang lainnya karakter word. Mesin dengan sukses match kata is dalam string. Jika ktia menggunakan regex is, ini akan match dengan is di This.

Alternatif "|"
operator alternatif memiliki presedence terbawah dari semua operator regex. Yang mana memberi tahu regex mesin untuk match apakah semua di sebelah kiri vertical bar, atau semua sebelah kanan vertical bar. Jika kita ingin membatasi jangkauan alternasi, maka butuh kurung untuk grouping.

Opsional "?"
Bersifat greedy. Tanda tanya memberi mesin regex dua pilihan: coba match bagian dari tanda tanya, atau tidak mencoba match. Mesin akan selalu mencoba match bagian itu. Hanya jika hal ini menyebabkan keseluruhan regex untuk gagal, maka akan terus mengabaikan bagian dari tanda tanya itu.

Akibatnya adalah jika menerapkan regex Feb 23(rd)? ke string Feb 23rd, match akan selalu Feb 23rd dan bukan Feb 23. Kamu bisa membuat tanda tanya lazy (mematikan greediness) dengan meletakkan tanda tanya kedua setelah yang pertama.

"?,*, +,{}"
- ? opsional, 1 or 0
- * 0 atau lebih repetisi
- + 1 atau lebih repetisi
- {} membatasi repetisi, sintaksnya {min,max}, jika kita ingin membatasi n repetisi maka sintaksnya adalah {n}

Mereka greedy, misalnya kita inginmenerima tag html dengan regex: <.+>. Ketika kita coba test dengan satu string seperti This is a first test. Kita mungkin mengharapkan regex untuk match dan ketika melanjutkan setelah match itu. Namun tidak. Regex akan match dulu. Yang jelas bukan yang kita inginkan. Alasannya adalah bahwa plus bersifat greedy. Yang mana plus menyebabkan mesin regex untuk mengulang token sebelumnya sesering mungkin. Kecuali jika regex gagal, maka mesin regex akan backtrack. Yang mana, hal ini kembali ke plus, membuatnya memberi iterasi yang terakhir, dan memprosesnya dengan sisa regex.

Untuk memperbaikinya:
• laziness, dengan menambahkan "?", maka regex akan menjadi <.+?>
• solusi yang lebih baik tanpa backtracking: Menggunakan greedy plus dan negasi kelas karakter <[^>]+>

Grouping dan Backreference "()"
Selain mengelompokkan regex, tanda kurung juga membuat backreference. Backreference menyimpan bagian dari string yang match dengan bagian dari regex didalam tanda kurung.

([a-c])x\1x\1 match axaxa, bxbxb and cxcxc. \1 disebut backreference ([a-c]). dan di java butuh dua backslash. Contoh yang lainnya adalah <([A-Z][A-Z0-9]*)\b[^>]*>.*? yang match sepasang buka dan tutup tag HTML, dan text diantaranya, seperti text bold atau italic.

Java juga mendukung forward reference, yaitu: Kita bisa menggunakan backreference untuk satu grup yang muncul setelah regex. Biasanya hanya berguna jika mereka didalam group yang berulang. Misalnya (\2two|(one))+ akan match oneonetwo.

Friday, December 25, 2009

Mengikuti Rapat Kerja Nasional IKA ITS Th 2009


Jumat tanggal 18 kemarin saya diajak cak Danang ikut Raker atas nama lembaga Yayasan Tunas Unggul Bangsa-IKA ITS Jakarta Raya (YTUB). Saya senang sekali, meski bukan jadi siapa2 saya bilang ke dia kl bisa ikut, tapi Jumat doang, hari pertama, soalnya sabtunya lembur masuk kantor.

Berikut ini link berita acara yang saya jadikan artikel di situs YTUB. Saya jadi admin di situs itu, meski situs daftar donatur tidak kepake, hanya dijadiin link kecil dalam situs resminya, gpp, saya besarkan hati saja, saya bulatkan niat untuk ikut terus ikutan saja, saya niatkan beramal saleh, cari kegiatan diluar rutinitas kantor.

http://www.tunasunggulbangsa.or.id/artikel/7/rapat-kerja-nasional-ika-its-th-2009.html

Sunday, November 8, 2009

Indonesia Bersatu di Bundaran HI

Minggu pagi 8 November 2009, aku sampai di stasiun Rawa Buntu jam 7 lebih, sebetulnya janjian sama Yanu teman sekantorku jam setengah tujuh di stasiun Serpong, tapi aku bangun kesiangan, hari-hari terakhir ini aku susah tidur, bisa tidurnya pas larut malam, solat subuh juga siangan, aku bilang ke Yanu aku ke stasiun Rawa Buntu saja karena lebih dekat, ngejar kereta ayam yang jam 7 pagi, nanti naik gerbong yang paling belakang ketemu disana. Rute rel kereta melintas dari stasiun Serpong ke Jakarta melewati stasiun rawa Buntu, kecuali kereta ekspres pasti berhenti dulu di stasiun Rawa Buntu, dari rumah ke stasiun Serpong kurang lebih 6 km, sedangkan ke stasiun Serpong 2 km, oleh karena itu aku parkir motorku di stasiun yg terdekat.

Ternyata sampai di stasiun sudah terlambat, Yanu sms aku kalo keretanya sudah berangkat, dia duduk di gerbong terakhir, lantas aku balas smsnya bilang maaf karena terlambat, dan beli tiket kereta selanjutnya jam setengah delapan kata penjual tiketnya. Aku beli tiket kereta Ciujung, ber-AC, Jakarta - Tanah Abang, 4500, kalo kereta ayam pemberhentian terakhir di Pasar Senen, 1500an, aku pernah naik kereta ayam waktu ke user karena ngejar jam pagi, turun di stasiun kemayoran. Aku dikasih tahu Yanu kalo nanti turun di stasiun Palmerah, sebelum stasiun Tanah Abang setelah stasiun Kebayoran, kalo naik kereta Ciujung lebih nyaman karena tidak perlu desak2an dan setiap keretanya berhenti aku selalu tahu nama stasiunnya, kalo naik kereta ayam selain was was karena takut dirampok, juga kesulitan sedang berhenti distasiun apa, karena desak2an dan tidak bisa melihat jelas papan nama stasiunnya.

Belum setengah delapan, keretaku sudah datang, aku naik di gerbong tengah pas ketika kereta berhenti di tempat aku menunggu, aku berhenti di stasiun Palmerah, ketemu Yanu, sepertinya dia kira aku naik di gerbong belakang soalnya dia datang menunggu dari arah gerbong yang belakang, kami lantas naik bus kota, jurusan Semanggi, aku lupa nama busnya, tapi kami jalan dulu agak jauh, tidak keluar di pintu stasiun tapi jalan menyusuri rel terlebih dulu, sampai di jalan raya pun masih lewat tangga setapak ke jalan raya yang diatas, Yanu hafal jalan-jalan itu soalnya dia di user di daerah Karet sekitar Semanggi. Di perjalanan bilang kalau angkatan 99 banyak aktivisnya, dia juga angaktan 99 ambil poltek kapal terus ke Elektro, abis itu ke Poltek Elka. Waktu kuliah dulu dia satu kos sama Budi Nugroho, sama Arie Shiddiq, aku bilang ke dia dulu Budi jadi Senator, sekarang dosen di UPN sudah punya anak satu, sedangkan Arie jadi dosen di TC, selain itu dulu anak TC yg mungkin Yanu kenal ada Arief Kemalsyah yang jadi kahima dua kali sama Rahmat Hidayat.

Kami naik bus kota turun di Semanggi, habis itu naik busway turun di bundaran HI, awalnya info yang aku dapat dari milis jurusan acaranya di Monas, aku dikasih tahu adik kelasku kalo ada acara demo Minggu pagi jam 8 di Monas, temannya dia ikut dan bilang ke dia untuk mengajak massa sebanyak banyaknya, tapi pas aku ketemu Yanu Sabtu kemarin dia bilang acaranya di HI, mungkin juga ada di Monas, soalnya bakal ada long march, awalnya dia bilang jam tujuh, dan rencananya berangkat naik kereta jam setengah enam, tapi aku bilang terlalu pagi, naik kereta yang jam tujuh saja, sampai disana jam delapanan, dan ternyata diamini sama Yanu soalnya dia lihat berita di Metro TV acaranya jam delapan tapi di HI bukan di Monas. Aku benar-benar ketinggalan berita, kerjaanku saat ini gila2an, selalu pulang larut berangkat pagi, yang lebih bikin capek tempatnya jauh di Kemayoran, dua jam perjalanan kalo pagi hari, sampai rumah aku biasanya sudah kecapekan langsung istirahat, aku ga begitu ngerti masalah persoalan KPK ini, hanya saja aku tertarik banget untuk ikut demo ini soalnya walau mengikuti sedikit beritanya aku merasa prihatin untuk pihak Bibit-Candra.

Waktu di busway, aku lihat sudah mulai banyak orang-orang berkumpul di sekitar air mancur bundaran HI, sebagian pake slayer "Tuntaskan Korupsi" atau kalimat sejenis, kain berukuran kira2 50cm*7cm yang dipotong2 pake gunting, ada yang berwarna putih, hijau tua, atau hitam, ada yang diikatkan di kepala ada juga yang diikatkan di lengan, disitu juga aku lihat ada panggung seperti konser musik kecil2an. Busway berhenti di halte bundaran HI, halte itu berada agak jauh letaknya setelah bundaran HI, waktu jalan kaki ke bundaran HI kami melewati Wisma Nusantara gedungnya TVOne, di depan ada juga panggung sepertinya sedang ada acara musik untuk tv, waktu itu sedang menyanyi group musik yang aku ga tahu namanya tapi lagunya sering dengar di radio "Aku tertipu, Aku terjebak, Aku terperangkap, Dalam gairahmu...". Aku sering dengar lagu itu soalnya tiap hari aku mendengarkan radio waktu dalam perjalanan ke user di Kemayoran.

Waktu aku sampai bundaran HI, sudah ada ada Adi Massardi yang tengah membacakan puisinya "Negeri Para Bedebah", aku tahu puisi itu dari milis, sepertinya acaranya sudah mulai dari tadi tapi orang2 masih tidak begitu banyak yang datang, aku sama Yanu bisa menerobos massa di depan dan dapat tempat yang cukup jelas kurang lebih sepuluh meteran dari panggung. Setelah membacakan puisinya gantian MC yang mengambil acara, MC-nya ada dua, Indra Bekti sama Sandrina Malakiano, dua-duanya pake kacamata hitam, Sandrina memakai baju hitam berjilbab, Indra pake topi yang khas dia pakai. Habis itu mereka panggil group band dari Yogyakarta, "Kill The DJ", samar aku pernah dengar nama band itu, mc-nya bilang kalo di internet pasti banyak denger lagu mereka, lagunya rap, syair awalnya "Ono cicak nguntal boyo, seragam cokelat gowo godo", dst... setelah menyanyi vokalisnya diminta menerjemahkan artinya, dia bilang artinya "Ada cicak melahap buaya hidup2 ada polisi bawa pentungan".

Setelah itu mereka panggil tiga orang untuk berpidato, ada Effendi Ghozali, bapak yang aku lupa namanya, sama Eeep Saefullah suami Sandrina, Pak Effendi Ghozali baca puisi awalnya berima i-i-i-i, aku lupa puisinya seperti apa, tapi ada kata2 Republik Mimpi, acara tv yang dia bawakan, sama "hihihi" bait terakhir yang dia bawakan seingatku seperti itu, selanjutnya Bapak yang kedua berorasi, aku lupa detilnya tapi mungkin dia bilang kalo jangan benci institusinya, tapi benci korupsinya, jangan benci kepolisian, DPR, apalagi KPK, tapi orang2 korup didalamnya, sedangkan bapak Eep Saefullah kasih yel yel baru, jika dia teriak "Cicak" kami jawab "Hidup", dia teriak "Koruptor" kami jawab "Mati", dan jika dia teriak "Presiden", kami jawab "Bangun", yel yel sebelumnya jika MC Indra/Sandrina tanya "Siapa Cicak", maka kami jawab "Saya", habis itu serentak kita bilang "Cinta Indonesia Anti Korupsi" aku lupa persisnya tapi kira2 seperti itu.

Setelah itu berurut-urut ada group musik KCP, atau KJP ya, awalnya aku kira para pemain film KCB, ternyata grup band dari gang pegangsaan sama ustadz siapa gitu dari gang pegangsaan yang juga menyanyi, terus ada group band "Efek Rumah Kaca". Mereka nyanyi lagu "Mosi Tidak Percaya" "Semua Bisa Jadi Presiden", atau apa gt aku lupa judul tapi lagunya enak2. Setelah itu ada Oppie yang menyanyikan lagu "Peter Pan", sama "Andai Aku Jadi Orang Kaya", Oppie ganti liriknya yg aslinya "Andai Aku jadi Orang kaya, Ga usah pake kerja" diganti dengan "Andai kita jadi orang kaya, Ga usah pake korupsi", habis itu ada Happy Salma yang membacakan puisi kemudian diiringi dengan Kill The DJ, Happy memakai baju hitam barangkali karena siang yang panas. Terakhir sepertinya penampilan Slank, sama Once juga datang tapi sepertinya ga nyanyi, aku ga tahu soalnya jam waktu itu 11an, perutku sakit, ternyata udah selesai, aku sama Yanu cari toilet, kami ke mall Grand Indonesia untuk buang air, fisikku benar2 lemah, kepalaku pusing selain emang benar2 panas, pasti ini gara2 kerja yang pulang larut terus.

Di tengah-tengah acara, Indra dan Sandrina juga mengundang Erry Eriansyah mantan ketua KPK kalo ga salah, yang meminta kepolisian untuk menahan dia jika menahan Bibit-Candra, Bpk Usman siapa gitu creator dukungan satu juta facebookers untuk Bibit-Chandra, sama ketua komnas HAM pengganti Munir untuk berorasi, ditengah-tengah pidato salah satu mereka ada yang membawakan foto besar Anggodo memakai seragam polisi, ada juga yang membawa boneka buaya berwarna biru.

Selain itu Indra dan Sandrina juga mengundang penonton keatas panggung, mereka panggil lima orang anak muda untuk teriak "Cicak", ada juga minta dua orang untuk berorasi, ada Charles dari Priuk, ada juga ibu rumah tangga, waktu ibu itu berorasi keliru apa gitu pokoknya menghujat KPK, sama Sandrina dikasih tahu kalo semua orang yang ada disitu mendukung pemberantasan korupsi dan mendukung sepenuhnya KPK, keseumua penonton itu dihadiahi kaos atas partisipasinya. Indra dan Sandrina juga mengundang dua orang mahasiswa yang melakukan aksi mogok makan, satu cowok, satu cewek, yang cewek mengunci mulutnya sama plester, yang cowok menaruh plesternya di kaosnya, ketika ditanyai sudah berapa lama melakukan aksi itu, dia bilang dua hari mereka mogok amkan, kemudian dia berteriak "Hapus Bersih Korupsi di Indonesia".

Aksi itu berakhir sebelum jam sebelas, memang cuacanya panas banget, kalaupun sampai sore aku sama yanu bakal pulang duluan ga ikut sampai akhir, kami pun pulang naik buswa turun Ratu Plaza kemudian menunggu transBsd yang datang jam 12an, sebelum ke halte busway kami beli es cendol dipinggir jalan, sambil melihat ada pembakaran boneka buaya di sebelah bundaran HI berseberangan dengan panggung.

Monday, October 26, 2009

Searching Menggunakan Limit Dengan Hibernate



Post ini melanjutkan catatan sebelumnya tentang membuat google wannabe paging.

Terdapat banyak cara untuk mendapatkan qury limit di hibernate, terdapat HQL (Hibernate Query Language), Criterion, atau native sql. Saya akan memberi tahu bagaimana caranya dengan menggunakan HQL. Bagi saya HQL itu sederhananya SQL menggunakan POJO (Plain Old Java Objetct) hibernate, Object yang merepresentaiskan tabel2. Misalnya jika tabel dengan nama LOG_ACIVITY maka POJO bisa berupa class dengan nama LogActivity. Jika SQL seperti : "SELECT * FROM LOG_ACTIVITY", maka HQL-nya cukup berupa: "FROM LogActivity", dan HQL memiliki banyak fungsi.

Dalam catatan ini saya tidak hanya memberitahu bagaimana mendapatkan record2 mulai 1 sampai 100, tapi juga pencarian yang menggunakan parameter, seperti mendapatkan record mulai kemarin sampai sekarang untuk seratus record yang pertama.
1. Dapatkan kriteria pencarian. Nilai defaultnya '*'. Misalnya field username, jika ada nilai dari input seperti "imam" maka username = "imam", selain itu username="*"
2. Hitung total record berdasarkan kriteria tadi
3. Miliki konstanta berapa record yang ditampilkan di tiap halaman, misalnya 10, dan jumlah record itu juga bisa disimpan dalam parameter.
4. Saya bagi total record dengan konstanta tadi sehingga saya dapatkan total halaman buat paging.
Saya lakukan query dengan sintaks yang samaketika saya mencari jumlah total record (sintaks itu saya jadikan menjadi method tersendiri), namun kali ini untuk mendapatkan record bukan jumlah record.
6. Saya lempar seluruh variable (page, totalPages, listPages, perPage, totRecord, recordList, qName, qDate, etc etc), dimana
- page = page yang diminta, misalnya page 13
- totalPage misalnya 5
- listPage misalnya 5
- perPage, berapa record yang ditampilkan di tiap page
- totRecord, karena akan dimunculkan di aplikasi
- recordList
- qName, qDate, dan variable lain sebagai parameter pencarian yang disimpan dalam session.

Berikut code snippednya, yang pertama metgod untuk mendapatkan jumlah record, yang kedua untuk mendapatkan record yang sebenarnya, sedangkan buildQueryString adalah methodd yang menghasilkan sintaks Hql dengan parameter criteria=nam dari field2 pencarian seperti username, dateFrom, dateTo, dan parameter kedua adalah nilai question dari field2 pencarian, saya set "*" jika null atau empty.

public Long getLogActivitiesSearchingPagingCount(String criteria, String
question) {
String queryString = "select count(*) " + buildQueryString(criteria, question);
Long total = (Long) getSession().createQuery(queryString).uniqueResult();

return total;
}

public List getLogActivitiesSearchingPaging(int start, int length, String
criteria, String question) {
List logActivities = getSession().createQuery(buildQueryString(criteria, question))
.setFirstResult(start)
.setMaxResults(length).list();
return logActivities;
}

Sunday, October 25, 2009

Cerita SE 2006

Teman2 ini ceritaku pas SE 2006 di Graha Wisata Kuningan.

Selasa, tgl 20 Oktober kemarin aku masih di user, Wom Finance, di MGK (Mega Glodok Kemayoran), disana lagi UAT, aku ijin pulang sore, biasanya pulang malem, tapi pas UAT gini ga terlalu malem paling jam 9 sudah pulang, tapi sampe BSD bisa jam 10 atau jam 11an. Kl pulang biasanya barengan sama rekan2 kantor, kadang2 travel kantor, taxi, atau ada rekan yg bawa mobil bareng dia terus di reimburse.

Aku pulang jam setengah 6an, sebetulnya ijin jam 5an tp ternyata tiba2 ada kerjaan jadi pulang jam segitu, aku naik bajaj, soalnya ga tau kalo ke halte busway naik angkot apa, kl naik ojek kebetulan gada, abis itu aku turun di halte busway pasar baru. Disana aku tanya2 kl mau ke kuningan lewat mana, petugasnya bilang turun halte Matraman, abis itu ke Dukuh Atas. Ketika menuju ke Matraman aku bawannnya was-was aja takut2 kl nyasar, soalnya lewat Salemba UI, dsb, yg aku lihat Salemba itu di Jakarta Pusat, padahal Kuningan di Selatan. Tapi aku bawa santai aja kalopun kesasar ya tinggal pulang. Tapi akhirnya sampe juga di Dukuh Atas.

Sampe dukuh atas aku inget soalnya dulu juga lewat rute yang sama, tapi sekarang sudah beda, seingatku dulu kl udah sampe dukuh atas aku jalan panjang dan antri panjang di jalan koridor gt, sekarang ga lagi aku ga perlu naik tangga terus antri gt soalnya pintu buswaynya sekarang ada di bawah, bus yang ke Ragunan ada di pintu paling pojok belakang. Sampe di bus aku masih keliru tak kirain ada halte Pasar Festival deket halte GOR Soemantri, ternyata ga ada jadinya kelewatan, aku turun di Mampang terus naik balik busway turun GOR Soemantri, aku sampe tempat kira2 setengah delapanan, aku ga solat Maghrib.

Di pintu masuk aku ketemu sama Wahib, mas Wongky, Bawenang, Galih01, sama yg lain, aku ngobrol sama Bawenang, dia bilang ntar pulangnya bareng aja, soalnya kaya tahun kemarin aku pulangnya bareng Bawenang, aku bilang oke tapi nanti kl eli dateng ntar pulangnya bertigaan. Habis itu aku masuk ruangan, didalam semua pada pake batik, terus aku duduk deket sama dua anak 2006, ngobrol2, mereka tanya angaktan berapa kerja dimana, aku terus bilang ke mereka kl temen angkatanku yg jadi dosen tuh ada Anny, Siddiq, sama dulu Medi, trus temen yg jadi dosen SI ada Rully. Mereka bilang kl adiknya Anny itu angkatan 2006 juga, ikut SE juga, abis itu kl Siddiq sekarang sudah pulang ga di Australia lagi, abis itu dulu sempat diajar grafika sama Medi. Mereka bilang kl Medi ikut suaminya di Jakarta ga ngajar lagi, aku bilang ke mereka kl sekarang Medi masih ngajar tapi di Binus.

Habis itu semua dipersilahkan duduk di depan, aku cari ruang yang kosong, duduk di deret ketiga di belakangnya wahib, Wahib duduk dekat mas Lucky Esa, deret ketiga masih kosong, sedangkan sebelah kiriku banyak anak2 2002 dsb, aku ga gt apal. Kursi2 di susun mirip ruang kuliah, ada 4 kolom masing2 kolom ada 6-7 barisan, berbentuk U ditengah depannya ada meja panjang buat nara sumber. Aku duduk di kolom sebelah kanan yg menghadap meja panjang tadi. Habis itu ada mas Wongky, mas Deku, sama mas Abi duduk di belakangku, aku salaman, bilang minta maaf sekalian lebaran, habis itu eli datang duduk sebelah mas Aby.

Habis itu panitia mempersilahkan beberapa orang untuk menjadi nara sumber, ada mas Lucky Esa 85, Aris Kumara 2002, mas Wongky 98 sama dosen cewe angkatan 2004. Habis itu ada 2 anak 2006 yang bertanya, salah satunya dia tanya tentang pentingnya ilmu berkomunikasi di dunia kerja.

Mas Lucky cerita kalo dia angkatan pertama, kuliah 8 tahun, habis lulus sempat jobless lama di surabaya, abis itu ditawari sama orang BP untuk bekerja di BP tapi di pedalaman kalimantan, dia di BP selama 8 tahun habis itu ketrima di Microsoft dan bekerja di sana selama 8 tahun, dia putuskan untuk keluar, ambil S2 dan jadi pembicara di banyak tempat, dia cerita Microsoft sendiri minta dia balik tapi dia tidak mau, waktu mau pulang dia juga cerita kalo ada orang google dari Amerika datang ke dia buat konsultasi, dia juga pernah diajak ke kantornya google di luar negeri, dia juga berencana mau ambil S3.

Aris bercerita kalo dia tidak sempat bertemu sama angkatan 2006 karena sudah lulus, dia juga bercerita enaknya kalo kerja di IBM, kerjaan bisa dikerjakan di rumah asal tanggung jawab, jam kerja juga fleksibel, dia cerita kalo anak TC yg di IBM ada Amiril Muknimin2002, Roy2002, Eddie Tjandra, mbak Dewi, sama Januar00. Dia cerita kerjaan dia banyak presentasi, dia juga cerita kalo harus percaya diri, dia bilang waktu di training di Hong Kong, bertemu sama anak2 IBM dari negara lain, dia bilang yg dari India yang pinter2 malah tidak lulus trainingnya. Dia bilang IBM mau ada rekruitmen buat karyawan kaya dia dia minta anak2 2006 mendaftar karena IBM punya list universitas2 yg sudah diakui dan ITS ada didalamnya.

Habis itu ada mas Jayus atau siapa lupa ku namanya yg duduk di belakang yg pernah kerja di IBM selama 7 tahun, dia angkatan 85 temennya mas Lucky, dia dateng sama istrinya mbak Sri yg 5 tahun dibawahnya berarti angkatan 90 sama anak putrinya, dia dipersilahkan bicara sama mas Lucky, dia cerita kl IBM tuh perusahaan gila karena mau terima karyawan kaya dia, dia juga kuliah 8 tahun, waktu interview dia ditanyain sama bosnya mau ngga dateng tanggal sekian buat tes atau apa gt, dia bilang ga mau, terus ditanyain lagi kenapa, dia bilang soalnya mau naik gunung, habis itu dia langsun diterima. Sedangkan mbak Sri cerita kalo dia itu dalam angkatan yang beruntung karena waktu itu masih sedikit anak Informatika, tidak seperti sekarang yang banyak sarjana informatika, dia juga bilang kalo kelebihannya ITs tuh tidak ada ITS connection, kl ITB UI khan ada, kl di ITS ga ada, dia bliang dia terapkan sama dia sendiri, dia bilang waktu ngetes karyawan masuk dia tidak peduli apa anak ITS apa bukan, kalo bagus ya diterima. Dia juga cerita bagi yang pengen kerja di Singapura ada Singapore Connection, kaena Singapura tuh cari karyawan2 yang berpengalaman, Singapore Connection tuh memfasilitasi tempat selama 6 bulan untuk cari kerja di Singapura.

Mas Wongky cerita kalo dia waktu lulus juga daftar di IBM, tapi dia telat buka email yang ternyata dia dapat email ketrima di IBM, sebelumnya anak2 2006 kunjungan ke Mandiri dan memperkanalkan ulang posisinya di Mandiri, dia cerita di Mandiri tahun 2005, dia bilang awal dia masuk masih sedikit anak ITS, sekarang sudah banyak, dia bilang kalo sejak ada pejabat Mandiri yg dari ITS, aku lupa namanya sekarang Mandiri punya kepercayaan lah sama ITS. Dia juga bilang tentang pentingnya networking, dia bilang bahwa di Mandii, pas dia ketemu sama permasalahan banking dia tanya2 sama temen2nya yang kerja di banking untuk pecahin masalah itu, jadinya dia bisa menyelesaikan masalah itu. Waktu makan bersama juga mas Wongky cerita kalo anak 99 yg di Mandiri itu ada Liga sama Firstiar, Roy di Singapura, Maman mau ke Kalimantan.

Habis itu mas Aby unjuk jari, dia malah ngobrol yg paling panjang, suasana malah jadi kaya Format, dia bilang abis ini mau pulang, ga ikut makan malam, dia bilang banyak hal, dia bilang di dunia kerja harus PD, belajar menghadapi orang, dia bilang dulu mana berani pidato seperti itu, dia juga bilang jangan terlalu idealis, di kantornya saja dia bilang pekerjaannya bukan sebagai software engineer tapi excel engineer, habis itu dia bilang kalo yg didepan itu khan success story semua, barangkali perlu juga fail story, dia juga bilang kalo di bidang dia yaitu mining khan top2nya kalo diterima di Halliburton atau Schlumberger, padahal khan belum tentu ketrima disana.

Habis itu aku beranikan diri juga untuk bicara, aku bilang ke mereka kalo karirku tuh jelek, aku kerja di vendor lokal, itu pun sebagai programmer, sebelumnya juga pindah2 kantor terus, aku juga sebetulnya tidak ada bahan untuk dibicarakan, tapi melihat mas wongky sama mas aby bicara, maka aku beranikan untuk bicara, aku bilang ke mereka kalo sebelumnya pikirku mau datang apa ngga, wis akhirnya aku dateng aja kali aja nanti bisa bertemu sama kakak2 kelas, abis itu aku bilang ke mereka sebetulnya aku tidak punya kompetensi yg bagus tentang dunia kerja la wong karirku juga jelek, tapi aku ceritakan ke mereka pidato pak mushonif dulu pas pembekalan wisuda kl di dunia kerja tuh yg penting attitude, dia bilang attitude 99%, skill cuma 1%, abis ituaku juga bilang kl mau sukses tuh agamanya harus kuat, terus aku bandingkan pakaiannya anak2 2006 sama anak2 SGU, aku memuji pakaiannya anak 2006 bagus pake batik, aku bilang jika kuat tidaknya agama seseorang direpresentasikan sama pakaiannya maka aku seneng sama anak2 2006 karena pakaiannya bagus berarti agamanya juga kuat.

Habis itu acara ramah tamah sama makan malam, aku diem tok sepeti biasanya, tapi aku bawa santai aja, aku semeja sama Eli, mas Wongky sama anak 2004 yang ketrima di Mandiri. Wahib ada di meja depanku. Habis itu foto bersama terus pulang, aku pulang bareng eli naik taxi tarif bawah ke stasiun terus naik kereta jam 11 malam, sampe di stasiun Rawa Buntu aku naik ojek ke German Center karena aku parkir motor disana.

Wednesday, September 30, 2009

Membuat Google Wannabe Paging



Alhamdulillah, aplikasi Tunas Unggul Bangsa sudah live dan bisa diakses lewat internet melalui http://donatur.yayasan-tunas-bangsa.com.

Appfuse menggunakan displaytag untuk menampilkan data2nya per halaman, misalnya 10 record perhalaman, hanya saja displaytag mengambil keseluruhan data meskipun yg ditampilkan hanya 10 record, hal ini dikarenakan displaytag memiliki fasilitas utk sorting per kolom, ataupun download data dalam bentuk excel atau pdf. Hal ini tentu saja tidak hemat resource karena hanya untuk menampilkan 10 record saja, sistim harus query seluruh record.

Oleh karena itu saya menggunakan cara sendiri untuk menampilkan data sesuai kebutuhan, saya hanya melakukan query sebanyak record yang butuh ditampilkan, dan sebagai penanda tampilan record keberapa, diperlukan penanda halaman (paging), misalnya halaman 2 menampilkan record mulai 11 sampai 20, dst. Dalam post ini saya jelaskan bagaimana membuat paging seperti yang ada di google.

Jika Anda googling, akan ada daftar halaman (paging) jika hasil pencariannya banyak, seperti : "Previous 1 2 3 4 5 6 7 8 9 10 Next". Untuk membuatnya sangat mudah dan saya hanya bermain dengan beberapa if-else di jsp dengan beberapa parameter, dan ini bisa diaplikasikan dengan bahasa2 lain.

Aplikasi Tunas Unggul Bangsa menggunakan spring MVC wannabe (karena ternyata tidak benar2 MVC), oleh karena itu bermain dengan banyak controller, dengan kata lain untuk menampilkan suatu halaman maka dubutuhkan controller. Saya butuh tiga parameter untuk controller paging:
1. page, halaman yang direquest user, misalnya 5
2. totalPages, banyak halaman, didapatkan dengan cara query "Select Count" dibagi perPage, dimana perPage adalah total record tiap halaman.
Misalnya total record = 100, perPage = 10 record, maka totalPage = 10.
3. listPages, daftar halaman yang muncul di aplikasi.
Misalnya kita menampilkan 5 halaman, maka yg muncul adalah "3 4 5 6 7"

Sementara itu di jsp-nya algoritmanya sebagai berikut:
1. jika page != 1 maka cetak "Awal", link ke halaman 1
2. cetak semua nilai listPages, jika sama dengan requestedPage maka tidak ada link, selain itu link ke halaman yg sesuai
3. jika totalPages != 0 dan requestedPage != totalPages maka cetak "Akhir", link ke halaman terakhir
Hasil dari contoh kita adalah "Awal 3 4 5 6 7 Akhir"

Tulis semua langkah diatas kedalam file jsp terpisah, misalnya paging.jsp, maka kita hanya tinggal include diatas table record.

Sebagai perbandingan dengan google, google memiliki 20 listPages, jika total halaman yg kita miliki bukan 5 tapi 20, maka kita memiliki listPages yang sama dengan google, dan itu bisa saja diubah karena saya jadikan Constant, hanya saja nantinya malah jelek tampilannya soalnya akan sangat melebar. Perbedaan yg lain adalah google menampilan "Prev" dan "Next", dimana link-nya menuju halaman sebelum atau halaman berikutnya, sedangkan yg kita miliki "Awal" dan "Akhir" menuju halaman awal dan akhir.