Friends are forever

 

Misalnya, saya ini seorang Albert Einstein dan menumpang taksi. Setelah sampai tujuan, sang juru mudi terlihat bingung menghitung uang kembalian. Karena saya adalah orang paling pintar sedunia, boleh dong saya katakan kepadanya, “Eh Bang, ente lulus SD nggak, ngitung uang segitu doang susah amat?”

Andaikata, saya sekaya si Oom Zuckerberg dan singgah di sebuah rumah kopi untuk berteduh dan berleha-leha (uang banyak, ngapain lagi coba). Saat mencicipi kopi yang disajikan, ternyata manisnya gak ketulungan. Wajar dong saya berujar, “Eh Tong, ini kopi apa kolek? Manis banget. Mana manajernya? Panggil ke sini, sekalian ama yang punya dah, gua beli ama tempatnya semua!”

Saya bisa tulis banyak contoh lain, yang faktanya memang tidak bisa dipungkiri. Pertanyaannya adalah, apakah Anda setuju dengan sikap saya? Saya kan bertindak sesuai fakta, saya amat sangat pintar seperti Einstein atau tajir pisan seperti si Oom Zuckerberg. Tidak setuju? Anda berhak untuk tidak setuju tapi saya juga berhak dong bertindak sesuai fakta. “Motor aing kumaha aing“, istilahnya begitu.

Saya yakin tidak satupun dari Anda yang setuju dengan sikap sombong bin arogan seperti itu. Ngono yo ngono tapi yo ojo ngono. Kalau kita ingat ajaran guru ngaji atau guru PMP (ketahuan angkatan jadul ya), penyebab iblis diusir Tuhan dari surga bukanlah karena ia tidak mengakui adanya Tuhan. Ia tahu, bahkan lebih tahu dari kita manusia. Ia sudah melihat dengan matanya sendiri rupanya Tuhan seperti apa. Ia ‘haqqul yaqin’ atas kekuasaan-Nya. Lantas mengapa ia menolak perintah Tuhan untuk bersujud pada Adam, manusia pertama? Alasannya sederhana, karena ia merasa lebih baik dari Adam. Ia merasa api lebih baik dari tanah. Ia katakan bahwa tanah itu hina.

Kalau boleh saya berandai-andai, “Mungkin iblis belum belajar ilmu secara holistik, secara menyeluruh“. Ia hanya mengerti satu sudut pandang saja. Ketika kita lihat api yang dapat menyebabkan tanah terbakar, ya api lebih ‘berkuasa’ atas tanah. Kalau kita coba sudut pandang lain, ketika tanah lempung dibakar, ia dapat berubah menjadi perkakas yang lebih berharga dari api. Atau sudut pandang lainnya, ketika tanah disiram air, maka ia akan menjadi tempat yang subur, bermanfaat sebagai tempat bersemainya benih dan tumbuh menjadi tanaman. Apa jadinya bila api disiram air? Tewas!

Ketika ada Kelompok A mengatakan kami lebih baik, Kelompok B bilang Kelompok A itu ndableg ya, tidak bisa membedakan mana yang benar, mana yang salah. Ada lagi Kelompok C, kelompok lain yang mungkin seperti saya, yang mengatakan kelompok A ataupun B ada benar dan ada salahnya, kenapa sih harus saling menyinyiri, saling menyindir. Saya khawatir saya pun merasa lebih baik dari mereka. Apa sebab? Iblis amat sangat lihai menyusupkan perasaan sombong ke dalam hati kita. Ia seperti semut hitam di atas batu hitam, dilihat pada malam hari. Kita harus khawatir ketika ada perasaan, walaupun secuil, merasa lebih baik, lebih benar, dari orang lain. Jangan-jangan itu rasa sombong yang disemai oleh Iblis.

Yuk mari kita abaikan trending topic, tweet war, debat kusir di tipi atau dunia maya. Kita jaga pertemanan kita, jangan hanya gara-gara perbedaan cara pandang, atau berseberangan partai politik, kita enggan untuk melanjutkan hubungan kita. Tidak ada hal yang lebih berharga dari sebuah pertemanan. Ketika ada teman saya menutup jalur komunikasi pada teman saya yang lain, di situ saya merasa sedih.

“Since there is nothing so well worth having as friends, never lose a chance to make them.”

— Francesco Guicciardini

Iklan

Aplikasi Gawat Darurat

Pagi ini saya mendapat kabar duka dari seorang sahabat. Keponakannya yang baru berusia 3 bulan berpulang ke Rahmatullah. Katanya, ada kelainan jantung dan tidak mendapat tempat (kamar) di RSCM dan RS Harapan Kita.Berapa lama seorang manusia hidup itu adalah rahasia Allah. Umur seseorang sudah ditetapkan sejak di Lauhul Mahfuz. Ia tidak dapat ditunda atau dipercepat.

Kejadian ini membuat saya teringat akan diskusi saya dengan salah seorang mahasiswa TI Universitas Ibnu Khaldun Bogor. Ia bertanya kepada saya kira-kira topik apa yang menarik untuk dijadikan penelitian. Karena ia seorang penyuplai peralatan medis, maka saya usulkan tentang sebuah aplikasi terkait bidang kerjanya, yaitu aplikasi mobil Gawat Darurat.

Ide ini muncul karena begitu banyaknya kejadian di mana pasien gawat darurat tidak tertolong, gara-gara terlalu lama di perjalanan. Terlalu lama mencari rumah sakit yang dapat menangani pasien. Tidak jarang kita mendengar, pasien terpaksa harus dibawa ke rumah sakit lain karena tidak adanya peralatan, tidak adanya kamar atau terjebak kemacetan.

Kami berandai-andai apabila ada sebuah aplikasi mobil yang dapat memudahkan keluarga pasien mengambil keputusan. Dengan memasukkan parameter-parameter tertentu ke dalam aplikasi mobil, seperti jenis penyakit, dan sebagainya, yang saya tidak mengerti (seorang dokter mungkin paham), aplikasi akan memberikan saran ke rumah sakit yang harus dituju.

Aplikasi mobil akan memberikan saran jika dan hanya jika informasi mengenai semua rumah sakit terdekat dapat diakses. Informasi seperti jumlah kamar yang kosong, fasilitas, dokter ahli, dan lainnya (lagi-lagi saya tidak paham akan hal ini, seorang dokter lah yang harusnya mengerti), ditambah informasi rute dan kondisi lalu-lintas, yang akan membantu aplikasi memberikan usulan jalur tercepat, akan menjadi masukan berharga dalam pengambilan keputusan.

Akan lebih bagus lagi, ketika pasien menekan tombol (katakanlah, tombol “Order”), pesan ini diterima oleh rumah sakit yang dituju. Dengan cara ini, ketika pasien tiba di rumah sakit, tim medis telah siap dengan peralatan lengkap dan dapat langsung melakukan penanganan.

Bila dapat dibuat lebih canggih lagi, apabila informasi rekam medis pasien langsung terkirim ke rumah sakit yang dituju. Dengan cara ini, tim medis dapat melakukan briefing sebelum pasien tiba di rumah sakit. Sudah tentu ini hanya akan dapat dicapai apabila semua warga negara memiliki satu nomor identitas, yang terhubung dengan semua layanan di Indonesia.

Bagi kami, ide seperti ini sebenarnya dapat diimplementasikan. Salah satu masalahnya adalah apakah rumah sakit siap untuk membuka informasinya (misal, dalam bentuk API), sehingga pengembang aplikasi tinggal comot. Masalah lainnya adalah apakah rumah sakit siap menerima pasien tanpa bertanya soal kemampuan finansial, BPJS atau bukan. Dan masalah-masalah lain yang sebenarnya mungkin bukan masalah.Bagaimana, ada yang setuju dengan ide ini?

 

Belajar Flask (1)

Flask itu adalah sebuah micro-framework berbasis Python, awalnya dibuat Armin Ronacher untuk lucu-lucuan saat April Mop 2010. Ia terkejut setelah menyadari banyaknya orang yang serius mengembangkan proyek Flask.

Flask, berbeda 180 derajat dengan Django, framework Python popular lainnya. Bila Django didesain dengan kemampuan palugada (apa lu minta gua ada), maka Flask didesain secara minimalis. Aplikasi Hello World-nya dapat dibuat hanya dengan menggunakan 7 baris kode saja.

Instalasi Flask pun cukup mudah. Dengan pip, Anda cukup mengetikkan perintah pip install Flask, maka semua dependensi akan diinstal secara otomatis.

Setelah Flask terinstal, untuk membuat program sederhana, silakan Anda coba seperti baris kode di bawah:

from flask import Flask
app = Flask(__name__)
@app.route(‘/‘)
def index():
return ‘Hello, cantik!’
if __name__ == ‘__main__’:
app.run(debug=True)

… sudah cukup sampai di sini dulu ya, susah payah saya menulisnya nih, sudah lama saya tidak menulis blog ..

Pantaskah?

Hari ini saya membaca sebuah lowongan pekerjaan di salah satu milis bahasa pemrograman di Indonesia. Lazimnya sebuah iklan lowongan pekerjaan, di dalamnya ada posisi, deskripsi pekerjaan dan persyaratan apa saja yang harus dimiliki oleh calon pelamar. Bagi saya, iklan seperti ini di milis amat bermanfaat, bagi mereka yang mencari pekerjaan dan juga bagi yang memiliki perusahaan sejenis [ bisa curi-curi ide :D].

Yang membuat saya risih atau merasa aneh adalah balasan dari iklan lowongan tersebut yang tanpa basa-basi menanyakan kisaran gaji. Spontan saya berpikir bahwa yang bertanya adalah orang yang baru lulus, masih muda. Ditambah lagi dengan tulisannya, one liner, satu baris saja, tanpa menyebutkan siapa nama lengkapnya. Bukan satu dua kali saya membaca hal ini. Pada kasus lain, ada beberapa orang yang menanyakan hal yang sama. Untungnya si pembuka lowongan adalah orang yang bijak :P.

Pantaskah kita membalas iklan lowongan dengan cara demikian? Kalau saya sebagai si empunya lowongan, maka saya akan catat alamat emailnya, saya lacak IP-nya. Bila si pembalas email tersebut melamar, maka sudah pasti tidak akan saya panggil. Mengapa? Bagi saya dia tidak tahu cara atau etika yang baik dalam berkomunikasi. Kalau memang dia tertarik dengan pekerjaan tersebut, ya lamar lah. Kalaupun tidak tertarik banget, bisa juga coba-coba bertanya dengan baik-baik melalui email resmi dari kantor yang membuka lowongan. Bukan dengan bertanya tanpa basa-basi di jalur umum. Jadi? Waspadalah-waspadalah …

Convert image data using gdal_translate

In remote sensing data analyses, usually we have to convert Landsat data to Top of Atmosphere value. This process will change the original digital number, in Landsat 5 from 8 bit to decimal with the range between 0 and 1. If the data is Landsat 8 then it will change from 16bit data to decimal with range between 0 and 1.

If you want to analyze the ToA (reflectance), i.e., land cover classification, you can directly use the image. The problem will appear if you want to analyze with certain formula that require 8bit data, for example Forest Canopy Density Model. So, after you do radiometric correction to reflectance, you have to rescale into 8bit integer.

Usually I use GRASS GIS for this purpose. But somehow today I found it’s difficult to use GRASS GIS. The result seems strange. After hours of trying, I found I trick to do the process.

GDAL to the rescue

We can use gdal_translate to convert data from any kind of range into 8bit integer. There are two steps to do this :

  1. Investigate the statistics of the data source. Use the minimum and maximum value in the data source
    • gdal_info filename.tif -stats
    • Metadata:

          STATISTICS_MAXIMUM=0.38453308863717

          STATISTICS_MEAN=0.11160144537989

          STATISTICS_MINIMUM=0.010000000000004

          STATISTICS_STDDEV=0.063021296050904

  2. Translate the data using gdal_translate command
    • gdal_translate -of GTiff -ot Byte -scale 0.010000000000004 0.38453308863717 1 255 source.tif target.tif

RGB Color Correction di TileMill

Semalam suntuk kami berusaha mencari cara bagaimana melakukan setting RGB di TileMill, sehingga data yang bernilai NULL atau NODATA menjadi transparan. Kami menemukan situs http://www.mapbox.com/blog/tilemill-raster-colorizer-analysis/ , namun setelah (seperti biasa), copy-paste kodenya, ada pesan kesalahan bahwa raster-colorizer-default-mode tidak dikenal. Pesan ini muncul karena TileMill yang kami gunakan merupakan versi stabil, sedangkan fungsi di atas baru ada di versi development. Oleh karena itu, kami update TileMill menjadi versi development. Sebagai catatan, kita hanya bisa melakukan update apabila memilih Install Developer Builds pada Updates Preferences.

Berikut kode yang kami gunakan, sehingga citra awal seperti pada Gambar 1, berubah menjadi seperti pada Gambar 2. Yang perlu diperhatikan adalah:

raster-colorizer-epsilon:0.2; 
Nilai 0.2 merupakan simpangan baku dari histogram
stop(0,transparent)
Angka 0 adalah angka digital yang merupakan representasi nilai NULL atau NODATA

stop(1,#000)
Angka 1 adalah angka digital yang merupakan nilai minimum citra, dan diberikan warna hitam
stop(255,rgb(255,0,0))
Angka 255 adalah angka digital yang merupakan nilai maksimum citra. Apabila datanya 8bit, maka nilainya adalah 255, sedangkan apabila datanya 11 bit, maka nilainya adalah 2^11.

style.mss

#red {
raster-scaling:gaussian;
raster-comp-op:plus;
raster-colorizer-default-mode:linear;
raster-colorizer-default-color: transparent;
raster-colorizer-epsilon:0.2;
raster-colorizer-stops:
stop(0,transparent)
stop(1,#000)
stop(255,rgb(255,0,0))
}

#green {
raster-scaling:gaussian;
raster-comp-op:plus;
raster-colorizer-default-mode:linear;
raster-colorizer-default-color: transparent;
raster-colorizer-epsilon:0.2;
raster-colorizer-stops:
stop(0,transparent)
stop(1,#000)
stop(255,rgb(0,255,0))
}

#blue {
raster-scaling:gaussian;
raster-comp-op:plus;
raster-colorizer-default-mode:linear;
raster-colorizer-default-color: transparent;
raster-colorizer-epsilon:0.2;
raster-colorizer-stops:
stop(0,transparent)
stop(1,#000)
stop(255,rgb(0,0,255))
}

Visualisasi RGB

Gambar 1. Visualisasi RGB Sebelum Koreksi

Screen Shot 2013-06-06 at 12.31.22 PM

Gambar 2. Visualisasi RGB setelah koreksi

Saba kota

Dulu, sebelum kucing berbulu, saya pernah berkata pada diri sendiri, “tak sudi, tak rela bekerja di Jakarta”. Kehidupannya keras, panas, macet, bisa-bisa tua di jalan. Ternyata e ternyata, hari Rabu tanggal 2 Januari 2013, secara de facto saya mulai bekerja tetap di ibu kota.

Tidak seperti Kabayan yang berangkat ke Ibu Kota dalam rangka mengejar Nyi Iteung, saya mengadu nasib di Jakarta untuk mengejar mimpi. Tidak mungkin saya mengejar Nyi Iteung juga, nanti berantem sama Kabayan dan bini di rumah dong :P.

Lalu mimpi saya apa? Sulit untuk menuliskannya, lha saya kan sedang bangun. Kalau sedang tidur, baru bisa saya tulis, itu pun kalau saya tidak lupa hihihihihi …