Sebuah aggregator blog..
29 Dec
Lalu hal yang bisa dilakukan adalah memulai dengan berpikir positif, membuka pikiran selebar-lebarnya sehingga semakin banyak hal-hal baru yang masuk di pikiran. Karena semua ilmu pada dasarnya adalah baik, dan bermanfaat untuk manusia.
Berpikir tertutup dengan tetap memegang dasar pendidikan yang artinya tidak merelakan adanya ilmu baru bisa diangggap sebagai orang yang egois terhadap ilmu. Tapi sekali lagi, semua butuh waktu. Tidak semudah membalik telapak tangan.
Untuk lebih mudahnya, bisa digunakan dua konsep antara harapan dan ketakutan. Berharap bahwa semuanya untuk masa depan, mencapai tahap-tahap kehidupan selanjutnya. Sedangkan ketakutan kehilangan semua yang sudah di depan mata, menyesal, dan akhirnya harus memulai perjuangan hidup baru lagi.
***
Sudah lima bulan ini, saya mempelajari hal-hal baru tentang oil and gas. Bukan sebagai background saya sebagai seorang industrial engineer, tapi bener-benar dididik untuk bisa menjadi seorang petroleum engineer. Dibandingkan dengan track records pekerjaan sebelumnya, trainee ini tentu saja sangat berbeda secara keilmuan.
Setelah melalui tahap pembelajaran termasuk pengamatan di sebuah lapangan minyak, sedikit demi sedikit mulai tergambar sebuah gambaran lengkap kompetensi technical dalam oil and gas. Dimana secara umum, petroleum engineering terbagi dalam empat bidang kompetensi khusus, yang sangat dekat pembagian tugasnya dengan kondisi oil dan gas mulai di dalam sumur hingga sampai di sales point.
Satu, reservoir engineering (reservoir). Reservoir bertanggung jawab terhadap reservoir (batuan yang mengandung cadangan oil dan gas). Secara singkat, seorang reservoir engineer akan menghitung cadangan dan properties dari oil atau gas tersebut. Dengan peran seorang reservoir engineer, bisa ditentukan produksi sebaiknya dilakukan dengan rate berapa, bertahan berapa lama, lalu kemudian dilakukan enhanced oil recovery (sebuah tahap meningkatkan performa sumur).
Kedua, drilling engineering (drilling). Drilling bertugas melakukan pengeboran ke target depth untuk sebuah sumur eksplorasi (baru untuk mancari oil and gas), atau development wells. Seorang drilling engineer termasuk bagian dalam pekerjaan yang sangat kritis. Dengan melihat apa yang terjadi di Brantas Sidoarjo oleh Lapindo, maka sedemikian kritisnya pekerjaan drilling ini. Masuk ke bagian drilling ini juga operasional treatment yang dilakukan terhadap existing wells yang masuk dalam pekerjaan work over atau well services.
Ketiga, production engineering (production) atau biasa dikenal juga subsurface. Setelah lobang sumur selesai dibor dan oil terbukti ada, maka tugas production lah untuk mengangkat sumur dari resorvoir lalu dialirkan ke stasiun. Pengaliran oil dan gas ini termasuk juga teknik yang dilakukan untuk bisa memproduksi sumur yang bertekanan rendah sehingga dibutuhkan sebuah artificial lift. Artifcial lift ini contohnya berupa gas lift, rod pump (pompa angguk yang sangat khas di oil), atau submersible pump.
Keempat, surface fecilties engineering (surface). Setelah sampai di stasiun, maka oil and gas diolah lanjut. Stasiun disini bukanlah stasiun untuk pengolahan minyak (refinery). Stasiun ini hanya untuk mengolah untuk memenuhi kriteria dari sales. Kriteria ini misal dari aspek water content, salt content, endapan sedimen, dan tekanan uapnya. Jika reservoir setiap saat berhubungan dengan hal-hal di bawah sana yang tidak terlihat, maka surface ini sangat terlihat jelas karena bertanggung jawab pada alat-alat di permukaan dari stasiun hingga pipeline ke sales point.
Sebenarnya ada lagi satu bagian yang tidak dimasukan dalam bagian engineering namun sangat penting, terutama dalam eksplorasi minyak-gas, yaitu bidang geology and geophisic (geoscience). Bidang ini sangat terkait erat dengan batuan, hal di bawah tanah yang sangat interpretatif. Sedangkan engineering ‘bekerja’ setelah oil dan gas terbukti ditemukan (proven). Interface antara geoscience dan engineering adalah reservoir.
***
Orang boleh bilang bahwa oil and gas adalah industri yang paling attraktif dan ‘menjanjikan’. Kebutuhan engineers baru disana selalu ada setiap waktu, dalam tahun hingga mingguan! Untuk masuk kesana pun, tidak hanya dibutuhkan tekad mendapatkan ‘sesuatu yang lebih’ karena itu pun harus dibayar dengan kompetensi yang sangat spesifik pula.
Dan untuk bisa eksis dalam sebuah bidang industri, maka harus masuk dalam core-bussiness nya. Jika masuk industri telekomunikasi, maka orang yang tau telco lah yang bisa ‘menguasai’ bisnis tersebut. Sedangkan di oil and gas, maka orang petroleum (plus suplemen manajerial) lah yang akan bisa eksis disana.
Jadi sekarang, tidak masalah buat saya untuk ‘banting setir’ menjadi seorang (new) petroleum engineer. Di perusahaan yang proud of Indonesia senantiasa dihembuskan sehingga masih bisa proporsional dalam idealis bekerja, maka mencari ilmu baru in ‘a most wanted industry’ menjadi hal yang menantang untuk belajar dan belajar.
Saatnya bekerja, menyelesaikan masa trainee ini sebaik-baiknya. Do’akan saya, terima kasih. :)
*Blogging from SMB II, South Sumatra
23 Dec
22 Dec
21 Dec
OK, this date a year ago was the second birthday. This date two years ago, was the first birthday. This date, three years ago, I've started to blog here.
It has been a quick three years! The first post on this third year was about .NET compiler sizes. Now that .NET 3.5 is out, I have recheck the compiler size, and right now csc.exe have grown to 1,545,720 bytes! (some DLLs are gone, so likely they merge everything into single .exe file)
My favorite post is definitely April 1st post. Nobody beats 19 cores CPU + 10Gb of RAM on a laptop, yet. The biggest post (in terms of view and comments) was Windows Vista giveaway. Maybe I should give some VS2008 away later! :D
Happy holidays from rainy Singapore!
20 Dec
ketika waktu tlah menciptakan cerita tentang kita
mestinya semua indah kini yang terasa
sejujurnya kadang aku pun tak mengerti peran apa yang kita jalani
seindahnya dunia ini takkan seindah
bila ku milikimu, dan ku milikmu
bila memang bukan kita yang tentukan
kemana arah cinta ini kan membawa
berikanlah aku satu jalan-Mu Tuhan
agar aku mengerti apa yang kita jalani kini
bilakah waktu tlah menentukan saatnya
saat untuk bersama, saat-saat kita jelang bahagia
percayalah sayang bukan aku tak sayang
bila cinta tak mampu bertahan
seindahnya cinta ini takkan seindah
bila ku milikimu, dan ku milikmu
tetaplah tersenyum
yakinlah waktu tlah tentukan saatnya
aku denganmu..
* entah kenapa lagu ini berasa "megang" bgt, ehehe.. lagi suka aja ama lagu ini (..dan ketika by maliq & d'essentials).. semuanya pas : musiknya, vokalnya, liriknya.. jadi satu kesatuan yang bener2 dapet lah.. hehehe
17 Dec
Apa yang terlintas di pikiran anda saat 3 nama bank sebagai judul diatas? Apakah anda mengira saya akan membandingkan ketiganya? Kurang lebih memang perbandingan namun dari sudut pandang customer ketiganya yaitu BCA, Bank Mandiri dan Bank Syariah Mandiri(BSM), dan khususnya untuk pelayanan tabungan reguler (Tahapan BCA, Tabungan Mandiri, dan Tabungan BSM).
Pertama, tujuan menabung pada dasarnya adalah sebagai cadangan, uang yang siap digunakan sewaktu-waktu. Urusan bunga/interest bisa saja nomor dua, yang penting aman dan mudah dijangkau. Dan bunga yang menarik tentu akan semakin menambah atraktif tabungan tersebut.
Tapi dengan jeli melihat biaya yang dibebankan dibandingkan bunganya, nasabah akan berkerut dahi. Silahkan mengamati data historis tabungan nyata berikut, dengan penyesuaian dan pembulatan tapi dijamin tidak berbeda jauh.
| Rp | BCA | Mandiri | BSM |
| Service | Konvensional | Konvensional | Syariah |
| Interest % * | 2.0% | 2.25% | Profit Sharing |
| Min Balance Interest | Rp 1,000,000 | Rp 500,000 | - |
| Adm Fee | Rp (10,000) | Rp (7,000) | Rp (5,000) |
| Account ± | Rp 5,100,000 | Rp 5,200,000 | Rp 5,400,000 |
| Interest ± | Rp 8,500 | Rp 9,000 | Rp 24,000 |
| Balance ± | Rp (1,500) | Rp 2,000 | Rp 19,000 |
| Min Account to 0 Balance | Rp (6,000,000) | Rp (3,734,000) | Rp 1,500,000 |
*BCA; 1-10 juta(2%), 10-100 juta(2.5%), 100-1000 juta(3%), >1 M (4%)
Mandiri; 0.5-5 juta(2.5%), 5-50(3.25%, 50-100 (3.5%), 100-500(3.75%), 500-1000(4%), > 1 M (4.25%)
BSM; profit sharing (40% nasabah: 60% bank)
Dengan ‘hanya’ menyimpan 5 jutaan uang di BCA, beban > bunga artinya nasabah rugi. Di Mandiri relatif ‘lebih manusiawi’, dan BSM jauh lebih manusiawi. Jika ingin tidak rugi, setidaknya nasabah harus menyisakan uang di BCA 6 juta, Mandiri 3,75 juta sedang BSM sekitar 1,5 juta (karena BSM berbasis nisbah/bagi hasil, maka jumlah tersebut pendekatan terpercaya).
Lalu jika nasabah melihat range skema return yang ditawarkan, terlihat bahwa BCA menerapkan ‘reward’ lebih kepada si kaya, dengan batas bawah bunga 1 juta. Mandiri pun demikian (batas bawah 0.5 juta) namun tidak ‘sepelit’ BCA, sedangkan BSM semuanya sama (minimal saldo tabungan 50 ribu).
Di BCA atau Mandiri, nasabah yang tidak elligible dimana kurang dari 1 juta di BCA atau 0.5 juta di Mandiri, maka harus siap menhitung hario mengingat uangnya akan semakin habis membayar biaya admin. Di BSM pun pada dasarnya juga sama ketika dana kurang 1.5 juta dimana return lebih kecil admin cost, namun tingkat percepatan tergerusnya uang tidak ‘secepat’ BCA atau Mandiri.
Bagaimana dengan nasabah yang super kaya? dimana tabunganya kurang 1 M? Saya belum melakukan simulasi, terutama dengan rekening BSM saya yang ‘terbatas’. Namun dengan hitungan sederhana diatas, jika di angka 5 jutaan saja return-nya bisa 2.5 kali lipat, maka kenaikan bunga dari 2.5% (untuk tabungan 5 jutaan) ke 4.25% (tabungan lebih besar 1 M, interest terbesar dari Mandiri) hanya 1.7 kali, jelas tidak sebanding dengan perbedaan antara Rp 24,000 dan Rp 9,000 yang 2.7 kali!
Ok, untuk alasan hitung-hitungan keuangan sederhana diatas nasabah yang jeli sebenarnya akan tahu kemana harus mempertimbangkan penempatan dananya. Tapi ada filosof, high pain high gain, low gain low pain. Nasabah ‘dibiarkan’ punya return rendah tapi mendapatkan pelayanan terbaik. Mari kita lihat tabel berikut.
| | BCA | Mandiri | BSM |
| ATM^ | Banyak | Banyak | Terbatas, di Mandiri ambil free |
| Cash-in | Cabang banyak | Cabang banyak | Cabang terbatas ( |
| ATM setor | - | - | |
| Merchant | Sangat banyak | Banyak | Minim (via Mandiri) |
| Services | Beragam banyak | Beragam banyak | Mulai berkembang |
| M - Banking | Ya, SMS Based | Ya, SMS Based | Ya, Application Web Based |
| Net Banking | Ya | Ya | Ya |
^Banyaknya jaringan ATM yang saling terhubung membuat kendala ini tidak sangat signifikan (penambahan pengambilan uang non-ATM sendiri 5 ribu per transaksi)
Dari tabel pelayanan diatas, harus jujur diakui jika BCA sebagai bank dengan pelayanan perbankan terbaik. Menyusul Mandiri yang mulai menyaingi BCA, baru kemudian BSM sebagai salah satu bank terbaik di sektor syariah.
Namun untuk beberapa bidang layanan, semuanya tidak bisa dipukul rata BCA atau Mandiri sebagai terbaik. Untuk mobile-banking, terbukti BSM sebagai bank yang menggunakan application web based sehingga tampilan program (yang sudah didownload saat registrasi) di Hp nasabah mirip seperti halnya menu-menu di ATM. Sedangkan BCA atau Mandiri, masih sms based dimana nasabah harus mengirimkan sms ke sms center baru kemudian transaksi akan diproses. Secara biaya, BSM dan Mandiri sama-sama memberikan Rp 500 per transaction request.
Jika BSM sudah mampu memberikan layanan mobile yang lebih mudah, maka praktis semua layanan perbankan-nya bisa lebih mudah via Hp (atau via Net-banking BSM). Memang ada biaya, tapi biaya itu tidaklah sebanding dengan high return, kemudahan m-banking, dan mobile cost yang sama. Sedangkan untuk pengambilan ATM tunai bisa dilakukan dengan gratis di ATM Mandiri. Hanya mungkin jaringan merchant, dan branch-nya yang kalah jauh dibanding rivalnya disini, BCA atau Mandiri.
***
Akhirnya setelah melihat analisis diatas, ujung-ujungnya akan kembali lagi ke nasabah akan ditempatkan dimana uang tabungannya. Sebagai bahan pertimbangan, ada setidaknya 2 hal yang sebaiknya harus kita perhatikan dalam menentukan penempatan uang.
1. Fungsi tabungan
Tabungan difungsikan sebagai apa? Jika kita berbisnis dan membutuhkan bank yang punya jaringan dan pelayanan luas, maka peran bank-bank besar tetaplah harus digunakan. Jadi, bisnis tetaplah bisnis.
2. Tujuan Tabungan
Dalam rangka apa kita menabung? Jangka panjang untuk investasi-kah, atau sebagai intermediasi finansial lainnya misalkan KPR, Reksadana atau Kredit Mobil? Dengan tahu tujuan jangka panjang sebuah tabungan, maka kita bisa memberikan perlakuan sesuai dengan tujuannya tersebut. Misalnya bank sebagai alat mediasi investasi di saham atau reksadana, maka harus dipilih bank yang mempunyai program reksadana menarik misalnya Mandiri.
Lalu, bagaimana dengan BSM dengan high return-nya? Maka saran saya untuk menempatkan alokasi keuangan yang benar-benar tabungan disana. Pun kita masih bisa melacaknya dengan baik via fasilitas yang disediakan. Tabungan kita bisa saja dibanyak tempat, karena pertimbangan teknis. Namun, pasti ada satu rekening yang benar-benar menjadi tabungan kita. Apalagi dengan kombinasi pertimbangan syariah dan teknis, maka kita pun lebih bisa menyusun susunan bank yang kita gunakan.
Jika sudah punya planning dan kuasa atas tabungan-tabungan kita, tahapan selanjutnya controlling terhadapnya. Biasanya ini yang lebih sulit karena ketersediaan uang cash yang cukup di tabungan. Tapi dengan pengelolaan keuangan yang baik, kebocoran bisa ditanggulangi.
Selain itu pun, ada kendala nonteknis yang tampaknya tidak terlihat tapi cukup signifikan, yaitu perilaku ‘pasangan’ kita. Tapi untuk yang satu ini, saya tidak bisa memberikan banyak pendapat. :)
17 Dec
14 Dec
Waktu zaman saya mahasiswa dulu , selalu saja ada teman-teman yang bersemangat dan bertanya-tanya ‘quo vadis mahasiswa sekarang’, ‘gimana nih kemahasiswaan’, dan lain-lain. Karena banyak juga yang heboh nanya-nanya dan membahas, dan saya hanyalah mahasiswa yang ngikut tren, jadilah pula saya memikirkan.
Saya baca sejarah. Rasakan semangat zaman di tiap eranya. Dengerin doktrin omongan senior-senior, yang bener maupun keblinger. Zaman dulu kayak apa sih? Sekarang zamannya apa ya? Kecenderungan ke depan gimana? Apa hubungannya ama mahasiswa? Jadi, seharusnya mahasiswa gimana?
Kesimpulan saya dulu sederhana: khilafah conscientizao atau consciencetization. Ada yang menerjemahkan konsaintisasi (aneh banget!). Kemarin di Kompas ada yang menggunakan kata ini dan diterjemahkan sederhana: kesadaran kritis. Yang lain-lain itu cuma pernak-pernik, dan dilakukan dalam rangka mengkampanyekan kesadaran kritis ini. Bukan membangun institusi, melakukan pergerakan bersama, apalagi melawan tirani. Emang, buat apa membangun institusi kalau arahnya juga tidak jelas? Ngapain ngotot mau gerak bareng di tengah era fundamentalisme hedonisme (istilah yang aneh...)? Tirani mana yang mau dilawan?
Conscientizao adalah tujuan pendidikan Paulo Freire, dalam Pedagogy of the Oppressed. Buku yang konon jadi buku wajib mahasiswa ITB. Makanya saya cari mati-matian (susah bo nyarinya! Udah ga terbit lagi tuh buku...), akhirnya nemu di Palasari, dan saya baca *bahan untuk ngantuk menjelang tidur*.
Kesadaran kritis itu, intinya, adalah kondisi pikiran dalam mempersepsi lingkungan sekitar (dalam pengertian luas, semua hal lain yang kita hadapi) dengan melihat aspek sistem dan struktur. Bisa aware dan menganalisis secara kritis struktur dan sistem sosial, politik, ekonomi, dan budaya (termasuk pelakunya), dan jika ada (pasti ada sih...),mengidentifikasi dan menyadari ketidakadilan dalam masyarakat dan bagaimana mentransformasikannya. Misalnya kasus kemiskinan. Seharusnya kita sadar kemiskinan bukanlah masalah takdir dan kemestian (ada yang kaya, ya ada juga yang miskin...). Kalau ini sih kesadaran magis, kata Freire. Kemiskinan juga bukan karena kebodohan, kesalahan, kekurangrajinan orang-orang miskinnya sendiri (blaming the victim; kata Freire ini orang dengan kesadaran naif). Tetapi, kemiskinan harus dilihat: jangan-jangan yang terjadi adalah pemiskinan? Karena ada pembatasan akses kepada kesejahteraan, misalnya dengan sekolah yang mahal atau diprivatisasi. Atau malah ada perampokan oleh korporat yang ’berdiplomasi’ dengan pemerintah, sementara rakyat kebanyakan dibiarkan tetap miskin. Atau karena korupsi. Jadi, setiap masalah dianalisis dengan kaidah-kaidah saintifik (makanya ada kata ’science’ dalam conscientization), lalu dilihat: oh, ternyata ini yang menyebabkannya...
Sebenarnya conscientizao itu target minimal, soalnya yang lain tak kelihatan feasible untuk dilakukan saat itu. Pikiran sederhana saya waktu itu, karena kita kan pasti ga jadi mahasiswa lagi (entah lulus atau DO), minimal kesadaran kritis ini terbawa lah setelah keluar. Jadi, misalnya dia ntar kerja di KKKS (Kontraktor Kontrak Kerja Sama), minimal dia tau dan sadar bahwa operasinya nanti diganti lewat cost recovery (atau mungkin gaji dan fasilitasnya? Overhead kantor juga cost recovery kan?), jadi dia kerja dengan bertanggungjawab dan seefisien mungkin, karena ntar-ntar juga diganti ama duit negara pajak rakyat. Yang jadi bos-bos di perusahaan minyak negara nanti, misalnya, bisa nurut kalau pemerintah sekarang katanya mau mengefisienkan BUMN, termasuk lewat pengurangan fasilitas pegawai. Konsekuensi yang bergerak di pemerintahan atau sektor amal sosial mah udah jelas lah ya...
Namun ternyata itu juga susah, bahkan gagal. Sampai saya lulus, ga jelas dan ga berhasil juga...Masih ga cocok dengan zamannya, mungkin?
Ini ada sebuah ide. Saya jamin cocok dengan zamannya.
Belajar yang rajin, lulus cepat, dan jadilah makhluk kaya sekaya-kayanya. Kalau ada tawaran aktivitas, timbanglah: apa manfaatnya buat saya? Apa bisa mempercantik CV saya sehingga bisa dijual ntar, apakah akan menambah jaringan saya ke politisi-cum-pemilik dana ga jelas untuk diserahkan pada proposal bisnis yang nanti saya bawa? Apa bisa mengajari skill dan keahlian sehingga saya bisa jadi engineer yang ekstra spesialis yang dibayar sejam 4000 dolar? Apa ada relasinya yang bisa jadi klien saya ntar? Kalau tidak ada manfaatnya, tolak saja! (manfaat tak harus moneter, tanya juga: apa ada yang potensial untuk menjadi pacar kamu?). Hal-hal ga jelas itu hanya akan memperlama waktu kamu di kampus! Dan kalau omongan senior-seniormu itu benar, bahwa kuliah di ITB itu dibayar PAJAK RAKYAT, maka mendingan lulus cepat bukan? Biar rakyat ga lama ngebayarin kamu. Jangan dengerin senior kamu, apalagi yang lulus 7 tahun: dia sendiri paling lama menikmati pajak rakyat. Mendingan kamu, tho? Cuma dibayarin rakyat 3,5 tahun.
Sekali lagi, jangan pernah dengerin senior-senior dengan paradigma mahasiswa lama yang kolot dan tidak progresif. Ini era fundamentalisme pasar, bung! Homo paling oeconomicus lah yang akan menang. Jadilah mahasiswa dengan paradigma masa kini, market-paradigm!
Jangan pernah mau diospek ga jelas, apalagi kalau dibilangin kalian harus berjiwa sosial, peduli sesama, dan lain-lain. Mana ada altruisme yang menyelesaikan masalah? Pasar lah yang akan mengatur dan menyelesaikan masalah, bukan kebaikan para filantrop. Berapa yang telah disumbangkan Bill dan Melinda Gates, Warren Buffet, atau orang-orang dermawan lain? Berapa jumlah penduduk yang masih miskin?
Lebih banyak yang bisa kamu lakukan kepada rakyat dengan menjadi kaya sekaya-kayanya. Buatlah korporasi besar, berapa juta jiwa yang akan kamu gaji? Dari berapa juta jiwa itu, berapa jumlah keluarganya? Belum lagi yang kena multiplier effect. Banyak sekali kan? Efeknya lebih besar daripada sumbangan 100 juta dolar sekalipun.
Lho, tapi kan nanti ada ketimpangan? Yang kaya makin kaya, yang miskin tetap miskin? Bukan salah kamu! Itu pemerintah yang gak bener. Yang gak bikin institusi dan regulasi yang baik untuk rakyat. Kamu bayar pajak, kamu taat hukum, bahkan kamu menggaji banyak karyawan. Peraturan keblinger tentang Coporate Social Responsibility juga kamu ikutin. Salah siapa? Jelas bukan kamu. Ini salah pemerintah.
Dan siapa sih pemerintah itu? Senior-senior kamu juga, dengan paradigma lama yang tidak progresif dan ketinggalan zaman dulu itu. Senior-senior kamu dulu yang menceramahi kamu untuk berjiwa sosial, yang karena gak ada kerjaan masuk partai atau LSM, lalu kebelet untuk berkuasa dan sekarang di pemerintah. Nah, keliatan kan? Mereka malah gak bener kerjanya, dan jadi pihak yang paling berpengaruh memiskinkan rakyat. Jelas, mendingan kamu, wahai mahasiswa rajin-lulus cepat-lalu kaya dahsyat.
Jadilah pegawai di perusahaan terbaik di dunia, kalau bisa ya jadi ekspatriat di negeri orang dengan gaji dollar. Lagi-lagi kamu berjasa: kamu bawa dolar dari luar negeri dan menjadi pahlawan devisa yang lebih banyak membawa duit daripada para pahlawan devisa tapi selalu disiksa pemerintah dan aparatnya itu (ingat, siapakah mereka? Senior kamu juga dulu!). Kamu membawa dolar, mengharumkan nama Indonesia sehingga tak hanya dikenal karena pemerintahnya yang aneh. Sekali lagi, siapa yang lebih nasionalis, lebih berjasa buat bangsa Indonesia?
Jadilah kritis! Skeptislah dengan omongan senior-seniormu, apalagi dengan paradigma kolot. Nanti, di masa depan, kamu yang gantian menyalahkan dia: hoi pemerintah, kerja yang bener! Makan duit pajak gw aja lu!
Bangun kesadaran kritis: lihatlah, jadi siapa yang menyengsarakan Indonesia? Pemerintah, yang isinya senior-senior kamu dulu!
Ingat, pikiran ini harus disebarkan. Ada omongan senior kamu yang benar: bahwa kampus adalah tempat kampanye beragam pemikiran. Sudah bosan kan kamu, dengan fundamentalis agama yang macem-macem, dari mulai yang apolitis sampai yang kerjanya demo nuntut khilafah? Dengan mahasiswa sosialis dari sosialis yang ‘pasar-sosial’ (istilah apa pula ini?) sampai yang kiri-utopis? Tapi masalah tak juga selesai? Bayangkan kalau mereka mewariskan pikiran-pikiran lamanya yang tak menyelesaikan masalah ke teman-teman dan adik-adik kamu! Mau jadi apa negara ini? Kamu harus bisa membuat kutub baru, para mahasiswa fundamentalis pasar. Ya, ini buat kebaikan kamu juga, tapi seperti yang telah kamu baca di atas, akhirnya bangsa dan rakyat juga untung kan? Kamu untung, bangsa untung. Pertamina aja kalah.
Sebarkan! Buat mentoring. Kuasai lembaga kemahasiswaan yang dulu jadi sarang senior kamu yang tidak progresif itu, karena strategis sekali untuk kampanye pikiranmu. Koalisi dengan rektorat, yang tampaknya lebih progresif meskipun lebih tua (siapa bilang yang muda yang progresif?) dan bisa mendukung pikiranmu. Ih egois banget! Ini buat kamu doang? Katakan dengan keras: YA! Tapi secara makro, semua nanti juga akan untung. Minimal, lebih baik daripada usulan solusi mereka, yang dari jaman mulai pergerakan mahasiswa dulu tak menyelesaikan masalah.
Salam hebat! Biarkan uang yang bekerja untuk anda!
;p
13 Dec
So earlier this afternoon I delivered a talk about new language features in .NET 3.5 for Singapore audiences. I admit it's not the best talk I've ever done, even worse, it's not even good.
For you guys who didn't grab the concept or wanted to know more, below is the long explanation about how things should've gone through...
First of all, I've created a small console application, to display the result of the code. I can type all code but no result, that's uninteresting. So for the talk, I've created a search application. I have not emphasized this basic functionality of the application during the talk. A search application is the easiest form of querying a collection of data, so it should be very natural.
Up next is the "source query" we are going to use throughout the talk. Previously the talk was designed for this query to be put at the final conclusion, where all of the features combined. This time, I tried a different way.
The "source query" is then translated to "ordinary function calls".
Note to self: the appearance of Lambda expression there is quite confusing. I should use anonymous method or standard delegate next time (to ease the transition from 2.0).
To make sure that both syntax behave exactly the same, we're going to switch to demo mode to see it in action.
Here's the code for "source query":
return
from cookie in christmasCookies
where cookie.Name.Contains(lookup)
select cookie;
And here's the code for "ordinary function calls":
return
christmasCookies
.Where(cookie => cookie.Contains(lookup))
.Select(cookie => cookie);
If you run it, both will return same result. I can open it using Reflector to see similar code for both function.
Now that you know the syntax equivalence of the "source query", we can move on to discuss each language features that is used to make LINQ actually works...
The first and most visible is Extension Method. The methods called in the "ordinary function calls" are one-to-one replacement with LINQ keywords; where for .Where(), select for .Select(), etc.
Extension method enables you to add method to an existing class without limitation of the class' inheritance modifier. You can add method to an abstract, sealed, normal, or even interface.
To illustrate the usage, I've created a simple extension method for speech synthesis. It also outlines the ease of use of .NET TTS engine.
Here's the code:
static class SpeakExtensions
{
public static void Speak(this string str)
{
System.Speech.Synthesis.SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer();
synth.Speak(str);
}
}
Now you can make any string to .Speak() by calling the extension method. Take note that you are not subclassing or recompiling the System.String class.
Advanced note: under the hood, extension method uses a concept of static class/method to do it's magic (that's why it has to be declared inside a static class). Static class and static method are basically available to be called from any part of the code (provided you referenced them). Now if one of this method takes an instance of an object and do something to it, you can achieve the extension method behavior. But, using this path will make your code very messy (lots of static calls). Extension method hides (not removes) all the mess under a very elegant syntax.
Next huge part is Lambda Expression. This part is almost one-to-one replacement with "source query", because this part encapsulates the logic of the query. On the slide we have two logic, the first one is selection logic, and the second one is output logic.
Lambda expression relieves you from having to define the parameter types and the rigid structure of delegate instantiation. It is actually 100% exchangeable with anonymous delegate or standard delegate.
To illustrate this, I have created a code of how lambda have evolved from delegates.
Here is the "standard delegate way":
foreach (int i in wholeNumbers.FindAll(EvenNumber))
Console.WriteLine(i.ToString());
...
private static bool EvenNumber(int input)
{
return (input % 2 == 0) ? true : false;
}
Note that you need to define the named delegates first before you can use them in the .FindAll function.
And here's the "anonymous delegate way":
foreach (int i in wholeNumbers.FindAll(delegate(int input) { return (input % 2 == 0) ? true : false;}))
Console.WriteLine(i.ToString());
Note that you still need to pass in parameter types (v2.0 is already smart enough to infer the output parameter type).'
And here's the newly invented lambda expression:
foreach (int i in wholeNumbers.FindAll(input => (input % 2 == 0) ? true : false))
Console.WriteLine(i.ToString());
Note that there are no delegate declaration or parameter type setting.
Then come the shortcut trio; Object Initializer, Collection Initializer, and Auto-Implemented Property. All three can be easily recognized as syntactic sugar (well, almost all of the new features are syntactic sugar -- it runs on top of v2.0 CLR!).
These features simplify object declaration and instantiation. The first two are easy to understand, auto-implemented property also very simple.
Note to self: I should've written a small program on the fly for the demo. No need to prepare anything. Create classes with auto-prop, and then instantiate it using both initializer, and then output the result to screen.
Then come the confusing part, Anonymous Types. It's easy to use this in query, but it's not easy to create a real-world application for this.
Anonymous types enables you to have a strong typed class/type, without the need to declare any of the property, or even better, without the need to declare it.
The question I have not been able to answer is, in real world, when do you need to use anonymous types. In a real world scenario where all business entities are perfectly defined, I don't see any usage of anonymous types. Note that, this feature can be great if you're prototyping some application or creating some object on the fly (and still keep the strong type).
Opening the DLL using Reflector is one way to make sure that the classes are generated on compile-time rather than run-time (thus, keeping the strong typing).
Note to self: think hard on creating a good scenario for this feature demo.
The final one is Type Inference. I predict that this will be the mostly used feature since it is both convenient and safe to use.
Type inference relieves developer from the need to specify a type to a field on declaration. The type is inferred from the first assignment. The field is neither variant (can be of any type) nor System.Object (which will need boxing-unboxing process when used).
To illustrate this, I create a simple code below:
var inferredField = 1;
inferredField = "One";
You will not be able to compile the above code since the compiler will infer and declare the field type to System.Int32 (the first assignment). If you're trying to assign a string literal to an integer field, you will get compiler error.
But wait, there's another feature? Yes, and it is called XML Literal. Should the previous speaker (name hidden) does not spoil this, it would be the big closure of the day. (hey, no offense man, we didn't sync up on this one :D)
Note: I didn't even bother to put anyting in the slide because of the suspense it creates.
XML Literal enables Visual Basic developer (yes, you read that right -- this is a VB-specific feature!) to copy and paste an XML file into the code as an XML (not string). Not also that, you can also output an XML using this feature. So you can write XML inside your VB code using some XML Literal, some LINQ to XML, and some plain old function call. It sounds mixed up, but it does the job. (And that is what VB does -- the job.)
To illustrate the usage, I created an XML reader in place of the collection initializer:
Dim xmlCookies = _
<ChristmasCookies>
<Cookies>
<Id>88653C79-2F49-40fd-9BBD-38EE0B5C69CA</Id>
<Name>Chocolate Mint Cookies</Name>
...
Return _
From cookie In xmlCookies...<Cookies> _
Select New With { _
.Id = New Guid(cookie.<Id>.Value), _
.Name = cookie.<Name>.Value
}
Neat!
In Summary, here we have the list of new features I have explained. Just in case someone missed the name of the feature.
Note to self: should tell a little summary about each feature (forgot to do this earlier).
And comes the standard blurb slide. Shameless self-promotion and contact methods.
Done!
(P.S.: In case you didn't notice, you can click on each slide picture to get a bigger view of it)
10 Dec
Seorang yang menatap
Di balik jendela gelap
Menoleh sejenak kesana
Sebelum surau terbuka
Ingin hati berkata
Jangan kau kirim asa
Seorang yang terlihat disana
Karena seorang pun tahu
Ada kisah jauh menunggu
Untuk sebuah rindu
Hingga itu
Di batas waktu