Monday, February 28, 2011

WinMerge and Tips for work

WinMerge

တစ္ခါတေလ tedious အလုပ္ေတြလုပ္ရရင္ စိတ္ပ်က္ဖုိ႕ေကာင္းပါတယ္။ လိုင္း တစ္ေထာင္ေလာက္ရိွတဲ႔ class တစ္ခုကို ၁၀၀၇ လုိင္းေလာက္ရိွတဲ႔ ေနာက္တစ္ခုနဲ႕ယွဥ္ျပီး အဲဒီထဲမွာ မတူတဲ႔ လုိင္း ၂၀ ေလာက္ကို တိုက္ၾကည္႕မယ္ဆိုပါေတာ႔။ အျဖစ္အမ်ားဆံုးကေတာ႔ Git ေတြ Borland Starteam ေတြလို code control system ေတြႊမသံုးပဲ ကမာၻေက်ာ္ developer ေတြက တစ္ေယာက္တစ္ေပါက္ေရးထားတာကို ဘယ္ဟာ ေနာက္ဆံုးမွန္းမသိေတာ႔တဲ႔အခါမ်ိဳး being Lost in the midst ျဖစ္ေနတဲ႔အခါမ်ိဳးမွာ ၾကံၾကံဖန္ဖန္ေတြလုပ္ရေလ႔ရိွပါတယ္။

ထူးထူးျခားျခားမဟုတ္ပါဘူး။ အဲဒီ winMerge ေလး download လုပ္ျပီး compare လုပ္လုိက္ရင္ အဆင္ေျပသြားတတ္ပါတယ္။ ကမာၻေပၚမွာ ကိုယ္အဆင္ေျပဖုိ႕ တျခားသူေတြ အားလံုးထြင္ထားတယ္လို႕ သေဘာထားပါ။ ဘယ္ေတာ႔မွ ရမ္းျပီး tedious အလုပ္ေတြကို ဘာ tools မွမသံုး၊ ဘာ shortcuts မွ မသံုးဘဲမလုပ္လိုက္ပါနဲ႕။ စဥ္းစားပါ။ ေသြးေအးပါ။ ဒီထက္ေကာင္းတဲ႔နည္းရိွရမယ္လို႕ ေတြးပါ။

ေနာက္တစ္ခုက စုထားပါ။ Tools ေတြ အသံုး၀င္တယ္ဆိုရင္ စုသိမ္းထားပါ။ အခုလုပ္ေနတဲ႔ company က ကိုယ္႔အေဖ company မဟုတ္တဲ႔အတြက္ မၾကာခင္ ေျပာင္းရင္ေျပာင္းရမယ္လို႕သေဘာထားပါ။ ေျပာင္းရင္ ကိုယ္႔ရဲ႕ development environment ကို တစ္နာရီအတြင္း ျပန္ရႏိုင္ေအာင္ ေသခ်ာစုသိမ္းထားပါ။

Be Effective လို႕ ကိုယ္႔ကိုယ္ကို သတိေပးပါ။ At the end of the day, nobody sees how did you do, but she/he will only see how productive you are. အဲဒါကို သေဘာေပါက္ရင္ ရံုးမွာ ဘာမွ အလုပ္သိပ္မလုပ္ဘဲ တစ္ခ်ိဳ႕လူေတြ ကိုယ္႔ထက္ ျမန္ျမန္ျပီးတာကို နားလည္လာပါလိမ္႔မယ္။ မစဥ္းစားဘဲ trial-and-error မလုပ္သင္႔တာကို လုပ္ေနရင္ အခ်ိန္မကုန္သင္႔တာ ကုန္တာပါပဲ။ အဲဒီလိုမလုပ္ျဖစ္ေအာင္၊ မ်ားမ်ားေလ႔လာျပီး၊ မ်ားမ်ား ဖတ္ထားဖုိ႕လုိပါတယ္။

ေနာက္တစ္ခုကေတာ႔ စုစုစည္းစည္းထားတတ္တတဲ႔အေလ႔အထလုပ္ပါ။ Folder Name ကေနစေျပာခ်င္ပါတယ္။
ကိုယ္႔အေဖနာမည္ေတြ(ဥပမာ New Folder)၊ ရည္းစားနာမည္ေတြ(ဥပမာ၊ Jolie,J-Lo)၊ ၾကီးေတာ္ၾကီးရဲ႕ ငယ္နာမည္ေတြ(ဥပမာ၊ Gwat_Htaw) စတဲ႔ အဓိပၸာယ္မရိွတဲ႔ ဟာေတြကိုေရွာင္ပါ။ Structure က်ဖို႕သတိထားျပီး အခ်ိန္နည္းနည္းေပးလုိက္ပါ။ workspace ေတြကုိလည္း သတ္သတ္မွတ္မွတ္ထားပါ။ ကိုယ္႔ရဲ႕ IDE ေတြ၊ Web Server ေတြ ကို structure က်က်ထားရင္ သြားရလာရလြယ္ပါတယ္။ ေနာက္ျပီး တကယ္ effective ျဖစ္တဲ႔ developer က အျမဲသြားေနရတဲ႔ location ကို click သံုးခါအတြင္း သြားႏိုင္ဖုိ႕ ျပင္ဆင္ထားရပါတယ္။ shortcuts ေတြ၊ quick launch ေတြ လုပ္ထားပါ။

Log ရိုက္ရင္လည္း thayparP(ေသပါျပီ)။errortaetawyae(error တဲ႔ေတာ္ေရ႕)။ errorDmhar(Error ဒီမွာ)၊ ngardotthahtaythautpaw(ငါတုိ႕သူေဌးေသာက္ေပါ) ဆိုတာေတြကို Log မလုပ္ပါနဲ႕။ အဓိပၸာယ္ရိွရိွလုပ္ပါ။ အဲဒါေတြက တစ္ျခားလူေရးခဲ႔တဲ႔ တလြဲေတြကို ေျပာတာမဟုတ္ပါဘူး။ ကြ်န္ေတာ္တို႕ငယ္တုန္းက လုပ္ခဲ႔တာေတြ ေျပာတာပါ။ ဘာလို႕ log ေရးၾကတာလဲဆိုတာကိုစဥ္းစားၾကည္႕ပါ။ ဘယ္နားမွာ error ရိွလည္း သိဖုိ႕နဲ႕၊ ေနာက္တစ္ခုက error မျဖစ္ခင္ ေနာက္ဆံုး ေရာက္ခဲ႔တဲ႔အဆင္႔ကိုသိဖို႕ လုိ႕အၾကမ္းဖ်င္းေျပာႏိုင္တယ္။ ခက္ခက္ခဲခဲေတြ သင္ေပးေနဖုိ႕မလုိပါဘူး။ tomcat ေတြ weblogic ေတြမွာ log ကို ဘယ္လိုေရးလဲ၊ mysql မွာ log file ဘယ္လုိေရးထားလဲ ရွာဖတ္ၾကည္႕ရင္ သူတို႕ ဘယ္ေလာက္စနစ္တက်ေရးျပီး ဘယ္ေလာက္ descriptive ျဖစ္သလဲသိႏုိင္ပါတယ္။ ကိုယ္ေရးထားတဲ႔ ေသပါျပီေတြ၊ error တဲ႔ေတာ္ေရ ေတြက ကိုယ္႔ဘာသာေတာ႔ သိပါတယ္။ ဒါေပမယ္႔ တျခားသူဖတ္ရင္ နားလည္မွာမဟုတ္ဘူး။ ဘာကိုရည္ညႊန္းမွန္းမသိဘူး။ နမူနာတစ္ခုေရးရရင္ method တစ္ခုဆိုပါေတာ႔ parameters သံုးခုပါတယ္။

pubilc List checkEmployee(String nric, int age, String remarks){

logger.debug("checkEmployee( String nric="+nric+", int age="+age+", String remarks="+remarks+")")
....
....
....

}

အဲဒီလိုဆိုပါေတာ႔ဗ်ာ။ အဲဒါေလး log မွာထြက္လာရင္

checkEmployee( String nric=S8185466A, int age=23, String remarks=Pending)

အဲဒီမွာ ေျပာခ်င္တာက ဘယ္ method သြားသလဲဆိုတာလည္းသိတယ္။ သူ႕မွာပါတဲ႔ param ေတြကိုလည္း သိရတယ္။ တျခားသူေတြလည္းနားလည္ဖုိ႕လြယ္တယ္။ လိုင္းေတြလည္းမမ်ားဘူး။ အဲဒီလို သပ္သပ္ရပ္ရပ္ျဖစ္ေအာင္ သတိထားျပီး ေရးဖုိ႕လုိတယ္။ debug ကိုပဲ သံုးပါ။ မလုိဘဲ INFO ေတြမသံုးပါနဲ႕။ production မွာက INFO နဲ႕ ERROR ပဲျပၾကပါတယ္။ အဲဒီေတာ႔ ကိုယ္႔ရဲ႕ Local machine မွာ၊ UAT မွာစမ္းတာေတြကို ျပန္လည္းဖ်က္ေနစရာမလုိပါဘူး။

ဒါေတြကေတာ႔ လုပ္ငန္းခြင္မွာ greenhorns ေတြ သတိထားသင္႔တာေတြပါ။ အဆင္ေျပမယ္ဆုိရင္ Oreily ကထုတ္တဲ႔ The Productive Programmer ByNeal Ford ကိုလည္းဖတ္ပါ။ ကိုယ္႔အတြက္ လုိတာေတြကို မ်ားမ်ားေလ႔လာပါ။ ေစာေစာစီးစီး အပ်င္းထူျပီး မၾကိဳးစားပဲ ေရသာခိုေနရင္ တကယ္ကိုယ္႔ထက္ေတာ္တဲ႔သူေတြနဲ႕ ယွဥ္ရတဲ႔အခါၾကမွ ကုိယ္က handicap ဘ၀ကိုေရာက္ေနတာကို မအံ႔ၾသစရာေတြ႕ရပါလိမ္႔မယ္။ အေခ်ာင္ခိုတယ္ဆိုတာ ေလာေလာဆယ္ေတာ႔သက္သာသလိုပဲ၊ ဒါေပမယ္႔ ကိုယ္႔မွာ တကယ္တတ္ရမယ္႔ အခြင္႔အလမ္း ဆံုးရွံဳးသြားတယ္။

ေနာက္တစ္ခုက complaint မမ်ားနဲ႕။ မလုိအပ္ဘဲ ျပႆနာမရွာနဲ႕။ ျပႆနာကိုလည္း ပံုၾကီးမခ်ဲ႕နဲ႕။ Attitudes မွန္ဖုိ႕ၾကိဳးစားပါ။ ကိုယ္ေက်နပ္တဲ႔လစာနဲ႕ အလုပ္၀င္ခဲ႔ၾကတာ။ ေနာက္မွ နည္းတယ္ထင္ရင္ ပိုေတာင္းၾကတယ္။ ေတာင္းလို႕မရရင္ ကိုယ္႔ကိုယ္ကိုျပန္ေမးပါ။ ကိုယ္႔မွာ တကယ္အရည္အခ်င္းရိွရင္ ပိုေကာင္းတဲ႔ေနရာကိုေျပာင္းပါ။ ေလပဲအဖတ္တင္မယ္႔စကားေတြ သိပ္မေျပာပါနဲ႕။ Be Professional. တခါတေလ ကိုယ္႔ကို သိပ္ခက္တာေတြခိုင္းတယ္လုိ႕ထင္ရင္ တျခားသူေတြကိုလည္းၾကည္႕ပါ။ ခက္တယ္ဆိုတာက မလုပ္တတ္ေသးလုိ႕လည္းျဖစ္ႏိုင္တယ္။ ကိုယ္လုပ္ႏိုင္တာထက္ နည္းနည္းပိုခက္တာကို ခုိင္းရင္ေက်းဇူးတင္လုိက္ပါ။ မဟုတ္ရင္ အဲဒါေတြ ဘယ္ေတာ႔မွ လုပ္ႏုိင္မွာမဟုတ္ဘူး။ လုပ္ၾကည္႕ရင္းနဲ႕မွပဲတိုးတက္ပါတယ္။

စိတ္ခ်မ္းသာေအာင္ထားပါ။ အဲဒါက ဘာမွလည္းမဆုိင္ဘူးလုိ႕အခုအခ်ိန္မွာ ထင္ရင္လည္းထင္မယ္။ အလုပ္ဆိုတာ တစ္ႏွစ္၊ႏွစ္ႏွစ္လုပ္ရမွာမဟုတ္ဘူး။ ထီမေပါက္ရင္ တစ္သက္လံုးလုပ္ရမယ္႔ ကိစၥ။ အဲဒါကို သေဘာထားမွန္မွန္၊ ေပ်ာ္ေပ်ာ္ရႊင္ရႊင္နဲ႕လုပ္ႏုိင္ဖုိ႕ၾကိဳးစားပါ။ စိတ္မဖိစီးပါေစနဲ႕။ တစ္နာရီနဲ႕မျပီးရင္ ႏွစ္နာရီလုပ္ပါ။ ကိုယ္႔ရဲ႕ အရည္အခ်င္းကို ျဖည္႕ဆည္းေနတုန္းမွာ သိပ္ျပီး သက္သာေအာင္မေနပါနဲ႕။ ဒါေတြက ရင္းႏွီးေနတာပါ။ ေနာက္ပိုအဆင္႔ျမင္႔တဲ႔ အလုပ္အတြက္ ျပင္ဆင္ေနတာ။ software house ေတြက အေကာင္းဆံုး battle fields ေတြပါပဲ။ အဲဒီမွာ timelines နဲ႕ကြက္တိလုပ္ႏိုင္တဲ႔သူဟာ ေနာက္ပိုလစာေကာင္းျပီး အလုပ္နည္းသြားတဲ႔အလုပ္ေတြမွာ သက္သက္သာသာေနႏိုင္ပါတယ္။ အလုပ္မ်ားတာကို စိတ္မညစ္ပါနဲ႕။ စိတ္ညစ္တာက ပိုျပီးအားကုန္ပါတယ္။ အလုပ္လုပ္ရတာကိုေပ်ာ္တဲ႔သူဟာ အလုပ္မ်ားမ်ားလုပ္ရလုိ႕ ဘာမွမျဖစ္ပါဘူး။ ေသလည္းမေသပါဘူး။ စိတ္မပူပါနဲ႕။ ေပ်ာ္ေပ်ာ္ရႊင္ရႊင္နဲ႕ အလုပ္ျပီးရင္ ရမယ္႔ ေက်နပ္မႈအတြက္ အလုပ္လုပ္ပါ။ ကိုယ္လုပ္ေပးလုိက္တဲ႔အလုပ္ေၾကာင္႔ တပါးသူ အဆင္ေျပသြားတာကို အေလးထားပါ။ အဲဒါဆိုရင္ လုပ္ငန္းခြင္မွာ ေပ်ာ္လာပါလိမ္႔မယ္။

Be Smart.
Be Attentive
Be Understand
Be Trustworthy

Be Professional.
Be Ambitious
Be Workoholic

အတုိေကာက္ကေတာ႔ Be S.A.U.T- P.A.Wပါပဲ။
အဲဒီလိုေ-ာက္ေပါေတြပဲ ေအာင္ျမင္ၾကပါတယ္။

ကြ်န္ေတာ္တုိ႕လည္း ေ-ာက္ေပါျဖစ္ေအာင္ ၾကိဳးစားၾကပါစို႕လားဗ်ာ ...........။ ။

R3gAЯDs,
Zer0/0=0ero

Wednesday, February 23, 2011

decode in oracle.

decode in oracle.

တခါတေလ oracle မွာ decode ဆိုတာကိုေတြ႕ရတတ္တယ္။
အဲဒါကို ရွာၾကည္႕ရမွာပ်င္းတဲ႔သူေတြအတြက္ ၾကိဳဖတ္ထားလုိ႕ရေအာင္ပါ။

SELECT name,
decode(id,'B0001','ID_1,
'B0002','ID_2,
'B0003','ID_3,
'ID_DEFAULT')ID_MASK


FROM customer;

အဲဒါၾကည္႕ရင္ CASE မသံုးခ်င္လုိ႕ အလြယ္လုပ္ထားတာကို ေတြ႕ရပါမယ္။
ဆိုလိုတာက id ကိုၾကည္႕ျပီး B001 ကို ID_1 လို႕ေျပာင္းတာကို ေရးရင္ ရွည္လို႕ လြယ္လြယ္ကူကူ decode function ေလးနဲ႕သပ္သပ္ရပ္ရပ္ေရးလုိက္တာပါပဲ။ ID_MASK က ေတာ႔ alias တစ္ခုေပးလုိက္တာပါပဲ။ ဘာမွမဟုတ္ပါဘူး။

အဲဒါကို IF-THEN-ELSE နဲ႕ေရးရင္ ဒီလိုရပါမယ္
if (id='B0001') then
ID_MASK:='ID_1'
esle if (id='B0002') then
ID_MASK:='ID_2'
else if (id='B0003') then
ID_MASK:='ID_3'
else
ID_MASK:='ID_DEFAULT'
decode ဆိုလို႕ ဘာမ်ားလဲမသိျဖစ္တတ္တာပါ။ အမွန္က ေထြေထြထူးထူးမဟုတ္ပါဘူး။

decode( expression , search , result [, search , result]... [, default] )

အဲဒီလိုမွတ္လုိ႕ရပါတယ္။ NULL ဆိုရင္ 0 ေျပာင္းထည္႕မယ္။ မဟုတ္ရင္ default အတိုင္းျပမယ္ဆိုတာေတြေရးလုိ႕လည္းရပါတယ္။

DECODE(EXTRA_PREMIUM,NULL,0,EXTRA_PREMIUM)

အေပၚက decode မွာဆိုရင္ extra premium field က Null ဆိုရင္ zero လို႕ျပမယ္။ Null မဟုတ္ရင္ သူ႕တန္ဖိုးအတုိင္းျပမယ္။

အလုပ္လုပ္ေနရင္း အသံုးလိုတာေလးေတြ share လိုက္တာပါ။ အေသးအဖြဲေတြေပမယ္႔ သိထားရင္ အသံုး၀င္ႏိုင္ပါတယ္။

Agile Samurai

Agile Samurai

လိုင္ဘရီမွာ စာအုပ္ေကာင္းေလးေတြရခဲတတ္ပါတယ္။ လုငွားေနလို႕ပါ။
ဒီတစ္ခါေတာ႔ အရင္က Funan စာအုပ္ဆိုင္မွာျမည္းခဲ႔တဲ႔ Agile Samurai စာအုပ္ရလာပါတယ္။

Software Engineering ဟာ တခါတေလၾကရင္ ခန္႕မွန္းလုိ႕မရတာေတြကို ခန္႕မွန္းၾကရတာပဲ။
တစ္မိနစ္မွာ မုန္႕ ႏွစ္ခုစားႏိုင္ရင္ ႏွစ္မိနစ္မွာ မုန္႕ ေလးခု ေပါ႔။
ဒါေပမယ္႔ ၂၄ နာရီဆိုရင္ေရာ ဘယ္လိုေျဖမလဲ။ ဆတိုးက အျမဲမမွန္ပါဘူး။

ဆယ္တန္းေျဖျပီးစတုန္းက အဂၤလိပ္တစ္ေယာက္က ကြ်န္ေတာ္တို႕ကို အခ်ိန္ပိုင္း အဂၤလိပ္စာသင္ေတာ႔။ တစ္ခုေမးတယ္။ မင္းတုိ႕ႏိုင္ငံမွာ ဆိုက္ကားခနဲ႕ ကားခ ဘယ္ဟာေစ်းေပါလဲဆိုေတာ႔၊ ၀မ္းသာအားရ ဆုိက္ကားက ေပါတာေပါ႔ကြ လို႕ေျဖလုိက္တယ္။ သူက ေမးတယ္။ ပဲခူးအထိသြားရင္ ဆုိက္ကားခ ဘယ္ေလာက္က်မလဲတဲ႔။

အဲဒါကို ငယ္ကတည္းက စြဲျမဲေနေအာင္မွတ္မိတယ္။ ေမးခြန္းရဲ႕ ဆန္႕ထြက္သြားတတ္တဲ႔သေဘာကိုသိရင္ project timeline ရဲ႕ unexpected result ေတြကိုလည္း နားလည္ႏိုင္ပါတယ္။ real world မွာ black and white သဲကြဲတာမရိွပါဘူး။ ဒီလိုပဲ မီးစင္ၾကည္႕ကရတာပါပဲ။

အလြယ္ဆံုး mandays တြက္နည္းက ကိုယ္တစ္ရက္ လုပ္ႏုိင္မယ္ထင္ရင္ 1.33 နဲ႕ေျမွာက္။ ၃၃ % ကို buffer လုပ္ထား။ အဲဒါဆိုရင္ ၁ ရက္ခြဲေလာက္လုိ႕ ေျပာလုိ႕ရတယ္။ ဒါကလည္း အျမဲမွန္မွာေတာ႔မဟုတ္ဘူး။ General ေျပာၾက၊ တြက္ၾကရတာပါ။

ဒီစာအုပ္ကိုေတာ႔ recommend လုပ္ပါတယ္။ Agile ၀ါသနာပါရင္ ေလ႔လာသင္႔ပါတယ္။

Agile အေၾကာင္း သိပ္မေျပာျဖစ္ေပမယ္႔ သေဘာအက်ဆံုး development architecture ျဖစ္ပါတယ္။ အဓိက သံုးမ်ိဳးခြဲျပီးေျပာေလ႔ရိွပါတယ္။ Traditional, Agile and Extreme ပါ။

Traditional ေတြကေတာ႔ ေက်ာင္းမွာအေတာ္ေလးသင္ျပီးပါျပီ။ မွတ္မိမလားေတာ႔မသိပါဘူး။ sequential ေတြ၊ spiral ေတြ waterfall ေတြေလ။ အဲဒါေတြရဲ႕အားနည္းခ်က္က requirement gathering phase ျပီးရင္ users ကို ေတြ႕ခ်င္ေတာ႔ဘူး။ေတြ႕ခ်င္ေတာ႔ဘူး ျငင္းတာပါ။ အဲဒါက အဓိက က်ဆံုးခန္းပါပဲ။

Customers လိုခ်င္တာ ကြ်န္ေတာ္တို႕ software သမားေတြ တကယ္သိတာ ရွားပါတယ္။ သိတယ္လို႕ထင္တာနဲ႕ သိခ်င္ေယာင္ေဆာင္တာပဲမ်ားပါတယ္။ တကယ္သိဖို႕ဆိုတာ အခ်ိန္အမ်ားၾကီးေပးရပါတယ္။ Business logic ေတြအရ ကြ်န္ေတာ္တုိ႕ မထင္တာေတြ အမ်ားၾကီးရိွတတ္ပါတယ္။ အဲဒါကို တခါတည္းေမးျပီး တခါတည္းသေဘာအေပါက္ၾကီးေပါက္သြားတယ္ဆိုတာ စိတ္ကူးယဥ္တာပါ။ အထူးသျဖင္႔ စင္ကာပူမွာ စိတ္ကူးယဥ္ေတြ သိပ္မ်ားပါတယ္။

System တစ္ခုကို အထိေရာက္ဆံုးျဖစ္ဖုိ႕ Development Phase ေတြမွာ Users ေတြကို အဆင္႔တုိင္း ပါ၀င္ေစတာဟာ အေကာင္းဆံုးပါပဲ။ ဒါကို မင္းလိုခ်င္တာ ဒီအတုိင္းလားဆိုျပီး အပတ္တုိင္းေမးေနရင္၊ Project ျပီးသြားမွ တလြဲၾကီးျဖစ္ရတာတို႕ မလိုအပ္ပဲ CR(Change Request) လုပ္ရတာနည္းသြားပါတယ္။ အဆင္႔တုိင္းမွာ business flow အားျဖင္႔လည္း စိတ္တုိင္းက် ျဖစ္သြားေစပါတယ္။ ပိုေကာင္းတာတစ္ခုက Users ေတြရဲ႕ ယံုၾကည္မႈကိုတည္ေဆာက္ႏိုင္တာျဖစ္ပါတယ္။ အခက္အခဲကေတာ႔ စနစ္က်ျပီး ညီညြတ္တဲ႔ team လိုအပ္တာပါ။ အဲဒါေတြက Agile သေဘာတရား တစ္ခ်ိဳ႕ပါပဲ။ အရွင္းဆံုးေျပာရရင္ Users နဲ႕ေပါင္းျပီး testing ကို phase တိုင္းမွာ ထည္႕သြားတာပါပဲ။ အဲဒီလို architecture မ်ိဳးကို Agile လို႕ေခၚတြင္ေလသတည္းေပါ႔ဗ်ာ။

Notes:
Thank you my office for letting me read @ ()ffice(-)ours :P

Java tips and trick.

Java tips and trick.

မေန႕ကတစ္ခုေတြ႕တယ္။
ၾကံဳဖူးရင္သိမွာပါ။ Java ေရးတဲ႔သူတုိင္းက 1.5 ကို standard အေနနဲ႕ေရးတယ္။
လက္ေတြကလည္း 1.5 လက္ေတြပဲ။ အက်င္႔ကိုပါေနတာ။

နမူနာတစ္ခုရိုက္လုိက္တယ္။

BigDecimal premium=new BigDecimal(0);

အဲဒါမ်ိဳးလည္းလုပ္တယ္။ အက်င္႔ပါေနလို႕။ ဘာမွမျဖစ္ဘူး။ သုည၀င္သြားတယ္။ premium value ထဲကို။ ျပႆနာက ေနရာတုိင္း 1.5 and above မသံုးဘူး။ 1.4 မွာ run ၾကည္႕ရင္ အဲဒီ တလြဲ error ေတြ႕ရမယ္။ Sun Forum မွာလည္း ေရးထားပါတယ္။
1.5 မွာက BigDecimal ကို int အေနနဲ႕ initialized လုပ္လုိ႕ရပါတယ္။ 1.4 မွာမရပါဘူး။
BigDecimal premium=new BigDecimal("0");
လြယ္လင္႔တကူ double code သာ ရဲရဲၾကီး ကုတ္လိုက္စမ္းပါ။

ေရးခဲ႔တဲ႔ colleague က DBS ဘဏ္ကိုေျပာင္းေတာ္မူသြားလုိ႕၊ သူေရးထားတဲ႔ Spring batch ေတြကို တစ္ရက္ခြဲေလာက္နဲ႕ လႊဲေျပာင္းယူထားပါတယ္။

ၾကံဳရတာေတြကလည္း ၾကံၾကံဖန္ဖန္ပါပဲ။ အီေမးလ္ပို႕တာ colon ( : ) ေနရာလြဲေနတယ္ဆုိလုိ႕ ေသခ်ာျပဴးၾကည္႕မွ အလုိင္းမင္႔နည္းနည္းေစာင္းေနတာကို ကြန္ပလိန္႕တာမွန္းသိရတယ္။ အခု ကိုယ္႔ဘာသာကိုယ္ေတာင္ ဘာေတြ လုပ္ကိုင္ေနလဲမသိေတာ႔ဘူး။ ေခ်ာင္းကဆိုးရတဲ႔အထဲ တစ္ေန႕ကို ၃ နာရီေလာက္ဖုန္းေျဖေနရတာနဲ႕ colon alingment ျပင္ရတာနဲ႕၊ ေတာ္ေတာ္႔ကို အလုပ္ၾကီးအကိုင္ၾကီးလုပ္ေနပါတယ္။

စာေတြကေတာ႔ စာေမးပြဲေျဖဖုိ႕ မဟားတရားဖတ္ေနပါတယ္။ မၾကာမီ ပံုမွန္ျပန္ေရးျဖစ္မယ္ထင္ပါတယ္။ အလုပ္မွာ proactive ျဖစ္ဖုိ႕ၾကိဳးစားဖုိ႕ပဲတုိက္တြန္းလိုက္ပါတယ္။

အလုပ္ထြက္ခါနီးလူကို အမ်ားၾကီးသြားမခိုင္းမိဖို႕ lead တိုင္း သတိထားရပါမယ္။ အခုဆုိရင္ testing မျပီးခင္ထြက္သြားတဲ႔ colleague ေရးထားခဲ႔သမွ်၊ ညိွထားခဲ႔သမွ်ေတြကို အစကေနျပန္လုပ္ေနရတာ အခ်ိန္အတာ္ကုန္ပါတယ္။

Rule #1- Never let develop new programs/enhancements to the staff who had submitted resignation letter.

Maintainence nightmare and boiler-plate codes will be resulted!!!!!!!!!!

Tuesday, February 1, 2011

Eclipse IDE, Project cannot import

Eclipse IDE, Project cannot import

အင္း ... အလြယ္ေလးတစ္ခုပါ။
မသိေသးရင္ခက္ေနတတ္လုိ႕။

"Some projects cannot be imported because they already exist in the workspace".
တစ္ခါတေလ အေရးရယ္အေၾကာင္းရယ္ၾကမွ Eclipse IDE က အဲဒီလို message ၾကီးနဲ႕ဆီးၾကိဳတတ္ပါတယ္။

လုပ္လို႕ရတာ ႏွစ္နည္းေလာက္ရိွပါတယ္။ ဒီထက္မကလည္းရိွႏိုင္တယ္။
ပထမနည္းက အလြယ္နည္း။ Project ကို workspace ထဲကို ကူးထည္႕။ ျပီးရင္ UI ကေန New Project ဆိုျပီး same project name ေပးလိုက္ရင္ တခါတည္း project view မွာ New Project အေနနဲ႕ ျမင္ရပါတယ္။ Import လုပ္ျပီးသား ျဖစ္သြားတာပါပဲ။

ဒါထက္ေကာင္းတာက အဓိကျပႆနာကိုၾကည္႕ရင္ အရင္က နာမည္တူ project တစ္ခု သြင္းခဲ႔လို႕ ဒီလိုျဖစ္တာဆိုတာသိႏိုင္တယ္။
.project ဆိုတဲ႔ file ကို ရွာျပီး text editor တစ္ခုခုနဲ႕ဖြင္႔ပါ။ အဲဒီမွာ project name ေျပာင္းလုိက္ရင္လည္း အိုေကသြားပါလိမ္႔မယ္။

အလုပ္ထဲမွာ အေရးၾကီးမွ ထရွာေနရမယ္႔အတူ အခုလုိဖတ္ထားလုိက္ရင္ ေနာင္ အသံုးလိုရင္ စိတ္မပူရေတာ႔ဘူး။ ရွာဖုိ႕အခ်ိန္လည္းမကုန္ေတာ႔ပါဘူး။

ကြ်န္ေတာ္ျဖစ္ေစခ်င္တာကေတာ႔ community ေလးတစ္ခုပါ။ တကယ္အလုပ္လုပ္ေနတဲ႔သူေတြရဲ႕ စကား၀ုိင္းမ်ိဳးေပါ႔။ သိျပီးသားတစ္ေယာက္က ငါးမိနစ္ေလာက္ေျပာလုိက္ရင္ က်န္တဲ႔သူေတြ ရွာခ်ိန္သက္သာသြားတယ္။ Effective ျဖစ္တာေပါ႔။ အဲဒါမ်ိဳးေတြ Contribute လုပ္ခ်င္ပါတယ္။

Java မွာဆို JDK 1.3,1.4 ေတြမွာ ျပႆနာေတြေတာ္ေတာ္မ်ားမ်ားရိွတတ္တယ္။ JDK update လုပ္လိုက္ရင္ ေကာင္းသြားမွာသိေပမယ္႔ တစ္ခါတစ္ေလ JDK upgrade လုပ္လုိ႕မရတဲ႔ systemဟာင္းၾကီးေတြမွာဆို မလိုအပ္ဘဲ အလုပ္ပိုရတယ္။ တခါလည္း Sun ရဲ႕ OS မွာပါတဲ႔ default JDK က မစံုမလင္ျဖစ္တာၾကံဳဖူးတယ္။ ျဖစ္တတ္တာကို သိထားရင္ အေျဖမွန္ေတြ႕ဖုိ႕လြယ္တယ္။ Sun က JDK ထုတ္တာပဲ သူ႕ OS ေတြမွာ complete JDK ပါမွာပဲဆိုရင္ေတာ႔ ျပႆနာအစစ္ လမ္းစေပ်ာက္သြားပါျပီ။

Let's make our Tech world better .........
Let's share what we had learnt to each others ...

Regards,
Zero

How to maintain Legacy systems in 10 min

How to maintain Legacy systems in 10 min

Legacy system အေၾကာင္းနည္းနည္းေျပာမလို႕။ တကယ္႔ကိုနည္းနည္းပါပဲ။
Legacy system ဆိုတာ ေရွးကတည္းက မပစ္ရက္ဘဲ သိမ္းထားတဲ႔ ဘိုးဘြားပိုင္ ဗီရိုၾကီးလို၊ ေနရရွဳပ္သေလာက္ အသံုးမက်တဲ႔ software ေတြပါ။ အဲဒီလို sytems ေတြကို စင္ကာပူ အႏွံ႕မွာေတြ႕ရပါတယ္။

အဲဒီေတာ႔ ဘယ္လို Maintain လုပ္မလဲ။
(ျဖစ္ႏုိင္ရင္ အလြယ္ဆံုးက အလုပ္ေျပာင္းလိုက္)။

အဲဒီလိုမွ မျဖစ္ႏုိင္ရင္ မရိွဖို႕မ်ားတဲ႔ documentation ေတာင္းၾကည္႕။
Database design ကို ၾကည္႕။ ဘယ္ေလာက္အသံုးမက်လဲဆိုတာကို duplicate columns ေတြ table တစ္မ်ိဳးမွာ နာမည္တစ္မ်ိဳးျဖစ္ေနတဲ႔ Column name ေတြကို အကဲခတ္လိုက္။ ဒါဆို ဘယ္ေလာက္ ခ်ီးထုပ္က်တဲ႔ system လည္းသိလာမယ္။

Source Code က compile ေတာင္လုပ္လုိ႕ရခ်င္မွရမယ္။ ဒါေပမယ္႔ ဘုရားစာဆိုထား။ ကံေကာင္းေအာင္။ ဖြင္႔ခါနီးမွာ အရဟံေလးဘာေလးရြတ္၊ ဥံဳ ဆိုျပီး ဖြင္႔ၾကည္႕လုိက္ရင္ ... အဲဒီမွာ အံ႕အားသင္႔စရာေကာင္းေလာက္ေအာင္ ျဖစ္သလိုေလးလုပ္သြားတဲ႔ေကာင္ေတြရဲ႕ codes ေတြကို ေတြ႕ရမယ္။ အဲဒါဆို သတ္ေသလိုက္ရမလား။ .... မဟုတ္ေသးဘူး။ မလုိဘူး။ ကိုယ္႔ကိုယ္ကို တစ္ခုပဲယံုၾကည္။ ေရွ႕ကေကာင္ေတြထက္ ေတာ္လုိ႕ ငါ္႔လက္ထဲေရာက္လာတာလုိ႕ပဲေတြးလုိက္။ ဟုတ္ဟုတ္မဟုတ္ဟုတ္။

စိတ္ထဲမွာတစ္ခုပဲထား။ ေရွ႕ကကိစၥေတြမွာ မွားရင္ တတ္ႏိုင္သမွ်ျပင္မယ္။ ငါျပင္သမွ်ကိုေတာ႔ ငါတာ၀န္ယူတယ္။ အဲဒါကို နည္းနည္း လူသိေအာင္လုပ္ထားပါ။ အရင္က ႏွစ္ေပါင္းမ်ားစြာ ဘာမွမျဖစ္ဘဲ run လာတယ္လို႕ေျပာရင္ Are U sure, dude? လုိ႕ေသခ်ာေမးထားပါ။ ဘာမွမျဖစ္ဘဲ run ေနတာနဲ႕ ဘာျဖစ္ေနမွန္းမသိဘဲ run ေနတာနဲ႕ဟာ ငတံုးေတြအတြက္ေတာ႔ အတူတူပဲ။

စိတ္ပိုင္းဆုိင္ရာမွာ အဲဒီလို ျပင္မဟဲ႕လို႕ပိုင္းျဖတ္ျပီးရင္ တစ္ခုကို အေသမွတ္ပါ။ ျမင္ေနရတဲ႔ source code ဟာ ကိုယ္တစ္ေယာက္တည္းသံုးေနတာမဟုတ္ဘူးဆိုတာကို သံုးခါေလာက္ ႏွလံုးသြင္းပါ။ Legacy မွာ ဒီ codes ေတြကို တျခား system ေတြက share သံုးေနတာ ၊ interface ေတြက တစ္ဆင္႔ သံုးေနတာ၊ web service share ထားတာ အကုန္ျဖစ္ႏုိင္တယ္။ လံုး၀မထင္မွတ္ေလာက္ေအာင္ အသံုးမက်တဲ႔ ေနာက္တစ္ခုခုေတာင္မွ ျဖစ္ႏုိင္တယ္။

ေနာက္ျပီး တစ္ခုသိထားဖုိ႕က Obama ဘယ္ေလာက္ေတာ္ေတာ္ အေမရိကန္မြဲတာမကယ္ႏုိင္ဘူး .. ဆိုတာေလးကို သတိျပဳပါ။ ဆိုလိုတာက revamp လုပ္ထည္႕လုိက္မယ္လို႕ သိပ္ျပီး မစဥ္းစားေစခ်င္ဘူး။ ေလာေလာဆယ္ ဘယ္လို architecture မွာ သံုးထားလဲ။ အဲဒီ architecture ရဲ႕ limitation ေတြကို နားလည္သင္႔သေလာက္နားလည္ဖုိ႕လုပ္ပါ။ ျပင္တဲ႔အခါၾကရင္ function ေသးေသးေလးတစ္ခုပဲျဖစ္ျဖစ္ျပင္တာနဲ႕ ဘယ္ေနရာမွာ သံုးထားေသးလဲ ေသခ်ာေအာင္ လုပ္ပါ။ java သမားေတြဆို eclipse မွာ reference->workspace or reference-->project ေတြ ၾကည္႕ပါ။ source code control ေတြဘာေတြ ေသခ်ာသံုးပါ။ တကယ္လုိ႕ ကိုယ္ျပင္လုိက္တာၾကီးမွားသြားရင္ေတာင္ ခ်က္ခ်င္း rollback ျပန္လုပ္ႏုိင္ေအာင္လုပ္ထားပါ။

ျပင္တဲ႔အခါ Java မွာဆိုရင္ ကိုယ္ျပင္လုိက္တဲ႔ class ကို အတတ္ႏိုင္ဆံုး သပ္ရပ္သြားေအာင္လုပ္ပါ။ warning ေတြရိွရင္လည္း တတ္ႏိုင္သမွ်ရွင္းပါ။ Clean Code ျဖစ္ဖုိ႕ ၾကိဳးစားပါ။ ကိုယ္ေရးတာေတြဆိုရင္ေတာ႔ ပိုေတာင္ ဂရုစိုက္ပါ။ အလြယ္ဆံုး နည္းက One function once class ဆိုတာပါ။ အဲဒီလိုေျပာရင္ တစ္ခ်ိဳ႕ေတြကလည္း ပ်င္းၾကတယ္။ မပ်င္းပါနဲ႕။ Java ကို resuable ရေအာင္ ေရးႏုိင္ဖုိ႕ဆိုတာ အေျခခံ design pattern ေတြေက်ညက္ဖုိ႕ အမ်ားၾကီးလိုပါတယ္။

ကြ်န္ေတာ္ လြန္ခဲ႔တဲ႔ တစ္ႏွစ္ခြဲတုန္းက လုိင္း ၃၀၀၀ ရိွတဲ႔ class ေတြ ေရးခဲ႔တဲ႔ နေမာ္နမဲ႕ developer ပါ။ အခုအခ်ိန္မွာေတာ႔ ကိုယ္႔ေနာက္မွာ ကိုယ္ေရးတာကို ျပင္ရမယ္႔လူေတြအတြက္ပါၾကည္႕ပါတယ္။ common method ေတြကို helper class ေတြေရးသလို ဘံုထုတ္ထားလုိက္ပါ။ ေနာက္သံုးခ်င္တဲ႔ေနရာကလည္း ယူသံုးႏုိင္တာေပါ႔။ သိပ္ရွဳပ္ရွဳပ္ေထြးေထြး ျဖစ္လာရင္ တျခား class တစ္ခုမွာ business logic ေတြ ေျဖရွင္းဖုိ႕ helper တစ္ခုေရးလုိက္ပါ။ Action class ေတြမွာ အားလံုးစုေရးတာဟာ အသံုးမက်တဲ႔သူေတြလုပ္ေနၾကပါ။ အဲဒါမ်ိဳးဘယ္ေတာ႔မွ မလုပ္ပါနဲ႕။ Program ရဲ႕ readibilty က်သလို၊ အားလံုးက tightly coupled ျဖစ္ေနလိမ္႔မယ္။ သပ္သပ္ရပ္ရပ္ မေရးတတ္ေသးတဲ႔သူေတြအေနနဲ႕ flow diagram ေလး အၾကမ္းေလာက္ျခစ္လုိက္ဖုိ႕ ၀င္မေလးေစခ်င္ဘူး။ အဲဒီလို ေသေသခ်ာခ်ာေရးၾကည္႕မယ္ဆုိရင္ အပိုအလိုမရိွတဲ႔ clean code ေတြရလာမယ္။ method ေတြ ေဖာင္းပြမႈမရိွေတာ႔ပါဘူး။

method တစ္ခုကို တတ္ႏိုင္ရင္ duplicates ဘယ္ေတာ႔မွမလုပ္ပါနဲ႕။ ကြ်န္ေတာ္နမူနာတစ္ခုေပးပါမယ္။ ကြ်န္ေတာ္သာ ဘံုသံုးလုိ႕ရႏိုင္တဲ႔ method တစ္ခုကို ေနရာတုိင္းမွာ copy ။ paste လုပ္ထားတဲ႔ codes ကို တစ္နာရီေလာက္ျပင္ရျပီဆိုရင္ ေရွ႕က ေရးသြားတဲ႔ေကာင္ကို အယုတၱ အနတၱေတြ စျပီး ေရရြတ္ပါျပီ။ တကယ္႔ကို tedius ျဖစ္စရာမဟုတ္လား။ ေနာက္တစ္ခုက တစ္ေနရာမွာ ကိုယ္ျပင္ဖုိ႕က်န္ခဲ႔ရင္ အဲဒီကလည္းျပႆနာျဖစ္ႏုိင္တယ္။ အထူးသျဖင္႔ calculations ေတြအမ်ားၾကီးပါတဲ႔ method ေတြကို ဘယ္ေတာ႔မွ duplicates မလုပ္မိဖုိ႕ ၊ တတ္ႏိုင္သမွ် share သံုးဖုိ႕ၾကိဳးစားပါ။ တစ္ေနရာမွာ ျပင္လုိက္ရံုနဲ႕ အားလံုးမွာ အိုေကသြားတယ္ဆိုရင္ ေနာက္လူရဲ႕ အဆဲအဆို အေတာ္ေလးသက္သာသြားႏုိင္ပါတယ္။

ေနာက္တစ္ခုက testing ပါ။ ကုိယ္ျပင္လိုက္တာဟာ ေရွ႕က flow ကို ထိခုိက္လားမထိခိုက္လား ဘယ္လိုသိမွာလဲ။ Unit Testing မရိွရင္ေတာ႔ sorry ပဲေျပာရမွာပဲ။ ကိုယ္႔အပိုင္းကိုေတာ႔ ေသခ်ာစစ္ပါ။ တတ္ႏုိင္သမွ် extreme test ေတြလုပ္ပါ။

အားလံုးေရးျပီးရင္ အခ်ိန္နည္းနည္းေလးပိုယူျပီး system document လုပ္ဖုိ႕ၾကိဳးစားပါ။ ဘယ္သူ႕အတြက္မွ မဟုတ္ပါဘူး။ ကိုယ္႔ဘာသာကိုယ္ ပိုနားလည္ဖုိ႕ၾကိဳးစားတဲ႔သေဘာပါပဲ။ ေနာက္ေတာ႔ source code ကို Version Control System ထဲ check in ျပန္လုပ္ပါ။

တတ္ႏိုင္သမွ် ေရွ႕မွာ ေရးထားတဲ႔ codes ေတြကို ျပင္ဖုိ႕မၾကိဳးစားပါနဲ႕။ တကယ္ျပင္ရမယ္႔အခ်ိန္ၾကရင္သာ ေသခ်ာနားလည္ေအာင္လုပ္ျပီး ျပင္သင္႔သေလာက္ပဲျပင္ပါ။ တျဖည္းျဖည္းခ်င္း ပိုေကာင္းျပီး ပို stable ျဖစ္လာတဲ႔ sytem ျဖစ္ေအာင္ ေရရွည္လုပ္သြားၾကပါ။

Source code is the best documentation ဆိုတာေလးကိုလည္း သတိေပးလိုက္ပါတယ္။ Functional Spec: ေတြ၊ documentation ေတြထဲမွာ ဘာေတြေရးထားေရးထား source code မွာမပါရင္ အလကားပါပဲ။ တကယ္တမ္း လက္ေတြ႕ေလာကမွာ ျပည္႕စံုတဲ႔ documentation ကို ေတြ႕ရဖုိ႕ဆိုတာ ဘုရားပြင္႔တာကို ၾကံဳရသလို ၾကံဳေတာင္႔ၾကံဳခဲျဖစ္ေနတတ္ပါတယ္။ common sense နဲ႕ အာရံုေတြဖ်တ္လတ္ေအာင္ထားျပီး အေကာင္းဆံုးၾကိဳးစားဖုိ႕ပဲရိွပါတယ္။

Legacy Systems ေတြဟာ developers ေတြရဲ႕ အေကာင္းဆံုးေလ႔က်င္႔ေရးကြင္းပါပဲ။

Regards,
Zero