Prediksi Hasil Pilpres Menggunakan Media Sosial

20 July 2014 at 07:39 | Posted in Uncategorized | Leave a comment

Setelah membaca artikel WP saya tertarik dengan grafik demografi pemilih setiap capres. Misalnya bahwa suku Jawa memilih Jokowi (tapi Madura berbeda), sebaliknya suku Sunda dan Minang memilih Prabowo. Agama, umur dan jenis pekerjaan juga punya pengaruh. Data lain terkait  ini bisa dilihat di laporan exit poll Indikator.

Saat ini sebenarnya sudah ada analisis tentang pilpres di media sosial, tapi sepertinya baru sebatas sentimen saja. Menurut saya ini masih terlalu kasar dan dangkal untuk dapat menentukan siapa pemenang pilpres. Jika melihat paper yang membahas QC,  distribusi lokasi punya peranan penting.  Sebagai contoh, ini lokasi sampel TPS  yang digunakan  SMRC untuk quickcount.

Jadi untuk bisa memprediksi hasil pilpres berdasarkan media sosial, langkah-langkah yang perlu dilakukan adalah:

  1. Sampling account Twitter/FB  berdasarkan lokasi user tersebut. Ini ditentukan berdasarkan data kepadatan penduduk (atau lebih tepat jumlah calon pemilih per wilayah). Contohnya jumlah account Jabar harusnya lebih banyak dibandingkan Papua.  Cara menentukan lokasi bisa dengan data user profile, atau diambil dari sharing status foursquare/path di account tersebut. Tentu account palsu harus dibuang pada tahap ini.  Untuk topik ini, ada beberapa mahasiswa saya yang sedang membuat skripsi tentang penentuan lokasi pengguna Twitter.
  2. Prediksi data demografi user tersebut, seperti suku, gender,  pendidikan, agama, penghasilan, pekerjaan dst. Mahasiswa saya pernah membuat skripsi tentang prediksi gender dan umur otomatis berdasarkan tweet dengan akurasi sekitar 80%an.
  3. Pastikan  account sample yang digunakan punya distribusi demografi yang sesuai. Soalnya pengguna media sosial condong ke populasi tertentu (muda, pelajar).  Contoh, lebih sulit mencari account orang-orang berumur 50 tahun ke atas dengan pendidikan rendah.
  4. Barulah analisis sentimen dapat dilakukan pada account sample, untuk menentukan pilihan orang tersebut.  Analisis sentimen bisa dilakukan berkali-kali, misalnya 3 bulan sebelum pilpres, setelah debat capres, 1 minggu sebelum pencoblosan dst.

Jadi yang paling penting adalah mendapatkan account FB/Twitter yang representatif sesuai dengan populasi calon pemilih. Setelah itu didapat, banyak hal yang bisa dilakukan. Misalnya analisis pengaruh black campaign, iklan TV, debat capres dan tentunya prediksi hasil yang jauh lebih dulu dari QC.

 

Mengapa saya tidak memilih Prabowo

28 June 2014 at 20:42 | Posted in Uncategorized | 2 Comments

Sebenarnya agak segan menulis hal seperti ini, bahkan saat ini saya cuti dulu dari FB sampai pilpres selesai. Kampanye dan saling serang sudah begitu parahnya sehingga kedua pihak sudah seperti suporter fanatik sepakbola yang berantem tanpa alasan jelas. Lalu kenapa saya masih tulis disini? Blog adalah catatan pemikiran yang akan dapat dibaca dalam jangka panjang (terutama via situs seperti webarchive). Anak dan cucu bahkan cicit saya mudah-mudahan akan membaca posting ini 10-50 tahun ke depan. Mempelajari masa lalu penting agar tidak mengulangi kesalahan yang sama.

Saya juga bukan pendukung Jokowi, menurut saya dia belum siap untuk sekarang, masih terlalu dini. Tapi mungkin dia satu-satunya yang bisa menjadi lawan tangguh bagi Prabowo untuk saat ini.

Kembali ke judul, jadi kenapa saya tidak memilih Prabowo?  Jawabannya satu: karena dia terlibat dalam penculikan aktivis di tahun 98.  Ada dua hal yang selanjutnya perlu dibahas, apa ini benar?  kedua, kenapa ini jadi penting, bahkan lebih penting dari isu-isu lain?

Saya tidak mau berspekulasi untuk hal yang lain (kerusuhan/kudeta dst), kasus di kisaran 98 masih simpang siur. Mungkin nanti akan seperti G30S/PKI yang mulai cerah 40 tahun setelah kejadian, saat para pemainnya intinya sudah mau menulis memoar.  Saya hanya melihat fakta penculikan yang melibatkan 9 aktivis (yang kembali hidup). Ini sudah diputuskan oleh DKP dan juga sudah didiakui oleh Prabowo (http://www.tempo.co/read/news/2013/10/28/078525234/Pernah-Diculik-Pius-Prabowo-Tak-Bersalah).  Tentang perbedaan versi bahwa ini atas perintah atasan (versi Prabowo) atau karena inisiatif sendiri (versi DKP) dan nasib 13 orang hilang lain, untuk saat ini tidak bisa dipastikan versi mana yang benar.

Nah sekarang  kenapa ini penting?

Karena kalau dengan alasan “keamanan”, “keselamatan bangsa”, “demi orang banyak” semua cara bisa dihalalkan, artinya sudah tidak ada batas lagi .  Bayangkan seperti bermain bola tanpa batasan, tanpa wasit,  orang boleh menjegal, memukul, menusuk, mencekik dst, sehingga hukum rimbalah yang berlaku. Ini yang berlaku saat Orde Baru. Polisi, jaksa dan hakim lemah,  legislatif tidak berfungsi. Semua kekuasaan dipusatkan di satu tangan: Pak Harto.  Dampaknya juga terasa pada kebijakan-kebijakan lain, termasuk kebijakan ekonomi, bahkan agama (kebijakan satu azas, larangan berjilbab di sekolah)

Seperti halnya Tiongkok, Singapura dan Malaysia, model diktator  ada manfaatnya. Negara bisa stabil, kebijakan bisa cepat dieksekusi tanpa banyak pertentangan.  Tapi ini juga menyimpan bom waktu. Contohnya  bisa dilihat Uni Soviet, Irak dan Mesir ( Tiongkok menurut saya akan mengalami hal yang sama nanti). Masalah korupsi di Indonesia juga bukan terjadi semalam, tapi dipupuk selama puluhan tahun. Bahkan setelah 16 tahun setelah reformasipun, sektor hukum dan legislatif kita juga masih lemah. Sudah ada perbaikan, tapi lambat ibarat orang yang dipasung berpuluh-puluh tahun dan baru belajar berjalan. Beruntung Pak Harto (seperti halnya Sukarno) bijak untuk mundur baik-baik tanpa menimbulkan perang saudara.

Tentu Suharto berbeda dengan Prabowo. Suharto naik menjadi presiden saat masih berumur 45 dan Indonesia di tahun 1966 dalam kondisi kacau. Suharto juga ahli strategi yang dengan jenius dan sabar pelan-pelan memusatkan kekuasaan di tanganya. Prabowo kalaupun jadi presiden sudah berumur 62 dan Indonesia di 2014 dalam kondisi baik. Kita juga sudah 16 tahun melewati reformasi sehingga akan sulit mencabut hal-hal seperti kebebasan pers.  Tapi, tetap saja ini resiko yang tidak sepadan. Kita sudah mulai bisa berjalan walaupun masih tertatih-tatih, saya yakin sebentar lagi kita bisa berlari (sebentar dalam usia negara, kira-kira 20thn lagi). Jangan buat kita jadi merangkak lagi.

 

Update 21 Juli pasca pemilu:

Perkiraan saya benar mengenai menghalalkan segala cara, dimulai dengan membuat quick count abal-abal tandingan, lalu minta KPU mengundurkan waktu pengumuman, mengancam akan mempidanakan KPU, sampai dengan minta hitung suara ulang (anehnya tidak protes kecurangan langsung setelah pencoblosan). Ini hal yang baru dalam pilpres, biasanya yang tidak setuju akan melewati mekanisme pengumuman KPU dan menggugat via MK.  Sangat mengerikan menurut saya, bahkan sebelum KPU mengumumkanpun sudah mulai dicoba digoyang.  Bayangkan kalau Prabowo jadi presiden dan menghadapi pemilu 2019 sebagai incumbent, apa saja yang akan dilakukan olehnya?

Update 22 Juli:
Prabowo “menarik diri dari proses” dan mengatakan proses pilpres cacat. Bukan hasil tapi keseluruhan proses! Banyak orang dibuat bengong, bahkan sampai Hatta-pun menjaga jarak. Ini sesuatu yang baru terjadi lagi dalam sejarah piplres, kalah W.O. (walk out)?

Blokir Situs di Indonesia

18 May 2014 at 13:30 | Posted in Uncategorized | 2 Comments

Blokir situs di Indonesia dengan alasan pornografi sudah berlangsung cukup lama, tapi yang membuat jadi ribut baru-baru ini adalah mulai menjalarnya blokir ke situs-situs yang kategorinya bukan eksplisit pornografi seperti Vimeo dan Reddit.  Saya tidak mau berpanjang-panjang di masalah pornografinya karena nanti ujung-ujungnya jadi debat kusir hehe.. karena jangankan kita, Apple Store saja sulit dan sering diprotes dalam menentukan app mana yang mengandung pornografi mana yang tidak. Facebook juga pernah ramai dengan urusan foto ibu menyusui.

Yang mau saya tulis disini, karena sepertinya jarang ditulis orang adalah blokir yang dilakukan Indonesia itu hanya efektif untuk orang awam dan anak-anak kecil tapi sangat tidak efektif bagi remaja (remaja disini kelas 6 SD ke atas)  dan orang yang memang niat mengakses materi pornografi. Bagi yang niat, blokir di Indonesia itu seperti menggunakan triplek untuk menahan kereta api.  Mengapa gampang ditembus? jawabannya karena perang antara sistem filter China (Great Firewall) dengan masyarakat hacker + pihak yang ingin internet tetap bebas di China. China mengeluarkan biaya sangat besar untuk memblokir berbagai situs, mulai dari Youtube, Facebook, Twitter sampai dengan Reuters karena penting untuk kelangsungan hidup rezimnya (sama dengan Pak Harto yang membreidel berbagai media di jaman orba). Pihak yang lain juga sama kerasnya berjuang agar filter tersebut tembus, bahkan saya pribadi percaya pihak intelijen negara barat juga berperan karena butuh resources tidak sedikit untuk menangkal filter ini. Jadi ini perang skala besar. Efeknya adalah banyak tersedia tools yang efektif dan mudah digunakan untuk menangkal blokir. Untuk China saja dapat ditembus dengan tools tersebut apalagi blokir Indonesia yang lebih sederhana. Jadi kecuali Indonesia mau seperti China yang  menghabiskan dana dan tenaga yang sangat besar,  lebih baik tidak perlu ikut-ikutan sistem ini.

Kesimpulannya,  blokir situs eksplisit pornografi tetap diperlukan untuk mencegah anak kecil atau orang awam masuk secara tidak sengaja. Tapi untuk situs lain lebih baik tidak, karena selain tidak efektif, maka semua situs  termasuk Youtube, FB, Google, Wikipedia bahkan WordPress juga harus diblokir. Karena ya itu tadi, definisi pornografi berbeda untuk setiap budaya dan agama.  Kita teriak porno mereka bilang seni dan jadinya debat kusir lagi yang tidak penting. Kenapa debat yang tidak penting? karena orang yang niat mengakses situs pornografi tetap saja bisa mengakses dengan gampang hehe (bahkan mungkin mereka sedang menertawai orang-orang yang sedang debat kusir ini).

Lalu stop menggadang-gadang blokir sebagai alat yang efektif untuk mencegah pornografi.  Itu hanya memberikan rasa aman palsu dan menyesatkan.  Dengan analogi triplek vs kereta  tadi, mengandalkan blokir seperti memberikan triplek ke anak, lalu bilang “nak kalau kebetulan kamu ada di rel kereta dan ada kereta api akan lewat, letakkan triplek ini di depan kamu”. Fatal kan? Lebih baik ajarkan agar  anak berhati-hati kalau disekitar rel kereta api, dan kalaupun harus menyebrang, lihat kanan dan kiri dulu (sambil dengarkan suara kereta), atau lebih baik lagi gunakan jembatan penyebrangan kalau ada.  Ajarkan anak atau siswa untuk bisa memblokir diri sendiri, itu lebih penting.

LibGDX untuk membuat Game pada Android (Modul Tutorial LibGDX)

13 October 2013 at 07:42 | Posted in android, kuliah | Leave a comment
Tags: , ,

LibGDX  (libgdx.badlogicgames.com) adalah framework untuk membuat game,  visualisasi dan simulasi.  Kelebihan LibGDX diantaranya:

  1. Multiplatform. Dapat menghasilkan app untuk desktop (Win, Linux, Max), Android, iOS dan web dengan mudah.
  2. Free dan opensource (lisensi Apache 2.0).
  3. Basisnya Java.
  4. Tidak perlu mengetahui Android SDK.  Anda dapat membuat game di Android walaupun belum pernah membuat app di Android sebelumnya, tentunya asal mengerti Java.
  5. Tidak perlu menggunakan emulator!  Proses pengembangan jadi jauh lebih cepat. Jalankan project di desktop dan nanti setelah selesai baru jalankan versi Androidnya tanpa tambahan code.
  6. Kinerja bagus, melebihi beberapa framework lain (pembahasan tentang ini: http://www.sparkrift.com…l)
  7. Menyediakan banyak fitur yang memudahkan programmer membuat game seperti box2D, Scene2D, Bullets  3D dan lainnya.
  8. Dokumentasi lumayan dan forum-nya aktif.

Saya membuat modul praktikum untuk kuliah game programming di Ilkom UPI. Lisensi tutorialnya adalah creative commons dan formatnya MS Word, jadi silahkan didistribusikan, dimodifikasi asal nama saya jangan dibuang.  Bagi yang berminat, dokumennya dapat didownload di: yuliadi.com/ilkom  (cari dokumen yang diawali “tutorial_libgdx”)

Perlukah memanaskan mobil lama-lama?

11 August 2013 at 10:07 | Posted in Uncategorized | Leave a comment

Memanaskan mobil sepertinya sudah menjadi kebiasaan. Bagi yang memiliki garasi jauh dari rumah dan tetangga ini tidak menjadi masalah, tetapi bagi yang tinggal di daerah padat dan rumah kecil ini bisa menimbulkan polusi yang merugikan orang-orang disekitar mobil. Apalagi catalytic converter yang berfungsi untuk menyaring zat berbahaya dari buangan kendaraan  baru berfungsi optimal pada suhu 650 derajat celcius. Belum lagi kalau mempertimbangkan bahan bakar yang dibuang percuma.

Setelah saya membaca manual buku mobil saya (Picanto), ternyata hanya diperlukan 10-20 detik untuk memanaskan mobil, dengan perkecualian untuk cuaca yang sangat dingin yang tentunya  tidak pernah terjadi di Indonesia. Menurut saya ini juga berlaku untuk mobil-mobil yang lain, diluar mobil berumur tua.  Jika ragu, coba baca manualnya.

Image

Implementasi Game/Animation Loop di Android Bagian 2

4 August 2013 at 00:26 | Posted in android | 1 Comment

Pada posting sebelumnya, telah dibahas implementasi game loop di Android.  Tetapi implementasi tersebut masih memiliki kelemahan. JIka jumlah objek banyak sehingga proses update posisi membutuhkan waktu lama,  ditambah lagi delay yang fix 0.2 detik maka loop akan berlangsung lebih lama dari seharusnya. Kecepatan animasi juga dapat berbeda untuk berbagai smartphone.

Ada dua cara untuk memperbaiki: pertama delay dilakukan secara dinamik, semakin lambat smartphone, semakin lambat loop maka sleep juga akan semakin sebentar. Yang kedua, jika loop membutuhkan waktu lebih lama dari minimal waktu yang ditentukan, maka untuk mengejar ketertinggalan update posisi akan dilakukan tanpa ditampilkan (hanya updateposisi tanpa draw). Penjelasan lebih rinci dapat dilihat di http://obviam.net/index.php/the-android-game-loop/   Kode dibawah juga saya adaptasi dari contoh pada web tersebut.  Berikut kode-nya, banyak komentar yang saya tambahkan pada kode ini, semoga bisa lebih memperjelas.

import com.example.animasicanvas2.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.SurfaceHolder;

//menggunakan runnable, karena hanya run yang dibutuhkan untuk dioverride
//baca: http://manikandanmv.wordpress.com/tag/extends-thread-vs-implements-runnable/
//tentang bedanya extends thread vs runnable

//sebagian kode diambil dari : http://obviam.net/index.php/the-android-game-loop/

public class GameRunnable implements Runnable {

	 //TAMBAHAN==========

	// nilai frame per detik (fps) yang diinginkan
	// jika 25 FPS artinya satu loop yang berisi update+draw akan dieksekusi setiap 1/25 detik
	private final static int 	MAX_FPS = 25;

	// frame period, waktu satu loop dieksekusi dalam satuan mili detik (ms)
	// jadi kalau 25 FPS, maka frame perode adalah 1/25 detik atau 1000/25 ms = 40ms
	private final static int	FRAME_PERIOD = 1000 / MAX_FPS;

	// jumlah frame yang boleh dilewat saat proses update posisi terlalu lama
	// Contoh: untuk 25 FPS, satu loop berarti diekkseskusi 40ms
	// misalnya jumlah objek yang harus diupdate posisinya banyak sehingga
	// melewati 40ms, maka akan dilakukan updateposisi *TANPA* proses draw (di-skip).
	// kenapa spt itu? karena lebih baik FPS turun daripada posisi objek berantakan.
	// konstanta berikut menyatakan berapa frame proses draw boleh di-skip
	// detilnya silahkan lihat method run()
	private final static int	MAX_FRAME_SKIPS = 5;

	 //jika true, loop di run() berakhir
	 boolean mRun=false;
	 float posX=10;
	 float posY=100;
	 Bitmap bmp;
	 private Paint cat = new Paint();

	 //akses ke surface dan canvas
	 private SurfaceHolder mSurfaceHolder;

	 //akses ke context (untuk ambil resource)
	 Context mContext;

	 long lastTick;

	 private void updatePosisi(long tick) {
		 //1 tick = 1/25 detik (untuk 25FPS)
		 //update akan dilakukan jika sudah berselang 1 detik dari update terakhir
		 if (tick-lastTick > 25) {
			 //geser ke kiri dan kalau sudah max, kembali ke awal
			 posX= posX+10;
			 if (posX>200) {
				 posX=10;
			 }
			 lastTick = tick;
		 }
	 }

	 //siapkan resources berupa bitmap,
	 //ambil bitmap icon launcher supaya mudah
	 public GameRunnable(SurfaceHolder vSurfaceHolder, Context vContext) {
		  mSurfaceHolder = vSurfaceHolder;
		  mContext = vContext;
		  Resources res = mContext.getResources();
		  bmp = BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
	 }

	 //bersihkan layar dan gambar objek
	 public void doDraw(Canvas c) {
		//canvas perlu dicek apakah null, karena pada saat
		 //user pindah ke activity lain (user tekan home), c bisa
		 //berisi null (proses shutdown belum selesai dan
		 //thread masih jalan, tapi canvas sudah didestroy)
		 if (c!=null) {
			//clear screen
			c.drawColor(Color.WHITE);
			//gambar bitmap
			c.drawBitmap(bmp,posX,posY,cat);
		}
	 }

	 @Override
     public void run() {

		 //TAMBAHAN
		 // waktu mulai awal loop
		 long beginTime;

		 // waktu real yang dibutuhkan untuk loop
		 long timeDiff;

		 // waktu tidur, misal FPS 25, berarti 1 loop = 40ms. Jika timeDiff = 30 ms, maka
		 // sleeptime 10ms (sisa waktu digunakan untuk sleep)
		 // tapi jika timeDiff 60ms, maka sleepTime akan bernilai negatif (-
		 int sleepTime;

		 // jumlah frame (draw) yang sudah di-skip, lihat penjelasan tentang
		 // MAX_FRAME_SKIPS diatas
		 int framesSkipped;

		 //satuan waktu update, setiap update nilai tick akan bertambah
		 //jika objek dalam suatu game banyak, nilai tick digunakan sebagai waktu global
		 //sehingga setiap objek sinkron
		 long tick = 0;

		 //loop forever selama tidak dishutdown (mRun diset false)
		 while (mRun) {
             Canvas c = null;
             try {
                 c = mSurfaceHolder.lockCanvas(null);
                 //lock surface agar tidak diakses thread lain dulu
                 synchronized (mSurfaceHolder) {
                     //TAMBAHAN
                	 //catat waktu skr
                	 beginTime = System.currentTimeMillis();
     				 framesSkipped = 0;

                	 updatePosisi(tick);
                	 tick++;
                     doDraw(c);

                     //TAMBAHAN
                     //hitung waktu yg dibutuhkan untuk satu loop
                     timeDiff = System.currentTimeMillis() - beginTime;
     				 //hitung waktu tidur, kalau positif artinya loop
                     //lebih cepat dari max FPS dan thread akan tidur
                     //tapi kalau nilainya negatif artinya loop berjalan
                     //lebih dari waktu seharusnya shg akan dilakukan penyesuaian
                     //yaitu update posisi tanpa draw.
     				 sleepTime = (int)(FRAME_PERIOD - timeDiff);

     				 //sleep sebanyak sleepTime kalau masih ada siswa waktu (sleeptime>0)
     				 if (sleepTime > 0) {
	     				 try {
	     						Thread.sleep(sleepTime);
	     				 } catch (InterruptedException e) {
	     						e.printStackTrace();
	     						Log.e("yw","error saat mencoba sleep"+e.getMessage());

	     				 }
     				 }

     				 //jika sleeptime negatif (proses update dan draw terlalu lama)
     				 //maka masuk loop berikut
     				 //di dalam loop update dilakukan *TANPA* draw
     				 while (sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS) {

    					// update posisi saja
     					updatePosisi(tick);
     					tick++;
    					//tambah, jika sleepTime>=0 keluar
    					sleepTime += FRAME_PERIOD;

    					//jumlah draw yang di-skip, dibatasi agar FPS tidak terlalu
    					//drop
    					framesSkipped++;
    				 }

                 }
             } finally {
                 //pastikan diunlock
                 if (c != null) {
                     mSurfaceHolder.unlockCanvasAndPost(c);
                 }
             }
         }
     }

	//jika diset false maka akan shutdown (lihat method run())
	public void setRunning(boolean b) {
		mRun = b;
	}
}

Implementasi Game/Animation Loop di Android

2 June 2013 at 13:49 | Posted in android | 1 Comment
Tags: ,

Bermula dari pertanyaan mahasiswa, ternyata setelah cukup lama saya mencari belum ada penjelasan yang menurut saya enak mengenai loop untuk animasi atau game berbasis canvas (game loop). Akhirnya saya coba sendiri menggunakan dasar contoh LunarLander yang merupakan bagian dari SDK samples dengan lumayan banyak modifikasi.

Game loop pada intinya adalah:

while (true) {
	updatePosisiObjek();
	gambarObjek();
}

Contoh berikut merupakan implementasi loop untuk animasi sederhana.  Jika anda belum mengerti dasar-dasar Android, anda dapat mendownload modul pengantar android di yuliadi.com/ilkom terutama bagian canvas.

Pada app ini terdapat tiga class, pertama GameRunnable yang berfungsi untuk mengatur gerakan dan menggambar di canvas. Kedua adalah GameView yang merupakan turunan dari SurfaceView yang menyediakan canvas yang akan digambar. GameView ini juga bertugas membuat dan mematikan thread (thread ini diisi GameRunnable). Terakhir adalah activity utama (MainActivity). Penjelasan lebih detil dapat dilihat di source codenya langsung.

Source code untuk class GameRunnable:

package edu.upi.cs.yudiwbs.animasicanvas2;

import com.example.animasicanvas2.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.SurfaceHolder;

//menggunakan runnable, karena hanya run yang dibutuhkan untuk dioverride
//baca: http://manikandanmv.wordpress.com/tag/extends-thread-vs-implements-runnable/
//tentang bedanya extends thread vs runnable
public class GameRunnable implements Runnable {

	 //jika true, loop di run() berakhir
	 boolean mRun=false;
	 float posX=10;
	 float posY=100;
	 Bitmap bmp;
	 private Paint cat = new Paint();

	 //akses ke surface dan canvas
	 private SurfaceHolder mSurfaceHolder;

	 //akses ke context (untuk ambil resource)
	 Context mContext;

	 private void updatePosisi() {
		 //geser ke kiri dan kalau sudah max, kembali ke awal
		 posX= posX+10;
		 if (posX>200) {
			 posX=10;
		 }

		 //tidur 0.2 detik, agar animasi tdk terlalu cepat
		 try {
				Thread.sleep((long)(1000*0.2));
		 } catch (InterruptedException e) {
				e.printStackTrace();
				Log.e("yw","error saat mencoba sleep"+e.getMessage());

		 }
	 }

	 //siapkan resources berupa bitmap, ambil bitmap icon launcher supaya mudah
	 public GameRunnable(SurfaceHolder vSurfaceHolder, Context vContext) {
		  mSurfaceHolder = vSurfaceHolder;
		  mContext = vContext;
		  Resources res = mContext.getResources();
		  bmp = BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
	 }

	 //bersihkan layar dan gambar objek
	 public void doDraw(Canvas c) {
		 //canvas perlu dicek apakah null, karena pada saat
		 //user pindah ke activity lain (user tekan home), c bisa
		 //berisi null (proses shutdown belum selesai dan
		 //thread masih jalan, tapi canvas sudah didestroy)
		 if (c!=null) {
			//clear screen
			c.drawColor(Color.WHITE);
			//gambar bitmap
			c.drawBitmap(bmp,posX,posY,cat);
		}
	 }

	 @Override
     public void run() {
		 //loop forever selama tidak dishutdown (mRun diset false)
         while (mRun) {
        	 Log.i("yw","looping...."); //hapus log ini kalau tidak mendebug
             Canvas c = null;
             try {
                 c = mSurfaceHolder.lockCanvas(null);
                 //lock surface agar tidak diakses thread lain dulu
                 synchronized (mSurfaceHolder) {
                     updatePosisi();
                     doDraw(c);
                 }
             } finally {
                 //pastikan diunlock
                 if (c != null) {
                     mSurfaceHolder.unlockCanvasAndPost(c);
                 }
             }
         }
     }

	//jika diset false maka akan shutdown (lihat method run())
	public void setRunning(boolean b) {
		mRun = b;
	}
}

Sedangkan code untuk class GameView adalah

package edu.upi.cs.yudiwbs.animasicanvas2;

import android.content.Context;

import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

//surfaceView digunakan karena GUI akan seriung diupdate
//dan cepat untuk animasi
public class GameView extends SurfaceView implements SurfaceHolder.Callback  {

	public Thread mThread;
	private GameRunnable gr;

	//buat thread dan jalankan
	public void startThread() {
		//objek GameRunnable jadi parameter
		mThread = new Thread(gr);
		gr.setRunning(true);
	    mThread.start();

	}

	public void shutDownThread() {
		Log.i("yw","shutdown thread mulai");
		boolean retry = true;
        gr.setRunning(false);  //matikan,

        //loop terus sampai thread berhenti karena
        //setRunning(false) tidak menghentikan seketika
        //coba lihat method GameThread.run()
        while (retry) {
            try {
                mThread.join();
                retry = false;
            } catch (InterruptedException e) {
            }
        }
        Log.i("yw","shutdown selesai");
	}

	public GameView(Context context) {
		super(context);
		SurfaceHolder holder = getHolder();
		holder.addCallback(this);
		gr = new GameRunnable(holder,context);
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		Log.i("yw","jalankan thread !!");
		startThread();
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		shutDownThread();
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		// bisa digunakan untuk memberi tahu GameRunnable ada perubahan dimensi
		// surface (misal dirotate)
	}
}

Dan terakhir adalah MainActivity

package edu.upi.cs.yudiwbs.animasicanvas2;

import com.example.animasicanvas2.R;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

GameView gv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		gv= new GameView(this);
		setContentView(gv);
	}

	 @Override
	 protected void onPause() {
	    super.onPause();
	    //nantinya perlu diisi dengan penyimpanan state
	    //melalui bundle
	 }

	 @Override
	protected void onResume() {
		super.onResume();
		//nantinya perlu diisi dengan load state
	 }

}

Kode diatas masih memiliki kelemahan, perhatikan penggunaan delay 0.2 ms pada updatePosisi() di GameRunnable. Jika suatu saat app ini diinstall pada smartphone yang lambat dan memiliki ratusan objek yang harus diupdate posisinya maka animasi akan berjalan semakin lambat. Pada kasus sepeert itu seharusnya delay dikurangi. Posting berikutnya akan membahas cara untuk mengatasi hal ini.

Salah satu hal yang perlu ditangani adalah saat pengguna pindah ke app lain dan kembali. Misalnya dengan menekan home, pindah ke app lain lalu kembali ke app animasi ini. Setiap pengguna pindah ke app lain, maka thread harus distop agar tidak memakan resources. Setelah mencoba beberapa kali dan memperhatikan hasil log, saat home ditekan, maka canvas pada doDraw dapat bernilai null. Jadi saat thread masih berjalan canvas dapat bernilai null. Ini sebabnya perlu ada pengecekan kondisi if (c!=null) pada method GameRunnable.doDraw (baris 63). Pada app LunarLander yang asli, tidak ada pengecekan ini dan terjadi error saat user menekan home.

Hal yang lain, saat home ditekan, maka GameView.surfaceDestroyed pasti akan dipanggil. Tadinya saya mengira sistem tidak akan men-destroy kecuali kalau membutuhkan. Ini menyebabkan proses mematikan thread dilakukan bukan di activity.onPause tapi cukup di method surfaceDestroyed. Tentu dalam kondisi sebenarnya onPause dan onResume perlu ditangani untuk menyimpan state. Sebagai contoh, saat app ini dijalankan dan kemudian device dirotasi maka app akan mulai dari awal lagi (nilai GameRunnable.posX hilang).

Petunjuk Singkat Mencari Topik Skripsi, Menyusun Proposal Skripsi, Menyusun Skripsi dan Prasidang+Sidang

8 April 2013 at 08:46 | Posted in Uncategorized | 6 Comments

Berdasarkan pengalaman saya membimbing skripsi di Ilkom UPI, berikut beberapa hal penting yang mudah-mudahan bisa membantu mahasiswa menyelesaikan skripsinya mulai dari mencari topik skripsi sampai dengan sidang. Bagi mahasiswa di luar Ilkom UPI, mungkin ada perbedaan, tapi menurut saya ide dasarnya tetap dapat digunakan.

Setelah mengontrak skripsi, hal yang pertama kali harus dilakukan adalah mencari topik. Kegiatan ini sangat penting, mendapatkan topik yang baik berarti sekitar 30% skripsi telah selesai. Jadi persiapannya juga tidak dapat seadanya. Ini beberapa saran untuk mendapatkan topik yang baik:

  1. Skripsi dapat dikatakan sebagai tugas besar terakhir, yang paling besar. Anda menggabungkan ilmu yang anda peroleh saat kuliah sekaligus praktikum dan tugas-tugas besarnya. Setelah menyelesaikan semua kuliah, anda seharusnya sudah punya gambaran  untuk mengambil tema apa. Ambil topik yang anda sukai sehingga saat dikerjakan tidak terasa berat. Itu sebabnya bagi yang masih kuliah, manfaaatkan kuliah  sebaik-baiknya. Jangan ambil kuliah pilihan hanya karena teman lain mengambilnya dan jangan jadi ‘penggembira’ saat mengerjakan tugas kelompok
  2. Mengenai beban, bayangkan tugas besar yang dikerjakan selama sekitar 4 bulan intensif (~50 jam per minggu). Kalau anda menemukan topik yang dapat dikerjakan 1-2 bulan, topiknya pasti terlalu ringan. Walaupun mungkin lolos seminar proposal tapi akan lebih tidak enak kalau terjegal saat prasidang. Topik yang dapat dikerjakan dengan formula Excel sederhana (non vb script),  biasanya juga masuk ke kategori terlalu sederhana.
  3. Setelah mendapat tema umum, misalnya “jaringan”, “datamining”, “pemrosesan grafik”, “social media”, “sistem informasi”, “imk” dst, mulailah mencari lebih dalam. Gunakan google untuk mencari pembahasan tentang itu, baca ebook, sambil coba cari topik yang lebih khusus (lebih spesifik). Tujuannya agar anda familiar dengan istilah-istilah atau jargon yang umum digunakan dalam topik tersebut. Ini akan menjadi bekal saat membaca paper. Anda mungkin sudah mulai membayangkan masalah-masalah sekitar topik tersebut yang dapat anda angkat menjadi topik skripsi. Lebih ideal jika anda mendapatkan topik dari dosen. Jika topik diberikan dosen, artinya dosen tersebut tertarik dengan topik ini sehingga dukungan akan lebih besar. Dosen juga biasanya sudah tahu cakupan yang tepat dan gambaran kasar solusi. Tentu anda juga harus cocok dengan topiknya.
  4. Jangan mulai dari algoritma, tapi mulailah dari masalah. Jadi tentukan dan pahami dulu apa masalahnya, baru cari algoritma atau teknik untuk memecahkan masalah tersebut (jangan dibalik). Salah satu kesalahan yang sering terjadi adalah terlalu buru-buru menentukan teknik solusi dari masalah. Langkah 5 dapat digunakan untuk mencari berbagai alternatif solusi.
  5. Setelah mempunyai bekal dasar-dasar materi, saatnya mulai masuk ke aspek yang lebih ilmiah yaitu paper. Pada skripsi, mhs tidak diharapkan hanya sekedar membuat aplikasi biasa tapi harus punya sisi inovatif. Sisi inovatif tersebut biasanya hanya dapat diperoleh dari paper. Gunakan scholar.google.com dengan keyword sesuai topik anda. Pilih paper yang menarik, TIDAK semua paper harus dibaca. Awali baca paper dengan membaca abstrak lalu kesimpulan (jangan semuanya dulu). Jangan khawatir jika ada istilah yang anda tidak mengerti. Jika menarik, coba baca sekilas isinya. Anda TIDAK harus memahami keseluruhan isi paper. Kemudian jarang sekali paper yang dapat dimengerti dalam sekali baca, ada yang harus dibaca 10-20 kali baru terasa jelas. Beberapa paper yang terpilih, yang paling relevan akan menjadi dasar proposal anda. Untuk tingkat S1 mhs boleh me-reimplementasi paper yang sudah ada dengan sedikit tambahan atau perubahan.
  6. Bersamaan dengan tahap 5, anda mulai dapat menemui dosen yang terkait dengan topik anda. Jangan menghadap dosen dengan kepala kosong karena pertemuannya akan tidak produktif. Manfaatkan dosen untuk saran-saran berkaitan dengan topik, berdiskusi mengenai bagian paper yang anda tidak mengerti, apakah topik layak untuk dijadikan skripsi dsb. Cari dosen dengan bidang yang cocok dengan topik skripsi. Ini bisa dilihat dari matakuliah yang diajarkan dosen tersebut dan skripsi yang pernah dibimbing sebelumnya (untuk di UPI bisa dilihat di: http://repository.upi.edu/)
  7. Selanjutnya mulai membuat proposal. Bagian yang terpenting dari proposal adalah bab 1. Pada bab 1, perlu disampaikan latar belakang dan rumusan masalah/tujuan.  Latar belakang menjawab mengapa topik skripsi penting dan layak diambil. Saat ditanya “mengapa anda mengambil topik ini? mengapa ini bisa jadi topik skripsi? apa alasannya? mengapa penting?” itu dijawab di latar belakang. Sedangkan rumusan masalah atau tujuan menggambarkan apa yang menjadi masalah yang  hendak diselesaikan. Anda tidak bisa menyelesaikan masalah kalau tidak tahu masalahnya apa. Biasanya pada tahap ini perlu bolak balik cukup intensif dengan dosen pembimbing. Jangan masuk ke bab 2 dulu sebelum bab1 benar-benar stabil.
  8. Selanjutnya buat bab2. Jika bab 1 (latarbelakang/tujuan) memperlihatkan aspek “mengapa (why) dan apa (what)”, bab 2 akan menjelaskan aspek “bagaimana (how)”.  Isi dari bab 2 adalah penelitian/buku/materi/teori/library yang dibuat *orang-lain* yang relevan dengan skripsi anda. JANGAN memasukkan materi yang tidak relevan dengan topik. Sebelum mulai, tanyakan pada dosen pembimbing materi apa saja yang perlu masuk dan urutan pembahasannya. Untuk tahap proposal tidak perlu dibuat terlalu detil, anda tidak perlu mengetahui solusi masalah secara rinci tapi anda diharapkan mempunyai gambaran kasar bentuk solusinya. Pada penulisan bab 2 ini seringkali terjadi copy-paste, ini WAJIB dihindari karena kalaupun lolos sampai wisuda, kalau ada yang menggugat di kemudian hari, ijazah anda bisa melayang (terjadi pada teman S2 saya). Caranya mudah dengan tiga langkah: baca-pahami-tulis. Baca referensi (bagusnya lebih dari satu), setelah paham baru tulis dengan kalimat sendiri. Jangan lupa cara pengutipan referensi. Sedapat mungkin hindari referensi skripsi orang lain, karena seringkali kualitasnya tidak jelas dan akan memperkuat keinginan untuk copy-paste
  9. Jangan terlalu beralama-lama dalam pembuatan proposal. Tidak perlu menunggu proposal sempurna, karena nanti toh akan berubah saat perjalanan membuat skripsi.
  10. Saat sidang proposal skripsi, selama anda mengerjakan bab 1 dan 2 dengan baik dan melakukan persiapan presentasi (banyak latihan presentasi), harusnya anda dapat lolos dengan mudah.  Fokus dosen penguji dalam sidang proposal adalah “apakah ini masalah ini layak untuk dijadikan topik skripsi?”, “apakah ini feasible untuk dikerjakan dalam waktu 4 bulanan? (terlalu sulit atau tidak) dan “apakah mahasiswa tahu gambaran solusinya?” (jangan-jangan hanya punya masalah tapi tidak tahu menyelesaikannya).

Tahap berikutnya adalah penyusunan  skripsi.

BUKU SKRIPSI

Dalam skripsi, ada 3 bab yang paling penting: bab1, bab2 dan bab4 sedangkan bab3 dapat dikatakan bagian dari bab4. Jika proposal sudah dipersiapkan dengan baik, harusnya anda hanya akan merubah sedikit di bab1 dan hanya melengkapi bab2 (strukturnya akan tetap). Bab 1 dan Bab 2 sudah dibahas sekilas sebelumnya.

Khusus untuk bab 2,  berbeda dengan tahapan proposal yang tidak detil, pada tahapan skripsi bab 2 harus serinci mungkin sehingga setelah menyelesaikan bab ini, anda akan mendapat gambaran yang jelas dan rinci bagaimana menyelesaikan software. Sedapat mungkin gunakan contoh-contoh di bab 2, ini bermanfaat bagi anda maupun penguji dan pembimbing agar lebih paham dengan apa yang anda buat. Kalau penguji bingung dengan apa yang dikerjakan oleh mahasiswa, dia malah akan bertanya kemana-mana. Jangan lakukan coding sebelum bab 2 selesai, karena efeknya software malah akan sering dibongkar ulang.

Untuk mengecek apakah bab 2 sudah selesai, coba bayangkan anda serahkan bab 2 ke mhs ilkom lain, apakah setelah baca bab 2 anda dia sanggup untuk mengerjakan softwarenya? jika tidak artinya bab 2 anda masih kurang rinci.

Langkah berikutnya adalah membuat rancangan yang dituangkan dalam dokumen teknis (doktek) berdasarkan tujuan yang dituliskan di bab 1 dan teori di bab 2. Mengapa harus merancang dulu? alasannya sama dengan yang dibahas di RPL, bongkar-pasang rancangan jauh lebih cepat dan mudah dibandingkan bongkar pasang software. Analoginya: bayangkan membuat bangunan 5 lantai tanpa rancangan terlebih dulu (langsung buat tembok). Akan cepat pada awalnya tapi ujung-ujungnya malah lebih lambat.

Selanjutnya implementasikan rancangan ini dengan coding, catat hal-hal yang penting dan menarik yang ditemukan selama tahapan rancangan, coding dan eksperimen. Catatan ini akan masuk ke bab 4. Besar kemungkinan ada hal-hal baru yang anda temukan sehingga doktek, bab 2 atau bahkan bab 1 perlu diupdate, tidak perlu khawatir karena ini merupakan hal yang wajar.

Terakhir adalah membuat bab 4. Kontras dengan bab 2 yang berdasarkan teori orang lain, bab 4 berisi apa yang *anda* kerjakan, dan *tidak-ada* materi buatan orang-lain di bab 4 ini. Tuliskan semua kegiatan, hasil dan analisis di bab ini. Dosen akan menilai apa yang anda kerjakan dari bab4, jangan sampai misalnya ada 10 hal yang anda kerjakan, tapi di bab 4 hanya ditulis 2. Itu sebabnya bab 2 dan bab 4 adalah bab yang harusnya paling tebal diantara bab lain.

BACKUP

Kadang terjadi data hilang akibat virus atau tidak sengaja diformat. Atau memang laptop/hardisknya hilang dicuri. Penting untuk melakukan backup, gunakan dropbox untuk dokumen skripsi dan repo seperti github, code.google untuk source code skripsi anda (sekalian untuk version control)

PROSES BIMBINGAN

Setiap dosen punya cara masing-masing dalam membimbing, karena anda adalah salah satu dari sekian mahasiswa bimbingan, andalah yang harus menyesuaikan diri. Pahami karakter dosen, apa yang dia sukai/benci dan aturan mainnya. Jangan ragu bertanya jika ada yang tidak jelas atau ada masalah. Coba tanya ke alumni atau mahasiswa lain yang sudah lama dibimbing oleh dosen tsb. Kalau dalam kondisi terpaksa harus berganti dosen pembimbing, lakukan dengan baik-baik dan lapor terlebih dulu.

PROSES PRASIDANG & SIDANG

Tiga kunci untuk presentasi yang baik: latihan, latihan dan latihan. Buku skripsi harus anda baca dengan detil dan berulang-ulang. Coba tanya ke teman atau alumni mengenai gaya menguji calon dosen penguji/pembimbing. Ujian sidang biasanya lebih ringan daripada prasidang, karena proses pengujian ada di prasidang. Sidang umumnya hanya untuk melihat perbaikan yang dilakukan pasca prasidang.

Sebelum mulai prasidang+sidang, test proyektor untuk memastikan bekerja dengan laptop anda. Lalu anda harus memegang hardcopy buku skripsi, jangan sampai saat ditanya “coba buka halaman xy”, lalu anda harus membuka softcopy di laptop. Jangan lupa bawa bolpen dan kertas, catat apa masukan dan pertanyaan dari dosen. Banyak penguji yang kesal jika masukannya tidak dihiraukan hanya karena alasan “lupa”.

Jangan berasumsi penguji telah mengerti materi dalam skripsi anda, siapkan contoh-contoh agar mereka lebih paham, termasuk demo program. Dosen dapat bertanya sampai source code, oleh karena itu siapkan juga source codenya.

Dalam menjawab pertanyaan, coba cerna dulu pertanyaanya dan pikirkan jawabannya, jangan langsung menjawab.

Berbeda dengan prasidang, ujian sidang lebih fokus terhadap perbaikan yang dilakukan. Materi tidak perlu diulang, tampilkan masukan dosen pada prasidang, lalu apa yang anda lakukan terhadap masukan tersebut.

LAIN-LAIN

Beberapa hal penting yang harus diperhatikan saat membuat skripsi

  • Jangan menuliskan hal yang anda tidak mengerti. Sangat menyebalkan mendengar alasan “saya juga tidak tahu maksudnya, saya tulis karena di referensinya juga ditulis seperti itu”. Kalau sudah masuk ke dokumen skripsi anda, andalah yang harus bertanggung jawab. Baca, pahami baru tulis. Jangan hanya menterjemahkan apalagi copy paste.
  • Bahasa yang digunakan dalam skripsi tidak sama dengan bahasa yang digunakan di blog atau novel. Hindari bahasa berbunga-bunga yang dapat memiliki makna ganda dan tidak akurat. Contoh kalimat yang jelek: “sejalan dengan berlalunya waktu, permasalahan ini menjadi semakin pelik”. Hindari kata-kata seperti “mungkin”, “kira-kira”, “sepertinya” dan “biasanya”. Bahasa yang digunakan di dalam skripsi adalah bahasa kering tapi akurat. Tujuannya saat pembaca selesai membaca skripsi anda, isi kepalanya akan sama  dengan isi kepala anda saat menulis skripsi tersebut.
  • Terakhir tapi penting, jangan lakukan kecurangan (copy-paste, plagiat, program dibuatkan orang lain). Kalaupun  lolos, ada pengadlian akhir yang tetap tidak dapat dihindari.

Tutorial JQuery Mobile

29 March 2013 at 08:00 | Posted in Uncategorized | Leave a comment

Pada kuliah mobile programming semester ini, saya menambahkan materi baru yaitu JQuerymobile.  JQuerymobile adalah kumpulan css dan javascript yang membuat HTML kita lebih mudah digunakan di mobile device (touch friendly), sehingga cocok digunakan untuk membuat web app.  Contoh tampilan jquerymobile seperti berikut:

contoh_jquery

Mengapa webapp saya masukkan ke dalam materi kuliah?  saat ini kemampuan browser di mobile semakin powerfull dan koneksi internet untuk mobile juga semakin cepat  dan reliable. Kelebihan  webapp yang lain adalah lebih mudah dikembangkan dan bisa digunakan di banyak platform dengan mudah.

Materi pemrograman native  app di kuliah saya juga bergeser,  sekarang native app lebih difokuskan pada pemanfaatan sensor (accelerometer, AGPS dan magnetometer), 3D  dan aplikasi yang membutuhkan komputasi tinggi yang sulit dibuat dengan webapp.

Jika ingin mempelajari lebih lanjut, saya telah membuat tutorial praktikum JQueryMobile, tutorialnya berbahasa Indonesia, lisensinya createive commons sehingga bebas untuk digunakan bahkan dimodifikasi. Ambil versi terakhir di: http://yuliadi.com/ilkom

Perpanjangan STNK 5 tahun di Samsat Bandung Barat

26 December 2012 at 12:06 | Posted in Uncategorized | 3 Comments

Akhirnya harus memperpanjang STNK 5 tahunan dan ganti plat nomor mobil yang habis 3 Jan 2013. Berdasarkan pengalaman bayar pajak tahunan di outlet Giant Pasteur yang cepat dan info dari orang-orang bahwa sekarang pengurusan di samsat sudah gampang maka saya putuskan untuk mengurus sendiri di Samsat Bandung Barat di Jalan Pajajaran.  Berikut adalah langkah-langkahnya. Relatif cepat,  tanpa pungli dan tanpa calo kok :-)    Catatan: Ini saya lakukan Des 2012, jadi di masa depan mungkin akan ada perubahan.

  1. Siapkan STNK asli, KTP asli (tentunya yang sesuai dengan STNK), BPKP, uang  dan bolpen. Fotocopy cukup BPKP saja.  Selama disana tidak perlu menunjukkan BPKP asli, tapi saya bawa untuk jaga-jaga.
  2. Datang ke samsat, masuk ke tempat parkir bagian belakang dan ambil formulir di ruangan sebelah kanan (bukan gedung utama).  Ada tulisan “Pengambilan Formulir” di loketnya.
  3. Isi formulir di meja yang disediakan. Ini gunanya membawa bolpen, katanya sih bolpen disediakan tapi saat saya disana tidak ada.
  4. Cari petugas gesek  yang menggunakan rompi merah dengan tulisan samsat di punggungnya. Jangan tertukar dengan tukang ojek yang juga berompi merah.
  5. Dia akan  gesek nomor mesin dan nomor rangka dan hasilnya ditempel di formulir. Saya menunggu apakah akan diminta “uang rokok”, ternyata tidak.  Ini bagus.
  6. Serahkan formulir+hasil gesek ke petugas yang berada di meja di sebelah loket pengambilan formulir, juga serahkan KTP & BPKP asli. Setelah diperiksa  akan ditandatangani petugas. Petugasnya bukan berada di ruangan loket, tapi di sebelahnya (di bawah tenda).
  7. Serahkan semua dokumen ke loket disebelah kirinya. Loket tersebut bertulisan “cek fisik”, petugas akan memeriksa lagi.  Saran: menurut saya langkah 6-7 ini bisa digabung saja, terasa redundan.
  8. Masuk ke gedung utama, cari loket D di sudut. Banyak yang berdiri di pintu terobos saja. Kebanyakan orang yang ada disana adalah bayar pajak tahunan. Serahkan semua dokumen di loket D ini.
  9. Duduk dan tunggu dipanggil di loket pembayaran di bagian tengah. Akan dipanggil nama dan nomor plat mobil. Ini berbeda dengan yang bayar pajak tahunan yang hanya dipanggil nomor antrian saja.
  10. Bayar dan tunggu lagi dipanggil oleh loket persis di sebelah kanan loket D.
  11. Ambil STNK +bukti pajak+KTP dan  copy STNK (warna biru) untuk mengambil plat nomor. Cek apakah sudah benar, kasus saya, tanggal masa berlaku salah sehingga harus diulang.
  12. Keluar dari gedung, jalan agak ke belakang di tempat yang bertulisan “workshop”, serahkan copy warna biru, tunggu sebentar, plat mobil diserahkan dan selesai. Total waktu yang diperlukan sekitar 1.5 jam (saya datang jam 8 pagi).

Walaupun masih agak bingung urutan prosedurnya dan tidak ada informasi untuk ini, tapi pelayanan tanpa pungli dan tanpa calo (saat saya masuk bahkan tidak ada yang menawari) patut dihargai dan sudah merupakan langkah maju.

Next Page »

Create a free website or blog at WordPress.com. | The Pool Theme.
Entries and comments feeds.

Follow

Get every new post delivered to your Inbox.

Join 69 other followers