Archive

Archive for September, 2006

Checkdate Problem

September 22, 2006 Leave a comment

Masih seputar migrasi yg gila. Kali ini masalah penanggalan menggunakan fungsi checkdate().

Ceritanya gw lagi konversi penanggalan menjadi lebih ‘manusiawi’, misalnya 2006-09-22 menjadi 22 September 2006. Proses berjalan dengan baik, sampai suatu ketika saya coba memasukkan tanggal kabisat seperti 29 Februari 2008. Yang terjadi adalah, konversi tidak dapat berjalan dengan baik.

Ok, sekarang kita coba cek ke fungsi HumanDate…

< ?
function HumanDateTime($date_string)
{
    global $data_path,$language,$month_name;
    include "config_main.php";
    include "$data_path/lang/lang_include.php";
    $var_datetime = explode(" ",$date_string);
    $var_date = $var_datetime&#91;0&#93;;
    $human_time = HumanTime($date_string);
    $human_date = explode("-",$var_date);
    $year = $human_date&#91;0&#93;;
    $month = $human_date&#91;1&#93;;
    $day = $human_date&#91;2&#93;;
    if (!checkdate ($month,$day,date("Y",$year))) {
        return "";
    }
    $month = $month_name&#91;"$month"&#93;;
    if (!$year) { $year = "0000"; }
    if (!$month) { $month = "00"; }
    if (!$day) { $day = "00"; }
    $human_date = $day." ".$month." ".$year;
    $human_datetime = $human_date." ".$human_time;
    return $human_datetime;
}
?>

oh ternyata ada fungsi checkdate didalamnya.. fungsi HumanDate ini akan mengembalikan string kosong jika tanggalnya salah. Hmm.. aneh.. untuk meyakinkan, saya coba buat skrip sederhana untuk melakukan checking tanggal kabisat menggunakan fungsi checkdate sederhana hasilnya, dan ternyata hasilnya true, alias valid. Lho, kok bisa lain ya…??
CheckDate problem

< ?
  if(!checkdate(2, 29, 2008)){
    echo "Check1: 29 Februari 2008 tidak kabisat..?? Ah yg bener??<br/>";
  }else{
    echo "Check1: 29 Februari 2008 emang bener kabisat.<br />";
  }

  if(!checkdate(2, 29, date("Y",2008))){
    echo "Check2: 29 Februari 2008 tidak kabisat..?? Ah yg bener??<br />";
  }else{
    echo "Check2: 29 Februari 2008 emang bener kabisat.<br />";
  }
?>

Akhirnya dengan sangat terpaksa ada beberapa skrip tidak pake HumanDate.. 🙂

btw kenapa bisa aneh ya…. TANYA KEN APA…?

Categories: Ngoprek

Borland Technology Day

September 20, 2006 1 comment

Kemarin, ECS dan Borland mengadakan Borland Technology Day di Wisma46 Kota BNI, yang tampil sebagai pembicara adalah Tim Jarvis.

Agenda acara adalah:

  • manajemen Borland untuk Asia Pascific
  • Produk Roadmap untuk Delphi/C++ 2006-2008, Interbase, JBuilder 2006-2009
  • sekilas TurboDelphi
  • Demo mudahnya pembuatan dan konsistensi aplikasi database dari Desktop, ClientServer sampai MultiTier dengan teknologi BDE, dbExpress dan BDP (Borland Database Provider), baik menggunakan platform Win32 maupun .NET
  • Demo pembuatan dan kompilasi aplikasi dengan CompactFramework
  • Sekilas Win32 operator overloading

btw.. saya sempat ketemu mas sukuguci dari Delphi-ID dan rekan2 dari Delphindo, seperti mas Wisnu, Iwan, dan yg lain saya lupa namanya, habis ketemunya pas terakhir mo pulang di Lobi lantai dasar… 😀

oiya.. suvenirnya Kaos ECS dan CD Demo BDS2006 dan JBuilder2006

Categories: News

Ngomongin TurboDelphi

September 18, 2006 3 comments

Semua orang lg ngomongin TurboDelphi, ah sayang sekali gw gak bisa ikut ngoprek, gw lagi sibuk customize produk, dan itu gak ada sangkutannya dengan Delphi. Walaupun begitu, kalau soal download software-nya, jelas udahlah, biar gak ketinggalan 🙂

btw TD yg versi Free (Explorer) ini mempunyai limitasi tidak dapat install komponen, tapi ini bisa diakali dengan memasang komponen pada package user.

Selain itu TD versi Explorer tidak menyertakan file DCC32.EXE yang berguna untuk melakukan kompilasi project secara commandline.

Beberapa modifikasi seputar TD juga muncul, antara lain merging TD,TD.NET, TC dan TC# menjadi TurboStudio dengan bantuan TurboMerger.

Kembali ke instalasi komponen pada versi Explorer, rumor terbaru, Borland melakukan beberapa modifikasi sehingga trik instalasi komponen tidak dapat dilakukan.

So.. jika Anda ingin leluasa, gunakanlah TD versi Pro.. harganya pun relatif murah sekitar $399.

Categories: Ngoprek

kbmMW ServeRequest Arguments Problem

September 13, 2006 7 comments

Ceritanya, ketika gw sedang bereksperimen dengan RequestArguments nya kbmMW, ada iterasi argument yang bikin error aplikasi, bahkan gw kira ini error akibat tidak cocoknya kbmMW, ADO dan ODBC mySQL karena:

  • gw pake mySQL 5.11-beta
  • gonta ganti komponen database, dari ADO, Zeos, MyDAC
  • gonta-ganti myODBC dari versi 3.51.06 ke 3.51.12 ke 5-Alpha ke 3.51.12 ke 3.51.06 dan akhirnya baru bisa jalan stabil di 3.51.12 (setelah beberapa kali install/uninstall)

Di log ApplicationServer kayak begini:
kbmmw1

Nah di Client / RemoteApp kayak begini:
kbmmw2

Lama banget gw debugging, karena terlalu fokus di rutin database dan koneksinya.. sampai akhirnya iseng2 fokus ke method OnServeRequest, dan menemukan bug-nya. Bug ini mungkin diakibatkan kesalahan konversi tipe data di dalam argument sehingga tidak dapat ditampilkan dengan benar:
kbmmw3

Untuk lebih jelasnya di kode ini:

  for Index := Low(Args) to High(Args) do
    Memo.Lines.Add('    --> Argument[' + IntToStr(Index) + '] : ' + Args[Index]);

Dan akhirnya ApplicationServer dapat menyajikan informasi sesuai request dari client, walaupun log yang tercatat kurang terperinci:
kbmmw4

Dan ini grid berisi data pada client:
kbmmw5

Tapi saya sendiri masih penasaran tuh, gimana ya biar OnServeRequest dapat nampilin semua argument dengan benar.

Categories: Ngoprek

PHP, MSSQL dan Varchar

September 6, 2006 2 comments

Jumpa lagi dalam problematika kustomisasi gila. Isu yang saya angkat kali ini adalah perihal akses varchar MSSQL melalui PHP. Suatu ketika, ketika saya membuat rutin ‘activity logging‘ dimana salah satu field-nya adalah deskripsi atau informasi mengenai aksi yang sedang dilakukan. Deskripsi ini memuat berbagai macam variabel.

Awalnya saya mendefinisikan tipe data untuk field ini berupa varchar(500). Ketika saya tes, script untuk append log berjalan dengan baik, semua data yang disimpan valid. Permasalahan muncul ketika saya membaca field tersebut dan menampilkannya di halaman browser. Beberapa record tidak ditampilkan sebagaimana mestinya, yaitu isi field deskripsi terpotong. Setelah melakukan debugging, ternyata panjang isi field yang terpotong selalu 255 karakter, tidak ada yang lebih. Padahal di database field sudah didefinisikan dengan panjang 500 karakter dan data tersimpan dengan baik. Permasalahan hanya pada rutin pembacaan saja. Aneh.

Ah, tapi untunglah eyang gugel banyak membantu. Usut punya usut hal ini disebabkan karena keterbatasan API yang digunakan PHP untuk mengakses MSSQL (DBLib C) yang membatasi panjang karakter varchar cuma 255 karakter.

Nah problem sudah diketahui, tinggal sekarang solusinya. Ada dua solusi, yaitu:

[1] Gunakan multiple sction
Yaitu memecah satu field menjadi beberapa field pada query sesuai dengan jumlah maksimal karakter yang diinginkan, kemudian menggabungkannya melalui string concatenation di PHP, dalam kasus saya menjadi:

SELECT SUBSTR(LogDescription, 1, 255) AS Desc1, SUBSTR(LogDescription, 256, 245) AS Desc2 ….

$Description = $row[‘Desc1’] . $row[‘Desc2’];

Kelemahan dari cara ini adalah kurang efisien apabila operasi ini sering digunakan, terlebih dengan field yang berbeda – beda.

[2] Ubah tipe data menjadi TEXT
Cara kedua adalah dengan mengubah tipe data varchar menjadi text. Cara ini cukup mudah dan tidak perlu ada pekerjaan tambahan di script PHP nya. Namun cara ini mempunyai kelemahan yaitu tidak dapat digunakan dalam klausul ORDER BY dan GROUP BY.

Akhirnya saya tetap memutuskan untuk menggunakan cara kedua karena lebih mudah dan saya tidak menggunakannya dalam klausul ORDER BY dan GROUP BY. 🙂

Categories: Ngoprek