0830

Posted by Ikhwan on August 30, 2007

Today, on 2007-08-30, I came to work at 8.30 AM (0830 hours). I arrived a tad early actually, but deliberately waited until that minute — that comes once a year — to clock-in.

0830

The time card reads — Date: 0830, Scheduled Start: 0830, Actual Start: 0830.

I felt a tingling excitement when I managed to get nice numbers on my time card. Eg. clock-in at 0808, clock-out at 2222, time same as date, etc ;)

Convert.ToInt32, int.Parse, dan int.TryParse dalam .NET

Posted by Ikhwan on August 28, 2007

Dulu, kalau nak tukarkan string ke integer, aku akan gunakan Convert.ToInt32(). Operasi macam ni memang banyak dilakukan, contohnya seperti semasa nak proses input dari form dan sebagainya. Oleh sebab selalunya input ni adalah dari TextBox, yang boleh mengandungi apa-apa character, maka kita kena pastikan bahawa string yang dimasukkan oleh user adalah betul-betul boleh di-Convert ke integer.

Aku akan gunakan try..catch

int age = 0;
try
{
    age = Convert.ToInt32(txtAge.Text);
}
catch
{
    //R.I.P
}

if (age != 0)
    person.Age = age;
else
    MessageBox.Show("Invalid age!");

Operasi convert kat sini akan raise exception bila string yang dimasukkan tu gagal ditukar menjadi integer. Dalam catch kita tak buat apa-apa, cuma biarkan age dgn nilai asalnya.

Kemudian aku jumpa int.Parse(). Selain lebih pendek dan mudah ditaip, bezanya dgn Convert.ToInt32() ialah ia tidak akan raise NullArgumentException bila null string dimasukkan. Tapi cara aku validate sama ada ia boleh ditukar pada integer tu masih sama, gunakan try..catch jugak.

Using try..catch is expensive, dan hanya sepatutnya hanya digunakan utk betul-betul handle exception. Bukan seperti yang aku buat tu, utk validate input. Aku memang rasa tak sedap hati buat macam tu. Sehinggalah satu hari aku tersedar akan kewujudan int.TryParse(). Ia lebih ringkas dan mudah digunakan. Perhatikan,

int age = 0;
if (int.TryParse(txtAge.Text, out age))
    person.Age = age;
else
    MessageBox.Show("Invalid age!");

TryParse akan cuba tukarkan string ke integer. Jika tak berjaya dia akan return false. Jika berjaya, dia akan return true dan pada masa yang sama akan umpukkan nilai yang ditukarkan tadi kepada method argument yang kedua (iaitu age), yang ditandakan dgn keyword out.

Selalunya, aku tak berapa gemar utk gunakan keyword out ni, sebab IMO, one method should return one thing and one thing only. Kalau satu method pulangkan dua benda sekaligus, method ni akan kurang cohesive. Tapi tak apalah, untuk kes ni, kita tutup sebelah mata je lah ye ;)

Postscript
- Aku suka letak //R.I.P dalam catch yang tak buat apa-apa. Sebab catch mesti sentiasa handle exception yang di-raised. Jadi comment tu supaya aku nampak dan berhati-hati.
- int adalah shorthand utk Int32. Jadi int.TryParse() dan Int32.TryParse() adalah sama.
- TryParse juga wujud utk type lain seperti decimal.

Chaos And Destruction

Posted by Ikhwan on August 22, 2007

Dah lama aku tak write entry, sebab sibuk. Aku tahu memang cliche, ini memang standard reason kalau orang dah lama tak update blog, tapi sememangnya aku memang sibuk.

Sebabnya, project yang aku handle ni sudah mahu live! Version one-point-oh babeh!!! Pada yang biasa dengan software development, sudah tentu anda faham bahawa v1.0 ni juga bermaksud utter chaos… and destruction… and chaos… Grrrr…

The thing is, dah la application tu terkontang-kanting lagi, aku nak kasi lumat bugs yang besar-besar gajah sebelum live, aku jugak lah yang kena buat testing on the application, kena tulis test scripts, kena fikir pasal user manual lagi. Tak kira kena masuk meeting itu ini lagi…

Melecet otak aku nak proses semua ni, siap kena ambik supplement lagi, kalau tak rasanya tak mampu badan aku menampung this kind of torture. Actually, aku boleh tahan lagi. Hahaha (gelak macho). Aku dah lalui a living hell (sort of) through my final semester, I think I can take on anything! Hahaha, cakap besar siyut. Ish, ish, ish. Tak elok tau adik-adik bersifat riak dan takbur ni. Mari kita berdoa agar Allah tak bebankan kita dgn tanggungjawab yang tak mampu kita pikul. Amin…

Sudah la tu, kita berhentilah bercerita tentang kehidupan aku yang penuh misery dan pahit-maung ni. Berita baiknya, application ni dah pun live minggu lepas! Lega aku. Walaupun ada bugs yang tercongok dari celah-celah production server ni, tapi ia masih lagi manageable. Nasib baik juga sebab tak release all out, cuma ke certain pilot sites je.

Dua tiga minggu ni aku nak cool down, dah burnt-out dah ni. Isnin-Selasa lepas aku ambik cuti tahun, nak relax sambil tidur sepuas jiwa raga. (Tapi tak dpt jugak, kepala runsing, pasal benda lain :)

Dah sibuk ni maka banyak la entry yang tak tertulis, msg yang tak ter-reply, kawan yang tak ter-contact, kenduri yang tak terpergi, bil yang tak terbayar, dan game yang tak termain. Harap maaf pada semua, iaitu pada pembaca blog ni, pada penulis-penulis msg tersebut, pada kawan-kawan, pada penganjur kenduri, kepada penyedia perkhidmatan komunikasi, utiliti, dan kad kredit, dan juga pada perisian game cetak rompak yang best itu (i.e CnC Tiberium Wars).

Tolonglah mengerti bahawa ini semua bukanlah disengajakan. Aku terpaksa. Aku cuma manusia biasa, ini semua semata-mata utk menjaga periuk nasi aku, dan secara tidak langsung juga utk mengkayakan diri aku dan keluarga, serta membesarkan lagi tembolok aku sendiri. Hahahaha. Hermmmm.

Install Subversion Sebagai Windows Service

Posted by Ikhwan on August 02, 2007

Beberapa hari yang lepas, development server kitorang sudah kaput. Hard disk mati dan terpaksa diformat. Dev server ni sebenarnya nama je dev server, tapi dlm team kecik yang ada kitorang kat sini (2 orang), masing-masing buat project masing-masing, central server for development tak pakai sangat. Yang paling penting yang guna kat situ pun cuma Subversion (SVN), bila machine ni mati, segala history project aku yang letak dalam SVN pun ikut terkubur.

Since aku dah malas nak install balik SVN kat situ, sebab aku sorang je pakai, rasanya elok aku setup je kat PC sendiri, dan (cuba) buat scheduled backup nanti (backup semua yang penting, bukan SVN Repository sahaja).

Install Subversion dan TortoiseSVN semua ok, tapi kalau nak best, kena run kan SVN sebagai server, baru cool. Option yang ada ialah runkan svnserve.exe yg datang sekali dgn default SVN installation. Masalahnya, walaupun runkan dia dgn flag “-d” iaitu sebagai daemon dalam Windows, command prompt yg kita buka utk run dia akan still tercongok. Kalau tutup, maka svnserve akan exit.

Option lain ialah menggunakan Apache dgn mod_dav_svn. Tapi memandangkan sekarang ni aku takde nak pakai Apache, jadi malas nak install.

Kalau dulu, ada orang buat satu wrapper dipanggil “svnservice” yang akan wrap svnserve dan jadikan dia Windows service. Sekarang bila aku cari benda tu dah takde dah. Rupa-rupanya, bermula Subversion 1.4, kita dah boleh run SVN sebagai service menggunakan flag “--service“, tapi dengan menggunakan khidmat Service Control Manager (SCM).

Gunakan SCM utk create service kita:

sc create "svnservice" binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r D:\Repository" displayname= "Subversion Service" depend= Tcpip start= auto

NOTE: binpath ialah command yang patutnya run bila service tu run, perhatikan ada “--service“. Ada space antara “=” dgn option detail.

Selepas itu, satu service akan dicreate, jadi kita boleh uruskan macam biasa. Boleh buat net start svnservice atau manage service tu melalui Administration Tools > Services.

Kenapa aku nak guna version control walaupun aku buat kerja seorang? Suka hati aku lah. Aku suka simpan version dan aku suka baca notes yang aku tulis masa aku commit.

Rujukan:
http://vivekvaid.blogspot.com/2006/09/finally-svnserve-as-native-windows_18.html
http://www.thecrumb.com/2006/10/24/svnservice-no-longer-needed-with-subversion-14/
http://svn.collab.net/repos/svn/trunk/notes/windows-service.txt