Sunday, February 22, 2009
Wednesday, August 09, 2006
Turbo Is Back
Tadi pagi saya diberi tahu kalo Borland akan menghidupkan kembali merek dagang Turbo sebagai kelompok development tools. Saya jadi ingat 17 tahun lalu saya pake Turbo Pascal 4 untuk belajar membuat program dan saya gunakan secara intensif selama beberapa tahun untuk keperluan tugas-tugas kuliah. Meskipun kemudian saya menggunakan Clipper dengan SideKick sebagai editornya tapi Turbo Pascal masih saya gunakan sesekali sampai saya ketemu VB, Foxpro for Windows dan akhirnya Delphi.
Ya, borland merencanakan untuk meluncurkan development tools dengan bahasa tunggal, dengan merk dagang Turbo, yaitu Turbo Delphi, Turbo Delphi for .NET, Turbo C++, serta Turbo C#.
Yang menarik adalah bahwa produk Turbo ini terdiri atas dua versi, yaitu Profesional dan Explorer. Trubo Profesional direncanakan dijual dengan harga 500 US$, sedangkan Turbo Eksplorer gratis. Pembatasan yang dilakukan Borland untuk Turbo Explorer adalah sifatnya yang fix, yaitu tidak bisa ditambahi komponen dari pihak ketiga dan tidak bisa untuk membuat komponen. Meskipun demikian, saya yakin bahwa komponen dari pihak ketiga dapat digunakan dengan koding (runtime creation).
Perkembangan menarik dari Borland DevCo.
Friday, June 16, 2006
Bench Games Result
Meskipun Bench Games sudah berakhir pada tanggal 31 Mei, tapi official result baru muncul pada tanggal 12 Juni Lalu. Seperti tahun lalu, saya berhasil memenangi Test Visio.
Bila tahun lalu Indonesia berada di posisi 13, sekarang turun 1 peringkat menjadi posisi 14. Tapi yang cukup menggembirakan adalah jumlah pemenang Test meningkat. Kalo tahun lalu ada 4 orang dari Indonesia yang memenangi 5 Test, sekarang ada 8 orang yang memenangi 11 Test. Selamat buat Aswin Kurniawidjaja, Ruslan Nuryadin, Satriyo Pamungkas, Aldrian Gintingsuka, Kwarta Rachmiliza, Ariadie Chandra, dan Anita Wijaya.
Wednesday, May 10, 2006
DBExpress Bug di Delphi 2006
Cerita dimulai ketika saya membantu seorang teman melakukan debugging untuk mencari penyebab tidak stabilnya aplikasi yang dibuat dengan Delphi 2006. Ketika aplikasi dijalankan sering muncul Error yang tidak diduga dan sulit direkonstruksi. Aplikasi menggunakan FireBird dengan DBExpress serta ClientDatset dan DatasetProvider.
Akhirnya ada sebuah error yang bisa direkonstruksi, yaitu :
Ketika menggunakan TSQLDataset dimana query menghasilkan record kosong dan sebuah field diakses dengan method FieldByName, muncul error Acces Violation. Error ini bisa ditangani dengan memeriksa apakah record yang dihasilkan kosong atau tidak. Tapi ternyata aplikasi masih tidak stabil.
Investigasi lebih jauh akhirnya diketemukan bahwa Ketika dilakukan ApplyUpdate dari ClientDatset yang sebelumnya masih kosong tetapi terjadi kegagalan karena database integrity, aplikasi menjadi crash. Setelah melakukan Investigasi lebih jauh ternyata diketahui bahwa mekanisme error reconciliation melakukan pemanggilan method FindField dari TSQLDataset. Ketika TSQLDataset yang digunakan masih kosong, pemanggilan method ini menimbulkan error access violation yang tidak tertangani dan menyebabkan aplikasi crash.
Ternyata akar permasalahannya sama, yaitu pemanggilan FindField (juga FieldByName) terhadap TSQLDataset yang query didalamnya menghasilkan recordset kosong. Error ini mudah sekali direkonstruksi dengan cara :
Buat sebuah TSQLDataset yang terkoneksi ke TSQLConnection.
Query dalam TSQLDataset dibuat agar menghasilkan recordset kosong
Saya menggunakan Employee.gdb dengan query select * from country where country = 'IND'
Kemudian buat kode untuk mengakses field dengan method FindField, seperti contoh gambar berikut ini.
Error terjadi pada baris vValue := vField.Value;
Tapi error ini tidak muncul di Delphi7. Tadinya saya mengira ada hubungannya dengan driver database yang digunakan. Tapi saya coba dengan MySQL juga muncul error, meskipun tidak menyebabkan crash. Error yang muncul ketika saya gunakan MySQL adalah Invalid Handle.
Selanjutnya saya melakukan debugging menggunakan option Use Debug DCUs di Delphi7 dan di Delphi 2006. Saya lihat ada perbedaan kode yang signifikan yaitu pada baris 5988 di D2006
Di Delpi 7 baris yang di highlight hanya berisi if EOF then
Saya curiga juga dengan angka 157041. Ternyata seperti dugaan saya, angka tersebut adalah nomor bug tracking (internal) di Delphi. Dan ternyata penambahan and not BOF pada kode diatas adalah untuk menyelesaikan Bug Calculated Field di TSQLQuery tidak muncul pada record pertama. Hmm.... penyelesaian masalah yang menimbulkan masalah baru (yang lebih besar).
Saya sempat tanya juga ke sdr Wisnu yang Delphi 2006-nya sudah di-update dengan Update 2, ternyata error masih muncul juga. Sdr Wisnu menggunakan MySQL dan muncul error Invalid Handle.
Sekarang, bagaimana solusinya ?
Saya memilih membuang and not BOF (seperti pada Delphi 7) dengan resiko bug Calculated field di SQLQuery. Resiko ini saya ambil dengan pertimbangan bahwa saya tidak pernah menggunakan Calculated Field di SQLQuery. Kalo perlu calculated field, bisa dibuat di ClientDataset.
Langkah-langkahnya adalah sebagai berikut.
- Copy file SQLExpr.pas ke folder lain (misalnya folder tempat projek)
- Ubah kode di baris 5988 tersebut dengan membuang atau me-remark and not BOF
- Include-kan file SQLExpr tersebut dalam Project.
Monday, April 24, 2006
Brainbench Games II
Tanggal 15 s.d. 31 Mei ini, Brainbench akan menyelenggarakan Bench Games. Seperti tahun lalu, selama Bench Games, kita bisa melakukan test secara gratis. Bila kita memiliki score tertinggi untuk satu test tertentu, kita dapat hadiah berlangganan brainbench selama setahun, dengan test gratis dan sertifikat (hard copy) yang gratis juga. Selain itu ada hadiah IPod yang diundi untuk 3 orang.
Tahun lalu saya berhasil menang untuk Test Visio 5. Tahun ini saya akan coba lagi dengan Visio 5. Siapa tahu sekarang bukan cuma dapet langganan brainbench tapi dapat IPod juga.
Monday, April 03, 2006
Variant yang Aneh (D6)
Hari ini saya ketemu error yang aneh berkaitan dengan variant. Error ini muncul di Delphi 6 tetapi tidak di Delphi 7. Perhatikan gambar berikut ini
Perhatikan kode yang berada persis di atas pointer program if vTmp1<>vTmp2 then ... Program tersebut masuk ke dalam if, berarti vTmp1 tidak sama dengan vTmp2. Tapi perhatikan window di bawahnya (Watch Window). Nilai vTmp1 adalah '0' dan vTmp2 juga '0'. Jadi apa bedanya '0' di vTmp1 dan vTmp2 ????
Kemungkinan memang Bug di Delphi 6 berkaitan dengan Variant. Mungkin ada kaitannya dengan dynamic array of Variant yang digunakan. Mungkin Dynamic Array of Variant di Delphi 6 masih menyisakan masalah.
Jadi, bagi pengguna Delphi 6 yang sering menggunakan Variant, berhati-hatilah.
Thursday, March 30, 2006
Morfik Jauh Lebih Baik
Morfik tampak jauh lebih baik dibanding 2 bulan lalu. Kelihatannya dalam 1-2 bulan ini para staf Morfik bekerja ekstra keras mengembangkan fitur Morfik.
Perkembangan fitur yang saya kira paling menarik adalah aktifnya Next - Prev Page dari Web Browser, selain deployment di Linux yang memang sudah direncanakan sejak lama.
Pada saat artikel ini ditulis, versi terbaru adalah 0.8.6.5, yang sudah bisa deployment di Linux, tapi baru bisa digunakan oleh pionir. Versi publik adalah versi 0.8.5.6 (perhatikan angka 5 dan 6 yang saling terbalik).
Untuk menjadi Morfik Pioneers, anda harus mendaftar dulu. Agar anda mudah diterima, sebaiknya jangan menggunakan email gratisan seperti yahoo, gmail, hotmail, dll.