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 …

Konversi data vektor ke raster

GRASS GIS, sebuah perangkat lunak open source remote sensing / GIS, adalah perangkat lunak andalan saya dalam melakukan proses konversi data dari vektor ke raster. Mengapa? Karena GRASS GIS dapat diandalkan dalam cleaning topology. Seringkali kita mendapatkan data vektor yang tidak jelas asal-usulnya, tidak jelas pula topologinya. Kalau begini, kadang-kadang (atau sering), saat kita menghitung luas kelas lahan tertentu misalnya, luas total obyeknya akan lebih besar dari luas wilayah sebenarnya. Nah, di sinilah GRASS GIS bisa menjadi pahlawan bertopeng, penolong untuk mempercepat proses analisis 😀 .

Baca lebih lanjut