Thursday, July 27, 2006

CReASINDO Digitasi Update 0.9.6 Part 2

Untuk pertama kalinya dalam sebulan terakhir, gw nggak ngegame kalo malam emoticon. Gw lg penasaran banget dengan program gw, ujung2nya, gw coding sampe lebih dari 6 jam semalam. Alhamdulillah, rasa penasaran itu terjawab semua, nggak sia2 gw coding habis2an semalam. Hasilnya gw dapat beberapa bug baru dan sebagian sudah gw perbaiki. Nggak cuman bug, gw jg tambahkan fitur baru untuk program ini.

Nah fitur ini yg sebenarnya bikin gw begadang semalam, padahal solusinya simpel banget.

CReASINDO Digitasi Bugs so far :

  • Error Loading Data, Method 'Cell' failed on IVSFlexgrid  (26 Juli 2006).  Gw sudah dapat penyebabnya, tapi belum tau pasti kenapa bug ini muncul. Soalnya munculnya nggak konsisten, sekali-kali aja, dan biasanya muncul kalo database yang di load luar biasa besarnya. Dugaan gw, ada masalah dengan metode cell(flexcppicture) yg membuat memori jadi nggak stabil, soalnya setelah fasilitas gambar sel gw disable, error ini nggak pernah muncul lagi.
  • Variabel counter untuk proses LoadDialog Data masih bertipe Integer (26 Juli 2006). Bug ini sebenarnya belum muncul, tp setelah gw liat jumlah counter record data sinoptik yang sudah nyampe angka 20000an, gw yakin kalo nanti program bakal error kalo datanya nyampe angka 30000an. Tipe data Integer cuman punya nilai maksimal sampe 32767. Bug ini sudah diperbaiki untuk tiap data (Synop, FKlim dan CH), dengan mengganti tipe data counter dengan Long Integer (max value = 2147483647).
  • Save as Error untuk Form FKlim (19 Juli 2006).
  • Pengisian tanggal 31 pada bulan2 dengan tanggal maksimal 30 (misal april, juni dll) (19 Juli 2006).

 

CReASINDO Digitasi New Feature :

 

Salah satu bagian program yg sebenarnya sepele tapi punya pengaruh besar untuk performa program dan jg berpengaruh secara psikologis kepada pemakai adalah penggunaan progress bar. Progress bar memberikan informasi secara detil tentang proses yang sedang berjalan pada program, dan secara psikologis memberi informasi bahwa program tidak 'macet di tengah jalan' alias hang kepada pemakai, sehingga pemakai menjadi lebih tenang.

Awalnya gw pikir progress bar nggak terlalu diperlukan dalam program gw. Cuman setelah data sinoptik yang tersimpan di database sudah sedemikian 'membengkak', proses loading daftar data jadi makin lambat dan program menjadi seperti hang (kurang lebih 20 detik). Dan akhirnya gw putuskan untuk menambah fasilitas ini  ke program gw.

Ternyata nggak gampang membuat progress bar kalo program sudah kompleks. Ada bagian2 vital yang harus gw edit hati2 supaya programnya nggak malah error. Disinilah gw dapat pelajaran2 baru yg penting (makanya gw nggak nyesal coding semalaman emoticon), antara lain :

  • Form Events : Activate dan Load, walaupun mirip ternyata sangat berbeda. Prosedur2 dalam Event Load tidak akan ditampilkan sebelum form ditampilkan dengan metode show atau setfocus. Sedangkan Event Activate akan berjalan setelah form ditampilkan dengan metode show atau setfocus. Kesimpulannya gw sementara ini, gunakan event Form_Load untuk inisialisasi objek pada form jika form tidak ingin ditampilkan terlebih dahulu dan gunakan event Form_Activate  kalo kita ingin menampilkan objek segera setelah form tampil. Hal ini yg menyebabkan kenapa proses progressbar yang gw taruh di event Form_Load, nggak muncul setelah form diload. Masalah selesai setelah proses progressbar dan load data gw taruh di event Form_Activate.
  • Fungsi DoEvents. Ini juga salah satu pemecahan dari akar masalah gw selama ini. Selama ini gw bingung nyari cara supaya ketika progressbar tampil, muncul jg tulisan dibawahnya yang memberikan informasi detil proses yang sedang berlangsung secara realtime. Gw udah coba pake label.refresh, nggak berhasil juga. Labelnya sih muncul, tp nongolnya pas proses progressbar selesai, yah sama aja bohong emoticon. Seolah2 ketika progressbar lagi jalan, semua resource tertuju ke progressbar doang, dan labelnya nggak dikasih kesempatan muncul di form, mirip2 single protected-mode. Thanx to my friends at Milis ProgrammerVB, masalahnya akhirnya terpecahkan. Ternyata simpel, dengan menambahkan fungsi DoEvents (ya, hanya fungsi ini doang emoticon) sebelum/sesudah proses yg ingin ditampilkan di background, proses ini bisa kelihatan walaupun progressbar masih berjalan. 
  • Well, untuk sementara updatenya cuman itu. Ntar kalo ada waktu gw oprek lagi. Sekarang ngerjain program gw yg lain dan nggak kalah ribetnya, POK emoticon.

No comments:

Post a Comment