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.

1
Online Analytical Processing (OLAP)

Konsep sistem penunjang keputusan dicetuskan oleh dua orang profesor dari Massachusset Institute of Technology (MIT) yaitu Anthony Gorry dan Michael Scott Morton pada tahun 1971. Sistem penunjang keputusan adalah suatu mekanisme bantu bagi middle-manager ke atas untuk mendapatkan model informasi, dan simulasi serta analisis statistik dalam situasi pengambilan keputusan yang semi-terstruktur. (Gorry & Scott Morton dalam [OET-02] p.99).

Semakin kompleksnya pengembangan sistem-sistem informasi pemrosesan transaksional yang berevolusi ke arah Online Transactional Processing (OLTP) System, menimbulkan konsekuensi semakin rumit dan semakin banyak data maupun informasi yang harus dianalisis oleh pihak manajemen. Untuk itu dikembangkan suatu metode pengelolaan data dalam skala besar dengan membuat suatu data warehouse. ([CHA-96] p.1). Pada data warehouse, semua data disimpan dan diintegrasikan, termasuk riwayat data (historical data), untuk dimanfaatkan sebagai dukungan penganalisisan data dan pengambilan keputusan nantinya (Pires, 2006:10).

Cakupan sistem penunjang keputusan pun semakin berkembang untuk menyesuaikan kebutuhan analisis informasi yang juga semakin kompleks. Pada pertengahan dekade 1990, bersamaan dengan adopsi besar-besaran data-warehousing pada sejumlah perusahaan besar dunia, dikenalkan suatu teknik analisis penunjang keputusan yaitu OLAP, Online Analytical Processing ([CHA-96] p.2).

Online Analytical Processing (OLAP) menawarkan metode analisis data secara kompleks dan terkustomisasi yang disesuaikan dengan kebutuhan akan informasi oleh para analis maupun eksekutif. Data yang dikelola oleh OLAP berasal dari data warehouse ([PIR-06] p.10). Pengguna OLAP umumnya memanfaatkan OLAP dengan pola analisis seperti berikut ini ([PIR-06] p.12) :

  • Meringkas dan mengumpulkan sejumlah besar data
  • Melakukan filtering, pengurutan, dan memberikan peringkat (rangking)
  • Membandingkan beberapa set dari data
  • Membuat sketsa/bagan/diagram
  • Menganalisis dan menemukan pola dari data
  • Menganalisis kecenderungan data


Pola-pola tersebut kemudian dijadikan acuan oleh pengembang perangkat lunak pendukung pengambilan keputusan, termasuk pengembang database, untuk mengembangkan sistem berbasis OLAP. Fokus pengembangan OLAP-tools tersebut adalah untuk menyediakan analisis multidimensional dari data dengan berbagai variasi penyajian secara interaktif. OLAP-tools dirancang untuk bekerja dengan data mentah hierarchical, lalu mengelompokkannya dan meringkasnya ke dalam bentuk multidimensional (
[AIT-06] p.161).

Beberapa RDBMS terkemuka seperti Microsoft SQL Server dan Oracle telah menyatakan dukungan terhadap OLAP maupun data warehouse. Database engine yang OLAP-capable menawarkan fitur built-in berupa perintah-perintah maupun function khusus untuk menangani OLAP, seperti grouping, aggregating, summarizing, filtering, sorting, rangking, hingga membuat pivot tables ([KOF-05] p.234).

Walaupun komite ANSI sudah lama memasukkan definisi OLAP-Function sejak dikeluarkannya standar SQL:99 ([ISO-99] p.419-465), sangat disayangkan MySQL hingga versi 5.0 belum merencanakan ketersediaan fasilitas OLAP-Functions (kecuali klausa GROUP BY) ([KOF-05] p.234). Namun masih ada pendekatan lain untuk menyajikan fitur OLAP untuk pengelolaan data dalam MySQL, dengan bantuan spreadsheet yang OLAP-capable seperti Microsoft Excel. Sebuah fitur yang sangat menarik untuk manajemen dan analisis data multidimensional dalam Microsoft Excel adalah PivotTables ([HER-05] p.107).

Referensi

[AIT-06] Aitken, Peter G., Excel PivotTables and Charts, Wiley Publishing Inc., Indianapolis : 2006.

[CHA-96] Chauduri, Surajit & Dayal, Umeshwar, An Overview of Data Warehousing and OLAP Technology, VLDB Conference, New Delhi : 1996.

[HER-05] Hermawan, Julius, Membangun Decision Support System, Penerbit Andi, Yogyakarta : 2005.

[ISO-99] ISO & ANSI, ISO/IEC 9075-2 : SQL/Foundation Part 2, ISO Central Secretariat, Geneva : 1999.

[KOF-05] Köfler, Michael, The Definitive Guide to MySQL5, Apress Publisher, Berkeley, CA : 2005.

[OET-02] Oetomo, Budi Sutedjo Dharma, S.Kom, MM., Perencanaan & Pembangunan Sistem Informasi, Penerbit Andi, Yogyakarta : 2002.

[PIR-06] Pires, Joäo Moura, Data Warehouse Architecture Overview, Bases de Dados e DataWarehouse, Lisbon : 2006.

15
Maksain Regional Setting dari VB

Kadang pas kita lagi bikin program yang berhubungan dengan hitung-hitungan, kita sering nemuin masalah yang terkait dengan format penulisan currency. Misal pas kita develop tu program, regional setting kita udah makae Indonesia, jadi display angka currency formatnya makae tanda titik (xxx.xxx.xxx,xx). Eh pas dicoba jalanin di kompie laen yang settingannya default (US English), formatnya berubah jadi koma (xxx,xxx,xxx.yy). Belum lagi kalo ada itung-itungan pecahan. Bisa jadi malah muncul error "invalid property/value" tuh...

Solusinya, bisa aja pakae konversi manual. titik ke koma, trus koma ke titik. di swap gitu lah.. (materi algoritma 101 tuh..). Tapi kadang muncul masalah laen: currency symbol. Pas kita develop, mungkin yg munculnya pake simbol Rp (rupiah). Tapi pas dijalanin di kompie US English, yg muncul malah $. Waah, bisa kachaow beliaow tuh... Atau masalah ini : kadang kan yang berhubungan dengan hitung-hitungan juga berhubungan tuh dengan tanggal. Misal, pembayaran pada tanggal sekian. Pelunasan pada tanggal sekian... Nah, pas kita makae date time picker, format Long Date, koq yg muncul "Friday, 17 August 2007" misalnya.. Wal hasil, dimarahin deh ama client.

Client : "Mas, ngga bisa kah format hari n bulannya diganti makae bahasa Indonesia?".
Kita : "O, bisa pak! Sangat bisa! Bapak tinggal ganti aja regional setting komputer Bapak ke Indonesia. Caranya, masuk ke control panel blablabla...."
kita njelasin sampe beliuran)

Client : "Stop-stop-stop! Koq ribet ya?? Ngga bisa cara gampang kah mas? Wah, klo gtu saya ngga jadi deh beli program penjualan sampeyan. Ntar yang susah malah saya, lagi..."
Kita : "Tapi pak, itu..."
Client : "Nggak! Makasih. Saya udah ngga interest lagi. Bye"
Kita : "Pak...pak... - halo? Pak? -- yaaa, diputus.."

Weleh-weleh... kasian amat kita ya? Hehehe...

Mungkin, cara yang cukup safe utk diterapin supaya dialog via telepon kya di atas ngga kita alamin, adalah dengan men-setting-kan ostosmastis regional setting komputer client. Caranya?

Simak module vb berikut :

'
' ModRegionalSetting.BAS
'

Option Explicit

Const LOCALE_SDECIMAL = &HE ' decimal separator
Const LOCALE_STHOUSAND = &HF ' thousand separator
Const LOCALE_SGROUPING = &H10 ' digit grouping

Const LOCALE_IDIGITS = &H11 ' number of fractional digits
Const LOCALE_ILZERO = &H12 ' leading zeros for decimal
Const LOCALE_SNATIVEDIGITS = &H13 ' native ascii 0-9

Const LOCALE_SCURRENCY = &H14 ' local monetary symbol
Const LOCALE_SINTLSYMBOL = &H15 ' intl monetary symbol
Const LOCALE_SMONDECIMALSEP = &H16 ' monetary decimal separator
Const LOCALE_SMONTHOUSANDSEP = &H17 ' monetary thousand separator
Const LOCALE_SMONGROUPING = &H18 ' monetary grouping

Const LOCALE_ICURRDIGITS = &H19 ' # local monetary digits
Const LOCALE_IINTLCURRDIGITS = &H1A ' # intl monetary digits
Const LOCALE_ICURRENCY = &H1B ' positive currency mode
Const LOCALE_INEGCURR = &H1C ' negative currency mode

Const LOCALE_SDATE = &H1D ' date separator
Const LOCALE_STIME = &H1E ' time separator
Const LOCALE_SSHORTDATE = &H1F ' short date format string
Const LOCALE_SLONGDATE = &H20 ' long date format string
Const LOCALE_STIMEFORMAT = &H1003 ' time format string

Const LOCALE_IDATE = &H21 ' short date format ordering
Const LOCALE_ILDATE = &H22 ' long date format ordering
Const LOCALE_ITIME = &H23 ' time format specifier
Const LOCALE_ICENTURY = &H24 ' century format specifier

Private Declare Function GetSystemDefaultLCID Lib "Kernel32" () As Long
Private Declare Function GetUserDefaultLCID Lib "Kernel32" () As Long
Private Declare Function GetLocaleInfo Lib "Kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Function SetLocaleInfo Lib "Kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long

Public DataRegional(11) as string

Private Function GetRegional(nFormat As Long, Optional SetValue As String = -1) As String
Dim vNilai As String, vLcid As Long, Ret As Long
vLcid = GetUserDefaultLCID()
vNilai = Space$(vLcid)
Ret = GetLocaleInfo(vLcid, nFormat, vNilai, Len(vNilai))
If Ret Then
If SetValue <> "-1" Then
Call SetLocaleInfo(vLcid, nFormat, CStr(SetValue))
End If
GetRegional = Left$(vNilai, Ret - 1)
End If
End Function

Public Sub SimpenRegional()
DataRegional(0) = GetRegional(LOCALE_SDECIMAL)
DataRegional(1) = GetRegional(LOCALE_STHOUSAND)
DataRegional(2) = GetRegional(LOCALE_SCURRENCY)
DataRegional(3) = GetRegional(LOCALE_SMONDECIMALSEP)
DataRegional(4) = GetRegional(LOCALE_SMONTHOUSANDSEP)
DataRegional(5) = GetRegional(LOCALE_ICURRENCY)
DataRegional(6) = GetRegional(LOCALE_INEGCURR)
DataRegional(7) = GetRegional(LOCALE_SDATE)
DataRegional(8) = GetRegional(LOCALE_STIME)
DataRegional(9) = GetRegional(LOCALE_SSHORTDATE)
DataRegional(10) = GetRegional(LOCALE_SLONGDATE)
DataRegional(11) = GetRegional(LOCALE_STIMEFORMAT)
End Sub

Public Sub BalikinRegional()
Call GetRegional(LOCALE_SDECIMAL, DataRegional(0))
Call GetRegional(LOCALE_STHOUSAND, DataRegional(1))
Call GetRegional(LOCALE_SCURRENCY, DataRegional(2))
Call GetRegional(LOCALE_SMONDECIMALSEP, DataRegional(3))
Call GetRegional(LOCALE_SMONTHOUSANDSEP, DataRegional(4))
Call GetRegional(LOCALE_ICURRENCY, DataRegional(5))
Call GetRegional(LOCALE_INEGCURR, DataRegional(6))
Call GetRegional(LOCALE_SDATE, DataRegional(7))
Call GetRegional(LOCALE_STIME, DataRegional(8))
Call GetRegional(LOCALE_SSHORTDATE, DataRegional(9))
Call GetRegional(LOCALE_SLONGDATE, DataRegional(10))
Call GetRegional(LOCALE_STIMEFORMAT, DataRegional(11))
End Sub

Public Sub StandardRegionalSetting()
Call GetRegional(LOCALE_SDECIMAL, ",")
Call GetRegional(LOCALE_STHOUSAND, ".")
Call GetRegional(LOCALE_SCURRENCY, "Rp")
Call GetRegional(LOCALE_SMONDECIMALSEP, ",")
Call GetRegional(LOCALE_SMONTHOUSANDSEP, ".")
Call GetRegional(LOCALE_ICURRENCY, 2)
Call GetRegional(LOCALE_INEGCURR, 14)
Call GetRegional(LOCALE_SDATE, "/")
Call GetRegional(LOCALE_STIME, ":")
Call GetRegional(LOCALE_SSHORTDATE, "dd/MM/yyyy")
Call GetRegional(LOCALE_SLONGDATE, "dddd, d MMMM yyyy")
Call GetRegional(LOCALE_STIMEFORMAT, "HH:mm:ss")
End Sub



Naaah, tu module memiliki procedure StandardRegionalSetting yg bisa dipanggil pas Form Utama di initialize, atau pas sebelum itu (di dalam sub main)...

Contoh :

Sub Main()
StandardRegionalSetting
FUtama.show
End Sub


Alhasil, *apapun* regional setting yang di-apply di kompie client, secara otomatis akan berubah ke settingan "standar" sesuai yang kita inginkan..

Tapi mungkin cara ini kurang manusiawi juga. Lha, siapatau emang tu client suka-nya pake US English, coba? Kan kita ngga ngerti motivasinya dia nyetting begituan apa karena emang mbiarin default apa emang karena suka apa cuman Asal British aja?

Nah solusinya, bisa aja kita simpen dulu regional setting dia sebelum njalanin program kita, n ntar klo dia exit : kita balikin regional setting awalnya. Jadi di Sub Main() tadi kita tambahin procedure "SimpenRegional". Lihat code ini :

Sub Main()
SimpenRegional
StandardRegionalSetting
FUtama.show
End Sub


dan pas Form Utama ditutup (FUtama_Unload) panggil procedure "BalikinRegional"

Private Sub FUtama_Unload()
BalikinRegional
End
end sub


Cobain deh...

0
Mengoptimalkan Penerapan Extreme Programming

Tertarik menerapkan metode Extreme Programming dalam pengembangan sistem perangkat lunak? Bosan dengan metode-metode klasik yang cenderung bikin susah developer pasca implementasi karena direpotin ama revisi-revisi sistem dan keluhan-keluhan yang datang bertubi-tubi dari client? Silakan...

Postingan ini akan menjelaskan dulu apa-apa aja prasyarat yang musti diperhatikan klo pengen sukses jaya dalam nerapin gaya ngembangin sistem secara cerdas (agile development) makae metode Extreme Programming (XP). Hal-hal yg kudu dipertimbangkan sebelum menjerumuskan diri dan tim development kita ke lembah XP adalah sbb :

  1. User harus memahami benar konteks bisnis yang digelutinya yang akan dikembangkan sistemnya, sehingga developer dapat menangkap sudut pandang sistem secara aplikatif dan dapat mengusulkan ekspansi-ekspansi teknologi apa yang dapat dikembangkan dalam sistem barunya. Kalo user-nya sendiri ngga tau dia sebenarnya musti ngapain-ngapain aja sih setiap harinya -- wahh -- fase analisis requirement bakal berlangsung panjang dan berliku-liku deh... User yang paham *konteks bisnisnya sendiri* tentunya juga paham bagaimana perencanaan yang baik dalam pengembangan sistem. Kadang mereka nggak sadar kalo mereka sebenarnya udah paham, karena mereka hanya bingung saja karena ada seorang dari "galaksi lain" yang ngaku-ngaku sebagai analis sistem sedang bercerita tentang teknologi-teknologi yang selama ini diluar bayangannya. Oleh karena itu, PENTING BAGI analis sistem untuk mampu *memancing* cerita mereka tentang konteks bisnis mereka... - terserah gimana tekniknya, dengan pendekatan moral, material atau spiritual. Pendekatan moral, misalnya : berupaya "memposisikan" diri di posisi client. memahami pola kerja, budaya kerja, dan rutinitas2 harian mereka. Pendekatan material, kadang harus ditempuh - terutama utk client pemerintah (maaf buat pak governments - hehehe) - supaya client mau cerita tentang kebutuhannya, perlu di-stimulasi dengan "$$$". Nah kalo pendekatan spiritual, bisa aja dilakukan supaya client mau cerita banyak tentang organisasinya, budaya kerjanya, rutinitas2 harian mereka, kita dekatin tu client (kalo cewek), ajak nonton bareng, makan bareng, pacarin... sehingga dia lebih open tentang segala hal yang berkaitan dengan bisnisnya ... dan hal-hal di luar bisnis. wakakakakaka...
  2. Akan lebih efektif apabila developer pernah menangani proyek pengembangan sistem yang sejenis dari klien-klien terdahulu sehingga dapat memberikan usulan model pengimplementasian sistem baru, di samping alasan bahwa developer telah memiliki template aplikasi sistem tersebut untuk dijadikan prototype sistem baru. Hal ini akan berimplikasi kepada kemudahan dalam konstruksi sistem karena dikembangkan berdasarkan template yang sudah ada. Template bukan cuman mempermudah developer dalam mbikin aplikasi, tapi bs juga mempermudah developer dalam MENYAMPAIKAN IDE mereka. Udah jadi rahasia, faktor x yang bikin para programmer punya masalah social-disorder klo bicara ama orang awam adalah karena programmer biasanya ngomong dalam bahasa technical... Mereka biasa berbicara dengan karya. Nah, klo dah ada template (atau prototype) - njelasin ke client bakal lebih terasa mudah. "Gini lo pak yang kami maksutkan itu.. jadi aplikasi yg kami tawarkan itu bisanya seperti ini-itu-inu-iti....". Dengan mekanisme template atau prototyping, pekerjaan mendevelop akan lebih ringan banget, karena bisa jadi pengembangan aplikasi cukup dilakukan hanya dengan melakukan code refactoring. Atau, kalo emang "kebetulan" template yg didemokan emang udah cocok, yaa... tinggal ganti caption, beres deh.. hehehe...
  3. Extreme programming menuntut komunikasi antar developer dan user secara intensif dan komunikasi internal antar developer secara komprehensif, sehingga akan lebih representatif apabila tahap pengembangan sistem dilakukan di lokal yang mendukung proses komunikasi tersebut, misalnya bekerja di kantor perusahaan pemesan sistem. Untuk antar sesama tim developer itu sendiri, sudah menjadi keharusan dalam XP bahwa proses konstruksi sistem akan dilakukan secara bersama-sama di tempat yang sama, karena hampir semua kegiatan development dalam konstruksi dikerjakan secara paralel dan pipelining. Dalam agile manifesto (http://www.agilemanifesto.org) disebutkan, komunikasi jauh lebih efektif daripada dokumentasi yang bertele-tele. Bener tuh.. sekarang nostalgia aja... siapa yang pernah bikin DFD.. coba serahin DFD yg pernah sampeyan bikin ke teman programmer sampeyan trus suruh temen sampeyan tsb utk bikinin aplikasi berdasarkan desain dalam DFD itu. ... kemungkinan besar teman programmer sampeyan bakal nolak karna bingung ...
Ya, XP itu akan semakin matang jika developer selalu belajar dari pengalaman-pengalaman pengembangan sistem yang pernah dilakukannya dulu... Anda seorang developer yang (masih ) tanpa pengalaman? Tidak usah berkecil hati. Siapa bilang anda tanpa pengalaman? Pengalaman developing itu bukan mesti harus dalam wujud *berapa kali saya ngerjain proyek software development* - tapi bisa juga dalam wujud pembelajaran, pengalaman orang lain, sharing cerita, dll. Bahkan pengalaman ndevelop software non-profit (misal : tugas kuliah, tugas temen-temen, ato tugas pemrograman utk calon pacar tercinta...-hehehe-) - itu juga merupakan PENGALAMAN BERHARGA. Pengalaman keberhasilan, pengalaman kegagalan, pengalaman dipuji, maupun pengalaman dicaci-maki - itu juga pelajaran berharga bagi kita...

Extreme Programming menuntut kematangan mental developer. Dan mental itu bukanlah sesuatu yang bisa kita pelajari hanya dengan membaca. Musti kita lakukan!