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...  




Friday, December 13, 2013

Hati-hati tembak database. Gunakan BEGIN TRANSACTION dan ROLLBACK

Hi guys....

Kemarin adalah hari yang bikin heboh. Waktu sedang me-maintain data dengan SQL Management Studio, secara tidak sengaja, saya memberikan perintah UPDATE ke master items TANPA perintah WHERE. Ini adalah database live di sebuah supermarket. Masih untung toko sedang tidak terlalu ramai dan saya berhasil menyelamatkan empat kasir dari data update. Ini adalah supermarket dengan 16 kasir dan kebetulan ada sekitar 8 kasir yang buka, 4 kasir ditutup paksa (sambil diomelin customer dan mendadak jadi ada antrian kasir) karena semua item punya harga jual = 49,900  (bayangkan: indomie = 49,900, permen = 49,900.... Tapi juga bayangkan: microwave = 49,900, rice cooker = 49,900, semua oli = 49,900, dll-dll-dll....

Wah stress banget. Anyway, singkat cerita mengenai kasus itu; semua data kembali normal dalam 1/2 jam dan kasir bisa beroperasional normal lagi.

Pelajaran yang saya ambil; sejak kemarin, di semua perintah yang saya kerjakan di live database dan berpengaruh ke data (sebelum INSERT/UPDATE) saya berikan blok BEGIN TRANSACTION ... ROLLBACK TRANSACTION dulu. Jadi:

BEGIN TRANSACTION
...
... proses perubahan data
...

SELECT query untuk memeriksa hasil data
ROLLBACK TRANSACTION


Nah... hasilnya bener, barulah, SELECT query yang di bawah di comment, dan ROLLBACK TRANSACTION diganti menjadi COMMIT TRANSACTION.


Huuuuuffff.... semoga bisa jadi pelajaran untuk rekan-rekan. Ada pepatah yang bilang pengalaman adalah guru yang terbaik. Tapi sebenarnya pepatah itu harusnya berbunyai "Pengalaman ORANG LAIN adalah guru yang terbaik"

Thursday, October 31, 2013

Virtualbox sebagai server real? MANTAAAAB.... :)

Salam semuaaaa..... :)

WOW... gak tau udah berapa lama terakhir saya post di blog ini. Anyway, ada banyak berita, tapi hal menarik yang bisa saya share dalam dua bulan terakhir ini adalah, saya memutuskan untuk menggunakan Virtualbox + ubuntu 12.04.3 (LTS) x86 + Samba 3.6.3 sebagai server untuk aplikasi POS saya. Host dari Virtualbox adalah Windows Server 2008R2 x64. Hasilnya bagus sekali. File sharing-nya lebih stabil daripada waktu menggunakan Windows Server 2003 --- dan aneh-nya juga lebih cepat. Padahal saya hanya memberikan 512MB dan mengalokasikan 1 processor saja untuk memory Virtualbox (ada sekitar 20 POS yang dilayani oleh virtual server ini). CPU server sendiri hanya Intel Quad Core dengan memory 4GB. Jadi, kalau Anda tertarik untuk menggunakan Virtualbox di production --- biarpun banyak master-master di amrik sono yang tidak menganjurkan --- jangan kuatir., Pake aja... Dalam dua bulan terakhir ini udah kejadian 3 atau 4 kali komputer nya tewas mendadak gara-gara gak ketauan battery UPS udah jebol. Data yang hilang? Tidak ada :D

Okay guys. Begitu aja post awal dari saya. Nanti ngobrol lagi. Okay?
 :)

Sunday, April 29, 2012

Memanfaatkan Virtualbox sebagai server development (Ubuntu LAMP + Samba Server) part 1


Hi guys... Long time no see... :) Wow... hampir dua tahun saya gak post di blog ini. Lots of things happen, tapi itu untuk lain kali dah... Untuk sekarang, saya mau share bagaimana saya memanfaatkan Oracle Virtualbox untuk membantu saya saat membangun aplikasi. Mungkin ada yang bertanya; "Ngapain kok capek-capek harus menggunakan virtualbox? Install aja langsung XAMPP atau AppServ. Beres kan?" . Nah alasannya ini:
  1. Melatih kita untuk ‘terbiasa’ dengan environment Linux, jadi kita bisa men-setup server Linux di production (berarti menghindari penggunaan keluarga Window$). Kalau aplikasi di-deploy dengan Linux, tentunya akan meniadakan biaya lisensi Windows. Berarti biaya yang lebih murah untuk client.
  2.  Dengan LAMP Server, kita juga menginstall Apache dan PHP. Jadi bisa digunakan juga untuk belajar PHP di waktu luang.
  3. Pasti pernah dengar keluhan, "Aplikasi saya bisa jalan di komputer saya dengan baik, tapi waktu diinstall di client kok gak jalan?” . Nah, dengan mesin virtual yang terpisah dari development box, saat development kita bisa lebih mensimulasi keadaan di production secara lebih riil (untuk yang gak tau apa itu production: yang dimaksud production adalah kondisi yang sebenarnya di client).
  4. Masih melanjutkan point 3) di atas, kita bisa melakukan testing aplikasi kita dengan lebih baik. Kita bisa memberi beban kepada server, bisa mengurangi kecepatan network, atau bahkan bisa mensimulasi keadaan koneksi network terputus atau server mendadak mati ditengah-tengah aplikasi yang sedang berjalan.
  5. Sebagian besar aplikasi yang saya buat menggunakan database MS-SQL Server sebagai back-end. Saya gak mau membebani komputer saya dengan service PHP atau MySQL atau PostgreSQL atau service-service lain yang tidak sedang saya gunakan. Dengan Virtualbox, kita bisa 'mematikan' server dan hanya menyalakan kalau diperlukan saja.
  6. Saya juga akan memanfaatkan Samba Server sebagai pengganti File Server Windows. Jadi ini juga bisa digunakan sebagai file server pengganti Windows Server. Lumayan kan? Windows Server harga-nya sekitar Rp 7jt. Daripada untuk beli Windows Server, client pasti gak akan keberatan kalau mereka cuma bayar 1/4-nya saja kepada kita untuk support Linux Server-nya :)
  7. "Kenapa Virtualbox? Kan lebih bagus VMWare?" Yup. Betul. Silahkan pakai VMWare kalau Anda mau --- tapi daripada Anda pakai VMWare versi pasar minggu, apa gak lebih baik pakai Oracle Virtualbox yang resmi (dan gratis)
Okay. Itu mengenai alasan kenapa menggunakan Virtualbox. Selanjutnya, pre-requisite. Apa yang perlu Anda siapkan untuk mengikuti tutorial ini:
  1. Komputer dengan sistem operasi Windows XP/Vista/7 yang sudah terinstall dengan baik
  2. Oracle Virtual Box (silahkan download http://www.virtualbox.org) yang sudah terinstall
  3. Ubuntu Server (juga bisa di-download di http://www.ubuntu.com/server . Saat saya menulis post ini, baru saja keluar versi 12.04 LTS)
Next: langkah-langkah yang akan kita lakukan:

  • Membuat mesin virtual baru dan menginstall Ubuntu

    • Jalankan Virtualbox, lalu klik New
    • Selanjutnya, ketik nama mesin (untuk tutorial ini, saya pakai nama Ubuntu Server). Pilih Operating System Linux dan server Ubuntu.
    • Next, alokasikan memory untuk server Anda. Untuk tutorial ini saya hanya mengalokasikan 512MB.
    • Pilih Create New Hard Disk, lalu pilih Next
    • Pilih VDI
    • Pilih Dynamically Allocated
    • Berikan path/lokasi file yang akan menjadi 'hard disk' server, dan tentukan ukuran-nya. Untuk tutorial ini saya hanya mengalokasikan 4GB.
    • Selanjutnya, pilih Create.
    • Setelah di-Create, VirtualBox akan mengatakan bahwa "Karena ini adalah pertama kali-nya Anda menjalankan virtual machine ini, maka silahkan berikan path dimana kami bisa menemukan paket installasi operating system..." Nah, yang Anda berikan saat ini adalah path file ubuntu ISO yang sudah Anda download.
    • Kalau semua langkah Anda benar, harusnya Anda akan menemukan layar depan installasi Ubuntu seperti di bawah ini:



    • Pilih Install Ubuntu Server
    • Saya tidak akan menjelaskan detail langkah installasi Ubuntu server, karena rasanya cukup simple. Yang penting adalah saat Software Selection; jangan lupa memilih LAMP Server dan Samba Server

    • Pilih Continue
    • Pada saat installasi Ubuntu meminta password root MySQL, jangan lupa mengisikan password root-nya. Oh ya, jangan lupa untuk MENCATAT nama komputer, nama user id, password Ubuntu dan password root MySQL-nya yang Anda isi. Pengalaman saya, seringkali waktu mengisi password ini user yang baru sangat semangat dan kreatif memilih password yang 'antik' dan 'canggih'. Biasanya begitu mau dipakai sudah lupa.
    • Setelah installasi beres, virtual box kita akan di-restart dan Anda layar seperti ini-lah yang Anda dapatkan setelah Anda mengisi login dan password Anda (di tutorial ini, nama mesin saya adalah midgard dan nama user ragnarok)
    • Nah, kalau Anda sudah sampai tahap ini, berarti Anda sudah berhasil menginstall Ubuntu server. Sekarang kita tinggal melakukan langkah berikutnya;

  • Setting jaringan

    • Untuk kepentingan tutorial ini, saya akan menggunakan fasilitas networking  Host-Only Adaptor. Kalau virtual machine (VM) Anda sekarang sedang pada posisi seperti pada layar di atas,  mematikan VM tersebut terlebih dahulu. Caranya, ketik:
      sudo shutdown -P now
    • Setelah itu, ketik password Anda.
    • Setelah system VM shutdown, tampilkan layar utama Virtualbox, sorot nama server (kasus saya: Ubuntu Server) lalu klik pada button Settings.
    • Pilih Network di list sebelah kiri. Apabila operating system host Anda (Windows) terhubung dengan internet, biasanya Network Adapter 1 sudah digunakan untuk NAT. Biarkan saja network ini. klik Adapter 2, lalu klik Enable Network Adapter untuk menambahkan network Adapter 2 seperti pada screen shot di bawah (tentu saja Mac Address di tempat Anda akan berbeda. Abaikan saja):

    • Beres? Okay, selanjutnya, jalankan kembali VM Anda. 
    • Yang baru saja kita lakukan adalah menambahkan adapter Network baru. Ibaratnya Anda baru saja membuka PC Server dan menginstall satu card network tambahan lagi. Nah, sekarang kita akan membuat Ubuntu 'mengenali' card tersebut.
    • Setelah Anda masuk kembali ke Ubuntu, cobalah untuk mengetikkan ifconfig. Setelah itu, ketik seperti pada screen shot yang saya beri garis kuning di bawah ini:



'
  • Kemudian, tambahkan baris seperti dibawah ini:





  • Perhatikan, saya menggunakan IP address 192.168.56.3. Saya mendapatkan angka 56 dari Windows. Apabila di Windows saya masuk ke Command Window, lalu mengetikkan IPCONFIG, ini yang saya dapatkan:


    • Selanjutnya: kembali ke VM kita; kalau saya mengetikkan sudo ifconfig eth1 up, dan dilanjutkan dengan ifconfig; maka saya akan mendapati bahwa card eth0 sudah dikenali (perhatikan screen shot di bawah. Silahkan ketik yang saya beri kotak kuning):



    • Kalau ini sudah tercapai, harusnya kalau dari Windows Anda memberikan perintah PING 192.168.56.3 -t dan dari Ubuntu Anda memberikan perintah ping 192.168.56.101, maka Anda akan mendapatkan tampilan seperti screen shot saya di bawah ini (dua window; CMD dan Virtualbox saya letakkan berdampingan).

  • Ok. Kalau Anda mengikuti tutorial ini, berarti Anda sudah berhasil membuat mesin virtual Ubuntu dan berhasil menghubungkannya dengan host melalui network virtual. Selanjutnya jadwal kita adalah melakukan setting MySQL dan melakukan setting Samba Server. Tapi berita buruknya, saya sudah membuat tutorial ini cukup lama -- jadi saya udah capek. Karena itu, daripada kita bikin dua part, mendingan saya berikan screen capture-nya aja tanpa penjelasan. :D

  • Kalau Anda men-set web server, sebenarnya tidak ada lagi yang perlu Anda lakukan. Ini sudah selesai. Anda sudah bisa mendevelop web apps Anda dengan Dreamweaver dari Windows, dan mengakses PHP di Ubuntu. Hmm... yah, paling tinggal install phpmyadmin di Ubuntu.
  • Lain ceritanya kalau Anda bermaksud untuk men-develop aplikasi VFP (desktop) dengan memanfaatkan MySQL yang ada di Ubuntu. MySQL tersebut harus di set supaya bisa menerima perintah dari luar. Caranya, edit file konfigurasi MySQL dengan mengetikkan:

  • Setelah itu, restart mysql dengan mengetikkan sudo /etc/init.d/mysql restart.
  • Duh... capek deh... Lanjutin besok lagi yaaaa.... :)

Good luck guys...



Friday, June 18, 2010

Error 34 minutes remining waktu install Windows Server 2003

MAAAAAAAN... this is really nuts!

Beberapa waktu yang lalu (gak terlalu lama - belum ada sebulan) - saya membeli komputer untuk server; Processor Intel Core 2 Quad Q8400 (2.66GHz, FSB 1333MHz, L2 Cache 4MB) dengan mo-bo Gigabyte GA-G41M-52L.

... dan waktu saya install Windows Server 2003 (masih 32bit) --- SELALU HANG saat 34 min remaining. Berkali-kali dicobain; gagal terus. Yang terakhir malah saya biarkan hang sampai 45 menit. Tapi si komputer tetap hang.

Support Microsoft seperti biasa tidak membantu. Mereka bilang itu karena driver SATA2 harus di load dulu. Dan untuk me-load, perlu punya driver SATA2 DALAM BENTUK floopy disk! HAAAH?!!! Bweeeek.... floppy disk! dimana kita bisa mencari floppy disk sekarang? Tidak bisa pakai CD ROM/DVD karena 'sudah by design'. Kalau mau pakai CD, driver SATA2 harus di-inject dengan mendownload program (bla-bla-bla... bingung deh pokoknya). Kalau mau mengerjakan sendiri, silahkan lihat article KB sekian-sekian.... (makin bingung).

Dalam keputusasaan, saya coba untuk menginstall Windows XP dulu, baru rencana-nya upgrade ke Windows Server. Harapan saya, semoga driver SATA yang diinstall di XP akan bisa dimanfaatkan oleh program setup Windows Server 2003. Ternyata masih gagal.

Jalan-jalan ke internet juga menghasilkan hasil yang hampir sama. Rata-rata bilang error di menit ke-34 itu karena hardware; berarti SATA2 juga yang jadi masalah. Nah, tapi ada satu forum, yang bilang bahwa itu karena setup Windows 2K3 ada masalah dengan keyboard USB lama! Na lho! Saya masih  pakai keyboard favorite saya -- dan memang betul. Ini keyboard USB lama. Iseng-iseng, saya ganti dengan keyboard PS/2, dan... JALAN! Normal tanpa hang.

Thank God... But this is really NUTS! Cuma gara-gara salah keyboard -- habis waktu sampai 6 jam! Semoga ini bisa membantu Anda; Kalau Anda menginstall Windows dan hang -- terutama saat 34 minutes remaining... cobalah ganti keyboard.