IT STUFF part 1: Robot Jawa

Ok-ok, sekarang tulisan yang agak ‘intelek’ sedikit.. emang sih gw ga jago2 amat dalam menulis sesuatu yang formal, jadi ya gw tulis dalem bahasa sehari-hari aj…

Ok Sam, apa yang kamu mo tulis hari ini ? hmm.. hari ini gw mo nulis tentang robot java… Apa pula robot Java… robot pribumikah ? bukan banget… tapi yang pastigw pengen nge-share sesuatu yang agak tinggi dikit lah.. masak dari kemaren Cuma nge-share berita ‘kerupuk’ doank…

Oh ya, sebelumnya, ini adalah tulisan seorang manusia fool,nerd,dan unpredictable, yang dirancang sedemikianrupa untuk orang yang sejenis, jadi untuk yang udah expert, para TOKAY-TOKAY…, stay away aja lah… punten yak… Gw ga bermaksud menggurui (udah ngerti XAMPP? Udah ngerti Database? Seperti si STETEKTEL**M di salah satu TV yang menggurui pas anak IF ComVis…), Cuma mo nulis aj demi kebebasan pers yang selalu gw junjung tinggi…

Jadi sebenernya yang gw pengen post hari ini adalah mengenai penemuan di bidang bahasa pemrograman Java… yak, dengan API-ny yang bejibun… gw yakin sebenernya dengan menguasai dasar java, kita udah bisa ngulik2 sndiri mengenai library ny yang buset banyak banget… nah, gw nemu salah satu API yang cukup keren neh…. Namanya kelas robot.

Yup, bener banget… API ini cukup powerful, keren, dlsb… seperti namanya, robot, salah satu hal yang menjadi obsesi gw dari kecil… tapi robot di sini, ya seperti yang dibayangkan, hanya untuk dunia maya saja, tetep aja gak real… robot yang riil tentu saja ga mungkin dibuat hanya berdasarkan kemampuan bahasa programming saja… prlu pengetahuan setidaknya mengenai mikrokontroler… nah, yang ini akan gw bahas besok…entah kenapa gw mendapatkan tenaga lebih untuk mengup-date terus tulisan gw akhir-akhir ini.

Ada beberapa hal yang mendasari gw seneng banget ama yang namanya robot,

Pertama, gw orangnya pemales… jadi pengennya apa-apa ya dikerjain ama si robot…

Kedua, robot adalah cerminan dunia teknologi yang lebih maju… dengan robot, maka pekerjaan menjemukan yang harus dilakukan berulang-ulang, ga harus ditangani langsung oleh manusia, melainkan bisa minta bantuan si robot ini…

Tutorial ini bisa diikuti oleh siapa saja, tentunya dengan pengalaman pernah coding dengan bahasa java… dan yah, setidaknya pernah kuliah PBO (Pemrograman Berbasis Orientasi) atau Inggrisnya OOP (Orientation Objected Program)… yeah yeah… kalo mo tau kenapa, baca post sebelum ini dunkz… keep readin’ my blog dude..

So… lebih baik langsung dijelaskan dengan contoh saja yah…

Program apa sih yang pengen kita buat, Sam ?

Jadi ini adalah sebuah program GUI, yang dapat digunakan untuk mengendalikan program lain… jadi, kalo pernah maen game Online jadul Ragnarok Online, kan pasti ngenal bot tuh… program Bot ini dapat dimasukkan perintah oleh usernya, untuk ngebunuh monster tertentu, ngambil item tertentu… jam sekian ngapain, minum potion kalo udah mo modar.. dsb…

Program sederhana ini similar lah… jadi kita harus masukkin perintah tertentu, lalu saat kita pencet button “Go”, maka sekumpulan perintah yang kita definisikan bakal langsung dieksekusi… yah sederhana seh… tapi tunggu dulu, dengan sejumlah fitur yang ditawarkan, ini bakal jadi program yang cukup powerful coy!!

Coba dibayangkan… kalo anda ada yang keranjingan maen game online baru… yang namanya RF online, neh game lain dari yang lain…. Kalo mo ningkatin skill kan harus make skill yang sama berulang-ulang… nah….jalankan saja program robot ini, en suruh si robot make terus skill tersebut… naek dah level ente… Salah satu temen gw yang maen RF… make kertas yang digulung2 terus disangkutin ke tombol keyboardny… ironis kan? Demi kesetiakawanan, gak gw sebut namany..zzz

Terus misalnya kamu harus ngasi selamet ama pacar, pada hari ulang tahunnya, lewat YM… ngasi selametnya harus pas jam 12 malem dunkz… sebagai tanda kamu care… hoekzz… tapi anda lagi males banget begadang.. jalankan program ini… terus set waktu delay ny ampe jam 12 malem… suruh si robot ngetik,”sayang, happy belated birthday yah, jangan di-reply, besok aku ada kejutan untuk kamu”… buset… terus dari jam 9-ny anda udah tidur dulu… kan asik tuh…

OK ok… dari penjelasan sih kyknya program ini bakal ga berguna, yah, emang sih gw sampah, gw seneng banget ama sampah… so… kalo kmu juga sama gilany seperti gw… silakan dilanjutin bacany…

Jadi program berikut ini menggunakan kelas khusus yang namanya robot. Kelas ini ada di package java.awt, so kalo mo menggunakan kelas ini, ya harus import dulu… ngerti kan ?

Kelas ini punya berbagai macam fungsi… yang akan gw jelaskan sebentar lagi… btw, gimana si bentuk kasar programnya, neh.. gw kasi screen shot ny… ni dibuat dengan harcode juga bisa, ga harus pake net-beans ato sejenisnya… pake aja notepad++

Ini screenshotnya:

Maksudnya apaan neh?

Simple, ketik perintah di area Commands, seperti misalnya:

t: sayang, happy birthday

w:5

b:

m:100,200

Maksud dari rangkaian perintah di atas adalah:

Ketik “sayang, happy birthday”, tunggu 5 detik, bunyikan bunyi beep, terus taro kursor mouse di pixel 100,200…

Simple kan ?

Tapi jangan salah, window ini kan bisa di-hidden tuh, coba kalo di-hidden selamanya, terus di loop tulisan berikut ini, ato keluarin dialog window dengan tulisan “ java ada di komputer anda!! Hubungi si pemberantas virus java, DavSam”…

Gimana? Well, itu sebenernya bukan virus kan…lagipula itu adalah virus ecek2… dan juga sifatnya Cuma sebagai pengganggu… tapi, apa ini berarti java bisa dibuat sebagai bahasa pemrograman virus???

Jawabannya adalah TIDAK!

Ya iyalah sam, java kan Cuma bahasa interpreter, ga ampe nyentuh registry mesin dlsb… ga isa memanipulasi ampe ke sistem… Cuma berjalan di atas virtual mesin, ya kan ? ini cuma informasi aja, bahwa si SunMicrosystem ini udah nge-desain bahasanya sedemikian rupa sehingga merupakan bahasa yang aman, namun tetep powerful…

Lanjut, untuk mengkode program ini, gw bagi menjadi 2 bagian besar, bagian design, dan bagian algoritma… bagian design yang ngatur tata letak dari pogram itu… dan bagian algoritma ya yang ngejalanin program kalo “si-user” udah nge-klik tombol Go!

Btw, hati-hati dengan menggunakan frase “SI” di ITB… terutama di Jurusan Informatika, terutama bagi kamu yang suka manggil nama orang dengan si-anu, si-parjo, si-bolang…. Bahaya banget, pa lagi pas presentasi tugas kamu… entar di post ke berapa gwa paparin lah…

Lanjut..mana nih perintah2nya sam? Loe mbacot aj daritadi…!! Ok ok, neh list program untuk bagian design nya…

import javax.swing.*; //ini swing-nya

import java.awt.*; //ini package yang memuat robotny

import java.awt.event.*; //ini untuk actionlistener

import java.io.*; //ini untuk file eksternal

class RobotProject extends JFrame //setiap instans ekstend dari //form

{

//ini deklarasi untuk semua item yang ada di form

JButton jButton = new JButton (“Go”);

JTextArea jTextArea = new JTextArea(“”);

JTextArea helpInfo = new JTextArea(“”);

JTextField jFileName = new JTextField(“”);

JLabel jLabel = new JLabel(“The Robot”);

JLabel prompt = new JLabel(“Commands:”);

JLabel usage = new JLabel(“Usage:”);

JLabel jFileNameLabel = new JLabel(“Command file:”);

//program utamanya Cuma ngebuat sebuah RobotProject

public static void main (String args[])

{

new RobotProject();

}

//konstruktor RobotProject

RobotProject()

{

//item yang tadi dah di-deklarasi, masukin ke form/contentpane

//nya

getContentPane().setLayout(null);

jTextArea.setEditable(true);

jTextArea.setFont(new Font(“Times Roman”,Font.BOLD,10));

getContentPane().add(jButton);

getContentPane().add(jTextArea);

getContentPane().add(jLabel);

getContentPane().add(jFileName);

getContentPane().add(prompt);

getContentPane().add(helpInfo);

getContentPane().add(usage);

getContentPane().add(jFileNameLabel);

//di sini, tentuin tata letaknya, dihitung dari titik ujung

//form(0,0)

jLabel.setBounds(30, 0, 120, 60);

jButton.setBounds(100, 450, 80, 40);

jLabel.setFont(new Font(“Times Roman”, Font.BOLD, 24));

prompt.setBounds(10, 50, 80, 20);

usage.setBounds(100, 50, 80, 20);

jTextArea.setBounds(10, 70, 80, 420);

jFileName.setBounds(100, 425, 80, 20);

jFileNameLabel.setBounds(95, 405, 90, 20);

helpInfo.setBounds(100, 70, 80, 335);

//help yang ada di area kanan, ga bole di-edit…

helpInfo.setEditable(false);

helpInfo.setText(“Type text:\n t:abc\n t:ALTDN”

+ “\n t:ALTUP”

+ “\n t:CTRLDN”

+ “\n t:CTRLUP”

+ “\n t:TAB”

+ “\n t:ENTER”

+ “\n t:ESCAPE”

+ “\nMove mouse:\n m:x,y\n”

+ “Left Click:\n c:\n”

+ “Right Click:\n r:\n”

+ “Wait n sec’s:\n w:n\n”

+ “Cap screen:\n s:\n”

+ “Beep:\n b:”);

setTitle(“Robot”);

setSize(200,520);

setVisible(true);

}

List program di atas Cuma untuk menampilkan form yang seperti screenchot tadi… mengekstend jframe…

Yah, sederhana kann, kalo kamu compile program di atas… hasilnya dah keliatan tuh form-nya, tapi masih belum bisa diapa-apain… Cuma tampilan doang…

Nah… form ini tuh menggunakan swing, meng-ekstend jframe… untuk lebih jelasnya, lebi baik baca dulu kan buku2 literatur java… sedangkan di blog ini, Cuma hasil ngigau seorang anak manusia, dan belum tentu bisa ngejelasin dengan bener…

Lanjut, program itu belum selese…. Harus ditambahin actionlistener dulu.. jadi ada beberapa baris kode yang harus ditambahkan… yaitu:

class RobotProject extends JFrame implements ActionListener

{

RobotProject()

{

jButton.addActionListener(this);

setVisible(true);

this.addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

);

Ini tuh yang ngebuat progam bisa berinteraksi dengan user… terus yang sistem exit2 an itu untuk nge-handle program kalo mau di-close…

Cuma itu aja Sam? Nggak, itu di baris paling atas ada implements ActionListener… neh berarti, mengimplementasikan interface kan ?

Inget aja, kalo ada interface, berarti harus ada fungsi yang diimplementasikan dunkz… apa tuh fungsi yang harus diimplementasikan? Secara interface itu pasti ngedeklarasiin fungsi, yang belum ada isinya… jadi setiap kelas yang udah ngomong “Eh, gwa mo implementasi-in interface ini yah”, kelas itu harus konsisten mengimplementasikan fungsi yang ada…

Nama Fungsinya? ActionPerformed. Si ActionPerformed ini bakal adalah konsekuensi kita naro listener untuk button “Go”…

Jadi setelah Button “Go”, bakal dieksekusi tuh semua program, ini listing kode-nya:

public void actionPerformed(ActionEvent e)

{

try

{

//form-nya di hidden dulu

setVisible(false);

//di sini keajaiban itu terjadi, sebuah robot diciptakan…

Robot robot = new Robot;

robot.delay(500);

String []commands=null;

int numberCommands;

//kalo misalnya ngambil perintahnya dari sebuah file eksternal…

if(!jFileName.getText().equals(“”))

{

//baca file tersebut

BufferedReader bufferedFile = new BufferedReader(new FileReader(jFileName.getText()));

int commandIndex=0;

String inline=””;

//baca terus

while((inline = bufferedFile.readLine()) != null)

{

commands[commandIndex++] = inline;

}

numberCommands = commandIndex;

}

else

{

//ini untuk kalo kita masukkin perintah di textarea…

//split berdasarkan enter, jadi setiap perintah di-parsing dengan ganti baris

commands = jTextArea.getText().split(“\n”);

numberCommands = commands.length;

}

for (int loopIndex = 0; loopIndex < numberCommands;loopIndex++)

{

//parsing untuk operasi dan data

String operation = commands[loopIndex].substring(0, 1);

String data = commands[loopIndex].substring(2);

switch(operation.toCharArray()[0])

{

//kan tadi dah di-parsing, terus kita tentukan operasinya

case ‘t’:

if(data.equals(“ALTDN”)){

robot.keyPress(KeyEvent.VK_ALT);

}

else if(data.equals(“ALTUP”)){

robot.keyRelease(KeyEvent.VK_ALT);

}

if(data.equals(“CTRLDN”)){

robot.keyPress(KeyEvent.VK_CONTROL);

}

else if(data.equals(“CTRLUP”)){

robot.keyRelease(KeyEvent.VK_CONTROL);

}

else if(data.equals(“ENTER”)){

robot.keyPress(KeyEvent.VK_ENTER);

robot.keyRelease(KeyEvent.VK_ENTER);

}

else if(data.equals(“TAB”)){

robot.keyPress(KeyEvent.VK_TAB);

robot.keyRelease(KeyEvent.VK_TAB);

}

else if(data.equals(“ESCAPE”)){

robot.keyPress(KeyEvent.VK_ESCAPE);

robot.keyRelease(KeyEvent.VK_ESCAPE);

}

else

{

char chars[] = data.toCharArray();

for(int charIndex = 0;charIndex < chars.length;charIndex++)

{

if(chars[charIndex] >= ‘a’ && chars[charIndex] <= ‘z’)

{

robot.keyPress((int)chars[charIndex]- (‘a’ -‘A’));

robot.keyRelease((int)chars[charIndex]- (‘a’ -‘A’));

}

else if(chars[charIndex] >= ‘A’ && chars[charIndex] <= ‘Z’)

{

robot.keyPress(KeyEvent.VK_SHIFT);

robot.keyPress((int)chars[charIndex]);

robot.keyRelease((int) chars[charIndex]);

robot.keyRelease(KeyEvent.VK_SHIFT);

}

else

{

robot.keyPress((int)chars[charIndex]);

robot.keyRelease((int)chars[charIndex]);

robot.delay(100);

}

}

}

break;

case ‘m’:

//untuk mouse, data yang ada diparsing dulu dan diubah jadi integer

String coords[] = data.split(“,”);

int x = Integer.parseInt(coords[0]);

int y = Integer.parseInt(coords[1]);

robot.mouseMove(x, y);

robot.delay(500);

break;

case ‘c’:

robot.mousePress(InputEvent.BUTTON1_MASK);

robot.delay(500);

robot.mouseRelease(InputEvent.BUTTON1_MASK);

break;

case ‘r’:

robot.mousePress(InputEvent.BUTTON3_MASK);

robot.delay(500);

robot.mouseRelease(InputEvent.BUTTON3_MASK);

break;

case ‘w’:

int numberSeconds = Integer.parseInt(data);

robot.delay(numberSeconds * 1000);

break;

default:

System.out.println(

“Nulis apa sih loe ?”);

}

}

}

catch (Exception ex)

{

System.out.println(“Error: ” +ex.getMessage());

}

//hal terakhir adalah memunculkan kembali program supaya visible lagi

setVisible(true);

}

Sebagai catatan, class robot punya berbagai macam fungsi yang cukup handy… seperti KeyPress, KeyRelease, MousePress, MouseRelease, dll… kalo ada yang bener-bener pengen tau, kamu bisa cari tau sendiri…

Dah, terus compile ulang kan… terus tes-tes aja, buka notepad, terus jalanin program ini, terus missal mo ngetik “saya gila”, ya pake aja si robot ini, ketik perintah

“t=saya gila”

Ini contoh program dasar… bayangkan apa yang bisa kita perbuat kalo program ini disempurnakan…

Bisa gokil abis lah… ya kan? Tapi kyknya gw terlalu males untuk meng-eksplor lebih lanjut mengenai programming yang terlalu lunak… (soft)

Sebenernya inti ketertarikan gw ke dunia teknologi adalah robot dalam arti harafiah yang sebenernya… berarti menyangkut yang keras-keras (hard erection)

Yap…kemalangan gw yang dijebloskan secara paksa untuk memelajari hal2 kyk di atas gw terima dengan hati yang lapang lah… seperti kata Steve Jobs, yang kira-kira berbunyi gini, “find what u interest in, and live it, don’t live someone else dream… live ur own dream”

Paling tidak janji gw udah terpenuhi untuk mengulas artikel IT Stuff…

Next.. My Mikrokontroler Projek… hwehwewhehw….

Keep fool, nerd, and unpredictable …