Monday, May 26, 2014

NEVER use Linux x64 + SAMBA for MS-DOS client

Hi all,

First of all, welcome again all. This will be my first blog here in English. By doing so, I hope this blog will not only help Indonesian foxer but also all foxer in the world.

So here it goes; as the title says: NEVER use Linux x64 + SAMBA for MS-DOS client. See, I've been using ubuntu 12.04 + samba 3 as a file server for my Point-of-Sales DOS based application. It works well. Recently, I tried to upgrade the system with ubuntu 14.04 (LTS) x64. I thought, the machine is Core 2 Duo Q9400 and 4gigs RAM. So, why not using 64 bit version instead of old 32 bit version? The installation went well, and samba seem to worked okay. Problem arouse when my POS system tried to read the samba folder. My POS application simply hung there. My log file stated that the faulty line was the line with ADIR() function in FPD26. Confused, I tried to put DIR from DOS prompt only to find that DOS shows the file in an endless loop. In a confusion I switched the system back to the backup server (Yes! This is important. Always have backups --- including server backup). For almost two hours I tried to find what went wrong and found nothing. So I re-format the server and switch back to 12.04.4 LTS 32 bit. Worked like a charm. I didn't know what went wrong until this morning. I tried to install the same ISO (14.04LTS x64) in my development machine virtualbox. Got the same error. A search on the net got me to https://bugzilla.samba.org/show_bug.cgi?id=10341 . So the story is clear now. No wonder I couldn't get MS DOS to connect to Samba that day. I was fighting bugs. If it were my apps bug, I would certainly find it. But if it is an operating system or system bug? Well, just stay out :)

Hope this post helps anyone having the same problem. See you all......

Thursday, May 01, 2014

Sunday, February 16, 2014

WARNING SYS(2015)

Hello all,

Pertama kali, coba lihat kode di bawah ini. Apakah ada bagian dari program Anda yang menggunakan kode seperti ini?
 

lcCursor = SUBSTR(SYS(2015), 3, 8)

Select some_field ;
  From some_table ;
   Into Cursor (lcCursor)

Kalau ada, HATI-HATI!!!  Lho, kenapa? Karena VFP mengambil nilai SYS(2015) dari jam dan tanggal sistem komputer. DAN HARI KEMARIN (15 Februari 2014) sekitar jam 08-09 pagi adalah saatnya algoritma SYS(2015) akan mulai menghasilkan angka nol pada karakter ke-3 dari SYS(2015). Efeknya pada program apa? Kalau Anda menggunakan 8 karakter terakhir untuk penamaan cursor, maka VFP akan memberikan pesan Syntax Error karena penamaan cursor VFP tidak boleh diawali dengan numerik. Jadi bisa saja program Anda yang sudah berjalan bertahun-tahun normal-normal saja, eh... tau-tau sejak kemarin pagi mendadak error.
 
Fenomena ini akan berlanjut sampai sekitar bulan Juli 2014. Setelah bulan Juli 2014, huruf ketiga dari fungsi SYS(2015) akan mulai memberi karakter 'A' ; yang berarti nilai dari SUBSTR(SYS(2015), 3, 8)akan kembali aman untuk digunakan sebagai nama cursor. Sampai kapan? Wah, saya gak ada waktu untuk mencari tau. Tapi pastinya antara 4 sampai 5 tahun lagi kasus seperti ini akan terjadi lagi. Solusinya? Ya, jelas, jangan pakai kode itu untuk penamaan cursor. Lebih aman kalau langsung pakai SYS(2015) tanpa di-truncated (karena hasil dari SYS(2015) termasuk underscore di depannya adalah 10 karakter, dan penamaan cursor masih bisa 10 karakter). Atau, kalau memang harus 8 huruf (karena sesuatu hal semisal mengikuti penamaan sistem operasi DOS yang masih 8.3), maka pastikan Anda menggunakan karakter yang diijinkan untuk huruf pertamanya. Contoh;

lcCursor = '_' + SUBSTR(SYS(2015), 3, 7)

atau kalau pembuatan cursor dilakukan di dalam loop yang mungkin berjalan dalam hitungan milli-second (berarti kalau diambil dengan kode di atas bisa saja penamaan double), maka bisa digunakan:

lcCursor = '_' + SUBSTR(SYS(2015), 4, 7)

Ok guys (and gals). Semoga post ini bisa membantu Anda. :) . See you around...