Monthly Archives: October 2010

Source Code Control (Version Control System)

Software Development လုပ်တဲ့အချိန်မှာ အရေးကြီးတဲ့အချက်တစ်ခုဟာ ရေးနေတဲ့ Sorce Code များကိုထိမ်းသိမ်းရခြင်း ဖြစ်ပါတယ်။ ရေးသားတဲ့နေရာမှာ အမြဲပြုလုပ်ရလေ့ရှိတာက မူရင်းရေးပြီးသား Sorce Code များကိုအကြောင်းအမျိုးအမျိုးကြောင့် ပြင်ပြီးစမ်းရတတ်ပါတယ်။ အဲဒီလိုပြုလုပ်ရင်း မကောင်း၍သော်လည်းကောင်း မူရင်းကိုပြန်လိုချင်၍သော်လည်းကောင်း တစ်ခါတစ်ရံမှာခက်ခဲ့တတ်ပါတယ်။ ဒီနေရာမှာ Source Code Control (Version Control System) တွေဟာ အများကြီးအရေးပါလာပါတယ်။

ဒီလိုအရာတွေကို ပုံမှန်အားဖြင့်ရှင်းလေ့ရှိတာက စမ်းသပ်မှု့ပြင်ဆင်မှု့မလုပ်ခင်မှာ backup လုပ်ပြီးစမ်းသပ်ပြင်ရပါတယ် မူရင်းပြန်လိုချင်တယ်ြဖစ်လာရင်တော့ backup လုပ်ထားတာကို ပြန်သုံးလို့ရပါတယ်။ နောက်ပြီးတော့ backup လုပ်ရာမှာလည်း ဖိုင်တွေကို Version သော်လည်းကောင်း နေ့စွဲအချိန်လိုသော်လည်းကောင်း ထည့်ပြီးမှတ်ထားမယ်ဆိုရင် ထိမ်းသိမ်းရလွယ်ပါတယ်။ backup လုပ်ထားတဲ့ ဖိုင်တွေကိုလည်း အားလုံးအတွက် တစ်နေရာတည်းမှာထားပြီး shared directory အဖြစ်ဆိုရင်အားလုံး အသုံးပြုရလွယ်ကူပါတယ်။ ဒါတွေဟာ Source Code Control ရဲ့အခြေခံအချက်တွေပါ။

Version Control System တွေကိုဘာလို့ အသုံးပြုရတယ်ဆိုတဲ့ အချက်တွေဟာလည်း အရေးကြီးပါတယ်။ shared directory တွေမှာက ပရောဂျက်တစ်ခုအတွက်နဲ့ ပရိုဂရမ်မာနည်းရင် ညှိနှိုင်းသုံးစွဲလို့ရပေမယ့် များလာရင်တော့ Version Control အင်မတန်ရှုပ်ထွေးလာပါတယ် နောက်ပြီးတော့ အများသုံးစွဲတာဖြစ်လို့ မူရင်းထားတဲ့ shared directory မှာပဲ တိုက်ရိုက်ပြုပြင်ဖို့ကြိုးစားရင် တစ်ခုတည်းကို တစ်ချိန်တည်းမှာပဲ လူအများဝိုင်းပြင်မိတာတွေ ဖြစ်လာနိုင်ပြီးတော့ ပြဿနာများစွာ ရှုပ်ထွေးလာမှာဖြစ်ပါတယ်။ နောက်တစ်ချက်က လူအများအသုံးပြုတာဖြစ်လို့ မိမိရေးသားထားတဲ့ Soruce Code များနဲ့အတူ ပြုလုပ်ခဲ့အတဲ့ အပြောင်းအလဲများကို မှတ်တမ်းတင်ဖို့လည်း လိုအပ်ပါတယ် ဒီနေရာမှာ shared directory တွေဟာ Soruce Code ရဲ့အတွင်းမှာပဲ Comment များရေးသားရုံကလွဲပြီး မထောက်ပံ့ပေးနိုင်တော့ပါဘူး။

Shared directory တွေမှာဖြစ်နိုင်တဲ့ အခက်အခဲပြဿနာကို အောက်မှာပုံအဖြစ်နဲ့ပြထားပါတယ်။ ပုံမှာ လူနှစ်ယောက်ဟာ ဖိုင်တစ်ခုကို တစ်ပြိုင်တည်းဖတ်ပြီး ပြုပြင်ကြပါတယ် ဒီနေရာမှာ တစ်ယောက်ပြင်ထားတဲ့ ဖိုင်တစ်ခုကို နောက်တစ်ယောက်က မူရင်းဖိုင်ထင်တဲ့အတွက် ထပ်ရေးတဲ့အတွက်အခက်အခဲဖြစ်နိုင်ပါတယ်။

အလွယ်ဆုံးဖြေရှင်းနည်းကတော့ အသုံးပြုသူတစ်ယောက်အနေနဲ့ ပြုပြင်လိုခဲ့ပါက Lock ချတဲ့နည်းနဲ့ ​ဖြေရှင်းလေ့ရှိပါတယ် အချို့သော Operating System များမှာလည်း Shared file တွေကို Lock ချပေးထားနိုင်ပါတယ်။ သရုပ်ပြပုံကိုအောက်မှာ ကြည့်ရှု့နိုင်ပါတယ်။ Lock ကိုသုံးချင်းအားဖြင့် သာမန်အနေအထားအတိုင်း Shared လုပ်ရင်ြဖစ်လေ့ရှိတဲ့ နှစ်ယောက်ပြိုင်ရေးတဲ့ ပျောက်ဆုံးတာမျိုးမဖြစ်နိုင်တော့ပါဘူး။ ဒါပေမယ့်လည်း Lock လုပ်တဲ့အတွက် ဖြစ်လာနိုင်တာက Lock ပေးနိုင်ဖို့ သက်ဆိုင်တဲ့ System တစ်ခုလိုအပ်လာပါတယ်။ တစ်ခါတစ်ရံမှာ တူညီတဲ့ ဖိုင်တစ်ခုဖြစ်ပေမယ့် မတူညီတဲ့နေရာတွေကို နှစ်ဦးပြင်ဆင်လိုခဲ့ပါက Lock ဟာခွင့်ပြုပေးလို့မရတဲ့အတွက် အခြားပြင်ဆင်လိုသူတစ်ဦးဟာ စောင့်ဆိုင်းရမှာဖြစ်ပါတယ်။

Version Control System(VCS) တွေမှာတော့ အောက်မှာဖော်ပြထားတဲ့ ပုံမှာပြထားတဲ့အတိုင်း အထက်ပါအခက်အခဲတွေကိ ​ဖြေရှင်းလေ့ရှိပါတယ်။ ​ဖြေရှင်းပုံကိုတော့ Copy-Modify-Merge လို့ခေါ်လေ့ရှိပါတယ်။ သာမန် Shared directory တွေအတိုင်း လူအများအနေနဲ့ ကူးယူပြီးတော့ ပြင်ဆင်နိုင်ပါတယ်။ VCS အနေနဲ့ မည်သူကမည်သည့် Version ကို ကူးယူသွားတယ်ဆိုတာ မှတ်သားထားလိုက်ပြီး Repository ထဲမှာမူရင်း Version ရှိမှသာပြင်ဆင်ခွင့်ပေးပါတယ် အကယ်၍သာ အခြားလူတစ်ဦးက ဝင်ရောက်ပြင်ဆင်သွားပါက ပြင်ဆင်ခွင့်မပေးတော့ပဲ Version ပြောင်းသွားကြောင်း အကြောင်းကြားပြီး ပြောင်းလဲသွားတဲ့ Version ကိုထပ်မံဖတ်ရှု့စေပြီး ထပ်မံပြင်ဆင်စေမှာဖြစ်ပါတယ်။ ဒီနည်းအားဖြင့် Shared directory ရဲ့အခက်အခဲကို ပြေလည်စေပြီး Lock မလိုအပ်ပဲ တစ်ပြိုင်နည်း လူအများပြင်ဆင်နိုင်စေမှာ ဖြစ်ပါတယ်။ Lock မလိုအပ်​ဘူးဆိုပေမယ့် ချို့ယွင်းချက်အနေနဲ့ လိုအပ်နိုင်တဲ့ အ​ခြေအနေတွေလည်း ဖြစ်လာနိုင်ပါသေးတယ်။

VCS တွေမှာအများအားဖြင့် အောက်မှာဖော်ပြထားတဲ့ အချက်များကို အထောက်အကူပြုလေ့ရှိပါတယ်။

(၁) Backup and Restore: သက်ဆိုင်ရာဆော့ဝဲ Soruce Code များကို Backup and Restore လုပ်ပေးနိုင်ရပါမယ် Backup and Restore ဆိုရာမှာ အချိန်အလိုက်လုပ်ဆောင်ပေးနိုင်ရပါမယ် ဒီအချက်ဟာတော့ shared directory မှာလည်း လုပ်ပေးနိုင်တာဖြစ်တာကြောင့် ထူးခြားတယ်မဆိုနိုင်ပါဘူး ဒါပေမယ့် VCS မှာတစ်ခါတည်း ပါလာတဲ့အတွက် Backup and Restore ပိုမိုလွယ်ကူနိုင်ပါတယ်။

(၂) Synchronization: ပုံမှန်အားဖြင့် Soruce Code များဟာ တစ်နေရာတည်းမှာ ထိမ်းသိမ်းထားတာဖြစ်ပြီး ပြင်ဆင်လိုတယ်ဆိုပါက မိမိရဲ့ကိုယ်ပိုင် စက်အတွင်းကို ကူးယူပြီးမှသာပြင်ဆင်လို့ရပါတယ် ပြင်ဆင်ပြီးလျင်တော့ မူရင်းထိမ်းသိမ်းတဲ့နေရာကို ပြန်လည်ပို့ပြီး အပြောင်းအလဲများကို မှတ်တမ်းတင်ရပါတယ်။ လူအများတစ်ပြိုင်တည်း ပြင်ဆင်နေတာ ဖြစ်တဲ့အတွက် မိမိယူထားတဲ့ Soruce Code များဟာ နောက်ဆုံးအပြောင်းအလဲကို လိုကောင်းလိုမှာ ဖြစ်လာနိုင်ပါတယ် VCS များမှာတော့ Synchronization ကိုလုပ်ပေးနိုင်စွမ်း ပါလေ့ရှိတာကြောင့် Synchronization ဟာ လူကိုယ်တိုင်လုပ်စရာမလိုအပ်ပါဘူး။

(၃) Undo: မိမိပြင်ဆင်လိုတဲ့ Soruce Code တွေကိုကူးယူပြင်ဆင်ပြီးမှ မူရင်းအခြေအနေ ပြန်လိုချင်ခဲ့လျင် လိုအပ်တဲ့ နောက်ဆုံးအခြေအနေကို အလွယ်တကူပြန်လည်ရရှိနိုင်ပါတယ်။ အများအားဖြင့် မိမိတိုပြန်လည်ရောက်ရှိချင်တဲ့ Version or Revision အခြေအနေကို ပြန်လည်ကူးပြောင်းလို့ရပါတယ်။

(၄) Track Changes: မိမိတို့ပြင်ဆင်လိုက်တဲ့ အကြောင်းအရာတွေကို မှတ်ချက်များရေးသား ပြင်ဆင်ချင်တယ်ဆိုရင် ပြောင်းလဲတဲ့အကြိမ်တိုင်းမှာ မိမိတို့မှတ်သားလိုတဲ့ ပြောင်းလဲချက်များကို ရေးသားထိမ်းသိမ်းလို့ရပါတယ်။ ဒီအချက်တွေဟာ မိမိတို့ရဲ့ဆော့ဝဲမှာ ဘယ်လိုအပြောင်းအလဲတွေ ရှိခဲ့တယ်ဆိုတာတွေကို လိုအပ်လာပါကပြန်လည် စီစစ်ရာမှာ အသုံးပြုကြပါတယ်။

(၅) Track Ownership: လူအများနဲ့ အလုပ်လုပ်တာ ဖြစ်တဲ့အတွက် ပြုလုပ်သွားတဲ့ အပြောင်းအလဲတွေကို ပြန်လည်စီစစ်နိုင်ဖို့လိုပါတယ်။ VCS တွေမှာ Track Changes တွေအပေါ်မှာ ဘယ်သူကဘယ်လို ပြောင်းလဲသွားတယ်ဆိုတာကို ပြန်လည်ပြီးတော့ စီစစ်နိုင်အောင် မှတ်သားထားပေးနိုင်ပါတယ်။ တစ်ချိန်မှာပြဿနာရှိလာရင် မည်သူပြောင်းလဲသွားလို့ ဖြစ်ရတယ်ဆိုတာမျိုး ပြန်လည်ရှာဖွေပေးနိုင်ပါတယ်။

(၆) Sandboxing: မူရင်း Soruce Code များကို ပြင်ဆင်လိုပါက VCS ထံကနေ မိမိတို့ထံကိုကူးယူပြီးတော့ ပြင်ဆင်စမ်းသပ်တာ ဖြစ်တဲ့အတွက် စမ်းသပ်မှု့တွေ ပြင်ဆင်မှု့တွေပြီးတဲ့ အချိန်မှသာ VCS ထဲကို ပြောင်းလဲမှု့ပြုလုပ်တဲ့အတွက် မူရင်း VCS ကိုထိခိုက်စေမှု့မရှိပါဘူး။ ဒီနေရာမှာ VCS ဟာ File Server မဟုတ်ဘူးဆိုတာ ဆိုလိုပါတယ် မိမိတို့ပြင်ချင်သလောက်ပြင် VCS ထဲကိုပို့ဆိုတာမျိုးမလုပ်သင့်ပါဘူး အတိုင်းအတာတစ်ခုအထိ ပြုပြင်ပြီးမှသာ VCS ထဲကိုပြောင်းလဲရပါတယ် ဒါမှသာ Revision တစ်ခုနဲ့တစ်ခု ဘယ်လောက်ကွာခြားတယ်ဆိုတဲ့ Track Changes များဟာအသုံးဝင်မှာဖြစ်ပါတယ်။

(၇) Branching and merging: အပေါ်မှာပြောခဲ့တဲ့ Sandboxing ဟာကိုယ်ကူးယူထားတဲ့ Source code များကိုစိုက်ကြိုက် စမ်းသပ်မှု့ဖြစ်ပါတယ် အကယ်၍သာ အဲဒီ့စမ်းသပ်မှု့များမှာလည်း အဆင့်တွေများနိုင်သလို Track Changes တွေကိုလည်း မူရင်း VCS လိုလိုချင်တယ်ဆိုရင် VCS မှာပဲ စမ်းသပ်ဖို့အတွက် Branching အဖြစ်ခွဲထုတ်ပြီး အသုံးပြုနိုင်ပါတယ်။ Branch တစ်ခုစမ်းသပ်ပြီးလို့ မူရင်းထဲကို ပြောင်းလဲမှု့တွေကို ပေါင်းထည့်တာကိုတော့ VCS မှာ merging လုပ်တယ်လို့ ခေါ်လေ့ရှိပါတယ်။

( VCS များမှအခေါ်အဝေါ်များ၊ SVN ဖြင့်သရုပ်ပြ၍ ပုံနှင့်ပြထားခြင်းများ ဆက်ရန် )

အောက်ဖော်ပြပါ References များမှဖတ်ပြီး အဆင်ပြေသလို ရေးထားခြင်းဖြစ်သည် မူရင်းနှင့်လွဲနိုင်ပါသည် စိတ်ဝင်စားလျှင်သွားဖတ်ပါ စာရင်းများအောက်တွင်ပြထားသည်။

References

[1] http://betterexplained.com/articles/a-visual-guide-to-version-control/
[2] http://svnbook.red-bean.com/en/1.5/index.html

[3] http://www.dwheeler.com/essays/scm.html
[4] http://en.wikipedia.org/wiki/Version_control
[5] http://en.wikipedia.org/wiki/Versioning_file_system
[6] http://www.ericsink.com/scm/source_control.html
[7] http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
[8] http://better-scm.berlios.de/comparison/

မူတူးနဲ့ ဆာမိ

တစ်ခါက မြို့တစ်မြို့မှာ မူတူးနဲ့ဆာမိဆိုတဲ့ ကုလားသူငယ်ချင်း နှစ်ယောက်ရှိတယ် အင်မတန်ချစ်ကြတဲ့ သူငယ်ချင်းတွေဆိုတော့ တစ်ယောက်က တစ်ခုခုလုပ်ရင် နောက်တစ်ယောက်ကလည်း လိုက်လုပ်တာလည်း ထုံးစံလိုဖြစ်နေတယ် တစ်ယောက်က စက်ဘီးဝယ်တော့ နောက်တစ်ယောက်လည်း စက်ဘီးလိုက်ဝယ် တစ်ယောက် အိမ်ပြောင်းရင် နောက်တစ်ယောက်လည်း လိုက်ပြောင်းနဲ့ အကုန်လိုက်လုပ်တတ်တယ်။ တစ်ရက်တော့ ဆာမိက ဘယ်သူစည်းရုံးလိုက်တယ်မသိဘူး ဗုဒ္ဓဘာသာကိုပြောင်းလိုက်တယ် ဘာသာပြောင်းတော့ အိမ်မှာဘုန်းကြီးဆွမ်းကျွေးလုပ်တော့ သူငယ်ချင်း မူတူးကိုလည်းဖိတ်ပါတယ်။

သူငယ်ချင်း မင်းကတော့ ဘာသာကမတူဘူးပေါ့ ဒါပေမယ့် ထမင်းနဲ့မုန့်တော့လာစားပါကွာလို့ ဖိတ်ထားတော့ မူတူးလည်းလာပါတယ်။ သူကလည်း ဗုဒ္ဓဘာသာဆိုတာ ဘယ်လိုလည်းမသိဘူးပေါ့ဆိုပြီး သွားကြည့်ဦးမယ်ဆိုပြီး ဘုန်းကြီးတရားဟောကတည်းက အစောကြီးရောက်နေပြီး ဘေးကနေကြည့်တယ်။ တရားဟောတဲ့ ကိုယ်တော်ကလည်း အာပေါင်အာရင်းသန်သန်နဲ့ ဗုဒ္ဓံ သရဏံ ဂစ္ဆာမိ ဓမ္မံ သရဏံ ဂစ္ဆာမိ …. ရှေ့ကနေတရားကို လိုက်ဆိုခိုင်းတယ် ခဏနေတော့ တရားနာတဲ့လူအုပ်ကြီးက သာဓု သာဓု ဆိုပြီး အသံကျယ်ကြီးနဲ့ အော်ကြတော့ သာဓုဆိုတာ ဘာတုံးသွားမေးတော့ ကောင်းတယ် ကောင်းတယ်လို့ ဆိုလိုတယ်ဆိုတော့ မူတူးလည်းသဘောကျသွားတယ်။

မူတူးလည်းစဉ်းစားတယ် ဆာမိကိုတော့ ဒီတစ်ခါတော့ရှုံးလို့မဖြစ်ဘူး ငါလည်းဘာသာပြောင်းမယ်ဆိုပြီး တရားဟောကိုယ်တော်ကို သွားလျှောက်တယ် သူလည်းဆွမ်းကျွေးလုပ်ပြီး ဘာသာပြောင်းချင်လို့ နောက်နေ့သူ့အိမ်ကို ဆွမ်းစားကြွပါဆိုပြီးပင့်တယ် တစ်ခါတည်း တရားနာပရိတ်သတ်ကိုလည်း နောက်နေ့သူ့အိမ်ကိုလည်း တရားနာရင်း ဆွမ်းကျွေးဖိတ်ပါတယ်ဆိုပြီး တစ်ခါတည်းဖိတ်ခဲ့တယ်။

မူတူးအိမ်မှာဆွမ်းကျွေးစတော့ ဘုန်းကြီးကလည်း ဒါယိကာကြီး ဘုန်းကြီးတိုင်ပေးသလို လိုက်ဆိုဆိုပြီးတိုင်ပေးတယ် “ဗုဒ္ဓံ သရဏံ ဂစ္ဆာမိ” အဲဒီ့မှာမူတူးလည်း နည်းနည်းအံ့ဩသွားတယ် ဒါနဲ့ဘုန်းကြီးကို အရှင်ဘုရားလွဲနေပါတယ် တပည့်တော်က မူတူးပါ ဆာမိမဟုတ်ပါဘူး ပြန်လျောက်ရတယ်။ ဘုန်းကြီးကလည်း အေး.. ဒါယိကာကြီး ဘုန်းကြီးသိပါတယ် လိုက်သာဆိုပါ ဗုဒ္ဓံ သရဏံ ဂစ္ဆာမိ လို့ထပ်တိုင်ပေးတယ်။ မူတူးကလည်း မဟုတ်သေးဘူးဘုရား တပည့်တောက် မူတူးပါလို့ ထပ်လျောက်ြပန်တယ်။ ဒီတော့မှ တရားဟောကိုယ်တော်လည်း သဘောပေါက်သွားပြီး စဉ်းစားတယ် အင်း… ငါတော့ တရားစာကို ပြင်မပေးရင် ဆွမ်းကျွေးပျက်ဖွယ်ရှိတယ် ဆိုပြီးတော့

ကဲကဲ ဒါယိကာကြီးမူတူး လိုက်ဆိုလိုက်ဆို ဗုဒ္ဓံ သရဏံ ဂစ်မူတူး ဓမ္မံ သရဏံ ဂစ်မူတူး သံဃံ သရဏံ ဂစ်မူတူး

အဖေ​ပြောတဲ့ အီကြာကွေး

သားအဖနှစ်ယောက် လက်ဘက်ရည်ဆိုင် တစ်ဆိုင်ရောက်လို့ အီကြာကွေးစားကြရင် အမြဲပြောလေ့ရှိတာက ဒါကအီကြာကွေးအစစ် ဒါကအီကြာကွေးအတုလို့ ပြောရင်းစားတတ်တယ်။ ဧည့်သည်ပါလာရင် ဘာပြောတာလဲလို့ ခဏခဏရှင်းပြရတယ်။ အဖေကကြံကြံဖန်ဖန် ပုံပြင်တစ်ခုပြောပြဖူးတယ် အီကြာကွေးဖြစ်လာတဲ့ ပုံပြင်ပေါ့လေ။ တစ်ခါက တရုတ်ပြည်မှာ အီကြာကွေးဆိုတဲ့ လူကြီးတစ်ယောက်ရှိတယ်တဲ့ ဖြစ်ချင်တော့သူကလည်း အင်မတန်ဆိုးတဲ့ လူဆိုးကြီးဆိုပဲ ဂန္တဝင်လူဆိုးကြီးဆိုရမယ် ငတက်ပြားကိုဖမ်းသလို ဘုရင်ကိုယ်တိုင်ဆင်းဖမ်းမှ မိတော့တယ်​ပြောတယ်။ ဘုရင်ကလည်း လူဆိုးကြီးဖမ်းမိတော့ နောက်လူတွေ မဆိုးရဲအောင်ဆိုပြီး စံပြဖြစ်အောင်ဒဏ်ပေးမယ်ဆိုပြီး တခြားရာဇဝတ်သားတွေ သတ်သလိုမျိုး ခေါင်းဖြတ်မသတ်ပဲ ပေါင်နှစ်ချောင်းကို မြင်းနဲ့ဆွဲပြီးပေါင်ဖြဲသတ်လိုက်တယ်။ နောင်လာနောက်သားတွေ အီကြာကွေးလို မဆိုးရဲအောင် အမှတ်ရနေအောင်ဆိုပြီး ဂျုံကိုရှည်ရှည်လေး နှစ်ခေါက်ခေါက် ဆီနဲ့ကြော်တဲ့မုန့် တစ်မျိုးကိုလုပ်စေတယ် မုန့်ကစားချင်ရင်ကပ်ထားတဲ့ နှစ်ချောင်းကိုဆွဲခွာစားရတော့ အီကြာကွေးကို ပေါင်ဖြဲသတ်တာ အမှတ်ရစေတယ်ဆိုပဲ။ တစ်ချို့အီကြာကွေးဆိုင်တွေက ဂျုံကိုနှစ်ခေါက်မခေါက်ပဲ အလည်ကနေဖြတ်ပြီးတော့ နှစ်ခုထပ်ကြော်တယ် အဲဒီတော့ ပေါင်ကဆွဲဖြဲလို့မရတော့ ကျွန်တော်တို့သားအဖက အီကြာကွေးအတုလို့ခေါ်လိုက်တာပဲ။ အခုထိတော့ စင်ကာပူမှာ အီကြာကွေးက အစစ်ကိုမမြင်မိသေးဘူး အကုန်အတုဖြစ်နေတယ်။