Learn the Rules, Break The Rules, and Create the New Ones...

Hi... My name is Rizky Prihanto. You can call me RQ, or Rizky either. I am currently living on Bandung, Indonesia. Had a lot of works and research about Enterprise Information Systems (majoring on education and e-governments). I have bunch of interests (some friends call it 'freakz') about MySQL Opensource Database and now I am one of the administrator of MySQL Indonesia User Group - the opensource community initialized by Sun Microsystems Indonesia.

My Company PT Cinox Media Insani, Bandung, Indonesia. I work here since 2008 and I take responsibility as Chief of Software Architect. My job is about planning, imaginating, fantasy-ing, concepting, and build the infrastructure of the new information systems (or app engines) which going to be implemented.

This blog This is my blog that represent my current opinion, research and experiences about anything in Software Engineering. Written since 2007 (actually) and has been vaccum for a lot of while. And now I wanna ressurrect this blog (optimistically) from the long-long-hibernation with something fresh and new ideas -- still about MySQL, software engineering, development, and may be something managerial here.

About the tagline I've learned the statement above from some paper written by Kent Beck about Extreme Programming (XP) methodology -- some sort of practical software development methods which have no boundaries. That's very inspiring me a lot. I have written some article on this blog that tell my interpretation about that statement here.

My Another Blogs I have classifying my blogs into some sort of genre. The blog that you read here right now is my primary blog that tell you (majoring) about IT stuff. But if you wanna look another side of me, you can visit here, here, here,or here. Hope it'll be interesting for some of you.

Credits I would thanks to Blogger for this great blog platform. Skinpress who designed this Wordpress template (which is bloggerized by Free Blogger Templates). My appreciate is also going to you who give your generously time for visiting my blog.

Informative-Oriented Gridview

Kadang aku geli sendiri liat style2 coding2 lama ku yg nggilaniey. Terutama untuk nampilin data. Dulu aku punya 1 form yg isinya 1 listview, 1 textbox, dan 1 tombol cari. Yup! Form pencarian data. Dulu aku bikin, yang penting data nya tampil. Thox. Itu doank-wank-wank... Code nya umumnya seperti ini :

Private Sub CmdCari_Click()
dim iI as integer, rs as ADODB.Recordset, sSQL as string
sSQL = "SELECT Kode, Nama, Kecamatan, TanggalExpired, JumlahBukuDipinjam " & _
"FROM TblAnggota WHERE Nama LIKE '%" & ValidStr(txtCari.text) & "%'"
LvAnggota.ListItems.Clear
Set rs = db.Execute(sSQL)
If rs.RecordCount > 0 Then
For iI = 1 to rs.RecordCount
ListViewAdd LvAnggota, GetValidStr(rs(0).value), _
GetValidStr(rs(1).value), _
GetValidStr(rs(2).value), _
GetValidStr(rs(3).value), _
GetValidStr(rs(4).value)
rs.MoveNext
next iI
Else
MsgBox "Data yang Anda cari tidak ada!", vbInformation + vbOkOnly, "Maaf"
End If
rs.close
Set rs = Nothing
End Sub



Aku ngga jelasin isi procedure ListViewAdd di sini, yg jelas itu cuman wrapper yg kubuat utk mempermudah pengisian row ke listview doank... Aku jg ngga njelasin isi procedure ValidStr ato GetValidStr di sini. GetValidStr itu juga cuman sebuah rutin sederhana untuk mendekomposisi string yg mempunyai escape-character (tanda backslash). Kalo ValidStr, ini merupakan prosedur standar (bagiku) utk menambahkan escape character pada beberapa karakter yg potensial membangkitkan error ato sekedar memberi kesempatan utk SQLInjection. (-_-). GetValidStr() adalah fungsi utk membalikkannya...

Hehehe, masalahnya di mana nieh?

Nggak ada masalah sih sebenarnya. Cuman dulu aku *nggak mikir* aja, klo data yg di load kemungkinan jumlahnya bisa sampe RIBUAN pada suatu saat. RATUSAN RIBU, malah... ~ maklum pemula. Masih pendek akal pikirannya, xixixi...

Pandanganku kini beda. Aku cenderung lebih menilai dari sudut pandang fungsionalitas. Kalo seseorang ingin menampilkan data, yang dia butuhkan sebenarnya ada 2 :
  1. statistik
  2. data spesifik untuk sesuatu yg emang ingin dia cari


Untuk kedua aspek itu, amat sangat USELESS klo kita tampilin seluruh data yang ada di dalam tabel kita ke dalam grid/listview. Percuma. buat apa?? Setelah dia dapet 10ribu record, misalnya -- trus apa lg yg dia lakukan? memilih data tho? record mana yg kira2 dia butuhkan. ato mungkin informasi yg dia butuhkan hanya sekedar sebuah pertanyaan simpel : "ada berapa sih jumlah anggota perpustakaan ku ini?"

Jadi yg bs kusimpulkan adalah begini, *alangkah lebih baik* klo dalam form aplikasi grid-based (informative-oriented), disediakan fitur2 berikut ini :
1. sediain informasi jumlah record yg ditampilkan dan jumlah record yg ditemukan;
misal :
ditampilkan 100 data dari 138927 yang ditemukan

2. bikin sistem paging. pake tombol <<> ato next >> utk menavigasi ke sekian record selanjutnya. misal kmu sepakat hanya nampilin 100 record per halaman, brarti ketika ditekan next >>, grid akan menampilkan record ke 101 sampe 200.

3. sediakan fitur sort berdasarkan kolom. Misal kolom yg ditampilkan ada 5 :
Kode, Nama, Kecamatan, TanggalExpired, JumlahBukuDipinjam
pastikan user bisa melakukan sorting data yg ditemukan berdasarkan kolom tertentu. entah sort berdasarkan kecamatannya keq, ato berdasarkan jumlah buku keq, ato sort default berdasarkan kode, ato.. what-ever lah sesukamu... (sesuka user jg maksutnya)

4. sediakan fitur refresh! ini penting bangedd. jangan sampe utk melihat data baru user musti tutup form n buka lagi. ato user musti masukin keyword pencarian lagi.

5. sediain fitur custom filter. Misal kmu awalnya (scr default) hanya nyediain pencarian berdasarkan nama, kmu bs juga nambah fitur pencarian custom berdasarkan kecamatan, rentang tanggal expired, jumlah buku yg dipinjam, ato filter-filter lain yg ada di struktur tabel anggota mu dalam database.

6. jangan sekali2 pake select * klo cuman mo nampilin 5 column, kecuali kmu mo sediain grid yg bs meng-customizing kolom2 apa yg mo ditampilkan (...although this is not a good idea...)

7. optimasi query mu. seandainya query SELECT mu menjaring beberapa tabel, coba2 bandingin teknik JOIN yg kmu pake dengan teknik2 lainnya. Utk data kecil or belum lengkap, mungkin nggak ngefek... tapi setelah 1000-record lebih, performance-gap bisa jadi udah makin keliatan...

8. klo perlu, ketika sebelum ngeload hasil recordset ke grid, ubah mousepointer ke cursor BUSY :
screen.mousepointer = vbHourglass
dan klo udah selesei ngeload semuanya, balikin ke cursor default :
screen.mousepointer = vbDefault
*ini punya efek psikologi yg ngga bisa dipandang remeh loo...

9. jangan lupa dispose object recordset klo udah slesei mindahin semua data ke grid. jangan cuman di close doank.
rs.close
set rs = nothing
*hal ini akan menjamin ngga ada lagi cache hasil query yg nyangkut di memory.. seandainya kmu ngeload 100 record, n masing2 record punya ukuran rata2 10KB (misalnya), maka cache query yg nyangkut di memory adalah 1000KB alias 1MB kurang lebih. hmm, klo 100 kali kmu lakukan pencarian data, ato 100 kali refresh lah, program-mu bisa mengonsumsi memory sebanyak game Age of Empires III : The Asian Dynasty nghabisin memory...

10. jangan sungkan2 untuk konsultasikan kepada client/end-user tentang format kolom2 mana aja yg mau ditampilin dalam aplikasi. hal2 yg paling sering dipermasalahkan sama client adalah "mereka ngga bisa melihat informasi yg mereka butuhkan dalam aplikasi yg mereka jalankan". Klo perlu, biarkan mreka yg duluan milih kolom2 mana yg mo ditampilkan. stlh itu baru kita construct. Klo ngga gtu, komplain di kemudian hari, kita ndiri yg akhirnya harus sesuaikan. *huff...


Begitulah...

maaf buat kalian yg mengira postingan ku ini PURE technical. Aku lagi pengen nyampei-in unex-unex ku ajahh... secara technical (baca : code), yaa... ntar2 aja lah dibahas (klo ada yg nanya maksutnya. hihihi)...

bye..

1 comments:

Anonim mengatakan...

wah, tambah jago aja kodingnya nich,,

Riz, sayang deh, personal site keren kayak gini kalau blm diindeks mbah google,, khan membantu tuh... ow ya ini ada dikit trik promosiin web kamu xixi

http://forum.fmipa-unmul.web.id/viewtopic.php?t=27

eh ya, i apologize y, ambil url e-book-mu buat rameen forum anak MIPA, abis membantu sih,

http://forum.fmipa-unmul.web.id/viewtopic.php?t=87

makasih ya & terus berkarya :)

Posting Komentar