Iklan

Sunday, March 15, 2015

Sikuli Tutorial - Detect any activity in monitor

This script is used if we want to detect if any activity(ies) happen in monitor using Sikuli. The idea is simple:
1. Capture the screen,
2. Take another capture after certain time interval
3. Compare the second capture to the first
4. Delete temporary image

Here is the script (I use python script)
# define screen captured
screen = Screen()
# first capture
img = capture(screen)
# wait for some second
img2 = capture(screen)

# compare two images
match2 = exists(img2)
arg = match2.exists(img)
if arg != None:
  # set threshold for similarity. You may change this
  if arg.getScore() > 0.95:
    print "no screen activity"
  else:
    print "activity detected"
else:
  print "no match"

# remove temporary images
os.remove(img)
os.remove(img2)
Hope this helps you.

Tuesday, March 10, 2015

Automated Software Testing: Handling Memory Problem in Sikuli

One of the most important step in software engineering is software testing. Proper software testing will dramatically reduce the risk during software implementation. By the end of the day, testing will ensure your stakeholder about the quality of your software.

When you find a bug, you will assign a task to developer to fix it. When the developer has fixed the bug, it will be reassigned back to you. When you find another bug, you and the developer will do it again and again. Bad news is, when your program is fixed in one part, sometime it will make trouble in other part. Sometime what you have found as bug and then fixed, it will be bug again when the developer works in another part or your software. Thus, we have to do thorough testing for each release to ensure that no bugs are re-introduce.

Isn't it boring?

Yes, doing repetitive task (especially if the developer make daily release) will be boring. Thus, we need to automate our testing. You can do automation with any software you like. But, as I use Sikuli, here I share my hands-on experience with Sikuli.

Sikuli provides you handy API for GUI testing. However, when you want to do repetitive testing or combinatorial testing (you combine each choices in each features you have in your software), sikuli will have a problem with its heap memory especially when you have a lot of click() method. Here what I did for handling this problem:

1. In Java, we can force to release unused memory using System.gc(). In python, we can use gc.collect(). But as Sikuli runs Jython, we cannot use both. So, we have to do another way.

2. The problem is with memory. So, we have to minimize our variable in memory as much as possible. Thus, once we know that the memory is no longer used, then directly delete it from memory.

3. Here's an example for what I have done:

So, instead of using click([capture]), I put the image as one variable. So you do it by entering the name of the variable like this

size_500 =

And then you press "take screenshot" button 

Next thing you do is to click to the variable declared.

Lastly, if you think this screenshot will only used once, then directly delete the variable from memory by using

del size_500

Hope this helps if you have same problems with me.

=====
Thanks for ScramSoft for giving me amazing experiences.

Tuesday, March 3, 2015

Tips memulai riset - mencari topik dan literatur

Ketika kita mau mendorong sebuah mobil, maka tahap yang paling susah adalah ketika mulai mendorong dan belum bergerak. Ketika mobil sudah bergerak, maka tenaga yang diperlukan tidak sebanyak sebelum bergerak. Dalam banyak hal di hidup kita, memulai biasanya juga merupakan tahap yang paling susah, termasuk dalam urusan riset. Banyak hal yang membuat kita bimbang: topik apa? harus mulai belajar darimana? dan sebagainya.

Kebimbangan pertama: mencari topik

Untuk mencari topik, kita bisa memulai dengan mencari kata kunci yang saat ini sedang trend di dunia. Pencarian ini tentu saja bergantung pada bidang yang anda tekuni. Apabila anda adalah orang social science, maka riset anda bisa dimulai dari permasalahan yang menurut anda penting dan kira-kira bisa anda cari solusinya. Jika anda bingung, bisa mencoba memulai dari google trend (http://www.google.com/trends/?geo=ID) atau mencari trending topik di twitter, atau juga dengan skimming judul-judul berita di situs-situs berita. Atau juga dengan diskusi dengan orang yang anda anggap kapabel di bidang anda.

Jika anda adalah orang informatika, anda bisa memulai dari situs-situs semacam IEEEXplore (http://ieeexplore.ieee.org/Xplore/home.jsp). Di sana ditampilkan trending topic sekaligus juga kata yang paling banyak dicari oleh orang akhir-akhir ini.

Kenapa memulai dari yang tren? Apakah kita harus ikut arus? Meneliti topik yang sedang tren berarti kita akan diuntungkan dengan paling tidak dua hal: (1) Topik itu masih banyak dicari orang, sehingga kelak ketika kita publikasi, peluang ilmu kita terpakai lebih besar (2) Kita akan cenderung lebih mudah mencari literatur, sehingga proses riset kita bisa lebih lancar.

Kebimbangan kedua: mencari literatur

Setelah topik ditemukan, biasanya permasalahan yang selanjutnya dihadapi adalah mencari, membaca, dan memahami literatur. Biasanya pencarian literatur dilakukan melalui mesin pencari. Dengan cara ini, permasalahan yang dihadapi adalah bahwa kebanyakan (atau beberapa) literatur yang ditemukan tersebut berbayar. Kalau kita kuliah di luar negeri, kebanyakan kampus di luar berlangganan banyak jurnal, sehingga kita bisa bebas mengunduh artikel-artikel yang dibutuhkan. Akan tetapi karena harganya mahal, hanya sedikit kampus di Indonesia yang mampu berlangganan. Alternatifnya bisa melalui PNRI (Perpustakaan Nasional Republik Indonesia) - http://e-resources.perpusnas.go.id/index.php atau dengan mencari sendiri di google, tapi dengan melakukan sedikit trik sebagai berikut:

Misal kita ingin mencari paper-paper tentang "profilometry", maka ketika mencari di google, jangan langsung mengetikkan kata kunci tersebut, tapi di depannya kita tambah dengan "filetype:pdf". Penambahan kata kunci ini akan membuat hasil pencarian kita langsung mengarah pada artikel-artikel PDF yang bisa langsung kita unduh. Pada gambar berikut, anda bisa perhatikan bahwa hasilnya adalah file-file yang tipe-nya PDF dan bisa langsung kita unduh. Perhatikan bahwa hasil pertama tidak diawali dengan [pdf]. ini berarti bahwa konten itu berbayar. Jika anda mau cara ekonomis, silakan klik hasil-hasil yang diawali dengan [pdf] saja.


Saking banyaknya file yang ditemukan, mungkin kita akan bingung mana yang harus diunduh dan dibaca. Ngunduh sih gampang, bacanya itu yang susah. Hahaha.... hmm... beberapa tips berikut mungkin bisa digunakan:

1. Mulailah dengan skimming judul-judul yang ada di sana. Unduhlah judul-judul yang kira-kira menarik atau relevan.
2. Jika belum klik alias tidak bisa mendapatkan sense sehingga bingung mana yang menarik, relevan, dan harus diunduh, mulailah dari melihat sitasi dari paper tersebut. Pada contoh gambar di atas, paper kedua disitasi oleh 1596 paper lain (bagian cited by). Unduhlah paper-paper seperti ini, yang mempunyai sitasi banyak terlebih dahulu.
3. Jangan hanya berhenti di tab pertama (gambar di bawah). Mungkin google sudah punya algoritma agar pencarian yang paling relevan dengan kita ada di halaman depan. Tapi percayalah, untuk urusan riset, mungkin anda akan menemukan yang menarik di tab ke-15 atau 25.

Setelah mengunduh paper-paper terpilih, saatnya untuk mulai membaca. Untuk menajamkan insting, lebih baik mengubah nama file dari paper yang telah diunduh sesuai dengan judulnya. Dengan demikian, kita bisa melakukan skimming lagi hanya dari judul-judulnya (hal ini juga bisa dilakukan dengan menggunakan software seperti Mendeley. Mendeley secara otomatis akan mendeteksi judul dan informasi lain dari paper yang kita punya). Contoh yang saya punya adalah seperti ditampilkan di gambar berikut.



Jika langkah ini sudah dilakukan, maka sebelum membaca satu demi satu, kita bisa membuka explorer (windows) atau Finder (mac) di folder tempat kita menaruh paper-paper yang sudah diunduh dan diganti nama file-nya. Lalu mulailah dengan membaca judulnya satu demi satu. Catatlah informasi-informasi penting yang bisa di-ekstrak dari judul yang ada.

Kebimbangan selanjutnya: membaca dan memahami

Langkah selanjutnya adalah membaca. Bagi yang sudah menguasai bidang riset tersebut, maka membaca adalah hal yang tidak terlalu susah. Tapi bagi yang baru memulai, biasanya akan mengalami kesusahan. Bagi yang baru, bacalah bagian-bagian penting dari papernya saja (abstrak, pendahuluan, kesimpulan, dan grafik-grafik serta angka-angka di pembahasan). Catatlah informasi penting dari bagian-bagian itu. Untuk tahap ini, jangan terlalu khawatir dengan pengetahuan kita tentang istilah-istilah teknis di paper tersebut. Yang penting catat dulu. Salah satu contoh catatan yang saya buat untuk riset saya dulu adalah sebagai berikut:


Setelah catatan sudah kita buat, maka kita bisa melihat mana dulu yang harus dipelajari. Dalam contoh yang saya buat, sepertinya Fourier transform dan Phase Shift menarik untuk dipelajari, karena object yang digunakan adalah objek nyata dan bukan smooth surface. Untuk mempelajari, mungkin sedikit tips ini akan membantu juga:
1. Ambil kata kuncinya, lalu ketikkan di google. Kalau menemukan artikel wikipedia atau tutorial atau slide, mulailah dari sana. Pengalaman saya, untuk teori-teori yang belum kita kuasai, jangan memulai membaca dari paper.
2. Jika ada kuliah atau tutorial di youtube, mulailah dari sana.

Setelah tahap ini dilalui, maka ucapkanlah pada diri anda sendiri:

SELAMAT DATANG DI DUNIA RISET.