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
Fungsi-Fungsi VB/VBA/VBScript

Date/Time Functions

FUNCTION

DESCRIPTION

CDate

Converts a valid date and time expression to the variant of subtype Date

Date

Returns the current system date

DateAdd

Returns a date to which a specified time interval has been added

DateDiff

Returns the number of intervals between two dates

DatePart

Returns the specified part of a given date

DateSerial

Returns the date for a specified year, month, and day

DateValue

Returns a date

Day

Returns a number that represents the day of the month (between 1 and 31, inclusive)

FormatDateTime

Returns an expression formatted as a date or time

Hour

Returns a number that represents the hour of the day (between 0 and 23, inclusive)

IsDate

Returns a Boolean value that indicates if the evaluated expression can be converted to a date

Minute

Returns a number that represents the minute of the hour (between 0 and 59, inclusive)

Month

Returns a number that represents the month of the year (between 1 and 12, inclusive)

MonthName

Returns the name of a specified month

Now

Returns the current system date and time

Second

Returns a number that represents the second of the minute (between 0 and 59, inclusive)

Time

Returns the current system time

Timer

Returns the number of seconds since 12:00 AM

TimeSerial

Returns the time for a specific hour, minute, and second

TimeValue

Returns a time

Weekday

Returns a number that represents the day of the week (between 1 and 7, inclusive)

WeekdayName

Returns the weekday name of a specified day of the week

Year

Returns a number that represents the year

Conversion Functions


FUNCTION

DESCRIPTION

Asc

Converts the first letter in a string to ANSI code

CBool

Converts an expression to a variant of subtype Boolean

CByte

Converts an expression to a variant of subtype Byte

CCur

Converts an expression to a variant of subtype Currency

CDate

Converts a valid date and time expression to the variant of subtype Date

CDbl

Converts an expression to a variant of subtype Double

Chr

Converts the specified ANSI code to a character

CInt

Converts an expression to a variant of subtype Integer

CLng

Converts an expression to a variant of subtype Long

CSng

Converts an expression to a variant of subtype Single

CStr

Converts an expression to a variant of subtype String

Hex

Returns the hexadecimal value of a specified number

Oct

Returns the octal value of a specified number

Format Functions


FUNCTION

DESCRIPTION

FormatCurrency

Returns an expression formatted as a currency value

FormatDateTime

Returns an expression formatted as a date or time

FormatNumber

Returns an expression formatted as a number

FormatPercent

Returns an expression formatted as a percentage

Math Functions


FUNCTION

DESCRIPTION

Abs

Returns the absolute value of a specified number

Atn

Returns the arctangent of a specified number

Cos

Returns the cosine of a specified number (angle)

Exp

Returns e raised to a power

Hex

Returns the hexadecimal value of a specified number

Int

Returns the integer part of a specified number

Fix

Returns the integer part of a specified number

Log

Returns the natural logarithm of a specified number

Oct

Returns the octal value of a specified number

Rnd

Returns a random number less than 1 but greater or equal to 0

Sgn

Returns an integer that indicates the sign of a specified number

Sin

Returns the sine of a specified number (angle)

Sqr

Returns the square root of a specified number

Tan

Returns the tangent of a specified number (angle)

Array Functions


FUNCTION

DESCRIPTION

Array

Returns a variant containing an array

Filter

Returns a zero-based array that contains a subset of a string array based on a filter criteria

IsArray

Returns a Boolean value that indicates whether a specified variable is an array

Join

Returns a string that consists of a number of substrings in an array

LBound

Returns the smallest subscript for the indicated dimension of an array

Split

Returns a zero-based, one-dimensional array that contains a specified number of substrings

UBound

Returns the largest subscript for the indicated dimension of an array

String Functions


FUNCTION

DESCRIPTION

InStr

Returns the position of the first occurrence of one string within another. The search begins at the first character of the string

InStrRev

Returns the position of the first occurrence of one string within another. The search begins at the last character of the string

LCase

Converts a specified string to lowercase

Left

Returns a specified number of characters from the left side of a string

Len

Returns the number of characters in a string

LTrim

Removes spaces on the left side of a string

RTrim

Removes spaces on the right side of a string

Trim

Removes spaces on both the left and the right side of a string

Mid

Returns a specified number of characters from a string

Replace

Replaces a specified part of a string with another string a specified number of times

Right

Returns a specified number of characters from the right side of a string

Space

Returns a string that consists of a specified number of spaces

StrComp

Compares two strings and returns a value that represents the result of the comparison

String

Returns a string that contains a repeating character of a specified length

StrReverse

Reverses a string

UCase

Converts a specified string to uppercase

Other Functions


FUNCTION

DESCRIPTION

CreateObject

Creates an object of a specified type

Eval

Evaluates an expression and returns the result

GetLocale

Returns the current locale ID

GetObject

Returns a reference to an automation object from a file

GetRef

Allows you to connect a VBScript procedure to a DHTML event on your pages

InputBox

Displays a dialog box, where the user can write some input and/or click on a button, and returns the contents

IsEmpty

Returns a Boolean value that indicates whether a specified variable has been initialized or not

IsNull

Returns a Boolean value that indicates whether a specified expression contains no valid data (Null)

IsNumeric

Returns a Boolean value that indicates whether a specified expression can be evaluated as a number

IsObject

Returns a Boolean value that indicates whether the specified expression is an automation object

LoadPicture

Returns a picture object. Available only on 32-bit platforms

MsgBox

Displays a message box, waits for the user to click a button, and returns a value that indicates which button the user clicked

RGB

Returns a number that represents an RGB color value

Round

Rounds a number

ScriptEngine

Returns the scripting language in use

ScriptEngineBuildVersion

Returns the build version number of the scripting engine in use

ScriptEngineMajorVersion

Returns the major version number of the scripting engine in use

ScriptEngineMinorVersion

Returns the minor version number of the scripting engine in use

SetLocale

Sets the locale ID and returns the previous locale ID

TypeName

Returns the subtype of a specified variable

VarType

Returns a value that indicates the subtype of a specified variable

List function ini dicomot dari sini nieh

3
Beberapa Cara Validasi Input Numerik

Bagi ente-ente pade programmer VB mungkin udah sering makae/bikin suatu routine untuk validasi input numerik pada textbox. Maksutnya biasanya ya supaya user cuman bisa ngetikin angka di textbox. Pendekatan2 yang dipake macem2, dan di sini ogut akan mencoba membahasnya. ^_^ hehehe, ga mutu bangedd nih postingan (habis, pengen nulis blog tp ngga da bahan siih...)

PERTAMA
ada yang "cukup" makae function bawaan VB, isnumeric(). Biasanya ditaroh di event lostfocus() atau di event validate(). contoh codingnya mungkin begini :

Private Sub Entri_LostFocus(Index As Integer)
If IsNumeric(Entri(Index).Text) = False Then
MsgBox "Sori, input cuman boleh angka doank!", _
vbCritical, "Pesan"
Entri(Index).SetFocus
End If
End Sub


cara ini punya ciri : pencegahan inputan selain angka dilakukan *setelah* user mengisikan nilai textbox (ngetikin textboxnya).. dan untuk proses validasinya, perlu dilakukan 2 kali : sekali di event lostfocus/validate, dan *musti* di cek sekali lagi pas event tombol simpan di klik (misalnya). Klo ngga gtu, masih ada peluang untuk kelolosan tuh...

KEDUA
ada juga yang nyoba nge-trap inputan pada event textbox_keypress()
caranya dengan cuman mengijinkan karakter dengan kode ascii tertentu yang bisa diketikin di dalam tu textbox. contoh codingnya seperti ini :

Private Sub Entri_KeyPress(Index As Integer, _
KeyAscii As Integer)
If Not ((KeyAscii >= Asc("0") And _
KeyAscii <= Asc("9") Or _
KeyAscii = vbKeyBack)) Then
Beep KeyAscii = 0
End If
End Sub


cara ini cukup shiepp.. apalagi bisa dimodifikasi dengan nambahin list-exclusion karakter yang boleh diijinin utk diketik di dalam textbox (misal : tanda koma ato tanda titik)


KETIGA
Ada lagi cara laen yang memanfaatkan API, dimana *secara paksa* textbox akan di-inisialisasi-kan hanya bisa nerima input angka thox. Kebutuhan dasar pemanggilan API Calls-nya seperti ini (udah kubuatkan function nya sekalian jadi tinggal make' doank)
'-- di module :
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = (-16)

Public Function SetNumerik(NamaControl As Control, _
Optional Flag As Boolean = True) As Long
Dim curstyle As Long
curstyle = GetWindowLong(NamaControl.hWnd, GWL_STYLE)
If Flag Then
curstyle = curstyle Or ES_NUMBER
Else
curstyle = curstyle And (Not ES_NUMBER)
End If
SetNumerik = SetWindowLong(NamaControl.hWnd, _
GWL_STYLE, curstyle)
NamaControl.Refresh
End Function


'-- contoh pemanggilan di form, cukup di FORM_LOAD doank.. :

Public Sub Form_Load()
SetNumerik entri(0)
SetNumerik Entri(1)
End Sub


Cara ini, tampaknya keren dan mudah. Emang sih! Tapi tetep ada aja konsekuensinya... textbox (ato combo, maskedit juga bisa) akan *bener2* cuman bisa nerima inputan angka. Ngga bs custom, ngijinin titik ato koma utk nulis pemisah desimalnya.

Dalam beberapa kasus, aku lebih seneng pake teknik KEDUA. Tapi dalam *banyak kasus*, bagiku pendekatan API yang kucontohin di teknik KETIGA itu cukup sering ku-implements dalam code ku...

3
Sekilas Business Intelligence

Rekan-rekan,

Asyik juga nih diskusi tentang BI dengan Pro dan Kontra-nya. Pertama
biar nggak salah tangkep dulu. Saya benar-bener gelandangan bebas
dalam artian kerja untuk diri sendiri. Nggak punya kepentingan
mewakili vendor A, pro consulting company B, mewakili perusahaan C
dsb. Saya hanya punya ketertarikan dengan BI ini - nggak punya tujuan
untuk penetrate satu product tertentu.

Saya tertarik karena dari sejak 20 tahun lalu saya mulai menulis code
program saya yang pertama, tujuannya adalah provide information. Baik
untuk melakukan transaksi atau membuat keputusan. Dan konsep BI ini
menurut saya seolah merupakan bagian hilir dari itu semua. Sekarang
saya sedang tertarik mencoba BI Open Source - kalau ada rekan-rekan
yang tertarik, mari kita sama-sama mencoba, hasilnya bisa disebarkan
lewat Pak Syarwani. Kita buat BI for everyone - free lagi, productnya
nggak kalah jauh sama vendor-vendor besar.

Istilah BI sendiri entah itu dari vendor atau dari dunia pendidikan
saya tidak terlalu peduli. Mengapa? Karena istilah tersebut bagi saya
cukup mudah dan merangkum semua jargon-jargon yang menurut saya malah
membingungkan: ada Knowledge and Data Engineering, Decision Support
System, Executive Information System, Performance Scorecard, ETL,
Data Warehousing, Data Mining, dsb.

Sebelas tahun yang lalu saya pertama kali menggunakan Business Object
untuk keperluan Reporting dari satu ERP - saya hanya kenal namanya
report writer, bukan BI - walaupun canggih juga bisa pivoting kesana-
kemari. Istilah kerennya Multidimensional Analysis. Waktu itu saya
nggak pernah tahu istilah BI. Kurang gaul kah?

Setelah jalan beberapa tahun istilah BI makin populer. Saya coba
melihat apa itu BI, pengamatan saya solusi BI secara mudahnya
memiliki building block sebagai berikut:

1. Data Structure - data structure BI biasanya menganut Star Schema.
Dimana satu object data (FACT) bisa dipandang dari berbagai sudut
pandang (DIMENSION). Mis; Transaksi PO dilihat dari dimensi Product,
Vendor, dan Customer. Betul kata Pak Irsal - pivot excel. Kalau
design data kita nggak bisa dibuat pivot excel dengan mudah berati
design Star Schema kita pasti salah. Data structure ini cara
penyimpanannya berkembang, tujuannya satu - supaya retrieve datanya
cepat - maka keluarlah metoda penyimpanan dengan menggunakan Cube
(kalau pakai RDBMS biasa yah semacam summary table. Methoda ini bisa
dikenal dengan OLAP - ada Relational OLAP (ROLAP), Multidimensional
OLAP (MOLAP) atau Hybrid OLAP (HOLAP). Anda bisa cari di internet
konsepnya.

2. ETL - Extract Transfor Loading. Karena BI bisanya memadukan
informasi dari berbagai sumber informasi maka dibutuhkan satu engine
yang dapat menarik data dari sumbernya, merubah formatnya supaya
seragam (data tanggal harus sama, kode Customer harus sama dsb), lalu
dimasukkan ke dalam struktur data yang kita siapkan tadi sudah. Dari
jaman jebot kita sudah bisa melakukan ini. Misalnya: di Oracle pakai
aja PL/SQL, buat procedure lalu kita schedulekan jobnya. Iya kalau
sumber datanya satu, kalau banyak? Gimana dengan lintas platform -
data source di Unix data warehouse di Windows? - gimana kita ngontrol
sequence-nya, gimana kita tahu ada sequence yang fail, gimana kita
bisa restart dengan mudah? Biasanya solusi BI meng-cover ETL tool
ini. Ada juga beberapa vendor yang fokus produce ETL tool seperti
sunopsis misalnya.

3. Reporting Tool - Setelah data masuk paling gampang kita keluarkan
menjadi report. Entah itu report tabular atau charting. Yang ini juga
dari jaman jebot juga udah pada pakai. Ujung-ujungnya report.

4. Multidimensional Analysis (OLAP Analysis) - Memanfaatkan design
data yang ada di nomor 1 tadi dengan memberikan kemampuan kepada user
untuk melakukan analysis multidmensi. Seperti melakukan pivot table
dan pivot charting di excel mungkin penjelasan secara mudahnya.
Diatambah dengan statistik dan kemampuan untuk melakukan forecast
dengan memasukkan parameter-parameter tertentu vendor biasa
menyebutnya dengan data mining.

5. Drill Down dan Drill Through. Point 3 dan 4 tadi harus
memungkinkan user untuk melakukan drill down - membreakdown informasi
pada level yang lebih detail - misalnya dari summary pembelian
customer sampai product yang dibelingnya. Dan drill through - dari
data product tadi kita bisa click untuk mendapatkan trend dari setiap
product.

6. Dashboarding - Menampilkan informasi-informasi dalam bentuk
summary data. Biasanya populer dalam bentuk Chart yang dimana dengan
sekali melihat kita bisa tahu apa yang terjadi dengan business kita
dan bagaimana follow upnya.

7. Personalization - 3, 4, 5, 6 diatas akan percuma bila kita tidak
dapat melakukan personalisasi data. Kita akan kebanyakan informasi
yang mungkin tidak kita butuhkan. Kita seharusnya bisa memilih report
yang saya butuhkan a,b,c,d. Dashboard saya berisi informasi x,y,z.
Data-data yang tampil pada layar kita hanya data-data yang relevan
dengan pekerjaan dan tanggung jawab kita.

8. Alerting and Collaboration. Sistem BI kita hendaknya dapat
mengingatkan kita bila ada performance yang membutuhkan perhatian
kita. Kita dapat memasukkan action plan - menunjuk Person In Charge -
dan memonitor apakah action plan tersebut sudah terlaksana atau
belum. Hal tersebut dilakukan dengan memanfaatkan e-mail, mobile
devices, dsb.

Apa lagi ya?? - Hal diatas mungkin merupakan standard BI. Diatasnya
masih dapat kita tempatkan aplikasi-aplikasi untuk mengelola strategy
seperti Balanced Scorecard/Corporate Performance Management. Ada yang
membuat productnya tersambung dengan BI seperti SAP SEM (Strategic
Enterprise Management), Oracle Balance Scorecard. Atau yang specific
dibuat untuk kebutuhan tsb seperti QPR dan PBView/Performance View.
Rekan-rekan ada yang tahu versi Open Source dari ini? Ini satu-
satunya part di Opensource BI yang saya belum dapatkan.

Menurut saya bila item-item diatas sudah terimplementasi baru kita
bilang saya sudah mengimplementasikan BI. Saya pernah melihat
beberapa company yang bilang sudah implementasi BI - yang ada hanya
OLAP Analysis Tool atau Reporting Tool saja. Ada juga vendor yang
bilang software saya sudah ada BI-nya, yang isinya cuma Report dan
Charting tool saja.

BI bagi saya sangat menarik karena menggabungkan pemahaman business
dengan database management. Di depan masih ada penggabungan BI dengan
Artificial Intelligent, Fuzzy Logic, Neural Network, dsb. Resultnya
bisa seperti Plant Intelligence System.

Satu yang masih harus saya jelaskan/diskusikan - mungkin. Saya masih
beranggapan bahwa implementasi BI ini tidak harus menunggu ERP
perfect. Saya akan coba tuliskan business case kecil, nanti kalau ada
waktu untuk hal ini. Mungkin di Industri saya yang Non Manufacturing,
dimana Value Chain-nya sangat sedikit terkait dengan ERP, hal diatas
relevan.

Pada Oil & Gas, Mining, dan Utilities ERP biasanya tidak mengcover
proses planning dan production. ERP hanya mengcover support
activities seperti Maintenance, Sparepart Inventory/Procurement, HR
dan Finance. Value Chain yang menjadi jantung produksi biasanya
dikelola dengan software-software yang spesifik untuk kebutuhan
planning dan production. BI akan mengambil data-data dari software-
software ini. Dalam banyak kasus biasanya terjadi dikotomi disini
Software-software plant dikelola oleh Plant Operation sedang kan
software business dikelola oleh MIS. Padahal informasi-nya bila
digabungkan akan menjadi sangat berguna.

Anyway - jargon ERP bahwa semua harus terintegrasi dalam satu
software package dalam beberapa tahun ke depan juga mungkin tidak
relevan lagi. Konsep Service Oriented Architecture (SOA)/Enterprise
Application Integration akan mempermudah kita menggabungkan informasi
dari berbagai software - semua akan menganut Open Architecture.
Setiap software akan menyediakan service dimana menurut kita software
tersebut terbaik dalam penyediaan service tersebut. Bisa saja terjadi
konfigurasi Maintenance pakai Maximo, FI/CO pakai SAP, purchasing
pakai Commerce One (?? Lupa namanya), CRM pakai Siebel, BI pakai
Business Objects - di dalam satu perusahaan. Pokoknya Campursari-lah
he..he..he..

Kalau sekarang kelihatannya makin susah tapi kalau melihat
Netweaver, Oracle Fusion, dan engine-engine integrasi seperti MS
Biztalk dan Web Method hal tersebut tidak akan jauh lagi.

Sorry kepanjangan - masih banyak lagi sebenarnya topik-topik BI yang
menarik untuk dijadikan bahan diskusi.

Salam,
Helly Purwanto

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dicomot dari : milis komputer-teknologi@yahoogroups.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0
Pengembangan Sistem Berbasis Komponen

Salah satu hal yang menjadi tanggung jawab seorang software-arsitek adalah ketika merencanakan arsitektur software yang akan dikonstruksi. Dalam perencanaan pengembangan sistem (ini beda dengan perencanaan arsitektur) dan analisis requirements, SA udah banyak mengakuisisi banyak fakta yang bisa dijadikan bahan utk merancang arsitektur. Selayaknya arsitek bangunan yang survey lahan, lokasi, tanah, dan permintaan - seorang software arsitek juga mempelajari semua kondisi riil di lapangan, keperluan-keperluan nya, de-el-el - lalu mulailah dia merencanakan arsitektur software.

Nah, tantangan yang pertama SA hadapi dalam perencanaan arsitekturnya umumnya gini : gimana memilah-milah mana requirements yang merupakan KEBUTUHAN user dan mana yang *sebenarnya* hanya KEINGINAN user... - kadang klo kita nanya2 ke (calon) user tentang aplikasi *yang akan* dikembangkan ini kebutuhan dasarnya apa, yang dijawab sama dia justru *keinginan-keinginannya*. Dan kadang, pas sesi interview, saking semangatnya si (calon) user tersebut ceritain *imajinasinya*, ngga 100% kebutuhan dia akan sistem tersampaikan dari dia...

Kebutuhan dan keinginan itulah yang nantinya akan mempengaruhi kerangka perencanaan arsitektur sistem. Jika semua keinginan user *akhirnya* di-implementasikan semua, ada kemungkinan fungsionalitas sistem tidak akan optimal, walo bukan berarti tidak mungkin optimal. Bisa saja sih optimal...

Tapi, sebaiknya kita memperhatikan konsepsi-konsepsi dasar orientasi pengembangan aplikasi perangkat lunak (software), yaitu aplikasi sistem yang akan dibuat sebaiknya FOKUS ke fungsi utamanya. Sekarang coba liat gini : kenapa aplikasi MS Word ngga bisa nyetel musik? Tanya kenapa? Karena fungsi MS Word emang difokuskan untuk text editor...

Sama saja dengan aplikasi yang akan dikembangkan... Misal, pengembangan sistem informasi perpustakaan (...contoh...), ada fasilitas pendaftaran anggota plus cetak kartu. Aplikasi menyediakan kemampuan utk menyimpan foto anggota perpus... Trus pas implementasi, salah satu petugas perpus (end-user nih) request gini : "Mas, ngga bisa kah dibuat supaya habis njepret muka anggota baru lewat camdig, tu foto langsung masuk ke form pendaftaran jd ngga perlu lagi nge-browse-nge-browse gambar, etc-etc..."

Kadang mereka (end-user) suka mendramatisir arti kata otomatisasi. Mungkin (bisa jadi) ini dikarenakan staf marketing kita pas presentasi dan penawaran (pra-produksi) yang mengobral kata-kata otomatisasi itu. "Oh pak, ntar laporannya secara otomatis akan dibuatkan oleh aplikasi." ato "O nanti bapak ngga perlu lagi nyatet2 judul buku yg dipinjem etc-etc, itu secara OTOMATIS udah dicarikan sama program aplikasi pak..." ato "penghitungan denda juga ngga perlu repot2 lagi pak, udah otomatis ditangani ama aplikasi"... - dan akhirnya, tertanamlah di benak user bahwa *sakti* banget aplikasi yang mo dibeli kantor ku nieh... apa-apa os-tos-mas-tis brooo....

Nah, ketika imple, yang kena batunya kita selaku developer aplikasi. Pas bayangan tentang otomatisasi itu *dipertanyakan* sama user, koq step-by-step nya banyak yaa, musti buka ACDSee utk acquire dari camdig, trus di cropping biar pas ukurannya pake ACDSee Photo Editor, trus di save as, baru dari aplikasi di browse foto yang udah dicropping itu n baru bisa masuk deh ke database... - ngga salah user mempertanyakan *dimana letak* otomatisasinya itu...

Oke, cukup sampe di sini kita ngerasanin petugas perpus itu... dia ngga dosa apa2 ^_^ Sekarang kita kembali ke perspektif Software-Arsitek.

Seandainya mau berakit-rakit ke hulu (minus bersenang-senang selalu), membuat SEMUA keinginan user itu bukanlah hal yang tidak mungkin. Bisa koq! Kalopun belum nemu, bisa dicari koq... Mau acquire langsung dr camdig, bisa. Mo langsung cropping setelah acquire, bisa! Tapi, kalo programmer-programmer (baca : tukang bangunannya sang software-arsitek) itu disuruh mbikin fasilitas itu, kapan mengkonstruksi aspek-aspek fungsional dari aplikasinya?

Makanya itu, software arsitek yang baik dan budiman seharusnya :
  1. mempunyai/membentuk satu tim sendiri yang khusus bertindak sebagai Riset & Development. kerjaannya, suruh tim itu utk bikin gadget (istilah dari google utk menyebut fasilitas-fasilitas kecil yang bisa di-embedd seketika ke aplikasi). fokusnya bukan ke fungsional,tapi ke arah mendukung operasional.
  2. berhati-hati dalam mengabulkan permintaan (calon) user dalam perancangan arsitekturnya... kenali kebutuhannya, identifikasi keinginannya. Trus susun prioritas, ngga semua yang kita inginkan harus kita dapatkan, bukan?
  3. merencanakan arsitektur aplikasi yang akan didesain dengan perspektif pengembangan berbasis komponen... Maksutnya, pisah-pisahkanlah aspek2 fungsional dari keseluruhan sistem, dan kembangkanlah masing-masing secara independen namun tetap mengacu pada grand-design yang udah direncanakan... hal ini suatu saat akan membantu dalam fase konstruksi. Contohnya gini deh (ngga sreg rasanya klo ngga ngasih contoh) : kita ambil kasus sistem informasi perpustakaan lagi (lagi-lagi perpus...) hehehe... - kalo pengembangan udah dipartisi berbasis komponen, ada yang ndevelop aspek registrasi anggota perpus, ada yang ndevelop aspek manajemen buku, ada yang ndevelop transaksi peminjaman/pengembalian. Anggaplah cuman itu! Trus, kalo udah dipisah-pisahin gitu, misal ada kesalahan (error/bug/ato apa lah istilahnya) di aspek transaksi, yaa perbaikilah transaksi nya doank. Itu fungsi standar dari pengembangan berbasis komponen. Standar banget malahan. Utk mempermudah maintenance. Mempermudah refactoring... Standar. Trus yang lainnya apa? MISAL, suatu saat tim developer kita dihadapkan kasus (proyek) harus mbikin aplikasi klinik (misalnya), kita bisa *comot* kan komponen "registrasi anggota perpus" itu utk di-embedd dalam sistem informasi klinik (hehehe..., skrg udah bukan perpus lagi). tinggal sesuaikan dikit atributnya, yang dari anggota perpus menjadi pasien... konsepnya sama! Bahkan mungkin form nya juga sama! Dan ngga cuman itu aja, komponen2 yang *tadi* udah dirancang secara independen itu terus dipelihara sama kita, di-enhance dikit demi dikit, disempurnain, de-el-el... yang suatu saat komponen itu bener2 sampe ke state *MATANG* dan bisa dijadikan template untuk membangun fungsionalitas aplikasi yang serupa... Template itu bisa dijadikan investasi di hari tua, mungkin 5 tahun ke depan, ketika perusahaan software ini udah kaya template, utk bikin aplikasi2 tertentu tinggal main copy-paste, comot-sana-comot-sini.... BERMANFAAT BANGET, KAN? kalo udah main comot-comot, kita bisa menggeser fokus untuk menjawab aspek-aspek pendukung operasional yang sebelumnya kita anggap itu keinginan user. Hasilnya? kita kerja enak, ringan. User juga puas...
Tapi untuk mengimplementasikan itu ngga semudah seperti menuliskannya di blog ini... Kadang software developer juga selalu dikejar2 pemenuhan requirement fungsional, karena harè-gènè mana ada proses bisnis yang simpel... Aspek transaksional makin padat, pihak manajerial juga makin gencar meminta tools yang bisa membantu mereka mengambil keputusan, pihak stakeholder juga makin sering menuntut kebutuhan informasi yang cepet, akurat, dan reliabel. Pengembangan sistem berbasis komponen itu merupakan salah satu trik kita untuk menjawab semua keperluan-keperluan itu... - karena yang nuntut cepet bukan cuman END USER, tapi rentetan kerjaan laen, proyek2 laen, juga menuntut kita selaku software developer harus bisa bekerja CEPAT.

Kenapa ya adegan slow motion cuman ada di tivi?