Showing posts with label Visual FoxPro. Show all posts
Showing posts with label Visual FoxPro. Show all posts

Saturday, June 05, 2010

Microsoft menutup forum-nya yang berbasis nntp - termasuk forum VFP :(

Halo rekan-rekan foxpro Indonesia....
Sedikit berita sedih... Microsoft sejak awal juni kemarin menutup server nntp-nya (microsoft.public.xxxxx ). Sedih karena, jujur, itu adalah tempat hang out saya sejak tahun 2001. Di sana saya mengenal banyak senior-senior foxpro kelas dunia seperti Nancy Folsom, Cindy Winegarden, Steven Wuebe, Igor, Eric Den Doop, Robert Ansell, dll-dll-dll.... dari sana juga saya banyak dapat link-link ke forum-forum lain yang luar biasa. Dari sana juga saya belajar dan bertanya. Singkatnya - kalau ibarat seorang anak, saya merasa 'dibesarkan' oleh forum itu. Dan sekarang microsoft menutupnya.... Dasar b*go!

Anyway, alasan microsoft adalah seperti ini:

Date 5/4/2010
Starting in early summer 2010, Microsoft will begin progressively closing down the Microsoft public newsgroups to enrich conversations in the rapidly-growing forum platform.  This decision is in response to worldwide market trends and evolving customer needs. 

Microsoft continues to invest in forums to reduce customer effort, consolidate community venues and make it easier for active contributors to retain their influence. Forums provide a healthy community environment with less spam and make answers easier to find by customers and search engines.  Additionally, forums offer a better user and off-topic management platform that will improve customer satisfaction by facilitating discussions in a clean space.  

We understand that some newsgroups are still active, and important to the community.  In the coming days and weeks, we will be rolling out tools and resources to minimize disruption to the community discussions. 

We are working diligently on providing additional resources and information in local languages later this week.  In the meantime, please refer to the official Microsoft Newsgroup website http://www.microsoft.com/communities/newsgroups/default.mspx concerning this issue.  The Microsoft Newsgroup website will be made available in additional languages in the next few days.

Singkat cerita, alasan microsoft, forum newsgroup sudah 'ketinggalan jaman' apalagi dengan adanya forum berbasis web dan social network yang sekarang berkembang pesat. Tapi, microsoft lupa keunggulan-keunggulan nntp. Yang sangat saya rasakan selama menggunakan forum newsgroup adalah forum nntp jauh lebih cepat dari forum web karena berbentuk teks mode. Gratis - tidak perlu login-login-an. Dan yang untuk saya paling penting dari dulu; bisa dengan mudah di-download secara offline dengan size yang kecil (sekali lagi-- karena text mode) jadi bisa dipelajari/dibaca sambil dimana saja. Saya ingat dulu sering nge-print thread-thread di forum dan membawa print out itu ke wc untuk di baca sambil 'ngebom'... Ha-ha-ha... jorok sedikit.... Tapi ya, memang begitulah. Saya belajar banyak melalui forum. Dan sekarang ditutup. Untuk saya penutupan forum ini lebih menyakitkan daripada waktu microsoft mengumumkan bahwa VFP10 gak akan ada. MICROSOFT SUUUUUUUUUCCCCCCCCKS! Mungkin memang untuk ke depan kita harus memikirkan alternatif lain selain produk microsoft. Beberapa hari yang lalu, waktu online di forum ubuntu, saya lihat ada signature seorang user di sana; tulisannya gini: "I've been Microsoft free for 322 days". Yah- kira-kira seperti gitu deh... Hmmmmmm............. Kapan ya saya bisa bikin signature seperti itu?

Monday, April 19, 2010

PENGHAPUSAN RECORD DI DBF = Ingat: SET DELETED ON!

DBF adalah format standard table yang mulai dikembangkan sejak pertengahan tahun 1960-an (Wow! Selama ini banyak yang bilang DBF dikembangkan sejak tahun 80-an! --- Saya gak akan cerita panjang. Silahkan baca di http://www.foxprohistory.org ). Pada waktu itu (jujur- saya juga belum lahir), semua mengenai komputer identik dengan MAHAL. Harga mengakses komputer mahal. Media penyimpanan mahal. Operasional komputer mahal. Dan proses-proses yang sekarang sederhana, waktu itu juga MAHAL. Kata MAHAL (expensive) disini, bukan hanya berarti uang. MAHAL juga bisa berarti membutuhkan proses yang panjang, sedemikian rupa sehingga si komputer tidak dapat mengerjakan hal lain kecuali hal yang ‘mahal’ itu. Nah, penghapusan record adalah salah satu dari proses yang mahal itu. Kenapa?

Coba lihat diagram di samping. Katakanlah ada file database dengan 8 record. (Catatan: untuk menyederhanakan, kita akan mengasumsi data setiap record disimpan secara sequential. Kita juga tidak akan membahas struktur index, jadi diasumsi file database ini adalah file sequential tanpa index).
Nah, coba bayangkan apabila ada penghapusan record. Katakanlah, record 3 dan record 5 dihapus. Kira-kira apa yang akan terjadi?









Okay. Anda bisa lihat efeknya pada gambar di sebelah ini? Tempatnya jadi kosong alias bolong. Nah, karena record-record ini ada di dalam satu file, apa yang akan dilakukan oleh operating system untuk meng-klaim space kosong ini?













Yup. Operating system akan 'menulis ulang' file tersebut dan menyusun ulang isinya seperti pada gambar di samping.

Okay. Anda lihat efeknya? Berapa besar 'biaya' untuk membangun ulang sebuah file? Yang pasti, lupakan multi user. Bagaimana caranya bisa ada dua user yang mengakses satu file kalau file itu dihapus lalu ditulis ulang oleh salah satu user? Atau, gak usah ngomong jauh-jauh multi user deh... Katakanlah hanya satu user. Tapi record yang ada bukan 8; melainkan 800,000 record. Na lho! Anda bisa bayangkan berapa banyak rewrite yang harus dilakukan hanya untuk menghapus satu record (yang di mata orang awam/client, "sistem kita sederhana kok!" --- sounds familiar?)
Jadi, apa yang dilakukan oleh orang-orang yang menciptakan system logic database xBase pada jaman kuda belum ada buntut dulu? Anda pasti bisa menebak! YUP. Mereka membuat sistem database sedemikian rupa sehingga apabila ada penghapusan, record yang dihapus TIDAK dihapus secara fisik, melainkan HANYA DITANDAI bahwa record tersebut sudah dihapus. Tujuannya, pada saat yang dianggap aman, atau saat sistem komputer tidak sedang bekerja, barulah proses penghapusan secara fisik dilakukan (ini yang kita kenal sekarang dengan proses PACK).
Sekarang kita kembali ke dunia VFP yang kita kenal. Database VFP juga masih menggunakan dasar-dasar xBase, jadi tetap ada kasus seperti di atas. Record pada table DBF yang dihapus, juga hanya akan 'ditandai' oleh VFP. Record tersebut masih bisa dikembalikan dengan perintah RECALL. Kalau kita ingin sistem menampilkan record yang sudah ditandai tersebut, berarti kita beritahu VFP dengan perintah SET DELETED OFF. Kalau kita ingin 'menyembunyikan' record yang sudah ditandai, berarti kita berikan perintah SET DELETED ON. Nah, sejauh ini simple kan? Jadi apa yang menyebabkan begitu banyak pertanyaan dan kasus-kasus di forum yang berhubungan dengan record yang ditandai-tapi-belum-dihapus ini? Biasanya masalah yang muncul tidak jauh dari kasus berikut:

1. Record yang sudah dihapus, masih ngotot muncul

2. Record yang sudah dihapus ikut terhitung

3. Mau masukin record baru jadi gak bisa karena katanya record tersebut sudah ada. Saat di-check... ternyata sudah di-delete -- tapi belum di-pack....

4. Perintah SET DELETED ON sudah diberikan di awal program, tapi kok gak ngefek ya?

5. Ini lebih aneh lagi... SET DELETED ON sudah diberikan, udah jalan dengan baik... Tapi kok tiba-tiba VFP mengembalikan SET DELETED ke OFF??? Wah.. ini sih pasti bug VFP!

Programmer-programmer VFP sangat terkenal dengan kelihaiannya ngulik sana-sini. Maklum... maskot VFP kan rubah, jadi gak heran kalau lihai. Apa saja kelihaian programmer VFP untuk mengakali kasus di atas?
1. Habis DELETE, langsung PACK.

2. Keluar program/masuk program = PACK dulu dong.... Bisa kita akalin dengan proses PACK wajib dilakukan saat mau posting harian (keren banget namanya = posting... padahal kita cuman minjem istilah akuntansi untuk ngebersihin sampah kan?)

3. Yang ini sedikit lebih advance; JANGAN gunakan DELETE! bikin field sebagai flag untuk record-record yang dihapus.

4. Ada cara satu lagi yang cukup mantap: "Di sistem kami, semua transaksi langsung dibukukan. Tidak ada istilah DELETE. Yang ada adalah RETUR. Jadi apabila ada kesalahan, sistem tetap memiliki catatan"

Gak tau apa lagi deh... tapi yang pasti, masalah utama adalah programmer tidak tau atau gagal menggunakan SET DELETED ON/OFF untuk mengelola record yang dihapus.  Kenapa gagal? Karena banyak programmer VFP yang tidak tau bahwa:
1. SET DELETED OFF adalah nilai default VFP

2. Perintah SET DELETED ON/OFF hanya memiliki scope di data session dimana perintah tersebut diberikan. Jadi kalau Anda menggunakan Private Data Session di form Anda, setiap kali Anda harus menset preferensi Anda dengan memberikan perintah SET DELETED ON (atau OFF -- biarpun sebenarnya kalau preferensi Anda OFF ya jelas tidak perlu -- kan sudah default?)

3. Setelah SET DELETED ON atau OFF berlaku, maka semua table dan perintah yang digunakan akan mengikuti aturan tersebut. Ini berarti, apabila Anda membuat SELECT query saat SET DELETED OFF, maka record yang sudah terhapus akan... YUP. AKAN TERBAWA - dan tidak ada tanda bahwa record itu sudah di-delete! Bagaimana bila setelah query tersebut Anda memberikan SET DELETED ON? Apakah hasil query (cursor) akan terpengaruh? NOPE! Record di cursor tidak diberi tanda deleted kan? Jadi ya dianggap itu adalah record yang valid. Nah.. satu lagi nih yang sering dilupakan... Local view pada dasarnya adalah... SELECT QUERY! Jadi kasus SET DELETED ON yang gak ngefek juga dengan mudah terjadi di Local View. Gimana ngakalinnya? Silahkan lihat point berikut....

4. Karena peletakkan SET DELETED ON sangat penting, pastikan Anda sudah men-set preferensi SET DELETED ON ini sebelum Anda membaca data. Karena umumnya aplikasi kita menggunakan form (tentu saja pengecualian bila Anda membuat COM+ -- Tapi kalau Anda udah bisa bikin aplikasi COM+ dan masih bingung dengan SET DELETED, itu namanya kebangeten), jadi saya akan membahas penggunaan SET DELETED di form.

Apa yang dijalankan dulu waktu form VFP dipanggil? Yang pertama adalah event BeforeOpenTable yang ada di Data Environment. Setelah itu, event Load dari form. Kemudian berturut-turut: Init, Show, dan Activate. Untuk mempermudah mengingat, biasanya saya bilang urutannya mBOk-LISA.
Jadi, kalau Anda menggunakan Data Environment, berarti Anda membuka table dari Data Environment, ada dua alternatif:
1. Berikan perintah SET DELETED ON di event BeforeOpenTable yang ada di Data Environment
2. Kalau Anda membuka local view dari DE, Set property NoDataOnLoad di Data Environment table. Lalu, setelah Anda secara eksplisit memberikan perintah SET DELETED ON, refresh data dengan fungsi REQUERY()
Saya pribadi, lebih suka me-load data (table atau view) dari event Load. Jadi, sebelum me-load table atau view apa-pun, berikan dulu perintah SET DELETED ON. Setelah perintah itu, baru berikan perintah USE... untuk membuka table atau view.

Okay. Saya rasa segini saja yang bisa saya share. Untuk membuat post ini saja sudah hampir satu setengah jam. Jadi sudah melewati batas break saya... Ha-ha-ha... Ya ndapapalah... sekali-kali.
Sebagai penutup, saya berharap artikel yang saya buat ini bisa bermanfaat untuk rekan-rekan programmer Microsoft Visual FoxPro. VFP ROCKS!





Thursday, March 18, 2010

This fox try to run along with the penguin

Halo rekan-rekan foxer... Selama ini saya tidak pernah betul-betul serius dengan Linux dan MySQL. Tapi kelihatannya dalam waktu dekat ini saya akan mempertimbangkan MySQL untuk production. Jadi, saya menginstall Linux dan MySQL di laptop saya. Dan inilah ceritanya....
1. Okay. Keputusan untuk menginstall Linux di laptop saya. Eh, tentu saja tidak langsung di hard disk. Nanti production gimana? Gampang.. gunakan saja Sun VirtualBox.

2. Next, pertama kali pilih dulu distro apa... Hmmm.. di library, saya punya Sidux, Fedora, Centos, dan uBuntu. Pilih yang mana ya? Setelah melihat internet, ternyata yang paling banyak penggunanya - hmm... maksud saya yang paling banyak saya temukan -- adalah uBuntu. Jadi uBuntu lah yang terpilih.

3. Install uBuntu... Ups... Setelah diinstall, pikir-pikir, ngapain juga saya install x-window nya? Interface gnome memang lumayan okay. Serasa pakai Macintosh. Tapi.. Untuk apa GUI-nya? Jadi saya pergi ke http://www.ubuntu.com/GetUbuntu/download dan men-download distro server-nya (Linux uBuntu 9.10 Karmic Koala).

4. Linux di Virtual Box ter-install. ah.. tapi ternyata setup network-nya gak bisa. Virtual Network-nya tidak bisa di-detect di uBuntu. Sun VirtualBox saya ternyata versi lama. Jadi harus update Virtual Box ke versi baru... 70 Mega? Hmmm... malas ah... apalagi forum dan dokumentasi-nya agak kurang okay. Jadi saya beralih ke VMWare 7.0. Install VMWare, install ulang uBuntu server. Yup. Langsung jalan. Dan ethernet-nya? Mari kita lihat dengan perintah ifconfig. Perfect. Langsung ada eth0, dan IP-nya sudah di set.... :)

5. Sekarang saya perlu download MySQL. Eh... ternyata dulu pernah download. Ada kok. MySQL 4.1 dalam format tar.gz... Eh.. tapi sebentar dulu.. Gimana caranya meng-copy dari folder Windows ke folder Linux? Dan setelah masuk ke Linux, gimana cara install-nya ya? Terus, bakal cocok gak? Hmmm.....

6. Ah.. pusing-pusing... Mendingan download aja MySQL versi terbaru langsung dari Linux. Caranya gimana ya? Oooh.. gampang... Coba tanya Oom Google... WAH??? Tinggal ketik sudo apt-get install mysql-server??? Kok gampang ya? Kirain bakal susah! Eh, tapi berarti, Linux yang ada di dalam virtual machine harus ada koneksi internet. Should be easy. Share koneksi 3G-saya, lalu, coba cek linux lagi...

7. Wah-wah-wah.. ternyata saya harus rubah IP address Linux. Sharing koneksi tadi merubah IP. Nah.. sekarang gimana caranya merubah IP di Linux... Mari kita tanya Oom Google... http://www.howtogeek.com/howto/ubuntu/change-ubuntu-server-from-dhcp-to-a-static-ip-address/

 8. IP Beres. Coba nge-ping ke fox-id...
Mantaaaafff...

9. Sekarang, tinggal jalankan sudo apt- tadi... Coba kita lihat.. Apakah semudah yang dikatakan?
YUP... Ternyata memang semudah itu. Gambar disamping ada yang saya garis kuning. Yang saya garis kuning itu adalah command yang salah. Ternyata kurang kata install... Dasar Command Line.... Ha-ha-ha... Yang kedua (yang di beri box merah) adalah command yang betul. Tinggal download 22 mega... Hmmmm... Jadi saya tinggal dulu untuk post blog ini

10. By the way, waktu saya ngetik sampai point 8 (atau 7) di atas, ternyata download udah selesai. Cepat juga. Dan langsung terinstall lagi!

11. WOW... sekarang tinggal menyelesaikan post di blog, lalu coba MySQL ODBC. Tapi sekarang udah jam 01.15.... Tidur dulu ah... Mimpiin fox balapan sama pinguin.. Menang siapa ya???

Thank you guys and gals for reading!

FOX ROCKS!!!!

Wednesday, May 20, 2009

Belajar dari user interface iPhone

Wow... sudah 4 tahun sejak blog saya yang terakhir.... LUAR BIASA!!! Ternyata 4 tahun bisa berlalu begitu cepat!!! Wow... But so many things have happen in these last four years. Obviously, I cannot recall everything, but maybe I'll just start with what I have in mind now....

Pertama kali, saya ingin mengucapkan terimakasih untuk Anda yang sudah membaca blog saya. Semoga ada hal-hal yang bisa Anda petik dari tulisan saya.

Selanjutnya, saya ingin sedikit sharing mengenai ide yang saya dapatkan dalam satu bulan terakhir ini. Ceritanya begini; awal April 2009 kemarin, Telkomsel menawarkan iPhone. Waktu itu hari Selasa, dan sebenarnya saya gak niat beli. Cuman karena di-undang ke Hilton waktu grand launching, tujuan saya sebenarnya lihat hotel-nya. Kebetulan hotel Hilton itu adalah hotel baru di Bandung, dan saya belum pernah masuk. So anyway, saya datang, dan ternyata yang namanya iPhone itu user interface-nya bagus sekali. Sangat simple. Semua user interface logis dan masuk akal (akhirnya setelah saya beli, anak saya yang 5 tahun juga bisa mengoperasikannya tanpa diajarin). Akhirnya saya beli dan menghadiahkan iPhone itu untuk istri saya (yang kemudian jadi 'autis' dengan Facebook :D )




Okay, itu cerita intermezo aja. Tapi intinya, setelah saya tau interface iPhone (terus terang, ini adalah Apple pertama saya sejak waktu saya kelas 4 SD ortu saya beli Apple II+ dengan sistem operasi CP/M dan PC DOS -- jadi inget game Load Runner, Frogger, dan Karateka...)... ups... sori... back to the story... jadi setelah saya pakai iPhone, ternyata interface-nya sangat membius. Betul-betul merubah paradigma. Setelah sekitar 3 jam-an main-main dengan iPhone, waktu buka laptop, I actually tried to slide the laptop screen to make the window scroll!!! What a fool.... And it took me almost two-to-three seconds to realize that!!! Luar biasa... bagaimana interface iPhone bisa merubah paradigma seseorang mengenai cara interaksi manusia dengan komputer.

Apa yang saya pelajari dari iPhone ini? Beberapa hal:
1. Interface harus simple! Di layar iPhone jarang sekali kita melihat lebih dari 5 buttons. Biasanya ada dua button navigasi di atas, lalu menu di atas atau di bawah. Sangat konsisten.
2. Saya harus bisa membuat interface yang sangat bersahabat dengan user, sehingga user yang sudah menggunakan program saya, tidak akan pergi ke lain hati lagi...
3. Harga mahal tidak jadi masalah. Telkomsel menjual iPhone dengan harga yang lebih mahal daripada pesaingnya (Blackberry Storm kayanya pantas jadi pesaing-nya). Sudah jelas iPhone kalah dalam banyak hal dari BB, tapi siapa yang tidak tergoda dengan interface-nya yang sangat classy.
4. Hampir semua fitur dalam iPhone resmi 'dijaga' oleh Apple. Komunitas Apple bahkan punya istilah yang unik dalam meng-unlock iPhone. Mereka bilangnya: "jailbreak" alias keluar dari penjara. Ternyata kemampuan processor iPhone jauh lebih hebat daripada yang dimunculkan. Banyak sekali setting-setting yang dibatasi oleh Operating System iPhone (sekarang versi 2.2.1). Tapi dengan penjagaan yang sangat ketat itu, Apple bisa menjaga agar iPhone itu bisa stabil dan sesuai dengan 'standard' Apple (biarpun untuk komunitas iPhone geeks, standard itu sangat tidak memuaskan). Tapi ya itu tadi yang hebat. Ibaratnya Apple bilang; "Ya, pokoknya, biarpun kemampuan iPHone ini bisa 10, saya batasi 7 aja deh...)", dan orang-orang awam (yang tujuannya untuk "PAKAI" iPhone, bukan "NGOPREK" iPhone -- seperti istri saya) cukup puas dengan itu. "So what?", katanya. Saya tawarkan istri saya untuk men-jailbreak iPhone-nya dan ditolak mentah-mentah. Saya juga setelah mendengar berbagai resiko jailbreak juga jadi ragu-ragu... Udah aja nunggu update Operating System 3.0 yang bisa di-dl gratis bulan juli nanti deh....


Ok guys... itu aja mengenai pendahuluan saya setelah absen hampir 4 tahun dari blogging di foxyland ini. Semoga bisa menjadi ice breaker dan membuat saya semangat untuk blogging lagi... :)

See you around guys!