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.

3
Maksain Settingan Waktu Client

Yak, satu lagi seri "PEMAKSAAN SETTING" dari abang Qvezst Al-Cakepnye Naujubille :)) ~ narcis dikit gpp khan ~, setelah artikel sebelumnya yg berjudul Maksain Regional Setting dari VB . Kali ini kita akan membedah mengenai settingan waktu.

Sek, kyanya lebih seru klo aku kasih prolognya doeloe biar asyeek...

Begini ceritanya...

Al-kisah, salah seorang karyawan di sebuah perusahaan (anggaplah sekolah lah, biar enak perumpamaannya), menemui masalah kecil di kompienya. Salah satu game favoritnya yg dia donlot dari GameHouse trial expired! Dia udah 30 hari yg lalu nginstall tu game n skrg dah habis masa uji-cobanya. Berhubung dia ngga mau makae (or ngga nemu) crack-crackan-nya, n berhubung dia masih membutuhkan tu program, akhirnya dia coba2 mundurin tanggal di control panel nya. Dia mundurin ke Juli 2007. Solusi didapat. Tu game akhirnya bisa jalan (lagi)... Asyeeek...

Tp dia baru munculin satu masalah baru. Kebetulan dia tu karyawan TU bagian pembayaran BP3. Nah, pas lagi jam istirahat sekolah, n ada beberapa siswa yg datang ke dia mo mbayar BP3, dia lupa mbalikin lg tanggal sistemnya. Trus dia jalanin deh aplikasi sisfo pembayaran BP3 siswa yg dibuat ama salah satu software house tidak ternama di kotanya. (hehehe, suer bukan software-house ku.. ini cuman cerita rekayasa aja supaya memberikan kesan bombastis. hihihi. kesamaan nama, tempat, dan peristiwa, sungguh bukan karena disengaja... suer dech..)

Back to the story...

Apa yg terjadi?
Sebenarnya, nothing worse happen. Software BP3 yg dia jalankan, sukses dia operasikan dgn baek-baek saja koq... Udah kecatet transaksinya. "eRQee, mbayar 25ribu, sumbangan 5 ribu. Paul, mbayar 25ribu, ngga pake sumbangan. Annur, mbayar 50ribu, tunggakan 2 bulan." ~ semua yg dia catet tersimpen apa adanya koq.

Sebentar, mari kita lihat log transaksi pembayaran BP3 bulan Oktober 2007... Lho koq kosong? Semestinya ada laporan pembayaran dari eRQee, Paul, n Annur... selidik punya selidik, catatan transaksi yg barusan dia masukin rupanya nyangkut ke transaksi bulan Juli 2007. Wahwahwah... repot nieh. Utk ngoreksi transaksi, dia ngga dikasih privileges. Penyesuaian transaksi hanya bs dilakuin ama Waka Keuangan n tangan kanannya. Apesnya, dia bukan waka keuangan n bukan pula tangan kanannya... Pegimane iki?? Gawat. Klo ngelapor, bisa2 dia dimarahin karena memanfaatkan fasilitas kantor utk nge-game. Hiks...

~~ kasian ya? ~~

dan, moral value dr cerita di atas itu adalah :
  • jangan maksain program klo dah expired masa trialnya. klo dah habis, en emang tu program bagus, belilah... (usaha dikit keq... minim, browse2 d Craagle keq utk 'beli' versi communitynya. xixixixi...)
  • selalu teliti klo mo ngoperasikan program yg sensitif, apalagi klo menyangkut ttg uang.
  • semestinya programmer yg bikin tu progam jg memperhatikan masalah penanggalan. karena dari sudut pandang sistem informasi, penanggalan itu sama sensitifnya dgn uang pada poin 2 di atas...

Nah, artikel d sini akan mencoba membahas mengenai upaya preventif supaya hal-hal begituan tidak terjadi di kemudian hari..

Ada beberapa solusi nih supaya pencatatan tanggal transaksi di client bs sinkron dgn tanggal yg berlaku di server...

PERTAMA, pendekatan query. Sejauh ini, ini merupakan cara yang paling-paling ampuh. Misal pake MySQL, gunakan UDF Now() pada query INSERT. Ato GetDate() ~> kalo di SQL Server. Jadi, semisal user menekan tombol "Save" pada form transaksi, n di tombol save itu didefinisikan query INSERT, e.g :
"INSERT INTO TblTrans(Tgl,NIS,JmlBayar,Sumbangan) VALUES(Now(),'11298',25000,5000)";


jadi, tanggal berapapun yg di set di client, yg tersimpan tetep tanggal sekarang... (tanggal kapan dia nyimpen transaksi tersebut maksutku).

Tapi kadang pendekatan itu thox ngga cukup. Di form laporan transaksi ada combobox bulan/tahun yg akan meng-automatic-view transaksi yg terjadi pada bulan ini. Nah, biasanya, default valuesnya adalah bulan/tahun sekarang. Programmer biasanya nyettingnya ngga make cara ngirim2 query segala.. cukup pake function Now() dari program aplikasi. Artinya, ngambil settingan tanggal dari localtime dari masing2 kompie. Bukan server... NAH! Masalahnya td ada kasus pemunduran tanggal... gimana solusinya? Kirim query lg utk dapetin bulan sekarang? Boleh... itu pendekatan kedua.

Pendekatan KETIGA, ~ ini sebenarnya inti dari artikel ini (nggak to the point banged sih) ~ maksain settingan tanggal pada kompie client supaya sinkron dgn tanggal di server. Jadi, berapapun tanggal yg disetting di localtime, pas aplikasi dijalanin, aplikasi langsung nyesuaikan ostosmastis tanggal di client supaya SAMA PLEK dgn tanggal di server, se jam-menit-detiknya...

Caranya ?

Simak modul berikut :

Private Declare Function SetSystemTime Lib "kernel32" _
(lpSystemTime As SYSTEMTIME) As Long

Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Public Sub SyncTime2ServerTime(ByRef db As ADODB.Connection)
Dim sQuery As String

Screen.MousePointer = vbHourglass
If DATABASE_ENGINE = "MYSQL" Then
sQuery = "SELECT YEAR(NOW()), " & _
"MONTH(NOW()), " & _
"DAY(NOW()), " & _
"HOUR(NOW()), " & _
"MINUTE(NOW()), " & _
"SECOND(NOW())"
ElseIf DATABASE_ENGINE = "SQLSERVER" Then
sQuery = "SELECT Datepart(yyyy, GETDATE()), " & _
" DatePart(mm, GETDATE()), " & _
" DatePart(dd, GETDATE()), " & _
" DatePart(hh, GETDATE()), " & _
" DatePart(mi, GETDATE()), " & _
" DatePart(ss, GETDATE()) "
Else 'kalo access n sqlite...
'nothing will be sync
Screen.MousePointer = vbDefault
Exit Sub
End If

Dim sNewTime As SYSTEMTIME
Dim lLng As Long
Dim rs As ADODB.Recordset
Set rs = db.Execute(sQuery)
If rs.RecordCount > 0 Then
sNewTime.wYear = rs(0)
sNewTime.wMonth = rs(1)
sNewTime.wDay = rs(2)
sNewTime.wHour = CStr(CInt(rs(3)) - 7)
sNewTime.wMinute = rs(4)
sNewTime.wSecond = rs(5)
lLng = SetSystemTime(sNewTime)
End If
rs.close
Set rs = nothing
Screen.MousePointer = vbDefault
End Sub


Trus implementasinya, bs dilakukan pas aplikasi baru start, panggil di sub Main() -- ato pas salah satu form baru dibuka, di form_load() misalnya...

Private Sub Form_Load()
'blablabla...
SyncTime2ServerTime(db)
'dengan db adalah object ADODB.Connection yg udah
'open connection dengan baek...
End Sub

Efeknya, semisal di server skrg tgl 24 Oktober 2007 pukul 02:43:29, di client jg akan berubah settingan tanggalnya jadi 24 Oktober 2007 pukul 02:43:29

Gimana? Implementatif bukan? (maaf klo nggak, hehehe...)

Selamat mencoba.

1
learn the rules, break the rules, and create the new ones..

Motto yg ada di bawah tulisan Software-Arsitek di header blog ini adalah LEARN THE RULES, BREAK THE RULES, AND CREATE THE NEW ONES... - apa sih maksutnya itu? Apakah cuman sekedar iseng2 gw aja pas mo nyari deskripsi situs ini pas registrasi blog d Blogger? hehehe...

Bukan cuman itu alasannya.

Filosofi itu kudapat pas memikirkan tentang "proses belajar". Begitulah sebenarnya proses belajar yang ideal (menurutku). Pelajari rule-nya.. itu udah proses belajar. Tp bukan cuman sekedar itu. Kalo hanya pelajarin thox, - cepet hilang tu ilmu... - kita musti pergunakan. Amalkan ilmu itu, begitu kira2 kata ustadz2 (ustadz = orang yg ber-ilmu)..

Terus ngapain ada fase 'break the rule' ? Ngapain kita perlu 'hancurkan' tu ilmu?

Break d sini bukan berarti kita harus melanggar. Break the rules, langgar peraturan. Break the rules memiliki filosofi lebih, bahwa dari ilmu-ilmu yg udah kita pelajari itu, kita musti cari batasnya. Ilmu itu (sebenarnya) tanpa batas. Semakin banyak kita tau, sesungguhnya semakin sadar kita bahwa kita ni sebenarnya belum tau apa-apa... Nah, batas-batas cakrawala ilmu yg 'udah' kita pelajarin itu, kita cari tau batasnya sampe mana - trus kita kembangkan. Menembus batas... Langgar 'batas' dari ilmu itu...

Contoh umumnya gini, - emm, apa ya analogi yang pas n enak... - begini wezh :

SDLC. System Development Lifecycle. Kita tau teori ttg SDLC. Pengembangan sistem selalu berjalan secara berulang, mulai dari perencanaan -> analisis -> desain -> konstruksi -> implementasi -> evaluasi -> dan balik lagi ke perencanaan. Begitu. Nyaris semua buku2 SDLC, Rekayasa Perangkat Lunak, dari berbagai sumber baik penulis lokal maupun interlokal, berpijak pada alur life-cycle yg serupa. Oke lah, ada variasi pengembangan macam model waterfall ato spiral... tp pada intinya, sama. Begitu.

Kalian (termasuk saya) sebagai mahasiswa TI yg belajar ttg SDLC juga diharapkan memahami hakikat SDLC sedemikian rupa. Tp cobalah sekali-sekali kalian implementasikan tu ilmu... Amalkan tu ilmu, bisa kah kita terapkan plek seperti itu dalam kehidupan nyata? Banyak orang2 yg berpendapat, kadang teori saja tidak cukup. Karena implementasinya ngga semudah mbaca teorinya.

Betul itu!

Makanya, break the rules that you've learned... Dalam pengimplementasian siklus pengembangan sistem, mungkin kita ngga cocok dengan 1 metode. Abaikan aja metode itu. Cari metode lain yg lebih sesuai. Jangan terlalu idealisme. Jadilah idealita, idealis yang sesuai dengan realita... Hancurkan konsep dengan cari kelemahan2nya. Niscaya dari kelemahan2 itu kita bisa belajar mengenai cara meminimalkan resikonya.

Trus, create the new ones - merupakan kelanjutan dari fase "break the rules" - Kalo kita cuman hancurkan teori thox trus kita tinggalkan, apa manfaat dan faedahnya ?? Bikin teori baru! Teori baru yang lebih sempurna, yang lebih suitable sama kondisi yg kita hadapi, teori baru yang lebih manusiawi dan masuk akal bagi kita...

Dalam Extreme Programming, ada 3 tahapan menarik yang berbicara mengenai TINGKAT KEMATANGAN seorang software developer dalam menerapan XP.

Level pertama, ini yang terendah, adalah menerapkan konsep2 XP persis seperti teori-teori Extreme Programming dan Agile Methodology yang udah ada.

Level kedua, developer menerapkan teori XP yang dia pandang cocok untuk diterapkan dalam kasus pengembangan sistem yang sedang dia hadapi. Teori2 yang ngga cocok or ngga sesuai, dia abaikan.. Adopsi teknik2 XP hanya yang kompatibel dan mendukung proses konstruksi yang dia lakukan.

Level ketiga, ini level yang tertinggi - dan di sinilah sisi menariknya Extreme Programming - adalah suatu level dimana developer tidak peduli dia mempergunakan metode XP ato tidak. Yang penting software yang dia bikin zero defect, working, dan implementatif...

Unik kan? Level tertinggi dari XP malah tidak peduli mengenai segala macam teori XP yang ada...

Begitulah kira2, makna dari 3 fase pembelajaran. Learn the rules, break the rules, and create the new ones... - pembelajaran yang bukan berorientasi hanya pada pemahaman - namun juga aspek-aspek afektif dan psikomotor. (hehehe, KBK bangedd nieh...). Berarti KBK adalah pembelajaran extreme donk? U bs kasi comment ndiri lah... hehehe...

Salam damai dari Malang kota debu..

•Qvezst•