Awalnya ide ini mencuat kembali setelah Mr. Mauliddin menanyakan apakah CheckSuite (grader yang saya buat dan Leon) layak digunakan sebagai grader pelatihan pra-OSN. Saya boleh mengatakan 90% layak. Terus, kemana 10%-nya? 10% itu adalah kelemahan utama grader kami, tidak adanya fitur untung menghitung memory usage dari program yang sedang di-grading.

Oh ya, sebelumnya kira – kira software structure dari CheckSuite adalah sebagai berikut. Keseluruhan software terdiri dari 3 modul besar :

  1. Content Management System Drupal, tempat client bisa melihat deskripsi problem set, meng-upload solusi ke server dan melakukan interaksi dengan juri.
  2. MySQL Database, tempat pencatatan log dan penyimpanan sementara solusi dari peserta/client.
  3. Grader, dibuat dengan Free Pascal (jadul ya -_-“) tempat melakukan grading/scoring dari program peserta.

Jadi, setiap kali peserta melakukan submission lewat Drupal, file yg di-submit kemudian ditampung sementara oleh Database. Kemudian, secara berkala setiap 3 detik Grader akan me-monitor ke database apakah ada submission baru atau tidak. Jika ada submission baru, grader akan men-download file tersebut dan melakukan scoring dengan testcase yang sudah ditentukan.

Grader tersebut kami buat dengan bantuan Windows API unit yang sudah disediakan oleh Free Pascal. Kami menggunakan fungsi CreateProcess() dan menggunakan fungsi WaitForSingleObject() untuk menentukan running time dari suatu program. Namun, program kami tidak bisa menghitung penggunaan memory.

Tadi siang saya mencoba mencari referensi dari Windows Software Development Kit User Manual mengenai fungsi yang kira – kira dapat mendukung fitur penghitungan memory usage tersebut. Ternyata tidak ada. Padahal, kebanyakan programming contest, khususnya IOI dan OSN, sangat menekankan pada pembuatan program yang efisien, tidak hanya soal running time tetapi juga memory usage.

Untungnya ada teman saya, Yoga Haryanto, yang menemukan fungsi GetProcessMemoryInfo() dalam MSDN Library. Ternyata, fungsi tersebut ada di dalam unit Process Status API dan Free Pascal tidak memiliki unit ini. Saya coba mencari di internet dan menemukan ada kode interface dan implementaion dan unit PSAPI untuk Delphi. Kodenya ada di sini. Dan include file tambahan jediapi.lib. Dan saya coba jalankan dan program berjalan dengan sangat memuaskan. GetProcessMemoryInfo memberikan output dengan struktur PROCESS_MEMORY_COUNTERS. Selengkapnya mengenai struktur tersebut dapat dilihat di sini dan di sini untuk informasi mengenai fungsi GetProcessMemoryInfo yang lebih lengkap.

Dengan fungsi tersebut, CheckSuite “mungkin” akan beranjak ke major function berikutnya. Kita lihat saja.

P.S : Thx to Yoga Haryanto🙂