Wohoo, hari ini penasaran udah berapa baris kode sih aku tulis:
Oh ya, tool Line Counter buatan mas Rich Newman ini bisa di-download disini.
11,839 nggak semuanya hasil ngetik sendiri, karena 7,011 diantaranya generated :) , walhasil baris yg diketik (termasuk blank lines) = 11,839-7,011 = 4,828 baris kode... hmm angkanya menarik:
- 4 adalah jumlah gang Armanovus,
- 8 adalah "wealth / kemakmuran" dalam bahasa Tionghoa,
- 2 saya anggap multiplier (*maksa),
- dan 8 kemakmuran lagi.
Jadi 4,828 = dengan 4 gang Armanovus, akan ada proyek yg bikin makmur. Kemudian setelahnya, akan muncul proyek yg bikin 2x lebih makmur...
*halah, mimpi dan maksa :) boleh donk mumpung lagi bulan Ramadhan, dimana waktu yg bagus untuk berdo'a dan berharap...
btw, proyek yg ini under ZeddyLabs, jadi masih single-coder...
---
Menjadi UI Programmer harus tahu Win32
Well, lihat gambar di bawah ini. Kadang kita perlu meniru look-n-feel dari yg sesuatu yg standar, misalkan memunculkan daftar folder dan files a-la Windows Explorer. Dengan menggunakan TreeView dan ListView ternyata tidak cukup, harus main-main dengan Win32 juga.
---
Menjadi UI Programmer harus tahu STA
Dari aplikasi diatas, memang kelihatan aplikasi ini mirip program Multi-Threading Downloader / Uploader semacam Internet Download Manager,
- ketika file masuk Queue, progress bar-nya berwarna kuning dan status-nya "Queued"
- ketika mulai download/upload, progress-bar-nya berwarna kelap-kelip dan status-nya "Downloading/Uploading"
- ketika selesai, progress bar-nya berwarna hijau dan status-nya "Finished".
- ketika terjadi error, progress-bar-nya berwarna merah dan status-nya "Error".
Sehingga yang tahu kapan harus meng-update UI adalah download/upload thread. Nah, kalo pertama kali coding, mungkin bingung dengan error "Cross-thread operation not valid: XXX accessed from a thread other than the thread it was created on."
Intinya aplikasi Winforms (dan juga aplikasi WPF) masih bersifat Single-Threaded Apartment, jadi hanya thread yg bikin UI-lah yg berhak memanggil semua method untuk mengubah tampilan. Kalo ga percaya, baca blog Om Greg dari tim WPF ini deh.
Jadi coding-nya harus begini deh:
#region IFormTransfer Members
private delegate void ITransferInfoHandler(ITransferInfo transfer);
public void Add(ITransferInfo transferInfo)
{
if (!InvokeRequired)
{
listviewTransferHelper.Add(transferInfo);
return;
}
Invoke(new ITransferInfoHandler(Add), transferInfo);
}
public void Update(ITransferInfo transferInfo)
{
if (!InvokeRequired)
{
listviewTransferHelper.Update(transferInfo);
return;
}
Invoke(new ITransferInfoHandler(Update), transferInfo);
}
Kalo di WPF, harus pake Dispatcher.BeginInvoke:
#region IFormTransfer Members
public void Add(ITransferInfo transferInfo)
{
Dispatcher.BeginInvoke(DispatcherPriority.Background,
(SendOrPostCallback) delegate
{
listviewTransferHelper.Add(transferInfo);
}
, null);
}
Ah, hari ini istirahat coding dulu... ada yg lebih penting, yaitu bikin dokumen project management: kapan harus selesai feature X, Y, Z, etc...