Wednesday, December 31, 2014

My 2015 resolution

I am still using 1280x800 macbook's screen resolution though. *cough* *not-funneeh*

Oh hi everyone! It's me again on the tip of 2014th year. As everybody usually do, it's new year's resolution again. Let's start from last year resolution. Anyway, I had put it on a picture. Check it out.

the mighty 2014 resolution
Let's review it for a moment, shall we?

Learn VIM. Yay! I did learn it. VIM has plethora of shortcuts available to tinker with, but I only remember tiny bit of it. Well that really doesn't matter, the important part was I knew to type on it. I had to press "i" first, hahaha.

Graduated. Dang! I haven't finished my final paper yet, but it will be finished. Just need some unicorn sparkle to light it up, and then I will graduated soon. Wish me luck!

Play in a Concert. I did play. It's an annual concert of a violin club in my city. Not really big concert though, but it was my first one! Woohoo!

Buy a new Violin. Yes, I bought one, and it was good. It cost me $150 to pay. Quite a lot for an instrument, but it was totally worth it.

Explore the World. I haven't got an experience to step on another land on this year. I hope it will be, and soon will be, on 2015, heheh.

Get a job. It was a game development job that I wanted to be, for precise. Well, not really "a job." It was an internship on a game studio called as "Tinker Game." It was quite fun and cherish!

That was the review! Now, what should I do for the 2015? I think it will be nice to compress it into small bits of point like I did before. So, here it is


Tadaa, now let's introduce every blocks:

Graduated. I really, really really, really want to graduated. After last meeting with my supervisor I need to push my energy until the last portion of it. I almost give up on it, but hey, it's the last boss to fight with! Let's fight on!

Get a job. After graduated I'd like to have a job. A job on game development looks interesting to me.

Memorize Short Verses. Every prayer I took it always the same verse. Haha, so lame of me. So I have an intention to memorize more. It would be better if I can memorized all the 30th juz.

Learn 3D on Unity. Even though Unity at first made for 3D games, I never touched the 3D part of it. It will be fun to learn about it.

Learn Germany. Germany is one of the famous language in 9GAG. Haha. I found Germany is interesting to learn, and if I can fly there, it will be much useful. Flirting in Germany also will be much much fun. teehee.

Take TOEFL iBT. It's one of the most famous obligation to have with if you want to take abroad University, err... the English language countries Universities. It cost about $250, and that's a lot. I hope I can get a job soon and save some money to take this test.

Rent a room. It would be interesting to learn to live by yourself, right? I'd like to rent a room for myself. It called "kost" in Indonesia. Maybe you called it as apartment, but it much much cheaper.

Publish a game. I've never published a game on Android before. It will be nice to have one. Heheh.

Jog routinely. Oh well, you know what? I never did sports routinely on 2014. No, no, I don't hate sports, it just my shyness *cough* and my *cough* "introverts"-ness...... Oh okay, okay, I'm to lazy to do it. Haha. Hope I can do this simple sport. Actually it doesn't have to be jogging. Any sport will do as long as it done routinely each week.

The year of hope

That's my line for this year. It's a new beginning for me. Another page of life to write on. Another sea of adventure to sail with. What will I head on? I'm not sure, but I will try to give all the effort of my life to fight with it. Let the year begins!

Friday, December 26, 2014

Fixing DIA apps on Mac OSX Yosemite

I use DIA as my primary app for my diagram work. It's easy and it's free. Sadly after I updated my OSX to Yosemite the app only bounced on the dock then disappeared. I stumbled on this link but did nothing for me. Then I found this conversation on DIA's Sourceforge page, and luckily, it worked!

What I did is I typed this line:
DISPLAY=:0 /Applications/Dia.app/Contents/Resources/bin/dia
on 40th line of DIA.

Hope it works as well for you!

Thursday, December 11, 2014

Friday, December 5, 2014

Error Vim buat git

It works! makasih banyak buat Steve Tooke
http://tooky.co.uk/there-was-a-problem-with-the-editor-vi-git-on-mac-os-x/

Tuesday, December 2, 2014

Error kalau kegedean

Jadi kalau gambarnya kegedean jadinya error. Errornya aneh, bagian bawah layar tiba-tiba flicker jadi warna merah dan kemudian si aplikasi tertutup. Kayaknya masalah memori yang nggak cukup sih, jadinya segitu deh. Huhu.
Jadi yang awalnya 576x768 sekarang diresize jadi 384x512

BTW untuk klasifikasnya jelek banget. Hiiiy....

Friday, October 31, 2014

Using JNI on OSX

JNI is the way Java using the other programming language. JNI is cool because it's executed a lot faster.

There's a tutorial from NTU, but it's using Windows as it's platform. Sadly I am using *nix. *sob*. But sad no more, I've managed how to use it.
Oh yeah, this tutorial is based on the NTU's tutorial and Kemp's tutorial

1. Create the Java code. For simplicity on this tutorial I named it as HelloJni.java

public class HelloJni{
	
	static{
		System.loadLibrary("HelloJni");
	}

	private native void sayHello();

	public static void main(String args[]){
		new HelloJni().sayHello();
	}

}

then compile this code. Run this on your terminal

javac HelloJni.java

2. Create the header file of C/C++
javah HelloJni

it will create HelloJni.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class HelloJni */

#ifndef _Included_HelloJni
#define _Included_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloJni
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloJni_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


3. Create the implementation file

HelloJniImpl.h
#ifndef _HELLO_JNI_IMPL_H
#define _HELLO_JNI_IMPL_H

#ifdef __cplusplus
		extern "C" {
#endif
		void sayHello();
#ifdef __cplusplus
	}
#endif

#endif


HelloJniImpl.cpp
using namespace std;

void sayHello () {
	cout << "Hello world from C++!" << endl;
	return;
}


4. Now create the dynamic lib of the cpp's code. I used Fish shell, firstly I set up these variables
set JNIH  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/
set JDKH /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/lib/

Then run this two line

g++ -I"$JDKH" -I"$JNIH" -shared -o HelloJni.o HelloJni.cpp HelloJniImpl.cpp 
g++ -dynamiclib -o libhellojni.jnilib HelloJni.o

5. Run your java app
java HelloJni

the result of the program is would be like this:

Hello world from C++!


Enjoy!

Wednesday, October 22, 2014

Progress Skripsi: Metode Thresholding Sauvola

Di *UHUK* skripsi yang saya buat, saya perlu memproses gambar untuk dipisah menjadi foreground dan background. Dalam kasus saya yang perlu diproses adalah gambar dokumen form. Foregroundnya adalah tulisan dan backgroundnya adalah warna putih dari kertas. Metode ini disebut sebagai thresholding. Ternyata thresholdingnya sendiri banyak metode-metodenya loh! Salah satu metode yang bikin saya kagum namanya metode Sauvola.

Keabuan

Mari kita ngebahas keabuan dulu.

Umumnya gambar punya warna-warna yang banyak. Dalam image processing warna-warna ini biasanya dipisah dalam channel-channel yang berbeda. Contohnya yang paling sering saya pakai gambar dipisah jadi 3 channel yaitu RGB( Red, Green, dan Blue).

Di channel-channel ini terdapat nilai keabuan masing-masing. Nilai keabuan ini memiliki rentang dari 0-255. Representasinya bisa dibentuk jadi matriks yang punya masing-masing nilai keabuan di tiap elemen. Kalau pakai RGB jadinya satu piksel ada 3 nilai keabuan. Secara umum matriksnya bisa direpresentasikan berdimensi mxnxo.

Gambar dengan nilai RGB ini juga bisa dikonversi jadi gambar abu-abu saja (yang sering kita kenal sebagai grayscale) dengan aturan gini:

pixel_abu = pixel_r*0.299 + pixel_g*0.587 + pixel_b*0.114

Thresholding

Nah, kalau konversi grayscale mengubah dari gambar RGB jadi nilai keabuan saja, thresholding membuatnya lebih sederhana lagi. Metode thresholding membuat gambar dengan nilai keabuan menjadi gambar biner, yakni hitam dan putih saja.

Metode thresholding dibagi dua berdasarkan cakupan nilai thresholdnya. Global threshold dan local threshold. Kalau global threshold menggunakan nilai threshold untuk semua gambar, local threshold memiliki nilai threshold yang berbeda-beda di bagian-bagian gambarnya.

Nah, coba kita lihat perbedaannya masing-masing ya.

Metode Otsu

Salah satu metode global threshold yang umum dipakai adalah metode Otsu. Ide dasar dari thresholding ini adalah terdapat dua kelompok nilai keabuan. Nah, metode Otsu memberikan nilai threshold untuk memisahkan nilai tersebut.

Yang mau tahu lebih detilnya metode Otsu bisa lihat di wikipedia

Kelebihan dan Kekurangan Metode Otsu

Kalau cahayanya cukup merata, metode Otsu ini cukup baik loh untuk dipakai.


Sayangnya cahaya yang ada di citra tidak semulus paha Cherry Belle *halah*. Uh... maksudnya cahaya yang ada di kertas berbeda-beda intensitasnya. Misalnya kita punya gambar yang kayak gini

Kalau dilihat sekilas sih bagus-bagus aja ya, tapi itu intensitasnya berbeda-beda. Bagian kertas yang dekat dengan cahaya lebih terang dibandingkan dengan bawah. Nah, inilah kelemahan dari metode Otsu.
bagian yang dithreshold menjadi hitam seperti ini karena sebaran cahaya yang tidak merata

Metode... Uh... Galau...

Hal ini membuat saya galau berhari-hari. Saya bingung. Saya lelah. Saya hina. Aah. Aah.

Awalnya saya mencoba agar cahaya yang didapatkan merata. Caranya saya membuat instrumen sebuah kotak dilapisi kertas putih agar cahaya membias dan disinari dengan lampu emergency. Tapi ternyata bahkan dengan instrumen seperti ini mendapatkan gambar dengan cahaya yang merata tetap susah. Lampu yang saya gunakan tetap saja memberikan cahaya yang lebih terang di bagian depan. Kalau lampunya diletakkan di atas (misalnya digantung) nanti pas pakai kamera handphone cahayanya kehalangan handphone dong? Hmmm...

si kotak bercahaya
Dari kesimpulan saya, Otsu benar-benar memisahkan gambar menjadi dua kelas relatif berdasarkan gambar. Jadi walaupun gambarnya terlihat cukup terang bagian gambar yang lebih gelap akan dinyatakan sebagai background *hiks*. Nah lucunya kalau gambarnya tidak terlalu terang dan tidak terlalu gelap metode Otsu sukses untuk memisahkannya menjadi dua bagian.

Gambar yang cukup abu-abu ternyata bisa di threshold. Wah.
Akhirnya saya googling lagi dan ketemu dengan beragam keyword, antara lain threshold, local thresholding, dan adaptive thresholding.

Local Thresholding

Ternyata permasalahan dengan cahaya yang tidak merata adalah hal yang umum di thresholding. Banyak penelitian yang mengulas hal ini. Sub topik bidang ini dinamakan sebagai local thresholding. Kenapa local? Karena nilai threshold berbeda-beda di seluruh bagian gambar.
Ada teknik-teknik keren seperti Chow-Kaneko yang memotong-motong gambar dan diberikan thresholding dengan Otsu method pada masing-masing gambar, ada juga yang nyari rata-rata kebuan di sekeliling tiap-tiap pixel. Salah satu penelitian yang hasilnya menurut saya cukup bagus untuk digunakan di skripsi saya adalah metode Sauvola.

Metode Sauvola

Metode Sauvola sebenarnya pengembangan dari metode Niblack. Katanya Sauvola, metode Niblack itu dirumuskan gini:

T = m + k*s

dimana T itu nilai thresholdnya, m itu rata-rata keabuan, k konstanta, dan s itu standar deviasi.

Alamak, ternyata saya banyak ketemu statistika di image processing.

Eh, balik lagi. Jadi kata Sauvola nilai metode Niblack kurang memuaskan kalau gambar yang di threshold memiliki tekstur yang terang. Sauvola kemudian memodifikasi metode Niblack menjadi seperti ini:

T(x,y) = m(x,y) * (1+( k*( (s(x,y)/R)-1) ) );

dimana R adalah "dynamic range standard deviation". Di penelitiannya Sauvola nilai R itu paling bagus 128 dan k-nya 0.5;

Algoritma Sauvola

Heh, itu semua cuma rumus geje woy. Cara pakainya gimana?

Jadi algortima metode Sauvola tuh gini

  1. Untuk masing-masing piksel (Loop i dan j) telusuri sejauh n window, kita sebut piksel ini sebagai P_threshold. Hal ini dlakukan agar beban komputasi kecil. Besar n bebas. Semakin kecil n nya maka gambar yang memiliki keabuan merata akan dibuat menjadi background.
  2. Cari m dari sekeliling P_threshold.
  3. Cari s dari sekeliling P_threshold.
  4. Tentukan besar T dan simpan di matriks_threshold.
  5. end for (i dan j)!
  6. Untuk masing-masing piksel (Loop i dan j) telusuri lagi sejauh n window, kita sebut piksel ini sebagai P_abu.
  7. Untuk masing-masing piksel (Loop ii dan jj) dari i hingga n dan j hingga n (kita sebut piksel ini sebagai P_window).
  8. Cek apakah indeks i dan j tidak memiliki sisa bagi dengan n. Jika ada berarti merupakan piksel acuan. Tentukan keabuannya dari indeks di matriks_threshold. Tentukan nilai piksel berdasarkan T.
  9. Jika bukan merupakan piksel acuan kita cari rata-rata thresholdnya dengan rumus ini:
    T = (matriks_threshold[i][j]+ //titik kiri atas
    matriks_threshold[i][j+n]+ //titik kanan atas
    matriks_threshold[i+n][j]+ //titik kiri bawah
    matriks_threshold[i+n][j+n] //titik kanan bawah
    )/4;
    Tentukan nilai piksel berdasarkan T.


  10. end for (i dan j)!
  11. end for (ii dan jj)!
Udah deeeh. Itu algoritma umumnya. Kalau saya nambahin dikit algoritmanya untuk ngehandle kalau piksel P_abu ternyata mentok, kalau mentok berarti P_abu di sekelilingnya kurang dari 4.


Untuk penelitian saya menggunakan n = 30, R = 128, dan k = 0.3. Hasilnya cukup memuaskan loh

gambar yang sebelumnya jelek kalau di threshold dengan metode Otsu ternyata dengan metode Sauvola menghasilkan hasil yang bagus
Bahkan yang cukup ekstrim, yaitu gambar yang diambil menggunakan lampu blitz. Permasalahan di gambar ini adalah cahaya berada di tengah dan intensitasnya berubah menjadi gelap semakin ke arah luar.

Form yang diambil dengan lampu blitz

menggunakan metode Sauvola

menggunakan metode Otsu

Keep fighting! 


Yaay. Nah sekarang udahan buat image processingnya. Sekarang mari kita ulik lebih lanjut di Neural Networknya. Yuhu!

p.s: Kalau mau kasih semangat boleh loh komen-komen disini, huehue.

Thursday, October 9, 2014

Tempat Enak Buat Ngerjain Skripsi

Skripsi. Semakin lama kamu menjadi mahasiswa, semakin something rasanya kata ini. Iya lah. Alasannya karena semakin banyak yang bertanya "Kapan lulus?" *batuk darah*. Biar bisa jawab berarti skripsinya harus selesai. Biar selesai berarti harus dikerjain. Dimana aja tempat yang enak buat bikin skripsi?

Supaya tidak terlalu meluas maka kita tentukan dulu kriteria tempat yang enak buat skripsi. Menurut saya ada beberapa faktor utama yang menjadikan sebuah tempat menjadi tempat-skripsiable.

  1. Ada colokan listrik. Kecuali buku skripsi kamu dikerjakan dengan mesin ketik atau tulis tangan sih.
  2. Ada koneksi internet. Kamu perlu mencari jurnal-jurnal terkait penelitian kamu kan? Kalau nggak ada internet susah banget untuk cari referensi. Bagi yang kuliahnya berhubungan dengan ngoding apalagi, rasanya nggak bisa hidup kalau nggak ada StackOverflow.
  3. Ada tempat sholat. Biar kita selalu beribadah dan dimudahkan dalam mengerjakan skripsi. Eaa. Semakin gampang kamu ninggalin laptop buat sholat maka semakin bagus dan praktis tempatnya.
Rumah
Emang bener kata orang kalau "home sweet home," yang secara literal artinya rumah manis rumah. Kamu tinggal duduk manis dan ngerjain skripsi sesuka kamu. Bahkan nggak cuma duduk, kamu bebas mau tengkurep, rebahan, kayang, bebas! Namanya juga rumah kamu.
Tapi masalahanya kalau di rumah ada aja gangguan menggoda. Mulai dari televisi yang menggoda untuk ditontonin, orang tua yang minta dibeliin minyak di warung, sampai kasur yang mengajak untuk tidur bareng.

Skor
Colokan: 10/10
Internet: 3/10 sampai 10/10. Tergantung koneksi kamu pakai apa sih
Sholat: 10/10
Nilai plus:
  • Kalau lagi laper gampang
  • Kalau mau gogoleran di kasur dulu enak
  • Bisa main-main dulu, nonton tv, bahkan mandi. Eh, kapan nyekripnya?

Kosan
Yang jauh dari rumah biasanya ngekos. Ngekos sebenarnya mirip sama rumah, cuma bedanya semua dikerjakan sendiri. Kamu bisa fokus ngerjain skripsi. Tapi ya tergantung seberapa elit kosan kamu. Kalau kasurnya berbantalkan bulu angsa dan kamarnya dilengkapi home theater yahud tingkat distraction nya juga nggak ketulungan, hahaha. Kalau nggak ya temen kosan kadang suka gigitaran dan nyanyi-nyanyi, atau tiba-tiba ada yang ngajak jalan-jalan.

Skor
Colokan: 10/10
Internet: 3/10 sampai 10/10. Tergantung koneksi kosan kamu.
Sholat: 10/10
Nilai plus:
  • Kalau lagi bosen bisa gangguin tetangga
  • Bisa gogoleran juga

Perpustakaan
Canggih banget nih yang suka ke perpustakaan. Contoh mahasiswa teladan. Asal ke perpustakaannya bukan buat ngeceng ya.
Di perpustakaan kamu bisa menemukan beragam referensi. Tapi sayang karena tempat duduknya terbatas jadi kalau lagi apes ya nggak dapet deh. Selain tempat duduknya terbatas colokannya juga berebut! Ya jadi pasrah aja deh kalau baterai laptop kamu abis.

Skor
Colokan: 2/10
Internet: 8/10. Kadang suka kehabisan IP Address, tapi kecepatannya maknyos!
Sholat: 5/10. Kalau kamu sendirian susah buat ninggalin laptop
Nilai plus:
  • Dekat dengan kampus, jadi kalau mau bimbingan bisa langsung
  • Referensi yang bejibun
  • Bisa ketemu temen buat diskusi
Lab
Sebagai peneliti muda yang mengerjakan buku skripsi kerjanya pasti cocoknya di lab dong? Apalagi kalau kampus kamu punya lab yang memadai dan sesuai dengan penelitian kamu. Kamu bisa nyobain metodologi dengan beragam peralatan yang bagus. Sayangnya lab suka jadi tempat buat nongkrong asdos (asisten dosen) dan aslab (asisten lab) yang bikin nggak enak kalau nggak ada temen seangkatan. Hahaha.

Skor
Colokan: 8/10. Tergantung juga sih, labnya penuh atau nggak
Internet: 10/10.
Sholat: 8/10. Enaknya kalau di lab laptopnya bisa dititip sama aslab.
Nilai plus:
  • Mirip sama di perpus, deket dengan kampus dan bisa ketemu sama temen yang bisa diajak diskusi

Cafe
Woow, gaya banget nih yang ini. Kamu bisa ngerjain skripsi sambil ditemani segelas kopi bersauskan karamel dengan taburan coklat dan wafer. Asalkan ada duitnya.

Skor
Colokan: 5/10. Tergantung kafenya gimana, tapi ya biasanya jarang sih ada colokan.
Internet: 5/10. Tergantung kafenya lagi gimana. Ah, biasanya mah standar aja koneksinya.
Sholat: 2/10. Hm... makin rawan kalau laptop ditinggal dulu pas lagi di kafe.
Nilai plus:
  • Bisa ngurangin duit
Itu aja dulu deh ya. Selamat nyekrip!

Tuesday, October 7, 2014

Progress Skripsi: Homography

Kali ini pakai bahasa Indonesia aja ya, the scientific english is still too hard for me, haha *padahal males*.

Di postingan sebelumnya saya membahas sedikit tentang homography, kali ini saya coba elaborasi sedikit ya.

Homo-what?

Pemetaan antara vektor \(\overrightarrow{p}\)  menuju \(\overrightarrow{q}\) dapat dinyatakan dengan
\[\overrightarrow{q} = H \overrightarrow{p} \]
dimana \(H\) adalah matrix dengan dimensi 3x3. Pemetaan tersebut dinamakan homography.

Intinya adalah terdapat sebuah matrix berukuran 3x3 (homograph matrix) yang bisa memetakan dari satu titik awal ke titik akhir. Homography berguna bagi proses image rectification (rektifikasi gambar), yakni proses koreksi spasial pada citra.

Menurut pak David Kriegman di mata kuliah Computer Vision 1  penjelasan homography adalah sebagai berikut:

persamaan homography dapat dinyatakan sebagai
\[X_2 = HX_1\]

Jika dituliskan elemen per elemen, persamaan homography dapat kita tuliskan sebagai berikut
\[
\begin{bmatrix}
x_2 \\
y_2 \\
z_2 \\
\end{bmatrix}
=
\begin{bmatrix}
H_{11} & H_{12} & H_{13} \\
H_{21} & H_{22} & H_{23} \\
H_{31} & H_{32} & H_{33} \\
\end{bmatrix}
\begin{bmatrix}
x_1 \\
y_1 \\
z_1 \\
\end{bmatrix}
\]

Pada ruang dua dimensi tidak terdapat kordinat Z, maka nilai x dan y dapat dinyatakan sebagai \(x'_2 = x_2/z_2\) , \(y'_2 = y_2/z_2\), dan \(z = 1\). Dari justifikasi ini nilai \(x'_2\) dan \(z'_2\) dapat dinyatakan sebagai berikut

\[ x'_{2} = \frac{H_{11}x_{1} + H_{12}y_{1} + H_{13}z_{1}}{H_{31}x_{1} + H_{32}y_{1} + H_{33}z_{1}} \]

\[ y'_2 = \frac{H_{21}x_{1} + H_{22}y_{1} + H_{23}z_{1}}{H_{31}x_{1} + H_{32}y_{1} + H_{33}z_{1}} \]

atau dapat ditulis sebagai
\[ x'_{2}(H_{31}x_{1} + H_{32}y_{1} + H_{33}z_{1}) = H_{11}x_{1} + H_{12}y_{1} + H_{13}z_{1} \]
\[ y'_{2}(H_{31}x_{1} + H_{32}y_{1} + H_{33}z_{1}) = H_{21}x_{1} + H_{22}y_{1} + H_{23}z_{1} \]
dan dikelompokkan menjadi persamaan linear berikut

\[ H_{11}x_{1} + H_{12}y_{1} + H_{13}z_{1} - x'_{2}(H_{31}x_{1} + H_{32}y_{1} + H_{33}z_{1}) = 0 \]
\[ H_{21}x_{1} + H_{22}y_{1} + H_{23}z_{1} - y'_{2}(H_{31}x_{1} + H_{32}y_{1} + H_{33}z_1) = 0 \]

Persamaan tersebut dapat dinyatakan kembali sebagai berikut
\[a^T_xh = 0\]
\[a^T_yh = 0\]
dimana
\[h = (H_{11},H_{22},H_{23},H_{31},H_{32},H_{33})^T\]
\[a_x = (x_{1},y_{1},1,0,0,0,-x'_{2}x_{1},-x'_{2}y_{1},-x'_{2})^T\]
\[a_x = (0,0,0,x_{1},y_{1},1,-y'_{2}x_{1},-y'_{2}y_{1},-y'_{2})^T\]

Dengan persamaan tersebut kita dapat menyatakan persamaan linear untuk permasalahan homography sebagai:
\[Ah = 0\]

dimana
\[A = \begin{pmatrix}
a^T_x1\\
a^T_y1\\
.\\
.\\
.\\
a^T_xn\\
a^T_yn
\end{pmatrix}
\]

matriks \[A\] ini dinamakan matriks estimasi.

Oke, kita bisa masukkin variabel-variabel tadi ke \(Ah = 0\). Terus bagaimana cara menentukan nilai H nya? Untuk menyelesaikannya kamu bisa menggunakan Singular Value Decomposition

Singular Value Decomposition

Sejauh yang saya tangkap dari pembahasan di MIT OCW dan tutorial SVD dari pak Kirk Baker, inti dari SVD adalah sebuah proses untuk memecah sebuah matriks menjadi 3 matriks. Rumusan umumnya adalah sebagai berikut

\[A_{mn} = U_{mm} S_{mn} V^T_{nn}\]

Tutorial yang sangat lengkap dan jelas mengenai SVD ada di tutorialnya pak Kirk Baker. Bagi rekan-rekan yang ingin belajar lebih lengkap tentang SVD silahkan mengunjungi tutorial tersebut.

\(S\) merupakan matriks diagonal. Nilai \(S_{mn}\) yang paling kecil akan berkorespondensi dengan salah satu kolom pada matriks \(V^T\). Kolom tersebut berisi nilai-nilai \(H\) yang kita inginkan sebagai matriks homograph.

Pada penjelasan oleh pak David Kriegman disebutkan pula bahwa nilai \(V\) memiliki hubungan dengan nilai eigenvector dari \(A^TA\). Penjelasannya saya masih belum begitu paham kenapa, tapi sejauh yang saya tangkap hal ini dibuktikan dengan pendekatan squared error. Penjelasan beliau bisa dibaca di halaman 2 dan  3.

Hubungan \(V\) dan nilai eigenvector dari \(A^TA\) tersebut memungkinkan penghitungan diringkas dengan mencari nilai eigenvalue terkecil dari eigenvector \(A^TA\) dan mengambil kolom dari \(V\) berdasarkan posisi nilai eigenvalue tersebut. Kode implementasinya bisa kamu lihat di project The-Imp berikut.

Yang saya kerjakan

Saya pun mengimplementasikan homography tersebut ke program ekstraksi huruf-huruf. Saya pun menemukan masalah.

Seperti diketahui, rumus yang kita ketahui adalah \(X_2 = HX_1\).  Jika kita menggunakan rumus ini berarti kita memetakan dari \(X_1\) ke \(X_2\), padahal pertanyaannya adalah

"saat di sebuah titik pada \(x_2\), dimanakah titik \(x_1\) yang dikalikan matriks \(H\)?"

Dari pertanyaan tersebut padahal nilai yang diketahui adalah \(H\) yang merupakan matriks homograph dan \(X_2\) yang merupakan setiap titik akhir yang diinginkan. Jika tetap dilakukan dengan rumus awal maka akan terjadi pembulatan yang akhirnya terbentuk bagian yang kosong.
garis-garis hitam karena pembulatan. Garis ini adalah bagian gambar yang tidak terpetakan.

Berarti apa yang harus kita lakukan? Yak! Invers!

\[X_2H^{-1} = X_1\]

Saya kemudian mengimplementasikan rumus ini ke program. Matriks estimasi yang saya inputkan adalah titik kontrol pada form. Dan hasilnya cukup memuaskan *fyuuuh*. Akhirnya euy, semingguan belajar tentang homography *jadi curhat*.

Oh iya, btw saya pakai library Apache Commons Math untuk proses matriks seperti transpose, invers, dan mencari nilai eigen. Kok gitu? Otak saya masih belum cukup professor, heheh.

Eksperimen


Oke deh. Sekarang kembali ke skripsi. Saya menginginkan untuk melakukan ekstraksi di form seperti ini.

Gambar di atas adalah contoh yang bagus untuk jenis form yang memiliki kasus kemiringan dan proyeksi.

Uji Coba 1

Di postingan sebelumnya saya sempat memberitahu saya menggunakan affine transformation berupa shearing agar titik-titik kontrol dapat sejajar. Hasilnya hanya dengan shearing adalah sebagai berikut
Rektifikasi hanya dengan shearing
Seperti dilihat angka 9,8,7, 6, dan 5 cukup terpotong

Uji Coba 2

Uji coba ini hanya menggunakan homography. Pada angka 9, 8, 7, 6, dan 5 lebih baik dan cukup terlihat.
Namun permasalahannya adalah metode homography tidak membuat titik-titik kontrol sejajar seperti yang saya harapkan. Artinya jika form terlalu miring maka tidak dapat dideteksi.
Rektifikasi hanya dengan homography

Uji Coba 3

Percobaan kali ini menggunakan homography dan shearing. Ternyata hasilnya lebih baik, bahkan sebagian besar border hilang. 
Rektifikasi dengan homography dan shearing
Dengan metode ini form yang cukup miring pun bisa ditangani. Saya belum menghitung kemiringan berapa derajat. Seingat saya metode hanya dengan homography tidak sanggup saat kemiringan mengakibatkan titik kontrol tidak melewati titik-titik penanda kolom/baris jika ditarik garis lurus.

[UPDATE 7-Oct-2014] Uji Coba 4

Saat implementasi Homography ternyata saya salah kordinat yang dikalikan. Saya salah memasukkan koordinat x dan y, keduanya terbalik! Ternyata hanya dengan homography hasilnya sangat bagus!
Woow! Align perfectly!

Saya mengetahui keanehan ini saat memperhatikan uji coba 3 terdapat karakter "d koreksi" terpotong (di bawah angka 7 pada gambar yang sudah diekstraksi). Karena khawatir maka saya bereksperimen dengan melakukan pemindaian menggunakan form yang penuh dengan grid.
form yang sengaja saya beri transformasi proyektif agar bisa dilihat hasil rektifikasi nya

Berikut percobaan dengan hanya homography. Di ujung gambarnya keluar dari grid yang diinginkan
percobaan cek semua grid dengan homography
Berikut percobaan dengan shear kemudian homography. Ternyata salah juga!
percobaan cek semua grid dengan shear kemudian homography
Kemudian saya melakukan debugging dan menguji kembali percobaan untuk mengecek semua grid. Hasil dengan hanya menggunakan homography ternyata sangat memuaskan!!
Aku terpuaskan!!!
Jadi kesimpulannya homography dan rektifikasi adalah sahabat terbaik. Ciye ciye.


Skripsinya

Ini kok eksperimen mulu sih? Skripsinya kapan dikerjain woy!
Ya atuhlah... pan skripsi teh eksperimen, kumaha ih.

Jadi kemarin saya bimbingan dengan dosen pembimbing saya. Karena saya khawatir dengan program saya yang belum punya arahan yang pasti maka saya menunjukkan mockup tampilan program yang akan dibuat. Ternyata lumayan dapat banyak pencerahan, salah satunya adalah
"Kerjakan diagram dulu baru ngoding"

*uhuk*

Ini penyakit yang sudah terlalu dibiasakan. Ngoding dulu akhirnya acakadut. Berarti sekarang saya mengerjakan doktek (dokumen teknis) dulu sembari revisi bab 1.

Terus?

That's it! Mari kita lanjut ngerjain skripsi lagi. Ulalala. Ulalala. Ulala.

Saturday, October 4, 2014

Pilihan judul skripsi


Siapa tahu ada yang lagi nyari judul skripsi
  1. Implementasi pengenalan bentuk tangan pada aplikasi penyensoran otomatis isyarat tangan pada citra foto
    Jadi kalau ada yang pake isyarat f*ck gitu di foto bisa otomatis ditutupin
  2. Rektifikasi gambar otomatis berdasarkan kesejajaran huruf pada teks
    Teks yang difotonya miring-miring bisa jadi lurus. Untuk referensi banyak nih penelitian serupa tentang ini, berhubungan tentang homography gitu.
  3. Penerapan local thresholding pada citra dokumen untuk mengatasi gangguan bayangan.  - jadi saya punya problem kalau di gambar planar (misalnya foto dokumen) dan thresholding yang dilakukan hanya menggunakan global threshold maka bayangan akan dibuat menjadi warna hitam. Dengan local thresholding masalah ini bisa diatasi.
  4. Pencarian pola yang telah diterapkan pada citra. Inti dari penelitian ini adalah mencari tanda khusus pada gambar, misalnya tanda khusus untuk Augmented Reality, atau mencari QR Code pada gambar yang crowded. Saya belum tahu metode khususnya apa, kalau ketemu bisa jadi topik yang lebih khusus lagi.
Kalau ketemu lagi nanti di update. Kalau ada yang menggunakan topik di atas dalam penelitiannya komen disini ya. Saya tertarik untuk mengetahui hasil penelitiannya :)


Friday, September 12, 2014

POME: Research on neural network

Hi guys! It's been a long time. Well you know, procrastinating is awesome. LOL

The ANN

This week I managed to code the trainer program. Yay! What I have done is just made a GUI and integrated it with my already coded ANN. I have coded it last month.

Because I had the opportunity to play around with the ANN, then I tried to make a simple classifier network. Just to tested it out. Interestingly the ANN needed specific number to get it right. The more complex the network doesn't mean it's become more accurate.

For example, I gave 3 hidden layers with 50 hidden neurons each. When I tested it out the result was only 86% accuracy.
But when I used only 1 hidden layers with only 10 hidden neurons in it, the result of my classifier was 100% accuracy! Awesome!
These all still looks like a magic for me. Hahaha. But nevertheless it's still one same dataset, of course I expected exactly same result. For next experiment I'll try different person to write the character and tweak the parameters again.

Homography

Oh anyway, I've found out the problem from the last post of my data extractor (the strangely distorted and unaligned image at the corner). Looks like I need to use the homography.

Have you ever wonder how a person see through a camera but the camera itself produce a 2D image? Yep, it's all because homography plot the 3D world onto the 2D space. Can we reverse this effect? Of course we can! But how? Uh.. that's what I struggled on. I am still reading (and watching) about it. There's a good lecture about homography on YouTube!. I need this!!!


Humm.. That's it for now. I think now I can see my advisor again on this Monday. I asked by him to work on this part of research first. Well then, see ya!

Wednesday, September 3, 2014

Progress About My Paper 2 : The Corner

It was a lot of journey. I experimented to extract the letters from the form. But you know what? The problem is always lurking at the corner. Literally.

The Corner

I learned about the affine space from Tutsplus' tutorial . From the tutorial I managed to shear my image. The idea was like this. I have 3 points, which are top-left, bottom-left, and top-right. First, I set the top-left point as static point. Then I shear the bottom-left point so it's parallel to the top-left point. At last I shear the top-right point so it's parallel to the top-left point.

At the top-left-side part, the image looked correct.

But as the image going to the bottom-left corner the alignment began strange

From this result I concluded that I can't simply correct this with affine space. The image was on projective space.

I talked about this problem to my advisor. My advisor told me to ignore this problem for a moment. For the beginning step he told me to assume the form is perfectly aligned. I have to start to experimenting with Neural Network. Luckily I have a Wacom's pen tablet, so I can create handwritten form with it.

My extractor managed to export the XML format of letters. Here's how my extractor looks like.
To extract 52 characters it need about 5 seconds. Quite long eh? But it's enough for the moment. Now I need to create the program for ANN.

Wish me luck then. Ngoahahaha.

p.s: guhe lagi ngambil kursus bahasa Inggris. Lumayan nulis ginian, buat belajar structure.

Friday, August 15, 2014

Mendaftar TOEFL Preparation Course

Kampus saya memiliki sebuah lembaga bernama Balai Bahasa. Disana terdapat beragam kursus bahasa. Salah satunya bahasa Inggris. Berhubung saya harus memiliki nilai TOEFL atau setara sebagai syarat sidang, maka saya bersiap terlebih dahulu untuk les disini.

Untuk mahasiswa UPI, biaya kursusnya Rp 600.000. Pertemuannya direncanakan 3 kali dalam seminggu selama 3 jam. Teman saya yang pernah ikut kursus ini mengatakan terdapat 3 kali tes PTESOL (The Proficiency Test of English for Speakers of Other Language), setara TOEFL. Jadi lumayanlah, sekalian belajar bahasa Inggris sekalian dapat testnya.

intermezzo - PTESOL bukan TOEFL. TOEFL sendiri adalah serangkaian test hak cipta dari ETS (Educational Testing Service), nah sedangkan PTESOL itu dibuat oleh universitas. Biaya test TOEFL yang asli berkisar US$160-US$250. Lumayan mahal memang.
Peserta TOEFL Prep Course ada 30 orang. Kursus ini dilaksanakan jika kuota peserta sudah terpenuhi. Jadi jika anda mendaftar dan masuk ke dalam waiting list, saat balai bahasa menghubungi anda segeralah untuk daftar ulang dan membayar biaya kursus.

Sebelumnya saya pernah mendaftar di bulan Juni yang rencananya untuk bulan Agustus. Saya saat itu sudah dihubungi, tapi berhubung saya masih mudik jadi saya menolak. Selasa lalu saya kembali ke Balai Bahasa dan bertanya mengenai TOEFL Prep Course, dan ternyata katanya tersisa 7 kuota. Saya saat itu belum siap dan berniat untuk kembali esoknya. Saat besoknya datang ternyata (kata mas-mas yang jadi petugas di Balai Bahasa) tersisa 1 kuota lagi. Alhamdulillah masih ada, saya langsung daftar.

Prep Course periode ini dimulai dari tanggal 19 Agustus nanti setiap hari Selasa, Rabu, dan Jumat.

Thursday, August 14, 2014

Progress about my paper

Today I  spoke to my advisor lecturer about my final project. It's called POME (in case you don't remember you can check my previous post).

In my campus there's a rule that the student need to see the advisors at least 6 times per semester. I haven't seen him for a couple of month, so.. yeah, my final project also got stuck. By the way I have two advisor, but I haven't got time to see the second ones.

Before I saw my advisor I had prepared my questions correlated about my project. We talked a bit, and here's the resume.

First, I misunderstood about erosion and dilation. These two processes is to do morphological change. At first, I thought this process expand every pixel in structuring element. But I was wrong. I rechecked the sample at HIPR2. It's only the center of pixel affected.

Here's an example. Assume there's a 5x5 binary image like this (0 is background and 1 is foreground)

00000
00100
00000
00000
00100

and we have a structuring element for dilation of 3x3

111
111
111

At first I thought the image is going to be like this
11111
11111
11111
11111
11111

Why? Because I change every 3x3 pixel around the foreground's. But, the right answer is this
01110
01110
01110
01110
01110

I reported my finding to my advisor and he told me to rewrite my second chapter of my paper.

For more detail explanation go to its website at http://homepages.inf.ed.ac.uk/rbf/HIPR2/dilate.htm

Second, I rethought for data decode and need to learn scaling. For this project at first I have to create a trained network for my classifier so I need to do training.  The input is every correct input letters. I thought it's going to be more convenient to decode those extracted training forms to XML data. Because I need to input the same amount of pixels for every data but the data itself can be different for each extraction so I have to scale them appropriately.

My advisor told me to use the available library out there for scaling. He said scaling can be quite complex. But... I don't know, I thought a simpler scaling because it's binary image. I had read about bilinear interpolation and I think it's quite simple for 2D image. The concept is the original pixels spread out then a structuring element count the gray value.

Err.. that's convenient for shade of grays, maybe I'll find another simpler method for binary images.

I'll try to learn it a little bit and do some experimenting to use it. If it's quite complex (it took me 5 days to develop it, haha) then it's better for me to use image processing library, even though that's rather overkill.

Third, I made up my finding pattern. I made my paper forms. It's consist of white boxes for write text and black boxes for my finding pattern algorithm. I made it up and have no reference. Then I thought it will be great to use QR Code method to find the mark.

Fourth, feature extraction of text.

It's quite long story.

At first, I thought Sobel Edge Detector is great to extract the feature of the text, but then I realize it's no need because I had thresholded it. Sobel Edge Detector maybe will be more useful for noisy and many object on image, not like my paper forms which is quite obvious to remove the background colors.

Then I found thinning from my elder alumni's paper. His method is quite sophisticated. He detect japanese characters. A letter can be 3 or 5 pixel width. He then do "thinning" to it, find its intersection, and count the strokes. Really cool, but complicated. I don't want to use the intersection and stroke counting, but I like the way he do thinning.

Then I tried the thinning method from HIPR2 (which I think still bad, maybe my algorithm is wrong) but I found the image looks so strange. The N letter become looks like W after it's thinned. I'm not sure thinning is good, but maybe it's just because my thinning algorithm.

There's also a paper from Farhad Soleimanian, he put the letter's pixel directly to its neural network.

So what should I use? Directly put it to neural network, thinning method, or Sobel edge detector? My advisor told me to STOP TINKERING IMAGE PROCESSING FOR FEATURE EXTRACTION and do the simplest thing first. Use the "direct input" and do the training to see how much the classification correctness.


What's next? I think I have to do these
  1. Implement "Finding Pattern" method in extractor app
  2. Implement "segmentation"  in extractor app
  3. Implement "export form to XML" in extractor app
  4. Implement "import form XML" in training app
  5. Implement "Neural Network Training" in training app
  6. Implement "export network XML"  in training app
  7. Implement "import network XML" in testing app
  8. Implement "testing" in testing app
  9. Try each "direct input", Sobel edge detector, and thinning method then count how big are the correctness
  10. Recheck thinning method, because my algorithm output differ with HIPR2's images


Long post eh? That's my documentation about my paper progress. It's become more and more exciting. Wish me luck then!

Bonus: Here's how I am making it


P.S: Excuse my Engrish though, it's one of my program to learn english. So grammar nazis out there, have yourself tons of corrections

Saturday, August 2, 2014

Pertanyaan Indonesia tentang ke luar negeri

Saya bukan pelancong tapi saya senang diajak berlancong. Apa itu berlancong? Anyway, setiap saya nonton acara travelling dengan kerabat, teman sepertontonan saya sering nyeletuk ",dapat makanan halal disana gimana ya?" Pertanyaan-pertanyaan macam gini sering menggelitik, apalagi kalau negara yang dikunjungi itu mayoritas penduduknya bukan muslim. Itu pertanyaan iseng sih, tapi ya itu, sering banget ditanyakan. Untuk itu saya coba rangkum pertanyaan orang Indonesia tentang hidup di luar negeri.

  1. Gimana cara dapat makanan halal?
  2. Kalau lagi jalan-jalan terus mau sholat gimana caranya? (soalnya nggak ada mushola)
  3. Kalau mau sholat Jum'at gimana? (takutnya nggak ketemu mesjid)
  4. Beli kecap disana gimana ya? (ujung-ujungnya juga nanya tempe, kerupuk, sampai terasi bisa dibeli di mana)
  5. Disana ngenetnya gimana? (pertanyaan buat ngenet di hape dan warnet)
  6. Kita bisa pake nomor hape sendiri nggak?
  7. Kalau nyuci baju gimana caranya? (maksudnya nanyain laundry di sana yang pake koin kayak di film-film)
  8. Mudik nggak? Kan mahal?
  9. Nyuci, maaf, bokongnya, maaf, pakai, maaf, tisu, maaf, ya?
  10. Kalau ke dokter umum mahal nggak sih?
  11. Makannya mahal nggak sih?
  12. Paspor harus dibawa melulu nggak?
Itu dulu kali ya, kalau misalnya nanti ada yang lain saya update buah ditambah. Ciao!

Tuesday, July 29, 2014

Waktu lama tidak tiang

Ini posting dengan judul yang aneh. Kalau dibahasakan ke bahasa Inggris jadi "Long time no post"

Oh hi! Apa kabar semuanya? Bagaimana kabar para pembaca setia? Walaupun saya tidak yakin blog ini ada pembaca setianya. Banyaknya pembaca selingkuh. Hmm...

*krik krik, suara babi yang menyamar jadi jangkrik*

Sekarang saya mau cerita tentang saya hiatus. Ini adalah tulisan geje yang mungkin tidak begitu bermanfaat bagi pemikiran brilian anda. So brace yourself folks. It's time for me to dust off my brain.

Hiatus

Hiatus, dari kata latin hiare, yang artinya celah. Kata ini merupakan kata bahasa Inggris yang memiliki arti berhenti sejenak dari serangkaian kegiatan. Ini adalah sebuah kata yang keren bagi saya untuk menyatakan leyeh-leyeh dan bolos. Aagh. Bolos dari apa? Dari skripsi. Aagh.

Bad me. Bad me. *tampar pipi sendiri*

Saya sekarang sedang berada di Sampit. Sampit itu apa? Karena saya ingin menjelaskan hiatus saya, penjelasan Sampit bisa kalian buka sendiri di websitenya ini. Itu bukan promo. Bukan. Cuma nyombong.
Saya sudah hampir sebulan di kota tercinta ini. Nuansanya yang hangat dan tentram menjadikannya cocok untuk tunas-tunas malas merambat dengan riang. Aagh. Disinilah saya melaksanakan ibadah hiatus saya dengan khusyuk. Apa saja hiatus yang saya lakukan? Berikut penjelasannya per poin.

1. Rehat inkontrol

Hiatus saya diawali dengan sebuah kegiatan bernama rehat inkontrol. Rehat inkontrol adalah kegiatan merebahkan diri di atas bidang datar, didampingi substansi dengan viskositas rendah (ex. bantal, guling, dsb), dalam rentang waktu tak terbatas. Umumnya rehat inkontrol dilakukan setelah sahur hingga menjelang waktu ashar. Rehat inkontrol memberikan efek samping berupa begadang inkontrol.

2. Eksplorasi kode majemuk (EKM)

Eksplorasi kode majemuk, atau disingkat sebagai EKM (baca: é-ka-eum), merupakan kegiatan berada di depan komputer untuk menekan serangkaian tombol yang menghasilkan program imajiner. Eksplorasi kode majemuk merupakan efek samping dari rehat inkontrol (yakni begadang inkontrol).

Beberapa EKM yang saya lakukan di Sampit adalah:
1. http://kotasampit.com. Merupakan sebuah website yang menjelaskan betapa uniknya Sampit. Memiliki fitur administrasi, statistik sederhana, dan peta personal. Ini adalah EKM yang memiliki bilangan eksplorasi tinggi sehingga memiliki tingkat distraksi terbesar. Bahkan gara-gara saya nulis tentang ini jadi kepikiran ini lagi. Aagh! Cukup! CUKUP!


2. Kosamapper. Merupakan aplikasi Android untuk melakukan pemetaan sederhana. Aplikasi ini merupakan pengembangan dari aplikasi Envirotell semasa saya melaksanakan kegiatan KKN.


3. Maatchee. Sebuah permainan untuk acara #GantengJam2014, yakni perayaan memperingati hari ganteng sedunia yang jatuh pada tanggal 25 Juli 2014. Kebetulan itu hari ulang tahun saya. Anyway, Maatchee adalah game mencocokkan pola dari gambar yang disediakan. Permainan ini dibuat dengan SpriteKit dan ditargetkan untuk Mac OSX.


EKM merupakan jenis hiatus berbahaya. Kegiatan ini memiliki efek melemahkan syahwat. Syahwat  untuk menyelesaikan skripsi. Diikuti dengan rehat inkontrol, EKM duduk di tahta tertinggi. Mari tampar wajah bersama-sama.

*plak plak plak*

Skripsi

Let's get serious this time. My paper covered by dust and spiderweb riding on its back. Kenapa ini semua terjadi? Karena saya procrastinate dengan cara hiatus. Cara yang ampuh memang, untuk lupa. Bahkan lebih melupakan daripada sihir obliviate yang diucapkan Prof. Gilderoy Lockhart kepada Ron saat di jaringan saluran air Hogwarts, tapi karena dia memakai tongkat Ron sedangkan tongkat Ron patah maka sihirnya berbalik ke dirinya sendiri. Tongkat Ron patah. Huh. You know what I think of it.

Oh shoot. I baffling again.

Kembali ke skripsi. Skripsi saya tentang pendeteksian lembar jawaban komputer menggunakan handphone. Aplikasi yang ingin saya buat bernama POME, singkatan maksa dari Phone Optical Mark Recognition. Catchy ya?

Tahapan yang seharusnya saya lakukan adalah sebagai berikut:
  1. Bikin program komputer untuk training yang bisa: ekstrak data dari gambar, threshold, rotate, training, dan ekstrak jaringan syaraf buatannya.
  2. Mengumpulkan data training.
  3. Proses training.
  4. Membuat aplikasi POME.
  5. Menguji coba aplikasi POME.
  6. Hasil penelitian.
  7. Lulus deh.
Tapi yang saya lakukan baru tahap 1 sebesar 0.5%. Baru bisa threshold. Menangislah. Menangislah.

Baru bisa threshold
Saya juga ada masalah. Ternyata saya cuma bisa melakukan threshold dari file yang saya dapat dari website yang menyediakan gambar-gambar contoh untuk pengolahan citra. Yang saya khawatirkan di Java memiliki keterbatasan untuk BufferedImage pada file yang dibuat di OS tertentu. Tapi kayaknya sih nggak, mungkin ada header file yang berbeda, atau format file yang beda. Hm. Hm.

Maka dari itu semangatilah dan doakanlah saya mengerjakan skripsi. Karena jika skripsi saya selesai, saya menjadi manusia non skripsi. Ini kalimat apa sih. Saya ngetik nggak jelas. Tolong! Haands! My hand typing!! Aaaaggh!!!

Saturday, July 12, 2014

Program Latihan Akademik Ilkom UPI

Kalau kamu sebagai mahasiswa dan sudah mulai membicarakan yang namanya PLA berarti kamu sudah mulai beranjak dewasa, hahaha.


Apa itu PLA

PLA adalah singkatan dari Program Latihan Akademik. Mungkin kalau di kampus lain namanya PKL, atau magang, tapi intinya sama lah. Sesuai namanya, ini adalah program yang disediakan kampus saya bagi mahasiswa yang ingin mencicipi di dunia kerja. Bahasa puitisnya mencicipi setetes getirnya kehidupan.

Dimana PLA


Dimana untuk PLA itu terserah kamu. Kamu mau minat bidang apa? Teman-teman saya ada yang mengambil web development, ada yang mobile apps, dan saya kebetulan senang dengan game development. Bidang minat ini juga bebas untuk kamu pilih kok, tidak rigid alias baku, selama masih berhubungan dengan ilmu komputer. Ya… asal jangan nyeleneh aja ke konveksi celana dalam. Emangnya ada konveksi celana dalam? Kayaknya ada sih, tapi saya nggak pernah nyari ke sana.

Ok, kembali ke topik. Setelah mengetahui minat yang ingin kamu ambil kemudian saatnya kamu untuk nyari tempat PLA nya. Dimana? Bebas dimana saja. Seperti mencari lamaran kerja, kamu bisa mencari kantor-kantor yang memiliki bidang TI (Teknologi Informasi) di dalamnya.

Kamu nggak harus kerja di kantor yang memang bergerak di bidang TI loh. Sebagai gambaran nih, kamu bisa bekerja di perusahaan minyak bumi. Disana biasanya ada divisi TI yang mengurus web, server, pengelolaan data karyawan, you name it. Kamu bisa memilih perusahaan tersebut.

Melamar PLA



Melamar PLA nggak seribet melamar kerja asli kok. Perusahaan yang kita kontak biasanya memang butuh dan punya slot untuk magang tiap bulannya. Ini yang perlu kamu lakukan:

  1. Kirim e-mail berupa permohonan melamar magang. Sertakan juga Curriculum Vitae kamu. Pastikan gunakan etika menggunakan e-mail yang baik dan benar ya, e-mail itu layaknya surat tapi elektronik, jangan anggap kayak komentar facebook!
  2. Jika direspon biasanya perusahaan tersebut akan mengontak kamu untuk wawancara. Umumnya wawancara ini seputar berapa lama magangnya, mau bikin apa, mulainya kapan, dan sebagainya. Ingat, kamu bukan melamar sebagai karyawan, cuma anak magang doang!


Jika perusahaan yang kamu datangi menerima lamaran PLA kamu secara tidak tertulis kamu sudah siap untuk memulai PLA. Untuk membuat buktinya secara tertulis kamu memerlukan 3 dokumen ini:

  1. Surat permohonan PLA dari fakultas. Minta surat ini dengan menyertakan nama perusahaan yang ingin kamu kunjungi ke staff TU FPMIPA. Teman saya ada yang meminta surat ini terlebih dahulu baru melamar ke perusahaan belakangan, hal itu boleh juga, tapi daripada minta surat beberapa kali saya lebih memilih untuk mendapatkan kepastian tempat dulu. Surat ini kamu berikan ke perusahaan yang bersangkutan.
  2. Surat penerimaan magang dari perusahaan. Minta surat ini ke bagian HRD (Human Resource Development) yang menyatakan kamu telah diterima sebagai mahasiswa magang di perusahaan tersebut. Surat ini kamu simpan untuk laporan PLA nanti.
  3. Proposal magang dari kamu sendiri. Proposal ini merupakan gambaran umum apa yang kamu lakukan di magang nanti. Dengan proposal ini kamu juga bisa mendapatkan pembimbing lapangan.


Kalau pengalaman saya pribadi kebetulan punya kenalan yang bekerja di sebuah perusahaan startup di Bandung. Jadi enjoy aja sih masuknya. Berawal dari chatting facebook dan dilanjutkan dengan dua tahap di atas tadi.

Sebenarnya beda perusahaan beda kebijakan sih. Banyak-banyak saja cari informasi dari kakak tingkat atau rekan yang pernah magang di sana, atau tanya saja langsung ke perusahaannya, mereka dengan senang hati akan menjawab pertanyaan kamu.

Ngapain PLA


Oke, sudah keterima nih, terus ngapain? Di awal tadi kamu sudah melakukan wawancara bukan? Biasanya perusahaan memerlukan diantara hal berikut dari mahasiswa magang (yang bidang teknologi informasi):

  1. Membuat program untuk membantu administrasi. Biasanya poin yang ini dilakukan oleh peserta PLA yang mengambil di perusahaan yang tidak bergerak di bidang TI. Sebagai gambaran kamu bisa membuat program data kepegawaian.
  2. Mengerjakan proyek. Poin yang ini biasanya dilakukan di perusahaan yang bergerak di bidang TI. Hati-hati, kalau perusahaan tersebut memiliki proyek yang cukup besar. Ingat, kamu adalah mahasiswa PLA, bukan karyawan. Pastikan proyek yang kamu kerjakan akan selesai selama kamu PLA. Jangan sampai kebablasan.


Ngomongin kebablasan, mahasiswa ilkom itu sudah langganan ditawarin kerja pas di perusahaan PLA. Walhasil lupa sama ngerjain laporan dan ngambil PLA di semester-semester berikutnya. Sebisa mungkin jangan sampai ini kejadian dulu, ribet aja kan harus ngontrak PLA lagi untuk semester depan.

Bimbingan PLA ke dosen


PLA itu kuliah loh ya, bukan kerja. Selama kamu PLA kamu harus melakukan bimbingan ke dosen pembimbing. Karena hal ini biasanya saya sudah perjanjian sama kantor supaya ada waktu sehari untuk libur, maksudnya sih buat bimbingan di kampus. Kamu juga bisa kok ke kampus dulu untuk bimbingan baru ke kantor.

Apa yang dibimbing selama bimbingan PLA dengan dosen? Umumnya laporan PLA. Jadi kamu mulai mengerjakan laporan PLA dari awal mulai masuk magang. Hal-hal kecil tapi malesin seperti pembukaan dan latar belakang digjolok di bimbingan ini.

Ah, ya, bimbingan PLA ini juga merupakan penyemangat dan pengingat bahwa kamu masih berkuliah, biar nggak kebablasan. Jadi jangan lewatkan bimbingan! Minimal bimbingan yang harus dilakukan adalah 6 kali pertemuan.

Bimbingan PLA ke pembimbing lapangan


Kalau yang ini bimbingannya dengan perusahaan. Kalau waktu saya dengan pembimbing lapangan bimbingannya nanya progress sudah sampai mana dan sharing mengenai teori.

Nah ini yang unik. Di perusahaan saya magang ada saling berbagi tentang teori keilmuan dalam programming. Saya doyan juga sharing ini, soalnya kayak kuliah tapi langsung ke implementasi dari yang berpengalaman. Lumayan lah, itung-itung kursus gratis.

Sidang PLA


Kalau sudah selesai bikin program, sudah bikin laporan, saatnya kamu sidang. Sidang ini nggak kayak sidang skripsi gitu ya. Tahapan untuk sidangnya kayak gini:

  1. Hubungi dosen koordinator PLA dengan membawa lembar nilai dari pembimbing dosen, pembimbing lapangan, dan surat persetujuan mengadakan sidang. Pastikan lembar dari perusahaan dibubuhkan stempel!
  2. Setelah kamu menyerahkan dokumen tersebut, kamu akan diberi nama dosen penguji. Hubungi dosen penguji tersebut untuk mengatur jadwal kapan dan dimana kamu akan diuji.
  3. Datang di hari sidang dengan membawa laporan kamu. Sisanya tanya jawab deh. Beda penguji beda cara mengujinya. Ada yang perlu menggunakan presentasi dan proyektor, ada juga yang ngobrol biasa. Tanyakan saja ke penguji kamu ingin diujikannya dimana dan memerlukan apa saja.
  4. Setelah selesai, jilid semua laporan dan nilai yang kamu peroleh (nilai dosen pembimbing, pembimbing lapangan, penguji) dengan soft cover berwarna kuning. Sertakan di dalamnya CD berisi laporan dan program yang kamu buat. Kemudian serahkan lagi ke koordinator PLA. Kamu juga boleh membuat beberapa rangkap untuk diberikan ke perusahaan tempat kamu magang.

That's it!

Tadaa!! Akhirnya selesai. Kalau kamu mengerjakan semuanya aroma-aromanya kamu lulus dengan nilai baik.

Have fun dengan PLA! Inti dari PLA sih buat kamu ngerasain gimana kerja itu. Yang paling penting dari PLA itu membangun koneksi. Semakin luas koneksi kamu semakin nggak ngebosenin kerjaan.

Oke deh, ini rangkuman dari artikel yang saya buat di atas tadi.

Proses PLA
1. Nyari tempat
2. Kirim lamaran ke perusahaan
3. Minta surat izin magang ke fakultas
4. Pembekalan dari jurusan
5. Mulai PLA
6. Bimbingan PLA
7. Laporan PLA
8. Sidang PLA

Selamat PLA!

Tuesday, May 27, 2014

AVD Keep Restarting When Installing Facebook

I'd like to develop an Android's apps using Facebook's login. Because I want to integrate it with PHP+MySQL, it would be easier for me to test it while running XAMPP. I can't access XAMPP via my phone, so I am using AVD (Android Virtual Device).

Facebook give its basic tutorial to use its SDK (you can read it here). They also give its Android's apps installer (the .apk file). After downloaded the SDK and started up the AVD, I tried to install the apps with this command via my terminal:

./adb install ../../facebook-android-sdk-3.14/bin/FBAndroid-7.0.0.apk

But unfortunately the AVD rebooted itself and the adb command keep on this lines:

722 KB/s (31026249 bytes in 41.953s)
	pkg: /data/local/tmp/FBAndroid-7.0.0.apk

The Troubleshoot

After several try and failure, I found that my AVD device display is too small. I was using 240x320 display, then I create new AVD using 480x800 resolution. I don't know why it happens but it just works. lol.

The succeeded installation via adb command will show these lines
1318 KB/s (31026249 bytes in 22.980s)
	pkg: /data/local/tmp/FBAndroid-7.0.0.apk
Success

This is how the emulator looks like
p.s: my english sucks

Wednesday, May 21, 2014

POME - Aplikasi handphone penilaian otomatis lembar jawaban komputer

Aplikasi yang menilai secara otomatis lembar jawaban komputer tanpa harus menggunakan komputer, cukup gunakan handphone.


Lembar Jawaban Komputer (LJK) sering digunakan sebagai alat untuk melakukan ujian tertulis karena mudah untuk diperiksa. Ini adalah cara yang hebat untuk menyelenggarakan tes. Mengapa tidak semua orang menggunakannya? POME hadir agar semua orang dapat menikmati kemudahan lembar jawaban komputer.








POME adalah aplikasi handphone yang dapat mengecek dan memberi nilai secara otomatis dari Lembar Jawaban Komputer. Peserta ujian dapat dengan mudah menuliskan nama dan langsung menulis jawaban di lembar yang telah disediakan, kemudian dengan POME nilai akan langsung diperoleh.

Di aplikasi POME kamu tinggal memasukkan kunci jawaban, kemudian memotret lembar jawaban yang telah diisi, dan nilai akan langsung muncul. Keren kan?



Lembar Jawaban Komputer merupakan alat yang bagus untuk menyelenggarakan kuis tertulis. Alat ini mudah dan cepat untuk diperiksa. Namun alat untuk melakukan cek otomatis lembar jawaban komputer harganya cukup mahal. Misalnya OMR (Optical Mark Reader), harganya bisa mencapai lebih dari 15 juta. Selain mahal, bentuknya besar dan susah untuk dibawa. 

Dengan POME kamu hanya cukup memiliki handphone. Tidak perlu lagi membawa OMR yang besar. Dan, hey! OMR tidak bisa digunakan untuk selfie!

Selain itu peserta tidak harus membulati pilihan untuk menandakan nama, karena dengan POME nama dan angka yang ditulis di kolom lembar jawaban langsung dideteksi. POME juga bisa membedakan tanda silang yang benar dan tanda silang koreksi. Peserta yang salah menyilang tinggal membubuhkan dua garis mendatar di atas tanda silang untuk mengoreksi jawaban yang dipilih.




Sihir atau sains?

POME melakukan hal ini semua dengan sihir sains! Ilmu komputer memiliki bidang ilmu yang bernama kecerdasan buatan (artificial intelligent) dan pengolahan citra (image processing). Dengan dasar teori dua bidang tersebut sebuah huruf dapat dideteksi. POME memanfaatkan pendeteksian karakter dengan Jaringan Syaraf Tiruan (artificial neural network), dengan metode ini tulisan akan dikonversi menjadi huruf yang dikenali komputer.



Very geeky isn't it? Jangan khawatir, saya akan mengurus hal ini semua di belakang layar dan kamu tinggal menggunakan POME.



POME dibuat oleh Giri Prahasta Putra, seorang pemain biola, tukang gambar, game programmer, pencinta kucing, dan seorang mahasiswa yang sebentar lagi lulus (amin...) dari Ilmu Komputer UPI. In fact, POME is his final project.


Kejutannya, Giri adalah saya! Yay! Kamu bisa kontak saya melalui twitter di @igrir.










Saya belum pernah mengerjakan aplikasi mobile secara serius sebelumnya. Selain itu saya memiliki handphone yang sangat low-end (Sony Xperia Tipo ST21i), jadi mungkin pengerjaannya akan saya lakukan terlebih dahulu dengan target desktop. Memang ini pengerjaan dua kali (karena saya harus melakukan porting ke Android setelahnya), tapi saya rasa ini pengembangan paling cepat untuk dilakukan dengan mengujinya di desktop terlebih dahulu.

Bidang pengolahan citra dan kecerdasan buatan (fokus kepada Jaringan Syaraf Tiruan) adalah hal baru bagi saya. Saya harus mempelajari lagi dasar-dasar pengolahan citra dengan menguji coba gambar-gambar sederhana. Sejauh ini saya sudah mencoba melakukan rotasi, menggunakan convulution matrix, erotiondilation, dan sobel edge detector. Sedangkan untuk Jaringan Syaraf Tiruan saya baru sebatas mempelajari caranya bekerja dan belum mencobanya lebih dalam.


FAQ

Kenapa saya membuat postingan ini mirip Kickstarter?
Biar gaya aja, haha.

Kapan POME rilis?
Setelah skripsi saya selesai. Jadi doakan saya untuk menyelesaikannya bulan Agustus ya!

Apa yang bisa saya bantu?
Kamu bisa memberi saya bantuan berupa dana yang saya gunakan untuk membeli kertas, jajan, dan hal *uhuk* teknis lainnya. Kamu juga bisa membelikan saya handphone, yang ini kurang enak nih buat develop *matabelo*

Kamu pengennya dibeliin hape apa?
Seriusan nih pengen dibeliin?? Asyik! Saya pengennya Nexus. Kenapa? Karena Android di dalamnya masih beneran Android. Selebihnya saya perlu menggunakan handphone dengan fitur lampu blitz, kamera yang bisa dengan jelas memotret tulisan di atas kertas, dan memorinya besar untuk menampung 300 foto.

Kalau saya bantu doa aja nggak apa-apa?
Nggak apa-apa kok, doakan cepet lulus ya! Doakan juga supaya dapat hape baru, amin.

Ini FAQ nya nanya sendiri ya?
Iya, nanya sendiri jawab sendiri, kekekeke