Monday, October 18, 2010

SQL Editor In Java

အင္း ...ဒီေန႕လည္း အားအားယားယား တစ္ခုစမ္းၾကည္႕ျဖစ္တယ္။

Eclipseမွာ SQL ေရးခ်င္လို႕စမ္းၾကည္႕တာပါ။ Plug-in တစ္ခုပါပဲ။ လြယ္ပါတယ္။ မူရင္းေရးထားတဲ႔သူက အေတာ္ေလးျပည္႕ျပည္႕စံုစံုေရးထားတဲ႔အတြက္ သိပ္ျပီး၀င္အာမေခ်ာင္ခ်င္ပါဘူး။ ဘယ္မွာသံုးလုိ႕ရတယ္။ ဘယ္လို သံုးလုိ႕ရတယ္ဆိုတာေလးေလာက္ပဲ ပြားပါမယ္။

ခင္မ်ားတို႕ေတာ႔ Java နဲ႕ဘာေတြေရးေနၾကရလဲမသိဘူး။ ကြ်န္ေတာ္ကေတာ႔ SQL ေတြခဏခဏျပင္ရတဲ႔အလုပ္မ်ိဳးျဖစ္ေနေတာ႔ တစ္ေန႕လာ ဒီ sql ေတြကိုပဲ SQL DEVELOPER ကေန SCRIPT ေပါင္း ရွစ္ေသာင္းေလးေထာင္ဆိုတာမ်ိဳးေရးရတာကိုပ်င္းပါတယ္။ အျမဲတမ္းေရးေနရတဲ႔ေနရာကိုၾကာေတာ႔မုန္းလာပါတယ္။ Eclipse မွာပဲ တစ္ထုိင္တည္းေရးတာေရာ Test တာေရာလုပ္ခ်င္ပါတယ္။ ပ်င္းတာကိုေျပာခ်င္တာပါ။ IDE ေလးႏွစ္ခုကိုဖြင္႔ျပီးေျပာင္းလုိက္ရမွာကိုေတာင္ပ်င္းပါတယ္။ ပ်င္းရတာလည္း အေၾကာင္းရိွပါတယ္။

အခ်ိန္မ်ားရရင္ Developer တုိင္းသိသင္႔တဲ႔ 97 ခ်က္ဆိုတဲ႔ Oreily က စာအုပ္ေလးဖတ္ၾကည္႕ေစခ်င္ပါတယ္။ အဲဒီမွာ သိသင္႔တာေတြအေတာ္မ်ားမ်ားပါပါတယ္။ ကြ်န္ေတာ္လည္းျမည္းၾကည္႕ပါတယ္။ ကိုယ္တုိင္လည္း လိုက္နာတာရိွသလုိ မလုိက္နာျဖစ္တာေတြလည္းရိွပါတယ္။

ကြ်န္ေတာ္႔အယူအဆအရေတာ႔ Developer ေတြက Codes နည္းႏိုင္သမွ်နည္းနည္းပဲေရးဖုိ႕ၾကိဳးစားရပါမယ္။ ျဖစ္ႏိုင္ရင္Program ေလးတစ္ခုေရးထား၊ အျမဲတမ္းေရးရတဲ႔ Script မ်ိဳးဆိုရင္ Copy&&Paste ေတာင္မလုပ္နဲ႕။ အဲဒီလို သက္သက္သာသာေနလုိ႕ရေအာင္ၾကိဳးစားသင္႔ပါတယ္။ လူမေရးရင္ လူေၾကာင္႔မွားတာမရိွပါဘူး။ အေၾကာင္းတစ္ရာမွာ မမွားႏိုင္ဘူးဆိုရင္ေတာင္ အေၾကာင္းတစ္ေထာင္ေလာက္ဆိုရင္ လူက စျပီး ပ်င္းလာပါျပီ။ အဲဒီလိုအလုပ္မ်ိဳးကို Tedious work လုိ႕ေခၚပါတယ္။ မခက္ေပမယ္႔ အၾကာၾကီး ထပ္တလဲလဲလုပ္ရတာမ်ိဳးပါ။ အဲဒါေတြကို ျဖစ္ႏိုင္ရင္ program ေလးဘာေလးေရးထားဖုိ႕စဥ္းစားပါ။

အခုလုပ္ရတဲ႔ အလုပ္က ျမန္ဖုိ႕လည္းမလုိဘူး။ ခက္တာလဲမဟုတ္ဘူး။ ေသခ်ာဖုိ႕သိပ္အေရးၾကီးတယ္။ အဲဒါေၾကာင္႔ ကြ်န္ေတာ္ဂရုစို္က္တာ ေသေသခ်ာခ်ာနဲ႕ Quality ေကာင္းေကာင္းျဖစ္ဖုိ႕ပါပဲ။ လုပ္ငန္းသဘာ၀အရ ကြ်န္ေတာ္ တိတိက်က်လုပ္ရပါတယ္။ Eclipse မွာ sql ေရးတာက Editor က ပိုျပီး ေရးလုိ႕ အဆင္ေျပလုိ႕ပါ။ ပိုျပီးလည္း ရင္းႏီးတယ္လို႕ခံစားရပါတယ္။ ေနာက္တစ္ခုက Version Control က Eclipse နဲ႕ခ်ိတ္ထားတဲ႔အတြက္ Eclipse မွာေရးလုိက္ရင္ ေရႊ႕ေနေျပာင္းေန ကူးေနစရာမလုိပါဘူး။ ကြ်န္ေတာ္ပ်င္းတာက Eclipse မွာေရးျပီးသား sql ကို ကူးျပီး SQL developer မွာ run ၾကည္႕ဖုိ႕ကို မကူးခ်င္တာပါ။

အဲဒီေတာ႔ Plug-in တစ္ခုရွာၾကည္႕တာပါ။
ရွာၾကည္႕ေတာ႔လည္း ထြင္ထားတာက ၾကာလွပါျပီ။ ကိုယ္႔ဘာသာမသိေသးတာပါ။

ေရးရမွာပ်င္းပါတယ္။

အဲဒီမွာ နည္းနည္းၾကည္႕ျပီးလုပ္လုိက္ပါ။
သိပ္ေတာ႔လည္းမၾကာပါဘူး။ႏွစ္ဆယ္႔ငါးမိနစ္ဆို စသံုးလုိ႕ရပါျပီ။ မရေသးရင္ ေတာ္ေတာ္ညံ႕ပါလားလို႕ ကိုယ္႔ကိုယ္ကိုေျပာပါ။

အဲဒီမွာျပထားတာကေတာ႔ Oracle Database နဲ႕ခ်ိတ္တာပါပဲ။ ခ်ိတ္တာကလည္း oracle thin client နဲ႕အရင္ web server ေတြက ခ်ိတ္သလိုမ်ိဳးခ်ိတ္တာပါပဲ။ အဲဒါေတြက မထူးဆန္းပါဘူး

သံုးရမွာက အဲဒီမွာ Database connection ရျပီဆိုရင္ sql editor နဲ႕ sql file ေတြကို ဖြင္႔ျပီး Alt+X နဲ႕run ရင္ result ေတြကို တခါတည္းျမင္ရတဲ႔အတြက္ တစ္ေနရာထဲမွာ ျငိမ္ျငိမ္ေလးေနျပီး အလုပ္ျဖစ္ပါျပီ။ ထုိင္ေနရင္း အလုပ္ျဖစ္တာ ဥဥေနတဲ႔ဘဲပဲရိွတယ္ဆိုတာကို သတိရပါတယ္။ အလုပ္ျဖစ္ေအာင္လုပ္ပါ။

ကြ်န္ေတာ္ေပးခ်င္တဲ႔အၾကံကေတာ႔ Trial and error, ကို တတ္ႏိုင္သမွ် ေနာက္ဆံုးမွသံုးပါ။ Developer ေကာင္းတစ္ေယာက္ျဖစ္ဖုိ႕ အရင္စဥ္းစားပါ။ တစ္ေယာက္ေယာက္ကေမးရင္ Are you sure၊? အရင္ေမးပါဦး။ ေမးတာက တလြဲဆိုရင္ အေျဖလည္းတလြဲျဖစ္ေနမယ္။ ေသခ်ာသိေအာင္လုပ္ပါ။ Knowledge is Power ဆိုတာၾကီးကို ကြ်န္ေတာ္တို႕ အားတုိင္းေျပာေနတာနဲ႕ ဘာမွန္းေတာင္မသိေတာ႔ေလာက္ေအာင္ အဓိပၸါယ္ေတြေ၀းကုန္ပါျပီ။ a little Knowledge is a dangerous thing ဆိုတာလည္းရိွပါတယ္။ Java ေရးတာကိုမွမဟုတ္ပါဘူး။ ဘာကိုပဲေလ႔လာေလ႔လာ အေျခခံကို ခုိင္ေအာင္လုပ္ျပီးတာနဲ႕ လမ္းကိုေရြးပါ။ ဘာလုပ္မွာလဲ ဆိုတာကိုေယာင္၀ါး၀ါးမျဖစ္ေစနဲ႕။ Certification ေတြကို အထင္ေသးတာ၊ၾကီးတာမရိွပါဘူး။ လုပ္ဖုိ႕လုိတာကို လုပ္ရပါတယ္။ စနစ္တက်ေလ႔လာေနဖုိ႕လိုပါတယ္။

ကိုယ္မသိေသးတာကို အထင္မေသးပါနဲ႕။ သိေအာင္လုပ္ျပီးမွ အထင္မၾကီးပဲေနခ်င္ေန။ မသိေသးဘဲနဲ႕ ဒါေလးေတြကလြယ္ပါတယ္မလုပ္ပါနဲ႕။ မေန႕ညက Java Developer's Notes ဖတ္ရင္းနဲ႕ သေဘာက်တာေတြေတြ႕ပါတယ္။ အေျခခံေလးေတြေပမယ္႔ ေသခ်ာသိလုိက္ရတာ ေက်နပ္ဖုိ႕ေကာင္းပါတယ္။

အရင္ရံုးက senior တစ္ေယာက္ Configure လုပ္ခဲ႔တဲ႔ Framework Setup ေတြကို ျပင္ၾကည္႕ရင္း သူတုိ႕လုပ္တာစနစ္က်တာကို သတိျပဳမိပါတယ္။ ဘာမဆို စကတည္းက စနစ္က်မွ ေနာက္ပိုင္းမွာ အဆင္ေျပပါတယ္။ စကတည္းက လြဲေနတဲ႔ Design မ်ိဳးကို ျပင္ရရင္ လိုတာထက္ပိုျပီးဒုကၡေရာက္ပါတယ္။

ကြ်န္ေတာ္ကိုယ္တုိင္လည္း အျမဲတမ္းေလ႔လာေနရတဲ႔ေနရာမ်ိဳးမွာပဲေနခ်င္ပါတယ္။ ဘာမဆို သင္လုိ႕မတတ္ေလာက္ေအာင္ခက္တာမရိွပါဘူး။ ကိုယ္႔ရဲ႕ အသိဥာဏ္ေပၚမူတည္ျပီး နားလည္ပံုကြာတာပဲရိွပါလိမ္႔မယ္။ ကိုယ္ညံ႕ေနတာေတြကို မ်ားမ်ားျဖည္႕ဆည္းပါ။ ေတာ္တဲ႔သူေတြ ေတာ္တဲ႔ေနရာကိုေရာက္သြားပါမယ္။ ညံ႕တဲ႔သူေတြလိုက္လို႕မမီေအာင္ေတာ္ဖုိ႕ပဲလိုပါတယ္။ ညံ႕တဲ႔သူေတြကို အျပစ္တင္ေနစရာမရိွပါဘူး။ တကယ္႔လက္ေတြ႕ဘ၀မွာ ကိုယ္႔ကိုယ္ကို ဘယ္ေလာက္ယံုၾကည္ျပီး ကိုယ္တုိင္ဘယ္ေလာက္ၾကိဳးစားသလဲဆိုတာက ကိုယ္ဘာျဖစ္လာမလဲဆိုတာကို ပိုင္းျဖတ္တာပါ။

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

ကဲနည္းနည္းေလာက္ေတာ႔ အပ်င္းေျပစမ္းၾကည္႕လုိက္ပါ။

iHateJavaCozNowILoveFunctionalProgramming_Zero_Divided_By_Zero_Is_Zero

Saturday, October 16, 2010

၆၃ မက်တဲ႔သူမျဖစ္ေစနဲ႔။

၆၃ မက်တဲ႔သူမျဖစ္ေစနဲ႔။

မေန႕က Aဂ်ိဳင္း စာအုပ္တစ္အုပ္ကို ျမည္းရင္း ဘာေတြ႕လည္းဆိုေတာ႔ မျပီးႏုိင္တဲ႔ ကိစၥကိုျပီးေအာင္လုပ္ခိုင္းရင္ အခိုင္အမာကာကြယ္ဖုိ႕ေျပာထားတာဖတ္လိုက္ရတယ္။

Aဂ်ိဳင္းဆိုတာ Agile ကိုေျပာတာပါ။
ဒီႏွစ္ထဲမွာ Target လုပ္ထားတာက SCJA ေျဖဖို႕ျဖစ္တဲ႔အတြက္ စာမ်ားမ်ားဖတ္ျဖစ္ပါတယ္။ အထူးသျဖင္႔ Agile နဲ႕ Spring ကို အမ်ားဆံုးဖတ္ပါတယ္။

Singapore မွာ Software Engineering ကိုေကာင္းေကာင္းနားလည္တဲ႔သူ အနည္းငယ္ပဲရိွတယ္ဆုိတာကိုေျပာရင္ ယံုၾကပါ႔မလားမသိဘူး။ စလံုးေတြ စျပားေတြသိပ္ေတာ္တာပဲဆိုတာကို မၾကာမၾကာၾကားရပါတယ္။ ေတာ္တာလည္းရိွေပမယ္႔ ေရွာ္တာေတြက ပိုမ်ားပါတယ္။

သူတို႕ရဲ႕ Life မွာ စာမ်ားမ်ားဖတ္ခ်ိန္မရေတာ႔တာလည္းပါပါတယ္။ အခုေခတ္မွာ ဘယ္ႏိုင္ငံသားပဲျဖစ္ျဖစ္ မ်ားမ်ားေလ႔လာတဲ႔သူက မေလ႔လာတဲ႔သူထက္ သာသြားတာပါပဲ။ သိပ္အထင္မၾကီးနဲ႕။ အေတြ႕အၾကံဳအရလုပ္ေနၾကေပမယ္႔ တကယ္တမ္း သီအုိရီကို ေသြဖယ္တာေတြေၾကာင္႔ ထြင္ျပီးသားဘီးျပန္ထြင္ေနရတဲ႔ ပေရာဂ်တ္ေတြအမ်ားၾကီးပါပဲ။ reinventing the wheel ျဖစ္ရင္ ေသခ်ာေပါက္ ဒုကၡနဲ႕လွလွေတြ႕ပါျပီ။

Singapore မွာ ဘာေတြကိုအျဖစ္လုပ္လဲဆိုတာေတြကိုခ်ည္းပဲေရးရင္ေတာင္ ေတာ္ေတာ္မ်ားမ်ားရပါမယ္။ Team Lead ေတြဟာ စာမဖတ္တာၾကာတဲ႔အခါ Failed ျဖစ္မယ္႔ Project ကို လူႏွစ္ဆထည္႕ေနတုန္းပဲရိွပါေသးတယ္။ အဲဒါဆို သီအုိရီအရ ပိုျပီးေသခ်ာေပါက္ Failed ျဖစ္ပါတယ္။ မသိလုို႕ ေရးေနတဲ႔သူေတြကို လူသစ္ေတြက လာလာေမးတဲ႔ interactions ကမ်ားလုိ႕ပါ။ သိပ္ေတာ္တဲ႔လူေတြကိုလည္း လြယ္လြယ္နဲ႕ငွားလို႕မရပါဘူး။ ေပါေခ်ာင္ မေကာင္းပဲရိွပါတယ္။ ေပါေခ်ာင္ေကာင္းဆိုတာ software engineer ေတာ႔မရပါဘူး။ အဲဒါကို သီအိုရီကဘယ္လုိေရးထားလဲဆိုရင္ မိန္းမတစ္ေယာက္က ၉ လမွာ ကေလးတစ္ေယာက္ေမြးလုိ႕ရရံုနဲ႕ မိန္းမကိုးေယာက္ေပါင္းျပီးတစ္လတစ္ေယာက္ေမြးလုိ႕မရသလုိပဲတဲ႔ .....။ အဲဒါေလးကိုေတာ႔ဖတ္ထားဖုိ႕လိုပါတယ္ ... Team lead လုပ္မယ္႔သူေတြေပါ႔ေလ။

Agile Development မွာ User ကို Development Process မွာ အဓိကထားပါတယ္။ တစ္ခုေရးျပီးတာနဲ႕ Userကိုျပ၊ မၾကိဳက္ရင္ျပင္ ၊ ျပန္ျပ၊ ေက်နပ္တဲ႔အထိျဖစ္ရင္ ေက်နပ္ေၾကာင္းကို တစ္ခါတည္း confirm လုပ္၊ ဆက္ေရး။ အဲဒီလိုသြားရပါတယ္။ စင္ကာပူမွေတာ႔ Change Request လုိခ်င္ေလာဘက မ်ားေလေတာ႔ user ကို milestone ေရာက္မွျပ၊ မၾကိဳက္ရင္လည္းပုိ႕ထားတဲ႔ User Requirement ေတြနဲ႕ ကိုင္ေပါက္၊ ညာခ်၊ အဲဒါေတြဟာ လူၾကီးလူေကာင္းမဆန္ဘူး။ ပိုက္ဆံအေခ်ာင္လုိခ်င္တဲ႔ အေခ်ာင္သမားပဲဆန္တယ္။ ႏိုင္ငံတကာမွာ Agile ကို တြင္တြင္က်ယ္က်ယ္လုပ္လာလို႕ software ေတြ quality ပိုေကာင္းလာတယ္။ User satisfaction ရတယ္။ ပိုက္ဆံအမ်ားၾကီးရၾကတယ္။ ဒီမွာေတာ႔ Deadline သာအမိ၊ Deadline သာအဖ၊ Quality သည္ ဒုတိယဆိုတဲ႔စကားကို ဥံဳခံရြတ္ေနတုန္းပဲရိွေသးတယ္။ Budget ကိုတြက္တဲ႔ေနရာမွာ စစ္တမ္းေကာက္ရင္ စင္ကာပူဟာ Software Engineering မွာေရွ႕ကေျပးပါတယ္။ ရိွတဲ႔လူနဲ႕ ျ႔ပီးေအာင္လုပ္မယ္ဆုိတဲ႔ မျဖစ္ညစ္က်ယ္ တစ္ထြာတစ္မိုက္ဥာဏ္ကလည္း မ်ားပါတယ္။Software ျပီးသြားရင္ External QA ျဖတ္ရမယ္ဆုိတာကိုလည္း ေမ႔ထားတာ ႏွစ္ေပါင္းမနည္းေတာ႔ပါဘူး။

အဲဒီလိုေလာကမ်ိဳးမွာ ရွင္သန္ဖို႕ ဘာမွသိပ္မ်ားမ်ားသိဖုိ႕မလိုပါဘူး Skills က knowledge ထက္ပိုအေရးၾကီးတယ္လို႕ေျပာလုိ႕ရပါတယ္။ စင္ကာပူမွာ သိပ္ျမန္တဲ႔ေကာင္ေတြအမ်ားၾကီးပဲ။ ဘာခိုင္းခိုင္း အေသအေၾကျျမန္တယ္။ Analysis ကို အခ်ိ္န္မေပးႏိုင္ဘူး။ ေရးတာပဲ။ ေရးျပီးရင္းေရးေနတာပဲ။ Framework ကဘာလုိ႕ Bean ကို Inject လုပ္တာလည္းမေမးနဲ႕။ သိဘူး။ ေရးေတာ႔ေရးေနတာပဲ။ ကိုယ္ဘာေရးေနမွန္းနားမလည္တဲ႔ေကာင္ေတြ အမ်ားၾကီးပဲ။ အဲဒါေတြဘယ္ကေရာက္လာတာလဲ။ ဘာလို႕ေရာက္တာလဲအထိ မသြားေတာ႔ဘူး။ ေရးလုိ႕ရရင္ေတာ္ျပီ။ Configure ဒီလိုလုပ္၊ ဒီလိုေလးေရး။ ဒါပဲ။ ဒီေလာက္ဆို ရပ္တည္လုိ႕ရျပီ။ တကယ္တမ္း Struts နဲ႕ Spring ဘာကြာလဲ၊ ဘာလုိ႕ကြာလဲ။ Lightweight framework ေတြက Modern Software Industry မွာ ဘာလုိ႕လြမ္းမႈိးသြားလဲ ...အဲဒါေတြမေျပာနဲ႕ေတာ႔ ...ေရးျ႔ပီးရင္းေရး ... Quality အသင္႔အတင္႔ေလာက္ေရးတတ္ရင္ရျပီ။

တကယ္တမ္း ... သိေအာင္ၾကိဳးစားၾကည္႕ျပီး အေပၚစီးက ျမင္ႏိုင္ရင္ ေလ႔လာတဲ႔ေနရာမွာ အမ်ားၾကီးလြယ္ကူပါတယ္။ Java မွမဟုတ္ပါဘူး OO concept က ဒါေတြပဲရိွတယ္။ ဘယ္လို implements လုပ္သလဲေလာက္ေလ႔လာလိုက္ရင္ Java ရဲ႕ Branch ေတြကို ေလ႔လာတဲ႔အခါ အမ်ားၾကီး အက်ိဳးရိွပါတယ္။ ပိုေကာင္းတဲ႔ Code ေတြကို လြယ္လြယ္နဲ႕ေရးႏုိင္လာပါမယ္။ ပိုျပီးေထာင္႔ေစ႔တဲ႔အျမင္ရလာပါမယ္။ အေျခခံေလးေတြဆိုျပီး အဆင္႔မေက်ာ္လုိက္ပါနဲ႕။ အဆင္႔ေက်ာ္ထားရင္ ဘာျဖစ္မလဲ .....။ ၆၃ မက်တဲ႔သူျဖစ္သြားပါမယ္။

Design Pattern စာအုပ္ထဲမွာေျပာထားတာတစ္ခုကို မွတ္မိလို႕ျပန္ေျပာရရင္ Inheritance သိပ္ေကာင္းတယ္ဆိုျပီး မလုိဘဲေလွ်ာက္သံုးတာကိုေရးထားတာပါ။ ဘဲေတြက ပ်ံတယ္ဆိုတဲ႔ ဘဲ class ကို extends လုပ္တာမ်ားသြားေတာ႔ plastics ဘဲဆိုလည္း super class ကဘဲလိုပဲ ပ်ံေနေတာ႔တာပဲ။ အဲဒီလုိေတြျဖစ္လာေတာ႔မွ interface သံုးျပီး implements ၾကတာေတြျဖစ္လာတာပါ။ OO Concept ေတြဘယ္ေလာက္ေက်လဲသိေအာင္ Design Pattern နည္းနည္းေလာက္ေတာ႔ျပန္ဖတ္ပါ။ ကိုယ္က မ်ားမ်ားသိတယ္ဆိုရင္ ပူစရာမလိုပါဘူး။ ဖတ္လုိက္မွ ေအာ္ ဒီလိုၾကီးလားဆိုရင္ေတာ႔ ျပန္စဥ္းစားပါ။ ကိုယ္႔ေၾကာင္႔ Software ထဲမွာ plastic ဘဲ ဘယ္ႏွစ္ေကာင္ပ်ံကုန္ျပီလဲဆိုတာကိုေပါ႔ေလ။

စာမ်ားမ်ားဖတ္ပါ။ ၆၃ က်ခ်င္ရင္ စာဖတ္ပါ။ စင္ကာပူက ညီေလးေတြကို ေျပာခ်င္ပါတယ္။ Library မွာ ဖတ္ပါ။ ဖတ္လုိ႕ၾကိဳက္မွ၀ယ္ပါ။ ၀ယ္တဲ႔အခါ ကိုယ္နဲ႕အဆင္ေျပတဲ႔စာအုပ္တုိက္ကို မွတ္ထားပါ။ ဥပမာ ... တစ္ခ်ိဳ႕က Manning ကရွင္းတာေတြကို သေဘာက်တယ္။ In action series ေတြ သိပ္ရွင္းတယ္။ေကာင္းတယ္။ ဒါေပမယ္႔ တစ္ခ်ိဳ႕ကမၾကိဳက္ဘူး။ ၾကာတယ္လုိ႕ထင္တယ္။ Apress ကိုတစ္ခ်ုိဳ႕ကၾကိဳက္တယ္။ တစ္ခ်ို႕ကHead First ေတြၾကိဳက္တယ္။ တစ္ခ်ိဳ႕က Packet ကိုၾကိဳက္တယ္။ ကို္ယ္ၾကိဳက္တာကိုယ္ဖတ္ပါ။ အဓိကကဖတ္ေနဖို႕နဲ႕ သံုးၾကည္႕ဖုိ႕ပါပဲ။

သံုးၾကည္႕ဖုိ႕ဆိုတာကို နည္းနည္းခ်ဲ႕ေျပာခ်င္ပါတယ္။ သံုးတယ္ဆိုတာက သံုးတတ္ရင္ေတာ္ပါျပီ။ တစ္ခ်ိဳ႕ကိစၥေတြမွာ နားလည္ဖုိ႕ ေရးၾကည္႕ရပါတယ္။ ကြ်န္ေတာ္တို႕လုိ Academic ပိုင္းကလာတဲ႔သူေတြက လက္ေတြ႕လုပ္ရမွာ အေတာ္ေလးပ်င္းပါတယ္။ ဒီလိုလုပ္ရင္ ရတယ္ဆုိတာကို သိရင္ ရပ္ထားတာမ်ားပါတယ္။ တကယ္လုပ္ၾကည္႕မွ Tips and Tricks ေလးေတြကိုသိရပါတယ္။ အဲဒီလိုသိေအာင္ေတာ႔ အနည္းနဲ႕အမ်ားတကယ္လုပ္ၾကည္႕ဖုိ႕လုိပါမယ္။

အခု လုပ္ေနတာက Insurance company တစ္ခုရဲ႕ software ကို maintain လုပ္ၾကတာပါ။ ဘယ္ေလာက္တလြဲေတြလုပ္ထားလည္းဆိုတာကိုေရးလုိက္ရင္ Insurance system ၾကီးဒီေလာက္သက္ဆိုးရွည္ေနတာကိုေတာင္ အံ႔ၾသမိပါတယ္။ အဲဒီလို ၆၃ မက်တဲ႔ေကာင္ေတြ ေရးသြားလုိ႕လည္း ငါတုိ႕အလုပ္ေတြေပါေနေသးတာလုိ႕ ၾကံဖန္ေက်းဇူးတင္မိပါတယ္။

Problem Solving Skills တိုးတက္ဖုိ႕ အေသခ်ာဆံုးနည္းက Systematic ျဖစ္ဖုိ႕သတိထားပါ။ ဘယ္သူေျပာတာကုိမွမယံုနဲ႕။ Codes ေျပာတာကိုယံု။ ကိုယ္႔ဘာသာကိုယ္ source code ၾကည္႕။ ဘယ္သူဘာေျပာေျပာ source code ေလာက္မေသခ်ာဘူး။ Right Track ကို သြားဖုိ႕ အျမန္ဆံုးနဲ႕ ျပႆနာကိုေဖာ္ထုတ္ႏုိင္ဖုိ႕ အတြက္ အျမဲေလ႔က်င္႔ေနပါ။

အျမဲသံုးေနရတဲ႔ folder ေတြ software ေတြဆီကို click သံုးခ်က္ထက္ပိုႏွိပ္ျ႔ပီးသြားေနရရင္ ငေပါ Developer ပါပဲ။ အဲဒီလို Efficient မျဖစ္တာေတြကိုေရွာင္ပါ။ ကိုယ္႔စက္ထဲမွာ ဘာပဲသိမ္းသိမ္း structure က်က်သိမ္းပါ။ Mail ကို Archive လုပ္ရင္လည္း ျဖစ္ကတတ္ဆန္းမလုပ္ပါနဲ႕။ စနစ္က်ပါ။

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

Java မွာ စိတ္ေလေလာက္စရာ Dependency Issues ေတြရိွပါတယ္။ အဲဒါေတြၾကံဳရင္ Forum ေတြဖတ္ပါ။ လူမ်ားေတြဘယ္လုိေျဖရွင္းသလဲ စိတ္ေအးေအးနဲ႕ေလ႔လာပါ။ စိတ္ဘယ္ေတာ႔မွမပူနဲ႕။ စိတ္ပူေနစရာမလိုဘူး။ ဒီအလုပ္က ကမာၻမွာအခက္ဆံုးမဟုတ္ဘူး။ ကိုယ္႔ထက္ေတာ္တဲ႔သူေတြ ရွာထားလိမ္႔မယ္။ မေတြ႕ရင္လည္းကိုယ္႔ထက္ညံ႕တဲ႔ေကာင္ေတြမေတြ႕ေသးဘူးလုိ႕မွတ္ပါ။ နားလည္ေအာင္ၾကည္႕ျပီးမွ ေျဖရွင္းပါ။ ရမ္းကစ္တာေတြမလုပ္ပါနဲ႕။အခ်ိန္ကုန္ပါတယ္။

API ေတြကိုဖတ္ပါ။ အဲဒီလိုေျပာရင္ ရယ္စရာတစ္ခုကိုသတိရပါတယ္။ ထမင္းစားေနုတုနု္း ကြ်န္ေတာ္တို႕ Java သမားႏွစ္ေယာက္က API အေၾကာင္းေျပာေနတာကုိ တစ္ျခား Language ေရးတဲ႔သူငယ္ခ်င္းက dot ေလးခ်လိုက္ရံုနဲ႕မရဘူးလားဆိုျပီး အေရးထဲ IDE ရဲ႕ auto completion (intellisense) နဲ႕လာယွဥ္ေျပာေနလုိ႕ အေတာ္ေလးစိတ္ေလရပါတယ္။ Eclipse ကလည္း Auto Completion မွာ ထိပ္တန္းကရိွပါတယ္။ ေရးထားတဲ႔သူေတြကလည္း ကမာၻမွာ အေတာ္ဆံုးေတြပါ။ API ကေတာ႔ Java သမားေတြ အတြက္ အေကာင္းဆံုးေလ႔လာစရာပါပဲ။ API ထဲမွာ ဘာေတြလုပ္လုိ႕ရသလဲဆိုတာၾကည္႕လုိက္ရင္ အေတာ္ေလးအိုေကသြားပါတယ္။

Java သမားတစ္ေယာက္ဟာ တကယ္ေရးတဲ႔ေနရာမွာ ၾကာၾကာေလးေနဖုိ႕လိုပါတယ္။မဟုတ္ရင္ Training ground မျဖတ္သန္းခဲ႔တဲ႔ စစ္သားေတြလုိပဲ။တကယ္တမ္းၾကေတာ႔ ၆၃ မက်ေတာ႔ဘူး။

ျမန္မာေတြက မညံ႕ပါဘူး။ အခု ဖိလစ္ပင္းေတြနဲ႕ အိႏၵိယေတြ၊ တရုတ္ေတြ စင္ကာပူကို Mass Export လုပ္ေနခ်ိန္မွာ Software သမားေတြအေနနဲ႕ အမ်ားၾကီးေလ႔လာဖုိ႕လိုပါတယ္။ အထူးသျဖင္႔ ကုလားေတြက စာဖတ္ပါတယ္။ က်န္တဲ႔ ဖဦးထုပ္နဲ႕ တရုတ္ကေတာ႔ ထင္သေလာက္မဟုတ္တာမ်ားပါတယ္။ အဲဒီလုိ အျပိဳင္အဆိုင္ပိုမ်ားလာတဲ႔အခ်ိန္မွာ တပမ္းသာဖုိ႕က တကယ္ေတာ္တဲ႔လူျဖစ္ဖုိ႕နဲ႕ Flexibility ေကာင္းဖုိ႕၊ ၆၃ က်ဖုိ႕လိုပါတယ္။ ကိုယ္႔မွာ အားနည္းေနတဲ႔အပိုင္းကိုရွာပါ။ ျဖည္႕ဆည္းပါ။ တစ္ႏွစ္ေလာက္အတြင္းမွာ ဒီက ေရးေနတဲ႔ သာမန္ Developer ေတြကို ေက်ာ္တက္ႏိုင္ပါတယ္။ ဘာမွမပူပါနဲ႕။ ျမန္မာေတြေလာက္ဘယ္သူမွ အားအားယားယား ေလ႔လာဖုိ႕ အခ်ိ္န္မရိွပါဘူး။ ဒီကို ေရာက္ေနတဲ႔ Computer ကညီငယ္ေတြ၊ IT ကညီငယ္ေတြ၊ညီမငယ္ေတြအားလံုး ေက်ာင္းမွာ ဖတ္ခဲ႔တဲ႔စာေတြကိုျပန္ေတြးလုိက္ပါ။ အဲဒီဖတ္ခဲ႔တာေတြရဲ႕တစ္၀က္ေလာက္ကိုပံုမွန္ဖတ္ပါ။ စင္ကာပူမွာ ျမန္မာေတြေတာ္တာကို လက္ခံလာတဲ႔ ကုမၸဏီေတြအမ်ားၾကီးရိွပါတယ္။ ထပ္ျပီးသက္ေသျပၾကပါ။ ေနာက္လူေတြအတြက္ အေကာင္းဆံုးကူညီေပးလုိက္ဖုိ႕က ကိုယ္႔ေနရာမွာ ကိုယ္ဟာ အေကာင္းဆံုးလူျဖစ္ေနဖုိ႕ပါပဲ။

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

ဒီေဆာင္းပါးက နည္းနည္းေတာ႔ လုိရင္းမေရာက္သလုိျဖစ္ေနပါတယ္။
တကယ္႔ Main Theme ကေတာ႔တစ္ခုတည္းပါ။ Let's prove we are the best !!!!!!!!!!!!!!!!!!!

regards_zeroDividedByZeroIsZerO

Dedicated to all young Software Engineers ..., Coders, Debuggers,Deployers,DBAs,BAs and QAs.

Git :)

Java အေၾကာင္းေရးထားတာေတြအကုန္ျပန္ဖတ္ျပီး Main Theme ေပ်ာက္ေနတာကိုသတိထားမိပါတယ္။

အခုတေလာ အခ်ိန္ကလည္း မဟားတရား အားေနေတာ႔ ဘာမွမစဥ္းစားဘဲ Java ေရးလုိ႕ရတယ္ဆိုတဲ႔ အယူအဆကို အေကာင္အထည္ေဖာ္တဲ႔အေနနဲ႕ ... သင္ခန္းစာေတြပါေရးပါမယ္။ တကယ္ေတာ႔ကိုယ္႔ဘာသာကိုယ္ဖတ္ရတာ ျမန္ပါတယ္။ ျပန္ေရးရတာ အေတာ္ေလးပ်င္းဖုိ႕ေကာင္းပါတယ္။Teach yourself Java in 12 seconds
sysout + ctrl+Space in eclipse.
then it will show : System.out.println();
Modify it a bit as following :
System.out.println("Hello Dying World!!!!");
run...

အဲဒါမ်ိဳးေတြေတာ႔မေရးခ်င္ပါဘူး။

ေလးနက္တဲ႔အေၾကာင္းအရာေတြကိုလည္း မ်ားမ်ားေရးခ်င္ပါတယ္။ မ်ားမ်ားဖတ္ေလေလ မေရးျဖစ္ေလေလျဖစ္ေနတဲ႔အတြက္ ...ၾကိဳးစားျပီးပံုမွန္ေရးပါမယ္။

ဒီေန႕လည္း Git ကို စမ္းၾကည္႕ပါတယ္။ Git ကိုမေျပာခင္ Version Control System ေတြအေၾကာင္းနည္းနည္းေျပာခ်င္ပါတယ္။ ကေလးေေတြသိေအာင္လုိ႕ပါ။

Source Code ေတြကို တစ္ေနရာမွာသိမ္းထားျပီး Version ခြဲထားတာမ်ိဳးပါ။ ဥပမာဆိုပါေတာ႔ ..ကြ်န္ေတာ္အခုေရးေနတဲ႔ Dynamic Patcher ဆိုတဲ႔ Project ကို ကြ်န္ေတာ္စေရးတယ္။ Version Controlတစ္ခုခုမွာ import လုပ္ထားလိုက္တယ္။ ေနာက္ေန႕ၾကရင္ ဆက္ေရးတယ္။ ျပီးရင္ ပထမေန႕မွာ import လုပ္ထားတဲ႔ Version Control System ထဲကို ထပ္ထည္႕တယ္ဆိုပါေတာ႔။

Version Control System မွာက Dynamic Patcher verion 1, version 2 ဆိုျပီး ႏွစ္ခုျဖစ္ေနပါမယ္။
ေနာက္ထပ္ ကြ်န္ေတာ္႔သူငယ္ခ်င္းတစ္ေယာက္ကလည္း ဆက္ေရးျပီး Update လုပ္လိုက္ရင္ version 3 ျဖစ္သြားပါမယ္။ ကြ်န္ေတာ္က ဆက္ေရးခ်င္ရင္ အဲဒီ version 3 ကို check out ျပန္လုပ္ျပီး ဆက္ေရးရံုပါပဲ။

Version Control System ထဲကို သြင္းရင္ check in လုပ္တယ္လုိ႕ေျပာပါတယ္။ ျပန္ထုတ္ရန္ check out လုပ္တယ္လုိ႕ေျပာၾကပါတယ္။ Team နဲ႕ေရးတဲ႔အခါ source code ေတြကို merge လုပ္ဖုိ႕ update လုပ္ဖုိ႕ေတြအတြက္ Version Control System ကမရိွမျဖစ္လုိပါတယ္။

အခုလုပ္ေနတဲ႔ရံုးမွာေတာ႔ Borland Star Team သံုးပါတယ္။ အင္မတန္ အဆင္ေျပပါတယ္။ အရင္ရံုးမွာလည္း CVS ရိွပါတယ္။ အဆင္ေျပပါတယ္။

Version Control System ေတြရဲ႕ အားသာခ်က္က ဥပမာ ကြ်န္ေတာ္က Dynamic Patcher ကိုေရးျပီးသြားလုိ႕ customer က CR(Change Request) လုပ္ရင္ Main Project ကို မထိပဲ Branch ခြဲထုတ္ျပီး Branch မွာ Update လုပ္၊ Enhance လုပ္ျပီးမွ testing လုပ္လို႕ရပါတယ္။ ေနာက္ဆံုး အားလံုးအိုေကျပီဆုိမွ Main Branch နဲ႕ျပန္ေပါင္းျပီး Software ကို ျပန္ျပီး Deploy လုပ္လုိက္ရံုပါပဲ။

Git ကေတာ႔ Open Source ျဖစ္ပါတယ္။ Linux Kernel ကို ေရာ Adroid ေတြရဲ႕ source ေတြေရာ အဲဒီမွာ host လုပ္ထားပံုေထာက္ရင္ စိတ္ခ်ရပါတယ္လို႕ေျပာျပီးသားျဖစ္ေနပါျပီ။ အလကားရတာ မ်ားမ်ားသံုးတာဟာ Java သမားတိုင္းရဲ႕တာ၀န္ျဖစ္ပါတယ္။ အလကားရတာကို crash ျဖစ္တဲ႔အထိ သံုးပစ္ရပါမယ္။ ... Java ေရးတဲ႔သူတုိင္းဟာ အသစ္ကို စိန္ေခၚႏိုင္တဲ႔သူမ်ိဳးျဖစ္ရပါမယ္။ အေျပာင္းအလဲကိုမေၾကာက္ပါနဲ႕။ ေနာက္ဆံုးေပၚနည္းေတြဟာ လူေတြကို လြယ္ေအာင္လုပ္ေပးတာပါ။ ပိုျပီးလြယ္သထက္လြယ္လာပါတယ္။ ....

Eclipse အတြက္ စျပီးေရးၾကတဲ႔သူေတြကို အထူးေက်းဇူးတင္ပါတယ္။ အခုလည္း Git အတြက္ plug in ေလးကူးလုိက္ရံုပါပဲ။ Java ေရးတယ္ဆိုေတာ႔ Eclipse ေနာက္ဆံုးဗားရွင္းျဖစ္တဲ႔ Helios ကို သိမယ္ထင္ပါတယ္။ မသိရင္ လည္း update လုပ္လုိက္ပါ။ အဲဒီမွာ Market Place ပါလာပါတယ္။ iTunes ရဲ႕ app store အထာမ်ိဳးပါပဲ။ ပိုျပီး ရွာရေဖြရလြယ္ပါတယ္။ Git plug in ေလးသြင္းလုိက္ရံုပါပဲ။

အခုဒီလိုေလးေျပာေတာ႔ ဒါကိုမ်ားေရးေနတယ္လုိ႕ထင္ပါမယ္။ အားေနရင္ တျခားနည္းလမ္းေတြနဲ႕လည္းၾကိဳးစားၾကည္႕ပါ။ :P။

Git Plug in install လုပ္ျပီးရင္ ထံုးစံအတိုင္း Eclipse ကို restart လုပ္ပါ။ ျပီးရင္ ကိုယ္ေရးထားတဲ႔ project ကိုright click ေထာက္ျပီး share လုိက္ပါ။ Git repo မွာ share လုိက္ရံုပါပဲ။

That's all for Git integration in eclipse and basic knowledge for Version Control System .



Regards_zeroDivdedByZeroIsZero

public void callWarning(){
callWarningHelper();
}

public callWarningHelper implements DebtOfStarBucks throws notEnoughCashException(){
try{
System.out.println("
.........By the way, bro ................Didn't post for a long time meh ...
Don't be lazy as me :)
I will post a lot this month and next month :)");
//PURPOSELY THROWS EXCEPTION TO MAKE AN INFINITE LOOP
throw new Exception();
}catch(Exception exceptionIsNotError){
logger.error(exceptionIsNotError.toString());
callWarning();
}
}

Thursday, July 29, 2010

Linux commands (1)

Linux console ေပၚမွာ အလုပ္လုပ္တယ့္ အခါ တစ္ခ်ိဳ႕ command ေတြက သိထားရင္ command line interface မွာ အေတာ္အသုံးဝင္ပါတယ္။ မသိလည္းရတယ္ ၊ သိရင္ ပိုအဆင္ေျပတယ့္ command ေလးေတြေပါ့။ နည္းနည္းခ်င္း ေခါင္းထဲေပၚလာသေလာက္ ေရးသြားပါမယ္။

...........
Log file လိုဟာမ်ိဳးကို ဖတ္တယ့္အခါမွာ tail command ကသုံးဝင္ပါတယ္ ။ ဆိုၾကပါေတာ့၊ httpd ရဲ့ access_log file ။ Apache process run ေနျပီး user ေတြက access လုပ္ေနတိုင္း access_log ကေရးေနပါတယ္။ ဒီလို log မ်ိဳးရဲ့ ေနာက္ဆုံး process ေတြ log ကို လိုခ်င္ရင္ အလြယ္တကူက `cat /var/log/httpd/access_log ဆိုျပီး cat ထုတ္လိုက္တာမ်ိဳး ၊ tail -n50 /var/log/httpd/access_log ဆိုျပီး ေနာက္ဆုံး လိုင္း 50 ေခၚၾကည့္တာတို႕ လုပ္လိုက္တာမ်ားတယ္။ ဒါေတြက ဒီ command ကို ႐ိုက္လိုက္တယ့္ အခ်ိန္က log ထဲမွာရွိတာကိုျပတာပါ။ Real time ေတာက္ေလွ်ာက္လာေရးေနတာကို ဖတ္ခ်င္ရင္ေတာ့
tail -f /var/log/httpd/access_log

ဆိုျပီး tail -f ကိုသုံးပါတယ္။ ဒါဆို console ထဲမွာ log file ကပြင့္လာျပီး log မွာ တစ္လိုင္းအသစ္လာေရးတိုင္း တစ္လိုင္းတက္တက္လာတယ္။ ဒါဆို debug လုပ္ဖို႕ ပို အဆင္ေျပပါတယ္။

........
တစ္ခါတစ္ေလ log file ( text file တစ္ခုခုေပါ့) ကို ရွင္းလိုက္ခ်င္တာမ်ိဳးေတြမွာ ၊ အထဲက စာေတြ လိုက္ဖ်က္ရရင္လည္း မလြယ္ဘူး။ File ကိုဖ်က္ျပစ္လိုက္ျပီး ၊ process က log ျပန္လာေရးခိုင္းတာကလည္း ေျပာရင္ သိပ္မေကာင္းဖူး။ File ကို ဖ်က္ျပစ္လိုက္ရတာကိုက မေကာင္းဘူး။ အထဲက content ကိုပဲ ရွင္းလိုက္ခ်င္ရင္ ဒီလိုေလးက လြယ္တယ္ ။
> /path/to/log.file

အေရွ႕က '>' ေလးက command ထဲမွာပါပါတယ္။ တစ္ကယ္က
echo "" > /path/to/log.file

ကိုလုပ္သြားတာပါ။ echo command နဲ႕ output pipe '>' ကိုသိရင္ ဒါကိုသိပါလိမ့္မယ္။ File ထဲက content ကို blank space တစ္ခုနဲ႕ overwrite လုပ္လိုက္တာပါ။ အဲေတာ့ log file က empty log ျဖစ္သြားတာေပါ့။

..........
ေနာက္တစ္ခုကေတာ့ shell arguments ေတြပါ။ အသုံးျဖစ္ဆုံးကေတာ့ ! နဲ႕ !$ ပါ ။
! က ေနာက္ဆုံးသုံးခဲ့တယ့္ argument ကို ကိုယ္စားျပဳပါတယ္။ တကယ္လို႕ အေပၚမွာ file တစ္ခုကို vi သုံးျပီး edit ထားတယ္။ အခု တျခား directory ကိုေရာက္ေနျပီ ။ File path ၾကီးကရွည္လို႕ ျပန္မ႐ိုက္ခ်င္ဖူးဆိုရင္
!vi

လို႕ သုံးလို႕ရပါတယ္။ Shell history ထဲက ေနာက္ဆုံး vi command ကိုျပန္ေခၚေပးပါလိမ့္မယ္။

.......
!$ ကေတာ့ last command ရဲ့ argument ကိုပဲယူတာပါ။
ls -l /bar/nyar/thar/da/kar/file

လို႕ ရွာျပီး၊ ေနာက္တစ္လိုင္းမွာ အဲ file ကို vi မွာ edit ဖို႕ဆိုရင္ ပံုမွန္ဆို vi /bar/nyar/thar/da/kar/file ဆိုျပီး ရွည္ရွည္လွ်ားလွ်ား႐ိုက္ေနရပါမယ္။ အဲေတာ့
vi !$

လို႕႐ိုက္လိုက္ရင္ ေနာက္ဆုံး command ရဲ့ argument ကိုျပန္ယူျပီး vi သြားပါလိမ့္မယ္ ။
( Up arrow နဲ႕ last command ကိုျပန္ေခၚ၊ Home ကိုႏွိပ္ျပီး ls -l ကိုဖ်က္ vi လို႕႐ိုက္ ၊ ဒါလည္းရပါတယ္။ ဒါေပမယ့္ ပိုမရွည္ဖူးလား။ ဒါေတာင္ Home တို႕ End တို႕ကို Shell environment ထဲမွာ set ထားမွပါ။ Unix အမ်ားစုမွာ default အားျဖင့္မပါပါဘူး။ Home ႏွိပ္လိုက္ရင္ ^ ေတြနဲ႕ ေပၚလာပါလိမ့္မယ္။ )

..........
အခုေတာ့ ေတာ္ေလာက္ျပီ။ အခုသုံးလိုက္မိတာေလးေတြ ေျပာျပတာပါ။ ေနာက္ၾကံုရင္ ၾကံုတာေတြ ေရးပါအုန္းမယ္ ။ တစ္ခ်ိဳ႕ command ေတြက သူ႕ေနာက္က option ေတြအရမ္း powerful ျဖစ္တာေတြရွိပါတယ္။ find တို႕လို command မ်ိဳးေပါ့။ exec လို အသုံးတယ့္တာေတြလည္း ရွိပါေသးတယ္။ ေနာက္မ်ားမွ ....

Divinity

Thursday, July 22, 2010

RAID is not *Backup*

Well,I've heard of this since a few years back. It could never protect from Human errors, e.g, mistakenly issued a DROP database command. :)

Some people believe RAID 1 could save them from the risk of data looses due to hardware failure since they have 2 copies of every things. That's partially true. RAID 1 could save you from data looses due to 'a hard drive failure', not any of hardware failure. In a RAID 1 system, it includes 2 hard drives minimum ( could be 3 with a hot-spare) and a RAID controller card. Everything on a primary HDD is mirrored across on secondary one. So even if the primary HDD is failed, we could still continue our business since every bits of data are still exist on the secondary HDD. Probability of failing both HDDs at the same time is a very rare chance, approximately 0.01% chances only. Looks promising, right ?

But as I've said above, RAID controllers are involved in RAID systems and they play the main role in it. In most cases, when a RAID controller fails, it might make some improper I/O onto the hard drives which can bring your system into file system corruption. The chances of failing RAID controller is a bit high if we are dealing with integrated raid cards. Dedicated RAID controllers are much better in this case.


...................................

I've had this problem one time a year ago on Windows System running on RAID 5. It makes my system hang and gives BSOD on next reboot ( still BSOD even on the other known good machines). At that time I got a few luck to copy out all data using a Linux Live CD and it was a development server which is not too critical.

Just in a few days ago, one of our client gives us a call and says their payment gateway system is not accessible. What a generic report from a user 'not accessible' with no specific details. I could browse to their admin web UI and ssh in and looks around. But when i tried to create a file using 'touch' I got an error. Well, this's it. Initially, I was totally clam as I know this system is running on 2 mirrored HDDs. If a HDD fails, I can just swap it with a new HDD and bingo. That is what I've in my mind while travelling down to data center.

But it was not that fortunate. I was surprised to see both HDD having the same IO issue. Magic fsck could not help me this time. Try those HDDs with another spare identical machine, Kernel panic. I whispers "that's good. you give me something interesting bullsh*t for today". By running ServeRAID on the problematic machine, I could see it can't detect the HDDs all the the time even to the new HDD I just brought from office. Only thing I can do is I can backup databases and some data from linux rescue mode. Yes, some lib directories are not even browsable at this point.

I've left with no choice but to prepare a new server to replace. This existing system has self compiled Apache and some modules, including openssl and some libraries which supports TLS. It's not a difficult things, but it takes time. It's 11pm already when I started installing a new server. Well, that's an almost overnight working day.

...................................

When a RAID controller's gone, it has a chance all your data could be gone/corrupted too. So backup is a 'must' even if you are running on RAID 50. Be planned, be prepared.


Divinity

Wednesday, July 21, 2010

SUID ဆိုတာ

Linux / Unix system ေတြအေၾကာင္းေလ့လာရင္ SUID / SGID ဆိုတယ့္ အသုံးအႏွုန္းမ်ိဳး ေတြ႕ရတတ္ပါတယ္ ။ SUID ဆိုတာ Set User ID ကို အတိုေခၚတာပါ။ Executable file ေတြရဲ့ permission မွာ ေပးေလ့ရွိပါတယ္ ။ SUID ေပးရတယ့္ ရည္ရြယ္ခ်က္က executable permission ရွိတယ့္ ဘယ္ user ကပဲ execute လုပ္လုပ္ ၊ ဒီ command / file ကို file owner ရဲ့ identity နဲ႕ run လိုက္ပါတယ္။ ဆိုလိုတာကေတာ့ root user ရဲ့ file တစ္ခုကို everyone executable ေပးထားမယ္၊ ဒါေပမဲ့ SUID set ထားရင္ ဘယ္ user ကပဲ run run ဒီ file က root user အေနနဲ႕ run ပါမယ္။ အနီးစပ္ဆုံး လို႕ ထင္တယ့္ windows ဥပမာကေတာ့ run as administrator နဲ႕ run သလိုေပါ့။ ( သိပ္ေတာ့မတူသလိုပါပဲ။ Run as administrator ကိုေသခ်ာမသိလို႕ မေျပာႏိုင္ပါဘူး)

Linux / Unix မွာ file permission ကို rwx ( Read, Write, Execute) ဆိုျပီး သတ္မွတ္ပါတယ္။ SGID / SUID ေပးထားရင္ေတာ့ s ဆိုတာေလးေတြ႕ရေလ့ရွိပါတယ္။ဥပမာေလး ေျပာရေအာင္ ။

User တိုင္းကို cd တို႕ ls တို႕လို command မ်ိဳးကိုေတာ့ ေပးသုံးရပါတယ္။ အဲလို command တစ္ခုရဲ့ permission ကိုၾကည့္ရင္
$ ls -l /bin/ls
-rwxr-xr-x 1 root root 116688 2010-04-28 23:56 /bin/ls


File ရဲ့ owner က root ျဖစ္ျပီး other users ( Everyone ေပါ့ဗ်ာ Windows မွာေတာ့) ကို Executable permission ေပးထားတာေတြ႕ပါလိမ့္မယ္ ။ Linux File permission ( rwx တို႕ ၊ 700 တို႕ 777 တို႕ )အေၾကာင္းသိျပီးသား လို႕ ယူစလို႕ ဒါကိုမရွင္းေတာ့ပါဘူး။ ls command ကို User တိုင္းက အသုံးျပဳႏိုင္တယ္။ ေနာက္ထပ္ User တိုင္း သုံး လို႕ရတယ့္ command ေလးတစ္ခုကိုၾကည့္ရေအာင္။ Password change တယ့္ passwd command ပါ။
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 25836 2009-09-14 20:14 /usr/bin/passwd


သူလည္း everyone executable ေပးထားတယ္ ဒါေပမယ့္ တတိယအလုံးမွာ x မဟုတ္ပဲ s ျဖစ္ေနတယ္။ ဒါ SUID set ထားတယ္လို႕ ေဖာ္ျပတာပါ။ ls command တုန္းကလိုပဲ သူ႕မွာလည္း ေနာက္ဆုံးအလုံးက 'x' ၊ ဒါဆို others မွာ executable permission ေပးထားတာေပါ့။ ကြာတာက ၊ ေရွ႕မွာ 's' ျဖစ္ေနတယ္။ ls command တုန္းကလိုပဲ User တိုင္းကသုံးႏိုင္တယ္။ ဒါေပမဲ့ ဒီ passwd command ကို သုံးျပီး လုပ္သမွ်အလုပ္တိုင္းကိုေတာ့ root အေနနဲ႕ လုပ္သြားမွာျဖစ္ပါတယ္။ SUID ကို security consideration တစ္ခုအေနနဲ႕ သတ္မွတ္ၾကေလ့ရွိပါတယ္။ Command တိုင္း file တိုင္းကို အားတိုင္း SUID set မလုပ္ဖို႕ အျပင္းအထန္ ကန္႕ကြက္ပါတယ္။ ဘာလို႕လည္း ?

ခုနက passwd command ေလးကိုပဲ ၾကည့္ရေအာင္။ User တစ္ေယာက္ရဲ့ password ဟာ /etc/shadow ဆိုတယ့္ file ထဲမွာ hash အေနနဲ႕ ရွိပါတယ္။ တကယ္လို႕သာ ဒီ hash ေတြကို ရရင္ rainbow table ေတြဘာေတြနဲ႕ decipher လုပ္ႏိုင္ေကာင္းလုပ္ႏိုင္ပါတယ္။ Root user ရဲ့ password လည္း hash အေနနဲ႕ ရွိပါတယ္။ အဲေတာ့ ဒီ /etc/shadow file ထဲက data က အရမ္းအေရးၾကီးတယ့္ sensitive data ပါ။ ျဖစ္ႏိုင္ရင္ ဘယ္ user ကိုမွ ေပးမၾကည့္သင့္ဖူးေပါ့။ ဒီ /etc/shadow file ရဲ့ owner က default အေနနဲ႕ root ျဖစ္ျပီး permission က 700 ( Owner သာလွ်င္ rwx ရွိျပီး က်န္တယ့္လူေတြ read ေတာင္လုပ္လို႕မရတယ့္ permission) ေပးထားေလ့ရွိပါတယ္။

အဲမွာ စတာပါပဲ ၊ User တစ္ေယာက္က password change ရင္ passwd command ရဲ့ process တစ္ခုအေနနဲ႕ password အသစ္ကို hash ေျပာင္းျပီး ဒီ /etc/shadow file ထဲမွာရွိတယ့္ သူ႕ရဲ့ password hash ကို ျပင္ရပါမယ္။ ဒါမွ password အသစ္ျဖစ္မွာကိုး။ ဒါေပမယ့္ root user ကပဲ ဒီ file ကို edit လို႕ရတယ္။ ဒါဆို password change တိုင္း root ကိုလွမ္း change ခိုင္းရမွာလား ။ ဒါဆိုလည္း မဟုတ္ေသးဘူး။ ဒါေတြေၾကာင့္ password change ရာမွာသုံးတယ့္ passwd command ကို root အေနနဲ႕ SUID set ထားလိုက္ပါတယ္။ passwd command က လုပ္တယ့္ အလုပ္မွန္သမွ် ၊ /etc/shadow မွာ hash update လုပ္တာအပါအဝင္၊ အားလုံးကို ဒီ file ရဲ့ owner ျဖစ္တယ့္ root user အေနနဲ႕ လုပ္သြားလိုက္တယ္။ /etc/shadow ကို everyone editable ေပးရတာထက္ အမ်ားၾကီးေကာင္းတာေပါ့။ ဒီေလာက္ဆိုရင္ SUID ဆိုတာ ဘာလုပ္တယ္၊ ဘယ္လိုဆိုတာ သိေလာက္ပါျပီ။

အေပၚမွာ ေျပာခဲ့သလိုပဲ SUID set ရင္ အလြန္သတိထားရပါတယ္။ ဒီ executable file က ဘာေတြလုပ္သလည္းဆိုတာရယ္ သူ႕ source ရယ္ကို သိသင့္ပါတယ္။ SGID set ထားတယ့္ file တစ္ခုက တစ္ျခား user ကို write permission မေပးရပါဘူး။ Edit လုပ္ျပီး သူလိုခ်င္တယ့္ command ေတြေျပာင္းသြားရင္ ကိုယ္ပဲ ျပသနာျဖစ္ပါမယ္။ Shell script လိုဟာမ်ိဳး ၊ source file လိုဟာမ်ိဳးကို SUID မေပးသင့္ပါဘူး။ Content ကိုျမင္ေနရလို႕ Buffer Over Flow(BOF) flaw ရွိတာတို႕ဘာတို႕ ျဖစ္ႏိုင္ပါတယ္။ ျဖစ္ႏိုင္ရင္ Compiled binary ကိုပဲ SUID ေပးသင့္ပါတယ္။ ဒါေတာင္ safe လို႕ေျပာလို႕မရပါဘူး။

ခုတစ္ေလာ စာမေရးျဖစ္တာၾကာလို႕ Clonezilla ေလးနဲ႕ server တစ္ခုကို image အျဖစ္ေျပာင္းေနတာ ထိုင္ေစာင့္ရင္း ဒီ post ကိုေရးလိုက္ပါတယ္။ SGID ေတာ့ ေနာက္မွေပါ့ ။ ဘာေရးရမွန္းမသိသလို စာစီမရတာလည္းၾကာျပီ ။ :D


Regards
Divinity

Spring Framework

Spring Framework အေၾကာင္းေလ႔လာခ်င္တဲ႔သူေတြအတြက္ လြယ္ကူသက္သာတဲ႔စာအုပ္ေလးသတင္းေပးခ်င္လုိ႕ပါ။ အခုလည္းဖတ္ေနပါတယ္။ လုိင္ဘရီက ငွားဖတ္ျပီးၾကိဳက္လုိ႕၀ယ္လုိက္ပါတယ္။ ၄၇ SGD ပဲေပးရပါတယ္။ Spring, A Developer's Notebook. ျဖစ္ပါတယ္။ Oreilly ကထုတ္တာပါပဲ။

၂၀၀၅ April ကထုတ္ပါတယ္။ နည္းနည္းေလးေတာ႔ ေနာက္က်ေနပါျပီ။ ဒါေပမယ္႔ ေတာ္ေတာ္ေလးေကာင္းပါတယ္။
Agile Development စာအုပ္နဲ႕ ဒီစာအုပ္ႏွစ္အုပ္ထဲကဘာယူမလဲေသခ်ာေတြးျပီးေရြးလုိက္တာပါ။ ဟိုစာအုပ္က ၂၀၀၆ မွာထုတ္တာပါ။ ေစ်းက 57 SGD ပါ။ အဲဒီတစ္အုပ္ကေတာ႔ သီအိုရီနည္းနည္းပိုမ်ားပါတယ္။ အခုစာအုပ္ေလးကေတာ႔ အခ်င္းခ်င္းေျပာျပထားသလိုေရးထားေတာ႔ပိုအဆင္ေျပမယ္ထင္ပါတယ္။

Developer ေကာင္းျဖစ္ခ်င္ရင္ အလုပ္မ်ားမ်ားလုပ္စရာမလိုပါဘူး။ မ်ားမ်ားဖတ္ျပီး နည္းနည္းေလာက္ စမ္းၾကည္႕ဖုိ႕ပဲလိုပါတယ္။ လုပ္တတ္ရင္ရပါျပီ။ေႏွးတာျမန္တာေတြက skills ပါ။ knowledge ရိွရင္ skill ကိုျဖည္႕ဖုိ႕ကလြယ္ပါတယ္။

ေရးတဲ႔သူႏွစ္ေယာက္က Bruce A.Tate နဲ႕ Justin Gehtland ပါ။

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

ေနာက္ထပ္ Level ဟာ Architect ျဖစ္တဲ႔အတြက္ ... ဒါေတြကို မေလ႔လာရင္ ေပါေတာေတာ Architect ပဲျဖစ္လာပါမယ္။ Developer ပဲျဖစ္ျဖစ္ Architect ပဲျဖစ္ျဖစ္ foundation ခုိင္ခံ႕ဖုိ႕လိုပါတယ္။

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

တစ္ခါတစ္ေလ အေသးစိတ္ေရးဖုိ႕ အခ်ိန္ကမရိွတဲ႔အတြက္ စာအုပ္ညႊန္းလုိက္ပါတယ္။

ဖတ္တာျပီးသြားရင္လည္း အေရးၾကီးတဲ႔အခန္းေတြအေၾကာင္းသံုးသပ္ခ်က္ေရးျဖစ္ပါမယ္။

Regards,
Zero


Tuesday, July 13, 2010

IT Trends

ေရးခဲ့ဖူးတယ့္ စာေတြ အားလုံးကို ျပန္စုထားခ်င္လို႕ ဒီ post ကို ဒီမွာပါျပန္တင္လိုက္ပါတယ္။ Post အေနနဲ႕ဆို သိပ္ရွည္လို႕ pdf ကိုပဲတင္လိုက္ပါတယ္။
လြန္ခဲ့တယ့္ တစ္ႏွစ္ေက်ာ္ June 2009 က က်ေနာ္ Mystery Zillions မွာေရးခဲ့တယ့္ ေဆာင္းပါးပါ။ က်ေနာ့ရဲ့ ပထမဆုံးေသာ ျမန္မာစာကို ရွည္ရွည္ေရးတယ့္ post တစ္ခုေပါ့။ IT career ဘာေရြးရမွန္းမသိဘူး ဆိုတယ့္သူေတြအတြက္၊ ေရြးခ်ယ္ထားတယ့္လမ္းမွာ ဘယ္လို အဆင့္ေတြရွိမလည္းဆိုတာ နည္းနည္းေလာက္ ေတြးမိသြားေအာင္ေရးခဲ့တာပါ။ ျမန္မာစာကို ကိုစိုးမင္းၾကီးရဲ့ Burglish.com ကေန ႐ိုက္ခဲ့တာမို႕၊ စာလုံးေပါင္းအမွားေတြ အမ်ားၾကီးျဖစ္ေနပါတယ္။ ( အခုလည္း burglish သုံးေနတုန္းပါ၊ စာလုံးေပါင္းအမွားနည္းလာတာပဲရွိတယ္ ၊ ) ဒီ post ကို pdf ျပန္လုပ္ျပီး တင္ေပးခဲ့တယ့္ ကိုရသာကိုလည္း ေက်းဇူးတင္ပါတယ္။

PDF ကို ဒီမွာ download ပါ

Thanks
Divinity

Wednesday, July 7, 2010

Effective Java

အခု Effective Java ဖတ္ေနပါတယ္။

ဒီေန႕ အေရးၾကီးတာႏွစ္ခု သံုးခုျပန္ေျပာလုိက္ပါတယ္။

Developer ေတြသတိထားရမွာေတြပါ ....။
No.1
Collection ေတြကို raw type မသံုးပါနဲ႕။ အဲဒါက run time error ျဖစ္ေစႏိုင္တဲ႔အတြက္ ..ေနာက္မွေခါင္းမကိုက္ခ်င္ရင္ ေစာေစာကတည္းက Type ကို Define လုပ္ပါ။
N0.2
Parameters အခု ၁၀၀ နဲ႕ method ေတြ မေရးပါနဲ႕။ ျဖစ္ႏုိင္ရင္ Bean တစ္ခုလုပ္လုိက္ပါ။ Bean ကိုပဲ ပို႕လုိက္ပါ။ ပိုေကာင္းတဲ႔နည္းလမ္းက Builder သံုးတာပါ။
No.3
Garbage colletion ကို သတိျပဳပါ။ သံုးျပီးရင္ ဒီအတုိင္းမထားခဲ႔ပါနဲ႕။ အိမ္သာတက္ျပီးေရေလာင္းရသလို သံုးျပီးသား object တိုင္းက ပစ္မထားခဲ႔ပါနဲ႕။ Memory leakage ျဖစ္လာတဲ႔အခါ အသံုးမက်တဲ႔ Developer ျဖစ္သြားတတ္ပါတယ္။ ျဖစ္ႏိုင္ရင္ သူ႕ဘာသာသူ garbage collection လုပ္တဲ႔ Java ပဲ ... သူ႕အလုပ္သူလုပ္ပါေစ ဆုိျပီး မလုပ္ပါနဲ႕ ..ျဖစ္ႏိုင္ရင္ ကိုယ္႔ဘာသာကိုယ္ပဲ null ပစ္ပါ။ Null pointer ေတြၾကံဳရတာက Memory Leakage ထက္ ေျဖရွင္းရ ျမန္ပါတယ္ ...။ ေနာက္ပိုင္းမွာ အက်င္႔လုပ္ထားရင္ အသားက်လာပါလိမ္႔မယ္။ Excepiton ကိုလည္း throw Exception လုပ္ပါ။ ၾကိတ္ျပီးဟိုဟာျပင္ ဒီဟာျပင္မလုပ္ပါနဲ႕။ Java ကို သူ႕သဘာ၀ကေန မကင္းကြာပါေစနဲ႕။

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

တစ္ခ်ိန္ခ်ိန္မွာ Java ေရးၾကမယ္႔
ညီငယ္ညီမငယ္မ်ားအတြက္ ...
Zero

Oracle SQL developer

http://st-curriculum.oracle.com/tutorial/SQLDeveloper/index.htm

အခုတေလာ ရံုးမွာ စာပဲထုိင္ဖတ္ေနရလုိ႕ … ပ်င္းေနတာနဲ႕ Oracle SQL developer သံုးရင္ အလြယ္ေလးေတြ သံုးလုိ႕ရတဲ႔ manual တစ္ခုဖတ္ျဖစ္ပါတယ္။ သိျပီးသားေတြေပမယ္႔ IDE သံုးတဲ႔အခါ သိထားရင္ ပိုေကာင္းပါတယ္။ setup က ၁၅ မိနစ္ေလာက္နဲ႕ ဖတ္ၾကည္႕တာက နာရီ၀က္ေလာက္ပါပဲ ….။ အပ်င္းေျပ လုပ္ၾကည္႕ေစခ်င္ပါတယ္။ အလကားေပးတဲ႔ oracle client ေတြထဲမွာေတာ႔ အေတာ္ေလးသေဘာက်ပါတယ္။

Java နဲ႕ပတ္သက္တာေတြလည္း အမ်ားၾကီးေရးထားျပီး မျပီးေသးဘူးျဖစ္ေနလုိ႕မတင္ျဖစ္ပါဘူး။

ရံုးမွာက blog ေတြကိုဖတ္လုိ႕ပဲရပါတယ္။ ဒီေန႕မွ၀င္လို႕ရပါတယ္။ အခုေရးေနတာကေတာ႔ အိုနာေသဂ်ာဗားနဲ႕ … Effective Java ထဲက တစ္ခ်ိဳ႕မွတ္သားစရာေလးေတြပါ။

သႏိၲတအားျဖင္႔ (With Peace In Pali)

Zero

Thursday, July 1, 2010

Wired Equivalent Privacy ( WEP)

WEP နဲ႕ WEP cracking tutorial ကိုျပန္ရွင္းျပတာမ်ိဳး က်ေနာ္ Myanmar IT Resource Forums မွာ ေရးဖူးပါတယ္။ အဲတုန္းက Forum post ဆိုေတာ့ ေမးတာေျဖ၊ ျပန္ေျပာနဲ႕ article ပံုစံေတာ့မဟုတ္ဖူးေပါ့။ အဲတုန္းက ေရးခဲ့ဖူးတာကို က်ေနာ္ blog post ပံုစံ ျပန္ေရးၾကည့္ခ်င္တယ္။ Cracking tuto ေတာ့ ျပန္မရွင္းေတာ့ဖူး။

Wireless ရဲ့ အလုပ္လုပ္ပံုကစရေအာင္။ Wireless connection တစ္ခုခ်ိတ္ရင္ ပထမ Authenticate လုပ္ရတယ္။ ဒါကို associate လုပ္တယ္လို႕ေခၚပါတယ္။ Laptop တစ္ခုက Access point တစ္ခုကို ခ်ိတ္မယ္ဆိုရင္ ပထမဆုံး associate လုပ္ရပါတယ္။ ေနာက္ေတာ့ Association passed ျဖစ္သြားျပီဆိုရင္ data transmission စလုပ္လို႕ရပါျပီ။ ဒီ data ေတြက ေလထဲကသြားေနမွာဆိုေတာ့ Encrypt လုပ္ဖို႕လိုပါတယ္။ Wireless security method ေတြရဲ့ ကြာျခားမႈက ဘယ္လို encrypt လုပ္လည္း၊ ဘယ္လို data packet structure မ်ိဳးနဲ႕ ပို႕လည္းဆိုတာေတြပဲကြဲသြားတာပါ။ WEP key ေရာ WPA key ေရာ WPA2 key ေရာ လက္နဲ႕ ႐ိုက္ထဲ့ရတာၾကီးပဲ။ WEP အေၾကာင္းဆက္ရေအာင္။

WEP 64 bits key က Hexadecimal 10 လုံး၊ က်ေနာ္တို႕ wireless ခ်ိတ္ရင္ ႐ိုက္႐ိုက္ထဲ့ေနၾက။ Hex ကတစ္လုံးမွာ 4 bits ရွိတာ သင္ဖူးတယ္။ Hex 10 လုံးဆိုရင္ 40 bits ရွိရမွာ ၊ ဒါေပမယ့္ 64 bits key လို႕သုံးပါတယ္။ အဲဒီ 40 bits Hex 10 လုံးကိုေတာ့ password လို႕ပဲ သတ္မွတ္ပါတယ္။ ဒီ password က both ends မွာ သိဖို႕လိုပါတယ္ ။ ဆိုလိုတာကေတာ့ Wireless Access Point ဖက္မွာေရာ ၊ ခ်ိတ္မယ့္ client ( laptop ဆိုပါေတာ့) ဖက္မွာပါ ဒီ password ကို သိထားရမယ္။ ဒါကိုသုံးျပီး Associate လုပ္ရမွာကိုး။ ဒီ password က Hex 10 လုံး 40 bits၊ က်န္တယ့္ 24 bits ကိုေတာ့့ Initialization Vector(IV) လို႕ေခၚပါတယ့္ random generated binary string ပါ။ Password 40 bits + IV 24 bits = WEP Key 64 bits ျဖစ္သြားတယ္။ ဒါက WEP key အေၾကာင္း။ data transaction လုပ္ေတာ့ ဒီ key ကို ဘယ္ေနရာမွာသုံးလည္းဆိုေတာ့ ..

( နည္းနည္း ရွုပ္ရေအာင္ ။) WEP မွာ hash / encryption အတြက္ RC4 Algorithm ကိုသုံးပါတယ္။ ခုနက ရထားတယ့္ 64 bits key ကို RC4 ကိုသုံးျပီး encrypt လုပ္လိုက္ပါတယ္။ အဲဒီကေနရလာတယ့္ hash ကိုသုံးျပီး ပို႕ခ်င္တယ့္ data ကို Eclusive Or (XOR) လုပ္လိုက္ပါတယ္။ DATA ကို XOR လုပ္လိုက္လို႕ ရလာတယ့္ Cipher text ကိုမွ ခုနက 24 bits IV နဲ႕ တြဲျပီး transmit လုပ္ပါတယ္ ။ လက္ခံရရွိတယ့္ ဘက္မွာက 40 bits password ကသိေနျပီးသားေလ။ အဲေတာ့ သိျပီးသား Password ရယ္၊ ပို႕တယ့္ ထဲမွာပါတယ့္ IV ရယ္ေပါင္းလိုက္၊ ျပီးေတာ့ RC4 နဲ႕ Encrypt ျပန္လုပ္၊ ရလာတယ့္ hash နဲ႕ ခုနက လက္ခံရရွိတယ့္ Cipher text ကို XOR ျပန္လုပ္၊ ဒါဆို data ကို decipher text အေနနဲ႕ ျပန္ျမင္ရျပီ။ ေတာ္ေတာ္ ရွုပ္သြားတယ္။ ငယ္မူျပန္ျပီး ABCD ေတြနဲ႕ စဥ္းစားၾကည့္ရေအာင္။

40 bits Password က A လို႕ဆိုပါေတာ့။ WEP အတြက္ randomly generate လုပ္လိုက္တယ့္ 24 bits IV ကို B လို႕ ဆိုပါေတာ့။ ဒါဆို 64 bits WEP key က AB ျဖစ္သြားျပီ။ ဒီ AB ကို RC4 ကိုသုံးျပီး hash လုပ္လိုက္ေတာ့ C ဆိုတယ့္ hash တစ္ခုရလာပါတယ္ ။

ပို႕မယ့္ Data က 'X' လို႕ထားပါေတာ့။ ( Data လို႕ဆိုတယ့္ေနရာမွာ Integrity check အတြက္ checksum ပါ ပါပါတယ္။) ခုနက ရထားတယ့္ hash 'C' နဲ႕ Data 'X' ကို XOR လုပ္လိုက္ပါတယ္။ Result ကေတာ့ Cipher text တစ္ခုျဖစ္တယ့္ 'Y' ကိုရလာပါတယ္ ။ ဒါဆိုပို႕လို႕ရျပီ။ Cipher text ျဖစ္ေနတယ့္ Y ရယ္၊ IV ျဖစ္တယ့္ B ရယ္ကို data packet ထဲမွာ ထဲ့ပို႕လိုက္ပါတယ္။

လက္ခံရရွိတယ့္ ဘက္ကေရာ။ သူက Cipher text 'Y' ရယ္၊ IV 'B' ရယ္ ရတယ္။ Data က cipher text ဆိုေတာ့ ဖတ္လို႕မရေသးဘူး။ Decrypt ျပန္လုပ္ရအုန္းမယ္။ သူ႕မွာ Password 'A' ကရွိေနျပီးသား၊ သိျပီးသားပါ။ လက္ခံရရွိတယ့္ packet ထဲမွာ IV ျဖစ္တယ့္ 'B' က plain text အျဖစ္ပါလာတယ္။ အဲေတာ့ ဒီႏွစ္ခုေပါင္း AB ကိုရျပီ။ AB ကို သူ႕ဘက္မွာလည္း RC4 encrypt လုပ္လိုက္ေတာ့ hash ျဖစ္တယ့္ 'C' ကိုရပါျပီ။ လက္ခံရရွိထားတယ့္ Cipher text 'Y' ကို hash 'C' နဲ႕ျပန္ျပီးေတာ့ XOR ျပန္လုပ္လိုက္ရင္ Data ျဖစ္တယ့္ 'X' ကို plain text အျဖစ္ျပန္ရပါတယ္။ ( XOR က symmetric ပါ။ C နဲ႕ X ကို xor ရင္ Y ကိုရသလို၊ C နဲ႕ Y ကို xor ျပန္လုပ္ရင္ X ကိုျပန္ရပါတယ္။ အျပန္အလွန္ရတယ္ေပါ့။ ) ဒီပံုက KSA နဲ႕ PRGA ဆိုတာ RC4 ရဲ့ အဆင့္ေတြပါ။ (Disclaimer: I grubbed this image from Google image search)



WEP ရဲ့ အားနည္းခ်က္က အဓိကျဖစ္တယ့္ IV က 24 bits ထဲျဖစ္ေနျပီးေတာ့၊ transmission မွာ plain text အျဖစ္ပို႕ဖို႕ လိုအပ္ေနတာပါပဲ။ အရင္ကေတာ့ WEP မွာ IV ကို ဘယ္လို generate လုပ္မလည္းဆိုတာ ေပၚမွာ ၊ ကြဲျပားပါေသးတယ္။ တခ်ိဳ႕ hardware vendor ေတြက IV ကို အစီအစဥ္တၾက generate လုပ္တယ္။ 00 .. 01 .. 10 .. 11 အဲလိုေပါ့။ ဒါက မွန္းရတာလြယ္လို႕ ေနာက္ေတာ့ pattern တစ္ခုနဲ႕ generate လုပ္ၾကတယ္။ ဒါလည္း pattern ကို ရွာရတာ မခက္ျပန္ဖူး။ ေနာက္ေတာ့ လုံးဝ စိတ္ကူးတဲ့သလို randomly generate လုပ္တာကို သုံးၾကတယ္။ ဒါေပမယ့္ ျပသနာကရွိေနပါေသးတယ္။ 24 bits မို႕ range ကနည္းပါတယ္ 16 သန္းေက်ာ္ေက်ာ္ပဲရွိပါတယ္။ အဲေတာ့ random pick တယ့္ အခါမွာ အခ်ိန္အတိုင္းအတာ တစ္ခုမွာ ျပန္ထပ္တတ္ပါတယ္။ အမ်ားအားျဖင့္ 10000 နဲ႕ 20000 ၾကားမွာ တစ္ခါ ထပ္ပါတယ္။

WEP ကို crack တယ့္ သူက အမ်ားအားျဖင့္ ARP request တစ္ခုကိုေစာင့္ျပီး အၾကိမ္ၾကိမ္ ဒီ request ကိုပဲ reply လုပ္ပါတယ္။ ဆိုလိုတာက data ကေျပာင္းလည္းမသြားဘူး၊ Wireless AP ဘက္က respond မွာသာ IV က random ျဖစ္ေနလို႕ reply ျပန္လာတယ့္ cipher text 'Y' က အမ်ိဳးမ်ိဳးျဖစ္ေနမယ္။ တကယ့္ data 'X" ကမေျပာင္းလည္းဘူးဆိုတာကို သိေနတယ့္ knowledge ကို အေျခခံျပီး IV ျပန္ထပ္သြားတယ့္ အခ်ိန္မွာ collect လုပ္ထားတယ့္ IV ေတြကေန WEP password ကိုျပန္တြက္ယူလို႕ရပါတယ္။ ဒါကေတာ့ algorithm ကို study လုပ္ဖို႕လိုပါမယ္၊ သိခ်င္ရင္ေျပာတာပါ။


Hacker ၾကီးေတြအတြက္ေရးတယ့္ စာမဟုတ္လို႕ Technical ပိုင္းေတြကို တတ္ႏိုင္သေလာက္ရွင္းထားပါတယ္။ WLAN နဲ႕ WAN ဘာကြာမွန္းမသိတယ့္ သူမ်ားအတြက္လည္းမဟုတ္လို႕ ခေရေစ့တြင္းက် မေရးႏိုင္တာကိုလည္း ခြင့္လႊတ္ပါ။ :D

With regards,
Divinity

Tuesday, June 29, 2010

log 4j

Call me "Loser" for posting this easy logger.

But it can be an asset for you guys like green horns ...
I don't mean you are a cow .... I refer to newbies .... :)

Well, log 4j is most commonly used logger for logging in Java based system.
Full name can be apache log4 j.
Some foolish and dull companies sometimes put this in requirements.
:) funniest joke in Java world ... It is just 3 lines of codes or may be 2.5 lines to read and understand.

first download the log4j.jar from web.
And import it.
write a line of code

public static Logger logger = Logger.getLogger(ClassName.class);


And configure your log4j properties.
Very very easy... Super easy and chicken feets....

Normally we use

logger.debug for debgugging
logger.error for erro
and logger.info for information

There is some important reason behind. If somebody asks you in interview, juz says System.out can make you out from the system ... Juz kidding... it is so bad ... uses a lot of memory and sometimes, it can lead the system hang or markedly delay in process. Log4j is better but not the best.

Try not to use a lot of printing things.
Use properly in testing phase and try to clear out if you are sure it is not necessary after the testing phase.

Try it out yourself ....
And never ever use printline so much ....

It can save your life and live long as a happy developer ....

Don't call me "loser" .... if you don't understand clearly what I wanna point out.

The Easiest way to learn is learning by yourself .... If we teach something to you, you will not be learnt so much ... Our brian is so selfish ... It only memorizes deeply what it learnt itself....

Good Luck, mate ...!!!

Regards,
Zero ..

>>Notes,
Bro ... I will catch up soon ... 3 posts in one day ... :P


Redirection in tomcat

Hi dudes,

Let say you got a difficulty level Extra Big A assignment for the new project.
It is to redirect the page. haha .. Juz kidding ...

Let me put in this way ...
The scenerio is you set up a tomcat.
And main page will show as ugly face of tomcat default which can be resided in /webapps/root/index.jsp

So please delete the ugly index.jsp and write an simple html and name it as index.html.

meta http-equiv="refresh" content="0;URL=https://domain.com/servletName"

Just put this meta tag in the index.html file header section.

This can redirect to your servlet in https. Need to buy cert for https from GoDaddy or whatever. :)

Thanks bro, Divinity for letting me copy his redirect page.
We are now doing together for payment gateway set up.
Hope he may wish to share some of his knowledge from this project.


Bro,
I will catch up your number of posts ....


Yee-Haw !!!!!
2 posts in one day ...
Seems to be I am bzy so much ....


Regards,
Zero


Java Tips.

Java Tips.

Are you smart enough ???

This time, I want to share some tools and overview knowledge with you.

You may be developer or debugger or coder or whatever ... but you may have to write so-called rubbish coding ...
First, please try to develop in OO way.
Don't think it is too restrict to do something as you wish to do in another way.
Always be OO.

Don't write 4500 lines of code in one class as most of the terribly terrible, stupid and air-head developers always code their program.
Try to think as a guy whose IQ is 30.
You cannot do so much.
So divide and conquer one by one.
Am I clear for this.

Let's say you want to create a payment system.
I need 1004 different methods.
Please don't put even two methods in one class.
Try to use interface to group properly.
I hope you will not be so impatient type like me.
Be patient. And it can save time later.

Think and think and think first.
Thinking can take time but it can be lesser than re-do process. Don't overlook anything.
Your code will be compact and will become monkey-proof soon.
I write the monkey proof codes for a year. I hate the tester says ...he still can input nonsense data.
So use properly for your checking classses and package it as a util pakage. And can use that util thoroughout your life as the poor man plow his or her fields with the same plow.

What I wanna highlight is to follow the standard. It can be difficult to say which standard you have to follow. Please don't make your standard higher than your current company's standard. Let them suffer their pain. Don't waste your valuable time for standardizing company's CVS and standard procedures better than the current one.

Let's say for Agile Development, you may need very good plan for testing. Otherwise, the development will be failed in no time. Very good architects can guess within 10 mintues which architectures they should choose for which projects. Don't work together with the architect who thinks he sees too much ....:) .. It is better sucide yourself in order to fulfil impossible deadlines.

Please check your man day rate also. Let's say, if your man day rate is 800SGD or 2000SGD . If they gives you 5 mandays and they charged the client 20000 SGD. Write your code as worse as possible and told them ... time constriant can drive me crazy .... :) ....

What I wanna mention is try to be fair your skill and mandays.
Don't overdo.
It can be hazardous to your health. OK?

Another important things for all developers are that don't let the team lead know how much you can do .... Please save your time in this way ... If you can do x amount, they will give you x+1 amount of jobs. So try to maintain your performance in 70 at most. Don't use if not neccessary. But I suggest to learn for betterments of yourself. If will lead your life happy, joyous and peaceful ...:) And I want to let you know don't stick around on old technology and tools. Explore more and you will find easier way. Try to learn about power tools that can double up your development speed. I found middle-gen to generate out Hibernate Mapping in 20 minutes ...which can take more than 2 hours + in traditional way. But don't inform to your company which toolyou are using now ...

And don't never, ever write the boiler plate code that can crash your whole sever or system withing a few minutes to 2 or 3 days. I cursed a lot for the previous collegue for those kinda codes. I hate to fix these things. Sometimes, they never close the method properly. After two or three years when the DB is fat enough and these untidy boiler plate codes make the system crash frequently. It is not easy to track down. Don't be unhappy to read boring forum discssions on various issues and try to contribute what you had learnt and exercised.

I encourage you to read the Java Standards and try to read optimization for coding. It can improve your coding skills so much.

And please always keep in mind Java is OO, so please think in OO ways. Don't do in traditional ways that will stack your enhancement and will affect your OO design.

Think smart ...
is better than work hard without knowing anything.
In deed if you had thought carefully and well-rounded from different points of views ...., the development is as easy as ABC, or as drinking the banna juice......

Good Luck, mate ....!!!


With Regards,
Zero

Sunday, June 27, 2010

Linux မွာ virus မရွိဘူးဆို ?

အခုတစ္ေလာ Linux မွာ virus မရွိလို႕သုံးတယ္ဆိုတယ့္ သူေတြမ်ားလာတယ္ဆိုတယ့္အေၾကာင္း ညီေလးတစ္ေယာက္ကလာလာေျပာေနတယ္။ Virus ေၾကာက္စရာမလိုလို႕ Ubuntu ပဲသုံးတယ္ဆိုတယ့္ သူေတြေပါ့။ Linux ကေပ်ာ္စရာ လည္းေကာင္းသလို challenging လည္း ပိုမ်ားပါတယ္။ သူတို႕ဘာသာ ဘာေၾကာင့္ပဲသုံးသုံးပါ သုံးျဖစ္ဖို႕က အဓိကေပါ့။ သုံးျဖစ္သြားရင္ သုံးရင္း ေလ့လာရင္း သိလာလိမ့္မယ္။ ဒါေပမယ့္ မသုံးျဖစ္တယ့္ သူေတြ၊ ေလ့လာမႈ အားမေကာင္းတယ့္ သူေတြအတြက္ idea အမွားၾကီးျဖစ္ျပီး 'ဪ ၾကားျပီးျပီလား၊ Linux ဆိုတာၾကီးက virus မရွိဖူးတဲ့' ဆိုျပီး ေယာင္ေတာင္ေတာင္နဲ႕ ကိုယ္တိုင္လည္းမသိပဲ သံေယာင္လိုက္မယ့္သူေတြ အတြက္ေတာ့ မေကာင္းဖူး။

Linux က bullet proof operating system တစ္ခုမဟုတ္ပါဖူး။ Security ကို အဓိက ဦးစားေပးစဥ္းစားထားတယ့္ Unix ကို အေျခခံထားတာပဲရွိတယ္။ လူလုပ္တယ့္ ကိစၥ ဘယ္ေတာ့မွ perfect မျဖစ္ဖူး၊ စိတ္ပူမေနနဲ႕။ Windows နဲ႕ ယွဥ္လိုက္ရင္ Virus နည္းတယ္လို႕ပဲေျပာလို႕ရတယ္။ နည္းလြန္းလို႕ မရွိသလိုျဖစ္ေနတာပါ။ ဘာေၾကာင့္ နည္းတာလည္း ဆိုရင္ေတာ့ ဒါေတြေၾကာင့္လို႕ က်ေနာ္က ျမင္တယ္။

၁။ အသုံးျပဳမႈနည္းပါးျခင္း
Home user ေတြၾကားထဲမွာ Linux အသုံးျပဳသူက 2% ေလာက္ပဲရွိပါတယ္။ ဒီေလာက္ေလးနဲ႕ၾက virus/trojan ေရးတယ့္သူေတြကို မဆြဲေဆာင္ႏိုင္ပါဘူး။ ကိုယ္ေရးတယ့္ virus/trojan ျပန္႕ႏိုင္စြမ္းလည္း နည္းမယ္။ အလုပ္လည္းသိပ္မျဖစ္ဖူးေပါ့။ ဒါနဲ႕ပဲ Linux မွာ virus ေရးဖို႕ သိပ္စိတ္မဝင္စားၾကတာျဖစ္မယ္။ ေနာက္ေတာ့ ရွိလာၾကမွာပါ။

၂။ Advanced Users
လြန္ခဲ့တယ့္ သုံးႏွစ္ 2007 ေလာက္ကထိ Linux ကသုံးရတာမလြယ္ကူပါဘူး။ လြယ္လြယ္ကူကူ သုံးခ်င္သူေတြ၊ Computer အေၾကာင္း သိပ္မသိခ်င္ပါဖူး၊ သုံးလို႕ရျပီးတာပဲ ဆိုတယ့္ သူေတြရဲ့ choice မျဖစ္ခဲ့ပါဖူး။ Linux သုံးတယ့္ သူေတာ္ေတာ္မ်ားမ်ားက IT နယ္ပယ္ထဲကလူေတြ၊ IT ကို အနည္းနဲ႕ အမ်ား စိတ္ဝင္စားတယ့္ သူေတြ မ်ားပါတယ္။ ဒီ computer ေပၚမွာ သူတို႕ ဘာလုပ္ေနတယ္ဆိုတာကို ေသျခာသိတယ့္ သူေတြမို႕ ၊ security sense ရွိၾကပါတယ္။ ေတြ႕ကရာ ေလွ်ာက္ click ၊ install ဆိုျပီး လုပ္ၾကမယ့္ သူေတြမဟုတ္လို႕ ဒီလိုလူေတြကို target ထားတာထက္စာရင္ ၊ Pop-up ေတြ႕ရင္ ေကာက္ click လိုက္မယ့္ novice ေတြကို ပိုျပီး target ထားတာေကာင္းမွာေပါ့။ အဲလို novice ေတြက သုံးရတာပိုလြယ္ကူတယ့္ windows သုံးေလ့ရွိတယ္ေလ။ အဲလို user ေတြ Linux မ်ားမ်ားသုံးလာရင္ Linux လည္း target ေကာင္းတစ္ခုျဖစ္လာမွာပါ၊ စိတ္ဓာတ္မက်ပါနဲ႕။

၃။ Fix ေတြထြက္တာျမန္တယ္
Opensource မို႕လို႕ lib ေတြမွာ exploit ေတြ flaw ေတြရွိေနရင္ ရွာေဖြေတြ႕ရွိသူကတာ inform လုပ္၊ ေနာက္က fix လုပ္မယ့္ သူေတြက အမ်ားၾကီး။ ဒါေၾကာင့္ Linux ရဲ့ exploit ေတြက သိပ္ျပီး ၾကိဳးစားၾကည့္ခ်င္စရာ မေကာင္းဖူး။ ကိုယ္က ဒီေန႕ရွာေတြ႕ ေနာက္ေန႕ fix ထြက္ေနျပီ။ User ေတြ patch install လုပ္တာ မလုပ္တာ တစ္ပိုင္းေပါ့။ MS မွာေတာ့ Conficker တုန္းက exploit ရွာေတြ႕တာနဲ႕ fix က ႏွစ္လေလာက္ၾကာပါတယ္။ User က update မလုပ္မိတာေတြရွိလို႕ ဒီ exploit က တစ္ႏွစ္ေလာက္ ေကာင္းေကာင္း အလုပ္ျဖစ္ေနတာပဲ။ ဒီလိုေတြရွိေတာ့လည္း လုပ္စားရ ပိုေကာင္းတယ့္ Windows က virus/trojan ပိုထြက္တာေပါ့။

ဒါ ထင္သာ ျမင္သာ အခ်က္ေတြပါ။ ဒါထက္ပိုတာေတြ ရွိအုန္းမွာပါ။ Unix / Linux မွာ အရင္တုန္းက rootkit ဆိုတယ့္ အသုံးအႏွုန္းက ပိုေခတ္စားပါတယ္။ Trojan လို backdoor လို ေကာင္မ်ိဳးပါပဲ။ Backdoor ပိုဆန္မယ္ထင္တယ္။ Kernel module တစ္ခုအျဖစ္၊ device driver တစ္ခုအျဖစ္ ကိုယ့္ကိုကိုယ္ ဟန္ေဆာင္ျပီး Operation system တက္တိုင္း သူကပါလိုက္တက္လာမယ္၊ service တစ္ခု port တစ္ခု compromise ထားမယ္၊ attacker အတြက္ ဝင္လမ္း ထြက္လမ္းဖြင့္ေပးထားမယ္ေပါ့။ ဒါေပမယ့္ process list ထဲမွာေတာ့ မေပၚဘူး။ ဒါမ်ိဳးက တကယ္ intrude လုပ္ျပီးသြားမွ ေနာက္တစ္ခါ ျပန္ဝင္ရလြယ္ေအာင္ လုပ္တာမ်ိဳးပါ။ Virus / Trojan ဆိုတာမ်ိဳးထက္ advance ျဖစ္ပါတယ္။

ခုေတာ့ user information ခိုးတယ့္ trojan လိုေကာင္ေတြေတာင္ linux မွာ ေပါလာပါျပီ။ Ubuntu / debian package ျဖစ္တယ့္ deb file ေတြမွာ trojan ေလးေတြထဲ့ေပးတာတို႕၊ tarball မွာကို ပါလာတာတို႕ရွိလာပါျပီ။ Opensource မို႕လို႕ security fix ထြက္တာျမန္သလို ၊ opensource မို႕လို႕ trojan ေလးထဲ့ေပးလိုက္ဖို႕လည္း ပိုလြယ္ပါတယ္။ Deb တို႕ rpm တို႕ဆိုတာ လြယ္လြယ္ေျပာရင္ exe installer ေတြလိုပါပဲ။ Run လိုက္ရင္ ဘာေတြလုပ္မယ္၊ ဘယ္လမ္းေၾကာင္းေအာက္မွာ ဘာထားမယ္၊ ဘယ္ service ကို startup မွာတင္ run ေအာင္ service register မယ္၊ ဒါမ်ိဳးေတြပါပဲ။ ပံုမွန္ install လုပ္မယ့္ action ေလးအျပင္ trojan install ေလးပါထဲ့ေပးထားရင္ သိမွာမဟုတ္ပါဘူး။

Tarball source file ေတြဆိုလည္း ျပန္ျပင္ထားတယ့္ source file ေလးေတြထဲ့ေပးထား၊ user က compile ျပီး install လည္းလုပ္လိုက္ေရာ trojan ေလးပါဝင္။ ဒါလည္းျဖစ္တာပဲ။ ပံုမွန္ကေတာ့ ယံုၾကည္ရတယ့္ site က repository ကမဟုတ္ရင္ install မလုပ္ဖို႕ပဲရွိပါတယ္။ Security အတြက္ instller package က original အတိုင္းဟုတ္မဟုတ္ ၊ ေျပာင္းလည္းထားတာရွိမရွိ PGP တို႕ GPG တို႕လို hash matching / keys ေတြနဲ႕ ေပးေလ့ရွိပါတယ္။ ဒါကေတာ့ သုံးေနတယ့္သူေတြ သိမွာပါ။ GPG မကိုက္လို႕ ၊ ဒါမွမဟုတ္ official GPG မရွိလို႕ install လုပ္မွာ ေသခ်ာလား ဆိုတယ့္ confirmation မ်ိဳးေမးတာ Ubuntu မွာလည္း ရွိပါတယ္။ ဒါမ်ိဳးေလးေတြ နည္းနည္း ေတာ့ ဂ႐ုစိုက္ေပးရင္ ပိုေကာင္းပါမယ္။

AppArmor တို႕ SELinux တို႕လို႕ security layer မ်ိဳးထပ္သုံးရင္ေတာ့ ပိုေကာင္းပါတယ္။ ဘယ္ user ၊ ဘယ္ process က ၊ ဘယ္ folder ကိုပဲ access ရမယ္၊ ဘယ္လို action မ်ိဳးပဲရမယ္ ဆိုတာမ်ိဳးေတြက ပံုမွန္ Unix / Linux ရဲ့ native ACL ထက္ အမ်ားၾကီး ပိုျပည့္စံုပါတယ္။ ဒါေပမယ့္ အလုပ္ပိုလို႕ Fedora တို႕ ဘာတို႕မွာဆို ေတာ္ေတာ္မ်ားမ်ားက disable ျပီး သုံးၾကတယ္။ က်ေနာ္အပါအဝင္ပါ :D ။ သတိဆိုတာေတာ့ ပိုတယ္မရွိေပါ့ဗ်ာ။ ( သူမ်ားေတြအတြက္ေျပာတာပါ )

ခုတစ္ေလာ Unreal IRCD ရဲ့ news ကိုဖတ္မိလို႕ ဒီ post ေရးျဖစ္သြားတာ။ Unreal IRCD ဆိုတာ opensource IRC server patform တစ္ခုပါ။ IRCD ထဲမွာေတာ့ နာမည္ အရွိဆုံးပဲထင္တယ္။ သူတို႕ရဲ့ Official download mirror တစ္ခ်ိဳ႕က tarball ေတြကို တစ္ေယာက္ေယာက္က trojan ပါတယ့္ file ေတြနဲ႕ အစားထိုးသြားပါတယ္။ Compile / install လုပ္လိုက္ရင္ trojan ေလးပါ ပါလာမယ္။ ဒါေတာင္ official mirror ေတြ။ သူတို႕က GPG နဲ႕ေပးတာမ်ိဳးမဟုတ္ေတာ့ file ရဲ့ integrity check မပါဖူးေပါ့။ ျပင္ထားလည္း User ဘက္ကမသိႏိုင္ဖူး။

Linux မွာ virus ေတြ trojan ေတြရွိတယ္လို႕ လွန္႕တာမဟုတ္ပါဘူး။ Windows နဲ႕ယွဥ္ရင္ အေတာ္ကိုနည္းပါတယ္။ ရွိတာေတာ့ ရွိတာပါပဲ။ Linux က idiot proof OS တစ္ခုမဟုတ္ေၾကာင္းနဲ႕ 'ငါတို႕ကေတာ့ virus မေၾကာက္ရလို႕ Linux ပဲသုံးတယ္' လို႕ ျပဳံးျပဳံးၾကီး မေျပာမိေအာင္ သတိေပးတာပါ။ ကိုယ္ကိုတိုင္လည္း အမွားၾကီးကို မွတ္ထား၊ သူမ်ားေတြကိုလည္း အမွားေတြ ေလွ်ာက္ေျပာေနမိရင္ ဆက္ေလ့လာတယ့္ေနရာမွာ သိထားတယ့္ အေၾကာင္းအရာ အမွားၾကီးေတြက ကန္႕လန္႕ခံေနလို႕ ပိုျပီး ခက္ခဲေနမွာ ဆိုးလို႕ပါ။ Santa Clause တကယ္ရွိမရွိနဲ႕ ၊ Linux မွာ virus / trojan တကယ္ရွိမရွိက သူမ်ားေျပာတာထက္. . သုံးရင္း ၊ ေလ့လာရင္း ရွာေဖြေတြ႕ရွိပါလိမ့္မယ္။


Divinity

Friday, June 18, 2010

Mutiple SSL sites on single IP

ဒီေန႕ေတာင္ၾကည့္ ေျမာက္ၾကည့္နဲ႕ Myanmar Tutorials က Q&A တစ္ခုမွာ SSL website(https) တစ္ခုအတြက္ Dedicated IP တစ္ခုလိုတယ္လို႕ ေတြ႕လိုက္ပါတယ္။ သူေျပာတာ မွားတယ္လို႕ မဆိုလိုပါဘူး။ 2007 ေလာက္ကထိ ဒါ မွန္ပါတယ္။ SSL ရဲ့ အလုပ္လုပ္ပံုအရ socket တစ္ခု ( IP တစ္ခု ၊ Port တစ္ခု) မွာ SSL website တစ္ခုထက္ ပိုထားလို႕မရပါဘူး။ IP တစ္ခုမွာ SSL site ေတြ အမ်ားၾကီး Virtual Host လုပ္ခ်င္ရင္ မတူညီတယ့္ Port ေတြမွာ run မွရပါတယ္။ ဥပမာ abc.com ကို port 443 မွာ၊ def.net ကို port 444 မွာ အဲလိုမ်ိဳးေပါ့။ ဒီလိုၾကေတာ့လည္း အဆင္မေျပျပန္ပါဘူး။ ဘယ္သူမွ website ကိုအေနာက္က port number ၾကီးထဲ့႐ိုက္ျပီး ဖြင့္ၾကည့္ခ်င္မွာ မဟုတ္ဖူး။

ပံုမွန္ http site ေတြၾက IP တစ္ခုမွာ domain ေတြအမ်ားၾကီးကို VirtualHost အျဖစ္ထားလို႕ရျပီး ( shared web hosting လို႕ ေခၚပါတယ္) ၊ ဘာလို႕ HTTPS / SSL site ေတြၾကမွ ဒါမ်ိဳးမရ ရတာလည္း ? လူတစ္ေယာက္က သူ႕ browser မွာ abc.com လို႕ ေခၚလိုက္တယ္ဆိုပါေတာ့၊ သူ႕ browser ကေန ဒီ website ကို host လုပ္ထားတယ့္ Server ဆီကို http request လို႕ေခၚတယ္တယ့္ packet ပို႕လိုက္ပါတယ္။ ဒီ http request ထဲမွာ header field ပါပါတယ္။ ဘယ္ domain name ( abc.com) ကို request လုပ္တာလည္းဆိုတာ ဒီ header field ထဲမွာ ပါလာျပီးသားပါ။ ဒီ HTTP request header ကိုဖတ္ျပီး Server က ဒါ ဘယ္ domain ကိုလာတယ္၊ ဒါဆို ဘယ္ website ကိုေပးရမယ္ ဆိုတာခြဲျခားျပီး သိႏိုင္တယ္။

Https site ေတြမွာကေရာ ? HTTPs အလုပ္လုပ္ပံုအရ http traffic မသြားခင္မွာ User client ( browser ေပါ့ဗ်ာ) နဲ႕ Server ၾကားမွာ SSL tunnel ကို အရင္ တည္ေဆာက္ပါတယ္။ ဒါကို SSL session initialization လို႕သုံးပါတယ္။ ဒီမွာ နည္းနည္း ထပ္ေျပာရရင္ Browser နဲ႕ Server ရဲ့ port 443 ၾကားမွာ tunnel တည္ေဆာက္တာပါ။ ေနာက္ေတာ့ အျပန္အလွန္ပို႕သမွ် data အားလုံးကို rsa key ကိုသုံးျပီး Encrypt လုပ္ျပီး ပို႕ပါတယ္။ ၾကားထဲက sniff လုပ္လို႕မရေအာင္ေပါ့။ SSL request မွာက HTTP request header မွာလို domain name မပါလာပါဘူး။ အဲေတာ့ SSL tunnel အရင္ေဆာက္ျပီးလို႕ http request ေရာက္လာေတာ့မွ ဘယ္ domain ကို request တာလည္းဆိုတာ သိမယ္။ Server အေနနဲ႕ user client ( browser) နဲ႕ၾကားမွာ SSL tunnel ေဆာက္တုန္းက ( SSL session initialization မွာ) ဘယ္ domain ကို request လုပ္တာလည္းမသိေတာ့ ဘယ္ configuration ထဲက SSL key ကိုေပးရမမွန္း မသိပါဘူး။ Configuration ေတြထဲက ပထမဆုံးေတြ႕တယ့္ domain ရဲ့ SSL key ကို ေပးလိုက္ပါတယ္။ ေနာက္မွ ၾကည့္က်က္လုပ္မယ္ေပါ့။ အဲေတာ့ ဘာျဖစ္လည္း ဆိုေတာ့ ၊ User ဘက္မွာ SSL certificate error ဆိုတယ့္ warning ၾကီးတက္ပါတယ္။ ဒီ SSL cert က ဒီ domain အတြက္မဟုတ္ဖူး၊ လိမ္တာျဖစ္ႏိုင္တယ္ ဘာညာဆိုတယ့္ msg ၾကီး။ IE မွာဆို Continous Anyway (Not recommanded) ဆိုတာၾကီး ႏွိပ္မွ web site ေပၚလာတယ့္ အဆင့္ကို ေရာက္တယ္။ Firefox မွာဆို Certificate exception ထဲ့ရတယ္၊ I understand the risk ဘာညာျပီးေတာ့။ အဲေတာ့ ေတာ္႐ံု user က လန္႕ျပီး မသုံးေတာ့ဘူး။ Security အတြက္ https နဲ႕ဖြင့္ပါတယ္ဆို I understand the risk ဆိုျပီး အရင္ ဝန္ခံေနရေတာ့ ပုံမွန္ http သုံးတာကမွ ဟုတ္ေသးတယ္လို႕ စဥ္းစားစရာျဖစ္သြားတယ္။

ဘာလို႕ ဒီ ျပသနာက http မွာမျဖစ္ပဲ https မွာျဖစ္တာလည္းဆို က်ေနာ္အေပၚမွာ ေျပာသလို http reqeust header မွာတုန္းက domain name ပါေတာ့ server က ဘယ္ virtualhost ထဲက website ကို ျပန္ေပးရမလည္းသိတယ္။ https မွာက SSL session ေဆာက္ျပီးမွ http request ကလာတာ။ SSL session ေဆာက္တုန္းက ဘယ္ domain အတြက္မွန္းမသိေသးေတာ့ server က ေတြ႕ကရာ SSL key တစ္ခုေပးလိုက္တယ္ ( ဟုတ္ကဲ့ တကယ္က first vhost ရဲ့ key ပါ)။ တကယ္ request လုပ္တာက တျခား domain name လည္းျဖစ္ေနေရာ warning ေတြေပၚလာေရာ။ အဲေတာ့ Technically အရ IP တစ္ခု Port တစ္ခုမွာ SSL နဲ႕ website တစ္ခုပဲ ထားလို႕ရတယ္လို႕ ျဖစ္လာပါတယ္။ Server တစ္လုံးထဲမွာ SSL နဲ႕ website ႏွစ္ခုထားခ်င္ရင္ မတူညီတယ့္ IP ႏွစ္ခု ဒါမွမဟုတ္ IP တစ္ခုထဲဆို မတူညီတယ့္ port ႏွစ္ခုမွာ ထားမွ ရတယ္လို႕ျဖစ္လာေရာ။

E-commerce site ေတြ၊ Online payment system ေတြေခတ္စားလာတာနဲ႕ အမွ် bank account information ေတြ၊ Credit card information ေတြ online မွာ၊ website ေတြမွာ အသုံးျပဳတာမ်ားလာတာနဲ႕ အမွ် Website ေတြမွာ SSL နဲ႕ https အသုံးျပဳဖို႕ လိုအပ္မႈက ပိုပိုမ်ားလာပါတယ္။ ဒါဆို ဒီလို site ေတြကို site တစ္ခု IP တစ္ခုသာ ေပးေနရရင္ IPv4 exhaustion ကို ပိုျမန္ကုန္မွာေပါ့။ ေနာက္ေတာ့ SSL ရဲ့ လိုအပ္ခ်က္ေတြ အားနည္းခ်က္ေတြကို patch လုပ္ရင္း SSL v1 , v2 , v3 ေနာက္မွာ TLS လို႕ေခၚတယ့္ Transport Layer Security ကိုသုံးလာၾကတယ္။ Browser ေတြမွာ TLS 1.0 ၊ TLS 1.1 ဆိုျပီး checkbox ေလးေတြ ေတြ႕ဖူးမွာပါ။ အရင္က ျပသနာ SSL session request မွာ domain name header မပါတယ့္ ကိစၥ ၊ TLS မွာ ေျဖရွင္းႏိုင္ဖို႕ အလားအလာ ရွိလာတယ္။ 2006 မွာထင္တယ္ RFC 4366 ထြက္လာျပီး Server Name Indication လို႕ေခၚတယ့္ SNI support ၊ TLS မွာပါလာတယ္။ SNI အရ SSL session တည္ေဆာက္တယ့္ အခ်ိန္ ( TLS negotiation လို႕ သုံးပါတယ္) မွာ ကတည္းက domain name ကို ထဲ့ပို႕လိုက္ပါတယ္။ အဲေတာ့ Server ဘက္က ဘယ္ domain ရဲ့ SSL key ကို reply ရမလည္းဆိုတာ သိသြားပါတယ္။ User client ( browser) ေရာ ၊ Server ဘက္ကေရာ SNI support လုပ္ဖို႕ေတာ့ လိုပါတယ္။

TLS v1.1 ရဲ့ feature ဆိုေပမယ့္ TLS v1.0 မွာလည္း support လုပ္ေအာင္ လုပ္ထားပါတယ္။ Browser ေတာ္ေတာ္မ်ားမ်ားနဲ႕ ၊ User ေတာ္ေတာ္မ်ားမ်ားက အခုထိ TLS v1.0 ကိုပဲ support လုပ္ႏိုင္တယ့္ OS ကိုပဲသုံးေနၾကဆဲမို႕လို႕ပါ။ အခုေတာ့ X.509 v3 မွာ SSL certificate တစ္ခုက multiple domain name ကို support လုပ္ႏိုင္တာတို႕ ဘာတို႕ျဖစ္လာပါျပီ။ ဒါေၾကာင့္ HTTPs website တစ္ခုအတြက္ IP တစ္ခုလိုတယ္ဆိုတာ ဒီေန႕ေခတ္မွာ မရွိေတာ့ပါဘူး။ ဒီေန႕ က်ေနာ္တို႕ လက္ထက္ IT ေခတ္က အရာရာ ေပါေပါေလာေလာရေနလိုက္တာ restriction ဆိုတာမရွိေတာ့ သေလာက္ပါပဲ။ အရာရာ လြယ္ကူေစဖို႕ ေနာက္ၾကျပီး ေမြးခဲ့တယ့္ အေမ့ကို ေက်းဇူးတင္ပါတယ္ :D

Notes: SNI TLS သုံးဖို႕ Server က SNI support လုပ္ႏိုင္တယ့္ Web Server ျဖစ္ဖို႕လိုပါတယ္။ Apache 2.2.12 ကေနစျပီး SNI support က Apache Native support ျဖစ္သြားပါျပီ ။ အရင္ Version အေဟာင္းေတြမွာေတာ့ GnuTLS module ကို install လုပ္ရင္ရပါတယ္။ User ဘက္ကလည္း SNI support ရမွျဖစ္ပါတယ္။ ဒါမွ TLS negotiation request packet မွာ domain name header ထဲ့ပို႕မွာပါ။ Windows XP SP3 နဲ႕ အထက္၊ IE 7 နဲ႕ အထက္မွာရပါတယ္။ IE6 မွာလည္း XP SP3 ဆိုရင္ ရတယ္လို႕ေျပာပါတယ္။

Sunday, June 13, 2010

Clean script ( shell scripting)

Google docs ထဲၾကည့္ရင္းနဲ႕ အရင္က Shell script တိုတိုေလး တစ္ခုကို post လုပ္ျပီး ေရးဖို႕ စိတ္ကူးရလို႕။ Analysing လိုလို post ေတြက ေလွ်ာက္သာေရးေနတာ ကိုယ့္ဟာကိုယ္လည္း ပ်င္းတယ္။

ဒီ script မ်ိဳးကို က်ေနာ္တို႕က clean script လို႕ေခၚပါတယ္။ တကယ္ အလုပ္လုပ္တာက process kill တာပါ။ တခ်ိဳ႕ service ေတြက start ရင္ပဲျဖစ္ျဖစ္ stop ရင္ပဲျဖစ္ျဖစ္ တဝက္တပ်က္မွာ ရပ္သြားတာမ်ိဳးရွိတတ္ပါတယ္။ ျပန္ start ရင္လည္း service က run ေနျပီလို႕ေျပာတယ္။ Process list ထဲမွာလည္းရွိတယ္။ Log ထဲမွာက error ၾကီးနဲ႕ access လုပ္လို႕မရဘူး။ တခါတေလ service port ေတာင္ မပြင့္လိုက္ဖူး။ Stop လုပ္လို႕လည္းမရေတာ့ဘူး။ လြယ္လြယ္ေျပာရင္ေတာ့ Hang သြားတာေပါ့။ ဒါဆို kill မွရေတာ့မယ္။ ဒါမ်ိဳးက Failover Cluster လိုမ်ိဳးမွာ သုံးေလ့ရွိပါတယ္။ တစ္ဖက္မွာ hang ေနရင္ kill လိုက္၊ ျပန္စၾကည့္ ၊ ထပ္ hang ရင္ ထပ္ kill ျပီး ေနာက္ server တစ္လုံးကို failover လုပ္သြား၊ admin ကို mail ေလးဘာေလးပို႕။ ( MySQL ဆို file access permission error ရွိရင္ အဲဒါမ်ိဳးျဖစ္တက္တယ္။ )

Service kill တာပဲ ကိုယ့္ဟာကိုယ္ ps ေလး႐ိုက္ျပီးၾကည့္ ၊ pid ေလးမွတ္ျပီး kill လိုက္႐ံုေပါ့။ ဒါက manual လုပ္မွ ျဖစ္မွာပါ။ Administrator တစ္ေယာက္က ဘယ္မွာ ဘာ hang ေနလည္း သိဖို႕ စိတ္တန္ခိုးရွိမွ ျဖစ္မယ္၊ မဟုတ္ရင္ သိလိုက္မွာ မဟုတ္ဖူး။ တစ္ခါတစ္ေလ ဒီ server ေတြကို Veritas Cluster တို႕ဘာတို႕လို Server and service monitor ေတြနဲ႕ monitor လုပ္ခိုင္းထားျပီး service status ကို သူ႕ဟာသူ စစ္ခိုင္းထားတာမ်ိဳး၊ လူကိုယ္တိုင္ manual လုပ္ရတာမ်ိဳး နည္းႏိုင္သမွ် နည္းေအာင္ လုပ္ခ်င္တာမ်ိဳးဆိုရင္ေတာ့ script ေလးေတြလိုျပီ။ Veritas က ဒီ serivce hang ေနမွန္းသိရင္ (ဒါကလည္း တျခား script တစ္ခုနဲ႕ စစ္တာမ်ိဳးပါ) clean script ကိုေခၚျပီး kill လိုက္ပါတယ္။ ျပီးမွ start script ကို ေခၚျပီး ျပန္ စတာေပါ့။

#!/bin/sh

pid=`/usr/bin/ps -ef | /usr/bin/grep mysqld | grep -v grep|awk -F' ' '{print $2}'`;

if test "$pid" = "" ; then
echo "Process is not Running";
else
echo "Killing process..."
kill -9 $pid;
fi


ဒီ script မွာ mysqld ကို ဥပမာ အေနနဲ႕ေပးထားပါတယ္။ Script ေလးကိုျပန္ၾကည့္ရေအာင္။

ပထမ line မွာ #!/bin/sh လို႕ေပးထားတာက Shell Env ကို sh shell လို႕သက္မွတ္တာပါ။ ဒီ script က bash shell မွာလည္း အလုပ္လုပ္ပါတယ္။

ဒုတိယ line က ဒီ script မွာ အဓိက အလုပ္လုပ္တယ့္ line ပါ။
pid=`/usr/bin/ps -ef | /usr/bin/grep mysqld | grep -v grep | awk -F' ' '{print $2}'`;


pid ဆိုတယ့္ variable တစ္ခုယူလိုက္ပါတယ္။ ဘာ type ျဖစ္ရမယ္လို႕ ၾကိဳသတ္မွတ္ေပးဖို႕မလိုပါဘူး။ pid ထဲကို value တစ္ခုထဲ့တယ့္ေနရာမွာ နည္းနည္းအေသးစိတ္ပါတယ္။ ေနာက္က command ေတြကိုအရင္စမ္းၾကည့္၊ လိုခ်င္တယ့္ result ရမွ ဒီline ကိုေရးတာေကာင္းပါတယ္။ #ps -ef | grep mysqld နဲ႕ MySQL service ရဲ့ process id ကိုၾကည့္လို႕ရပါတယ္။ ဒါေပမယ့္ -ef ရဲ့ ထုံးစံအရ၊ MySQL ရဲ့ pid အျပင္ အခု run လိုက္တယ့္ grep command ရဲ့ pid ပါျပေနတယ္။ ဒါဆို pid အပိုတစ္ခုပါေနတယ္။ ဒါဆိုမလိုအပ္တယ့္ grep ရဲ့ pid ကို ဖယ္ထုတ္မယ္။ grep -v grep ကိုသုံးပါတယ္။ grep -v က invert match လို႕ေခၚတယ့္ option ပါ။ grep -v grep လို႕ေပးလိုက္ေတာ့ grep ရဲ့ pid က လြဲရင္ လို႕ ဆိုလိုလိုက္တာပါ။ ဒါဆို mysqld တစ္လိုင္းထဲရျပီ။ ( တကယ္လို႕ တျခားမဆိုင္တာေတြရွိရင္လည္း ဖယ္ရပါလိမ့္မယ္။ ဒါမွမဟုတ္လည္း result ထဲက ေနာက္တစ္ခုကို ထပ္ grep လိုက္ေပါ့။ ) လိုခ်င္တာ တစ္လိုင္းထဲရျပီဆိုရင္ လိုခ်င္တယ့္ Process ID တစ္ခုထဲကို pid variable ထဲကို ထဲ့ဖို႕ လိုပါတယ္။ တစ္လိုင္းလုံးေပးလိုက္လို႕မရပါဘူး။ ဒီမွာ awk ကိုသုံးျပီး pattern filtering လုပ္ပါတယ္။ awk -F' ' ဆိုတာက awk ကိုသုံးျပီး output result ကို filed ေတြခြဲလိုက္တာပါ။ ဘာနဲ႕ ခြဲလည္းဆိုေတာ့ -F ဆိုတယ့္ Field separator နဲ႕ field ေတြကို space နဲ႕ခြဲထားတယ္လို႕ ေျပာလိုက္ပါတယ္။ -F ရဲ့ ေနာက္က quote ေလးႏွစ္ခုၾကားမွာ space တစ္ခ်က္ပါပါတယ္။ ေနာက္က '{print $2}' ဆိုတာကေတာ့ ခုနက space ေတြနဲ႕ခြဲထားတယ့္ထဲက ဒုတိယ field ကိုပဲျပပါလို႕ ေျပာတာပါ။ ဒါဆို Mysqld ရဲ့ process id တစ္လုံးထဲရပါျပီ။ အဲဒီ process id number ကို pid ဆိုတယ့္ variable ထဲကို ထည့္လိုက္ပါတယ္။

ေျပာစရာ က်န္ခဲ့တာက equal sign ေလးရဲ့ေနာက္က command execution တစ္ခုလုံးကို ` ` ႏွစ္ခုၾကားမွာေရးပါတယ္။ Keyboard မွာ 1 ေဘးကေကာင္ေလးေပါ့။ exec comand နဲ႕ ခက္ဆင္ဆင္တူပါတယ္။ ဒီ line မွာ Mysqld က run ေနရင္ mysqld ရဲ့ pid ကို output result အျဖစ္ pid variable ထဲထည့္လိုက္ျပီး ၊ run မေနဖူးဆိုရင္ ဘာ output မွမထြက္တယ့္အတြက္ pid variable က empty value ပဲ ဆက္ျဖစ္ေနပါလိမ့္မယ္။

ဒုတိယ line ကရလာတာကို မွ if .. else နဲ႕ ျပန္စစ္ျပီး အလုပ္လုပ္ပါျပီ။
if test "$pid" = "" ; then

if test နဲ႕စစ္ျပီး then ရဲ့ေနာက္က (ေအာက္က) line ေတြကို အလုပ္လုပ္ပါတယ္။ if test "$pid" = "" လို႕စစ္လိုက္တယ့္အရ $pid ထဲမွာ ဘာ value မွမရွိပဲ blank ျဖစ္ေနမယ္ဆိုရင္ ေအာက္ကလိုင္းျဖစ္တယ့္ echo ကိုအလုပ္လုပ္ပါတယ္။

else နဲ႕ တကယ္လို႕ pid variable မွာ value တစ္ခုခုရွိေနမယ္ ဆိုရင္ process kill ေၾကာင္း echo msg ေလးတစ္ေၾကာင္းေပးျပီး kill -9 $pid နဲ႕ pid variable ထဲမွာပါလာတယ့္ process id number ကို kill ပါတယ္။ ဒီမွာ process က hang ေနတာမို႕ -9 နဲ႕ မွရပါလိမ့္မယ္။

ဒီမွာ နည္းနည္း ထြန္႕စရာေလးေတြ ရွိေသးတယ္။ ps မွာ -ef option ကမ်က္စိေနာက္တယ္။ -ae နဲ႕ မရဖူးလားဆို ရပါတယ္။ print မွာ $1 ျဖစ္သြားပါလိမ့္မယ္။ Unix style နဲ႕ aux နဲ႕ဆိုရင္ေတာ့ $2 ပါပဲ။ ကိုယ့္ဟာကိုယ္ျပင္ေပါ့။ -ae က MySQL လိုမ်ိဳး process name ရွင္းမွ အဆင္ေျပပါတယ္။ Java လိုေကာင္ေတြဆိုရင္ Java ဆိုတယ့္ process name နဲ႕ပဲ ေခၚထားတယ့္ class ေပၚမွာမူတည္ျပီး မတူညီတယ့္ process ေတြျဖစ္တက္ပါတယ္။ အဲဒါမ်ိဳးဆို ps -ef နဲ႕ java ကို တစ္ခါ ၊ classname ကိုတစ္ခါ grep မွ လိုခ်င္တယ့္ process ကိုအတိအက်ရပါလိမ့္မယ္။

If test မွာလည္း "" နဲ႕ blank လို႕မစစ္ပဲ NULL ျဖစ္မျဖစ္စစ္ရင္လည္း ရပါတယ္။ Space ေလးေတြျဖဳတ္ေရးရပါလိမ့္မယ္။ Knowledge sharing သက္သက္ပါ။ က်ေနာ္လည္း shell scripting expert မဟုတ္လို႕ ဒီထက္လြယ္ကူတယ့္ နည္းလမ္းလည္း ရွိႏိုင္ပါတယ္။ သိရင္ ျပန္လာ share ပါ။ စိတ္ဝင္စားပါတယ္။ :D

Thursday, June 10, 2010

Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း (3)

1994 မွာစတင္ကခဲ့ျပီး OpenSource community ရဲ့ leading company လို႕ ကိုယ့္ကိုကိုယ္ ေခၚတယ့္ company ကေတာ့ Redhat ပါ။ Opensource လို႕ေျပာတယ့္ product ေတြနဲ႕ စီးပြါးေရးလုပ္တယ္ပဲေျပာရမလားပဲ။ သူတို႕ရဲ့ ကိုယ္ပိုင္ proprietary component ေတြ tools ေတြကလြဲရင္ Redhat Enterprise Linux တစ္ခုလုံးရဲ့ source code ကို opensource ေပးပါတယ္။ JBoss ဆိုလည္း Community version ဆိုျပီးရွိတယ္။ တခ်ိဳ႕ေသာ အစိတ္အပိုင္းေတြက လြဲရင္ အားလုံး Opensource ေပးျပီး သူတို႕က Technical Support တို႕ Consultancy တို႕ ေရာင္းစားပါတယ္။

Redhat ကေပးထားတယ့္ Source code ေတြကို Community ကျပန္ compile လုပ္ထားတဲ့ OS ေတြရွိပါတယ္။ Redhat clone လို႕လည္းေခၚၾကတယ့္ Redhat derivation ေတြပါ။ အဲထဲမွာေတာ့ CentOS ၊ Scientific Linux နဲ႕ Whitebox က လူသုံးၾကပါတယ္။ အဲထဲမွာေတာ့ CentOS က လူသုံးအမ်ားဆုံးနဲ႕ Redhat နဲ႕ အတူဆုံးပါပဲ။ Desktop user / home user ေတြကို အဓိကထားတာမဟုတ္လို႕ End user application ေတြ သိပ္မပါလွပါဘူး။ ( Redhat Enterprise Linux Desktop ဆိုျပီး ရွိေပမယ့္ တစ္ခါမွ စမ္းဖို႕ မၾကံုေသးပါဘူး။ )

CentOS ကလည္း Linux Sever OS ထဲမွာ အေတာ္တြင္က်ယ္ပါတယ္။ Redhat Enterprise Linux နဲ႕ CentOS က 95% ေလာက္အတူတူပါပဲ။ Redhat ရဲ့ source codes ကို centOS community / team ကျပန္ compile လုပ္ထားတာပါ။ အဲဒါေၾကာင့္ update ေတြ patch ေတြၾကေတာ့ CentOS တို႕ SL တို႕ က နည္းနည္းေနာက္ၾကပါတယ္။ Redhat က release လုပ္ျပီးမွ လိုက္ compile လုပ္တာကိုး။ Stability ပိုင္းမွာ စိတ္တိုင္းၾကစရာ ေကာင္းပါတယ္။

Redhat ကေငြေၾကးအားျဖင့္ ေထာက္ပံ့ထားတယ့္ Community linux တစ္ခုကေတာ့ Fedora ပါ။ Redhat Engineer ေတြလည္း Fedora team မွာပါပါတယ္။ Community linux တို႕ရဲ့ ထုံးစံအတိုင္း အျမဲတန္း အရွိန္အဟုန္နဲ႕ သြားတယ့္ linux တစ္ခုပါပဲ။ Fedora project က အျမဲတမ္း feature အသစ္အဆန္းေလးေတြ ထြက္ေလ့ရွိတယ့္ project လို႕ေျပာၾကပါတယ္။ Fedora ရဲ့ တည္ထြင္မႈေတြဟာ စမ္းသက္မႈအဆင့္ဆင့္ေက်ာ္ျဖတ္ျပီးရင္ Redhat က ေမြးစားေလ့ရွိပါတယ္။ စမ္းသပ္တယ့္ ေနရာလိုျဖစ္ေနလို႕ တစ္ခ်ိဳ႕ Fedora version ေတြဟာ buggy ျဖစ္တက္ပါတယ္။

ေျပာဖို႕ က်န္သြားတယ္။ Oracle ရဲ့ Oracle Enterprise Linux ဆိုတာလည္းရွိပါတယ္။ 1998 မွာ Oracle က သူတို႕ database product ကို Redhat ေပၚမွာ run ႏိုင္ေၾကာင္း ( Supported OS) အျဖစ္ ေၾကညာပါတယ္။ ေနာက္ေတာ့ ဘယ္လိုျဖစ္တယ္မသိ သူတို႕ logo နဲ႕ Linux ထြက္လာပါတယ္။ အနည္းငယ္ ျပဳျပင္ထားတယ္လို႕ေတာ့ သူမ်ားေျပာဖူးတယ္။ ေရာင္းတယ့္ product ကို ကိုကျပန္ ဖန္တီးျပီး ျပန္ေရာင္းတာဆိုေတာ့ သိပ္မမိုက္ပါဘူး။ ပိုက္ဆံေပးရတာခ်င္းတူရင္ေတာ့ origin ျဖစ္တယ့္ Redhat က Technical Support ပိုသာမယ္လို႕ ယူဆရတာပဲ။ Linux က Redhat အတြက္က main stream product ကိုး။

Redhat လိုပဲ rpm based linux လို႕သတ္မွတ္ျပီး ( ဒါေပမယ့္ Redhat ကိုအေျခမခံပါဘူး) Commercial product ၾကီးေနာက္တစ္ခုကေတာ့ Novell ရဲ့ SuSE enterprise ပါ။ ဟိုးအစတုန္းက Slackware ကိုအေျခခံခဲ့ျပီး ေျဖးေျဖးျခင္းကြဲထြက္လာတာ အခုဆို slack နဲ႕ ေတာ္ေတာ္ကို မတူေတာ့ပါဘူး။ အသုံးတြင္က်ယ္မႈမွာေတာ့ Redhat ကိုမမွီေပမယ့္ တကယ့္ company အၾကီးၾကီးေတြရဲ့ mission criticle server ေတြမွာေတာ့ ေဝပံုၾကယူထားတာပါပဲ။ Technical support ပိုင္းနဲ႕ Customer care မွာ Redhat ထက္ေတာင္သာတယ္လို႕ ဆိုပါတယ္။ ( ဒါကေတာ့ ကို William ေျပာတာပါ။ သူတို႕ company မွာ SuSE ကိုပဲ အဓိကသုံးတယ္ဆိုလို႕ ေမးျဖစ္ခဲ့တာပါ။)

SuSE မွာလည္း Redhat ရဲ့ Fedora လို စမ္းသက္ကြင္းတစ္ခုရွိပါတယ္။ OpenSuse ပါ။ သူကလည္း beta လိုလို နဲ႕ က်ေနာ္သုံးဖူးတုန္းကေတာ့ စိတ္ေလစရာေကာင္းေလာက္ေအာင္ buggy ခဲ့ပါတယ္။ KDE မို႕လို႕ ၾကည့္ရတာ မိုက္ပါတယ္။ SuSE / OpenSuSE ရဲ့ GUI က တစ္ခ်ိဳ႕ေနရာေတြမွာ ေတာ္ေတာ္လွပါတယ္။ KDE ေတာင္မွ သူက ထက္ျပင္ထားတာမို႕ Gnome ေတြထက္ေတာ့ memory ပိုစားပါတယ္။

စကားစပ္လို႕ပါ၊ မွတ္မွတ္ရရ OpenSuSE ကို စိတ္နာေစတယ့္ အေၾကာင္းေလးေပါ့။ အလုပ္ကဝင္ခါစ၊ Linux က သိပ္မတတ္တေခါက္၊ Samba ကို Active directory နဲ႕ cross authenticate လုပ္ခ်င္လို႕။ PAM ေတြျပင္တယ္ command line ကေန။ GUI မွာ user account manager ေလးဖြင့္ျပီး ျပန္ပိတ္လိုက္ရင္ က်ေနာ္ျပင္ခဲ့သမွ် PAM configuration အကုန္ roll back ပဲ။ မရွိေတာ့ဘူး။ အကုန္ default ေတြျပန္ျဖစ္ကုန္တယ္။ Samba မွာ Authentication method မွာ local authentication ( server) အစား AD authentication (ads) လို႕ ျပင္ ၊ save လုပ္၊ ျပန္ၾကည့္ရွိေသးတယ္။ UI ကေန Samba configuration wizard ေလးဖြင့္လိုက္၊ ခ်က္ခ်င္း ဘာမွမျပင္ပဲ cancel လုပ္၊ ဟိုမွာ server ျပန္ျဖစ္ေနျပီ။ UI က wizard ေလးဖြင့္လိုက္မိတာနဲ႕ အကုန္ျပန္လုပ္ရတာပဲ။ အဲဒါျပီးကတယ္က က်ေနာ္ OpenSuSE ျပန္မသုံးျဖစ္ေတာ့ပါဘူး။ o_O

ဒီေန႕ ေခါင္းကလည္းမူးေနသလိုလို အိပ္ခ်င္ေနသလိုလိုနဲ႕ ေရးထားတာ အဆက္အစပ္သိပ္မရွိဖူး။ ေနာက္မွ တစ္ခ်ိဳ႕ဟာေလးေတြ ျပန္ျဖည့္ပါအုန္းမယ္။ Zero / Zero = Zero ေျပာသလို ရုံးထဲမွာ အိပ္ေငြ႕ခ်တယ့္ ဓာတ္ရွိပုံရတယ္။ တစ္ေနကုန္ သူမ်ားရုံးမွာ သြားေနတာ လန္းဆန္းလို႕ ၊ ရုံးလည္းျပန္လာေရာ 10 minutes မၾကာဖူး ေလးလံထိုင္းမိႈင္းျပီး အိပ္ငိုက္သြားတယ္။ ေနာက္ေန႕ၾက ခံုေျပာင္းထိုင္ၾကည့္အုန္းမွပါ။ :(

Thursday, June 3, 2010

Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း (2)

Linux distribution ေခတ္ဦးေလာက္ 1993 - 1994 ပတ္ဝန္းက်င္မွာ Slackware နဲ႕ေရွ႕ဆင့္ေနာက္ဆင့္နီးပါး ထြက္လာတယ့္ distro ကေတာ့့ Debian ပါ။ Operation System ေတြထဲက အေအာင္ျမင္ဆုံး Community driven server OS လို႕ေတာင္ေျပာလို႕ရပါတယ္။ Enterprise level linux server ေတြမွာ Redhat ျပီးရင္ လူသုံးအမ်ားဆုံးေလာက္ရွိပါတယ္။ Stability အားေကာင္းတယ့္ Linux distro တစ္ခုပါ။ Ubuntu ရဲ့အေဖမို႕ Ubuntu ကြၽမ္းက်င္ရင္ Debian ေလ့လာရတာ မခက္ပါဘူး။ Community အလြန္အားေကာင္းပါတယ္။ အဲဒီအတြက္လည္း Debian ဟာအလြန္ up to date ျဖစ္ပါတယ္။ Re Debian package (.deb) ေတြ ကို Commnity တစ္ခုလုံးက Engineer ေထာင္နဲ႕ခ်ီ maintain လုပ္ေနတာမို႕ Commercial Linux ေတြထက္ update release ပိုျမန္ပါတယ္။ Library တစ္ခု ၊ package တစ္ခု version အသစ္ထြက္ရင္ Debian repo ေတြမွာလည္း update version ရွိေနပါျပီ။ Debian မွာ package manager အေနနဲ႕ apt ကို အဓိကသုံးပါတယ္။ က်ေနာ္ကိုယ္တိုင္က Deb linux fans မဟုတ္ေပမယ့္ package management မွာ apt က redhat ရဲ့ yum ထက္ပိုသာတယ္လို႕ ျမင္ပါတယ္။ Server OS မို႕ laptop မွာသြင္းရင္ driver ေလးေတြ ကိုယ့္ဟာကိုယ္ ရွာသြင္းရတာမ်ိဳး ျဖစ္တတ္ပါတယ္။ ဥပမာ webcam လိုဟာမ်ိဳးေပါ့။

အေဖထက္သား တစ္လၾကီးတယ့္ Deb-based Linux ကေတာ့ ဇာတ္လိုက္ေက်ာ္ Ubuntu ပါ။ Community driven ပါပဲ။ Server OS ေနရာမွာ Debian ကိုမေက်ာ္ႏိုင္ေပမယ့္ Desktop version ကေတာ့ Linux တစ္ခုအေနနဲ႕ဆိုရင္ ဟုန္းဟုန္းေတာက္ေအာင္ျမင္ပါတယ္။ Ubuntu က desktop ေတြ laptop ေတြအတြက္ အဓိကထားထားတာမို႕ hardware ေတာ္ေတာ္မ်ားမ်ားကို driver သိပါတယ္။ Release cycle က ေျခာက္လတစ္ခါ release လုပ္ေတာ့ အျမဲတန္း kernel အသစ္ library အသစ္ hardware driver အသစ္ေတြနဲ႕ အဆင္ေျပပါတယ္။ Install လုပ္လိုက္ရင္ hardare အားလုံးနီးပါးက သုံးရန္အသင့္၊ လိုအပ္မယ့္ package ေလးေတြကလည္း default ပါျပီးသား၊ ထပ္ install လုပ္ခ်င္ရင္လည္း GUI ကေန click click နဲ႕တင္ရတယ္။ Mouse ေလးသုံးရမွ ေက်နပ္သူေတြအတြက္ ေတာ္ေတာ္အဆင္ေျပပါတယ္။ Windows ေလာက္ idiot proven usability မဟုတ္ေပမယ့္ 90% ေလာက္ ok မွာပါ။ Debian ရဲ့သားမို႕ debian community ကိုအေမြဆက္ခံထားပါတယ္။ Windows မဝယ္ခ်င္လို႕၊ Virus စိတ္ညစ္လို႕ Linux ဖက္ေျပာင္းလာသူေတြက Ubuntu ကိုေရြးေလ့ရွိတာမို႕ beginner ဆန္ဆန္ေမးခြန္းေတြ ေတာ္ေတာ္မ်ားမ်ားက ubuntuforum.org မွာရွိေနျပီးသားပါ။ မသိရင္ ေမးစရာေတာင္မလိုဘူး။ သြားရွာ ၊ ရွိတယ္။

ဒါဆို ေတာ္ေတာ္အစဥ္ေျပတယ့္ Linux ပဲလို႕ေျပာလို႕ရပါတယ္။ တစ္ခုေတာ့ရွိပါတယ္။ ဒါကလည္း ၾကားျဖတ္ေျပာတယ့္ က်ေနာ့ရဲ့personal အျမင္၊ အၾကံေပးတာပါ။ သိပ္ user friendly ျဖစ္လြန္းေတာ့ Windows အစားထိုးစစ္စစ္ျဖစ္ေနတတ္ပါတယ္။ Windows သုံးတုန္းကလည္း Operation system လို႕ေျပာရင္ မ်က္လုံးအဝိုင္းသား၊ Ubuntu သုံးေတာ့လည္း ထိုနည္းလေကာင္း။ User အတြက္ အစဥ္ေျပပါတယ္။ Engineer ျဖစ္ခ်င္ရင္ေတာ့ ေလ့လာရုံေလာက္ပဲ GUI ကိုအားကိုးသင့္ပါတယ္။ Linux ကိုတကယ္ သိခ်င္ တက္ခ်င္ရင္ေတာ့ GUI ကို သိပ္မမွီခိုေစခ်င္ပါဘူး။ မဟုတ္ရင္ Ubuntu user ပဲျဖစ္လာတတ္ပါတယ္။ Linux user ျဖစ္မလာေတာ့ပါဘူး။

Ubuntu က Gnome desktop နဲ႕လာေလ့ရွိျပီး၊ Kubuntu ရယ္လို႕ KDE နဲ႕ လာတာလည္းရွိပါတယ္။ Ubuntu ကိုမွ အေျခခံတယ့္ Educational version Edubuntu တို႕ဘာတို႕လည္းရွိေသးတယ္။ ေနာက္ထက္ Ubuntu ကိုအေျခခံထားတယ့္ အတိုင္းအတာတစ္ခုထိ ေအာင္ျမင္တယ္လို႕ေျပာလို႕ရတယ့္ Linux ကေတာ့့ Linux Mint ပါ။ သူလည္း home user ေတြအတြက္ ရည္ရြယ္တာမို႕ OpenOffice တို႕ Multimedia player ေတာ္ေတာ္မ်ားမ်ားတို႕ အဆင္သင့္ပါလာပါတယ္။ သူလည္းလွလွပပနဲ႕ သုံးရတာ အေတာ္လြယ္တယ့္ Linux ပါပဲ။

Ubuntu လိုပဲ Debian အေျခခံတယ့္ ေနာက္နာမည္ၾကီး Linux တစ္ခုက Knoppix ပါ။ 2003 မွာ စတင္ခဲ့ျပီး Linux LiveCD distro ထဲမွာ သူစေအာင္ျမင္တာလို႕ ေျပာရမလားမသိဘူး။ သူ႕ထက္ေစာတယ့္ DemoLinux တို႕ဘာတို႕ရွိေပမယ့္ က်ေနာ္တို႕က 2004 ေလာက္မွ မ်က္စိစပြင့္တာမို႕ Knoppix နဲ႕ပဲ စသိခဲ့တာပါ။ Install လုပ္စရာမလိုပဲ CD ေပၚကေနတင္ boot တက္လို႕ရတယ္။ အမ်ားအားျဖင့္ rescue disc အေနနဲ႕ အသုံးမ်ားပါတယ္။ အဲ အခုေတာ့ Ubuntu အပါအဝင္ Linux တိုင္းနီးပါးက LiveCD option ေပးလာပါတယ္။ Download ပါ၊ စမ္းၾကည့္ပါ၊ ၾကိဳက္မွ install ပါေပါ့။

ဒါကေတာ့ Deb based ထဲက ေရာက္တက္ရာရာပဲ။ Rpm based ထဲက Redhat တို႕ Fedora တို႕၊ Slackware ကို အေျခခံတယ့္ Novell ရဲ့ SuSE linux တို႕ ၊ Linux from scratch တို႕၊ Hacker လို႕ကိုယ့္ကိုကိုယ္ ေခၚတယ့္သူေတြၾကိဳက္တယ့္ Security auditing linux ေတြ၊ SmoothWall တို႕လို firewall linux ေတြ ... ေတာ္ေတာ္မ်ားတာပဲ။ ေရးျဖစ္မယ္ ဆိုရင္ေျပာပါတယ္။ :D

Wednesday, June 2, 2010

Linux တစ္ရပ္စာ ေမွ်ာ္စဥ္ထက္က ျမင္ကြင္း

အခုေနာက္ပိုင္း ျမန္မာ အိုင္တီ community ေတြမွာ Linux အေၾကာင္းေတြေျပာလာၾက သုံးတယ့္သူပိုမ်ားလာၾကတာေတြ႕ရတယ္။ Windows နဲ႕ Operation System အတူတူပဲလို႕ထင္ရာကေန၊ Computer နဲ႕ Windows ခြဲျခားမရတယ့္အေနအထားကေန ေျပာင္းလည္းလာတာေတာ့ ဝမ္းသာစရာပါ။ ဒါေပမယ့္ Linux လို႕ေျပာရင္ Ubuntu ေျပးေျပးျမင္တယ့္သူေတြ မ်ားမ်ားလာတာေတာ့ စိတ္ကသိကေအာင့္ျဖစ္စရာပဲ။ Linux distro ေတြအေၾကာင္းနည္းနည္းေလာက္ ေလ့လာၾကည့္ရေအာင္။ က်ေနာ္ေသခ်ာမသိတယ့္ မသုံးဖူးတယ့္ distro ေတြကို ရမ္းမတုတ္ခ်င္လို႕ ထဲ့မေျပာေတာ့ပါဘူး။ က်ေနာ္သိသေလာက္ထဲက ဘယ္ distro က ဘာေတြစိတ္ဝင္စားစရာေကာင္းလည္းပဲ ေျပာေတာ့မယ္။ က်ေနာ္သိသေလာက္ထဲက ျပန္မွ်ေဝယံုေလာက္ပါ။

Linux distro ေတြမွာ တခ်ိဳ႕က power user ေတြအတြက္အဓိက ထားတာမ်ိဳးရွိပါတယ္။အဲလို distro ေတြက stability နဲ႕ performance ကိုအဓိကထားပါတယ္။ Linux ကိုနားလည္းထားျပီးသား experienced user ေတြအတြက္သာ အစဥ္ေျပပါတယ္။ ဥပမာေျပာရရင္ေတာ့ Gentoo နဲ႕ Slackware ပါ။ Slackware က Linux history ရဲ့ သက္တမ္းအရင့္ဆုံး distro ပါ။ User က ကြၽမ္းက်င္ရင္ ကြၽမ္းက်င္သလို customized လုပ္ႏိုင္လို႕ ကိုယ့္စိတ္တိုင္းၾက ရႏိုင္တယ္လို႕ ဆိုၾကပါတယ္။ အဲ၊ တကယ္လို႕ Linux အေၾကာင္းကို မေတာက္တေခါက္ေတာင္ မသိဘူး၊ သူမ်ားေျပာတာ နားမေယာင္ဘူး၊ ခုမွ Linux ကိုနားလည္ခ်င္လို႕ စစမ္းခ်င္တာဆိုရင္လည္း Gentoo သို႕မဟုတ္ Slackware ကိုသုံးတာ အေကာင္းဆုံးလို႕ ေျပာၾကပါတယ္။ တကယ္တမ္း စိတ္ရွည္ရွည္နဲ႕ အေသးစိတ္ေလ့လာခ်င္တယ္ ဆိုရင္ပါ။ Gentoo သို႕မဟုတ္ Slackware သုံးတက္တာဟာ Linux သုံးတတ္တာပဲ လို႕ Senior ေတြေျပာတာ မွတ္သားဖူးတယ္။ စိတ္ရွည္ရွည္ထားႏိုင္ရင္ အေကာင္းဆုံး distro ေတြေပါ့။

ဖတ္ရတာေတာ့ စိတ္ဝင္စားစရာ distro ပဲ၊ ဘာလို႕ မသုံးၾကတာလည္း ? သုံးၾကပါတယ္။ အလြယ္တကူမရွိလို႕ Home user usable မျဖစ္လို႕၊ လူသုံးနည္းတာပါ။ Package ေတြကိုယ္တိုင္ compile လုပ္ configure လုပ္ရတာ စိတ္ဝင္စားစရာေကာင္းေပမယ့္ အလွ်င္လိုလို႕မရပါဘူး။ ဒီေန႕ install လုပ္၊ ေနာက္ေန႕သူမ်ားေတြေရွ႕ 'ေတြ႕လား ငါ linux သုံးေနတာ' လုပ္ခ်င္ရင္ေတာ့ ဒီ distro မ်ိဳးနဲ႕ အစဥ္မေျပပါဘူး။ Linux system တစ္ခုရဲ့ အလုပ္လုပ္ပံု၊ kernel module ေတြ၊ package ေတြ compile လုပ္တာ၊ Makefile ေတြ၊ လိုအပ္တယ့္ library ေတြ ၊ behind the scene က အေၾကာင္းအရာေတြ သိခ်င္ရင္ေတာ့ စိတ္ဝင္စားစရာ ေကာင္းတယ့္ Linux distro ေတြပါ။

.............................
အင္းးးးးးးးးးးးး အားလုံး အစအဆုံးေရးျပီးမွတင္ခ်င္ေပမယ့္ က်ေနာ့ google docs ထဲမွာလည္း ေရးလက္စေတြ ေတာ္ေတာ္မ်ားေနျပီ။ အလကားသိမ္းထားတာပဲ အဖတ္တင္ေနမွာဆိုးလို႕ ဒါကို အရင္တင္လိုက္ပါတယ္။ xD

Friday, May 14, 2010

Interview Tips and Tricks and Flips ...

Hi all,

Java Interview အတြက္ ျပင္ဆင္သြားရမွာေတြေျပာခ်င္လုိ႕ပါ။
ျပင္ဆင္စရာရိွတာေတြထဲမွာ အေရးအၾကီးဆံုးက ဂ်ပိုးကို စူဠလိပ္ေလာက္ျဖစ္ေအာင္ေျပာဖို႕လည္းပါပါတယ္။ ကိုယ္လုပ္ဖူးတာက ေက်ာင္းမွာလုပ္တဲ႔ ပေရာဂ်တ္အေသးစားေလးျဖစ္ခ်င္ျဖစ္မယ္။ အဲဒါကိုေတာင္ နည္းနည္းေလး ဇာတ္လမ္းေျပာင္းလုိက္ပါ။ ပေရာဂ်တ္ၾကီးတစ္ခုအတြက္ prototype လုိ လုပ္ရတယ္လို႕ေျပာပါ။ Technology ေတြလည္း မွန္မွန္ကန္ကန္ေျပာပါ။ လုိအပ္ရင္ ကိုယ္ေသခ်ာသိေနတဲ႔ Technology ေတြ စကားၾကံဳတုန္း မသိတဲ႔သူကို ရွင္းျပသလုိ စိတ္အားထက္သန္စြာရွင္းျပပါ။

မသိတာေတြ၊ မထင္မွတ္တာေတြေမးရင္ ဘာမွမေျဖခင္ သူေမးတဲ႔ေမးခြန္းက အေတာ္ေလး ပညာသားပါတဲ႔ေမးခြန္းပဲ ဘာညာ စကားေရာေဖာေရာလုပ္ပါ။ အဲဒီလိုေပါက္ကရေလးေတြေျပာေနတုန္း ခိုးျပီးစဥ္းစားေနပါ။ ေၾကာင္အျပီးမေနပါနဲ႕ ...။ ေအာ္ဒါလား ... ဒါက ဒီလုိ ....ဆိုရင္ ဘယ္လုိေတာ႔ရလိမ္႔မယ္ဆိုတဲ႔ သိျပီးသားတစ္ခုကို ရွင္းျပသလို နည္းနည္း စတိုင္ထုတ္ထားပါ။ ဘာမွမသိရင္ေတာ႔ စကားကုိ မသိဘူး လို႕မရပ္လိုက္ပါနဲ႕ ....။ ကိုေမာင္စိန္သံုးပါ။ (common sense) ... တစ္ခ်ိဳ႕ျပႆနာေတြက သူသာေမးေနတယ္ သူလည္း သိခ်င္မွသိမယ္ လို႕ ႏွလံုးသြင္းျပီး ဒီလိုလုပ္ရင္ေတာ႔ ျဖစ္ေလာက္တယ္ဆိုတာမ်ိဳးေျပာပါ။

ကိုယ္႔ရဲ႕အရည္အခ်င္းကို ကိုယ္႔ဘာသာကို အမွတ္ေပးခုိင္းတယ္ဆိုပါစို႕ ...။ ၁၀ က အျမင္႔ဆံုးဆိုရင္ ၇၊ ၈ ေတြေလာက္ေပးပစ္ပါ။ ကိုယ္႔ကို သူတို႕ဘာသူတုိ႕ အထင္ေသးပါေစ။ အခုေတာ႔ ရက္ရက္ေရာေရာေပးလုိက္ပါ။ ကိုယ္႔ဘာသာကိုယ္ထင္တာက ျပႆနာမရိွပါဘူး။ လုပ္ရင္းကိုင္ရင္းျဖစ္သြားမွာပါ။ ေလာေလာဆယ္က ကိုယ္က ဘာမွမလုပ္တတ္ဘဲ အလုပ္လာေလွ်ာက္တာမဟုတ္ဘူးဆိုတာကို နည္းမ်ိဳးစံုနဲ႕သိေအာင္လုပ္ပါ။

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

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

Technical နဲ႕ပတ္သက္တာေတြ အားေနရင္ မ်ားမ်ားဖတ္ပါ။ တကယ္မလုပ္တတ္လား လုပ္တတ္လားက ဘယ္သူမွေသခ်ာမသိဘူး။ ေမးလိုက္တုိင္း သိေနရင္ေတာ႔ ၾကိတ္ၾကည္ညိဳၾကတာ လူတုိင္းရဲ႕သေဘာထားပါပဲ။ အဲဒါအတြက္ကေတာ႔ ေရွာ႔ခတ္( short-cut) မရိွပါဘူး။ Forum ေတြမွာဖတ္ျပီးေလ႔လာပါ။ ပါးစပ္ထဲမွာ ပေရာဂ်တ္တစ္ခုကို အာဂံုေဆာင္ထားပါ။ အဲဒီမွာတုန္းက ဒါကို ဘယ္လိုလုပ္လုိက္တာပဲဆိုတာမ်ိဳးေျပာပါ။ အဲဒါဆို ေနရင္းထုိင္ရင္း ကိုယ္က အကုန္လုပ္ဖူးေနသလုိျဖစ္လာပါလိမ္႔မယ္။ ေသခ်ာဖတ္ထားပါ။ ေရာျပီးမေျပာမိပါေစနဲ႕။ ပိုျပီးအဆင္႔ျမင္႔ျမင္႔ေျဖခ်င္ရင္ overview ေရးတဲ႔ sites ေတြမွာ pros and cons ေတြ မွတ္မွတ္ထားပါ။ မင္းေျပာတာမွာ အဲဒါေတာ႔ျဖင္႔မေကာင္းဘူး ဆုိရင္ သူလည္း သိပ္အမ်ားၾကိးေမးမွာမဟုတ္ေတာ႔ပါဘူး။ ကိုယ္႔ကိုဗ်ဴးသလိုလို သူ႕ကိုဗ်ဴးသလိုလုိျဖစ္မွာကို ဘယ္သူမွ မခံခ်င္ပါဘူး။

အားေနရင္ Certificate ယူထားပါ။ အတူတူလုပ္တတ္တာတူေပမယ္႔ certificate speaks louder ....။ ကိုယ္႔က မေျပာလည္း certificate အရ သူသိသင္႔တာေတာ႔သိမွာပဲလုိ႕ အယူမွားမိၾကတာပါပဲ။ မၾကာမၾကာျပံဳးျပီးေျဖပါ။ လြယ္လုိက္တာဆိုတဲ႔ အထာေလ။ အမွန္ေတာ႔ အထဲမွာ ၾကိတ္ျပီးၾကံေနတာ။ ခက္တာေတြေမးတုိင္း ေအာ္ ဒီလိုလား ဒါဆိုရင္ေတာ႔ ဆုိျပီး ခဏေလးစဥ္းစားျပီး အေကာင္းဆံုးကိုေျဖပါ။ ဒါကိုမၾကိဳက္ေသးဘူးလုိ႕ခံစားရရင္ ... နည္းနည္းထပ္ေတြးျပီးထပ္ျဖည္႕စြက္ပါ။ အေျဖေတြ ဒီေလာက္ထြက္ေနတဲ႔သူကို ဆက္မေမးတာေကာင္းမယ္လို႕ ယူဆေလာက္ေအာင္ေျဖလုိက္ပါ။ တကယ္လုိ႕ သိပ္ခက္ျပီး Technical ဆန္ရင္ နမူနာ scenerio ေလးေျပာပါဆိုျပီး သူ႕ကို ျပန္ေျပာခိုင္းျပီး လုိက္စဥ္းစားပါ။ အဲဒီလိုဆို ဘယ္လိုလုပ္မလဲ ဆိုရင္ ကိုယ္လုပ္ဖူးတာနဲ႕ အတူဆံုးကိစၥကေနျပန္စျပိး သိုင္းသိုင္း၀န္း၀န္းေျဖပါ။

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

အင္တာဗ်ဴးေျဖျပီးရင္ စိတ္ပါလက္ပါ လက္ဆြဲႏႈတ္ဆက္ပါ။
ရယ္ရယ္ေမာေမာ စကားေျပာပါ။

အားလံုး အုိေကသြားမွာပါ။
ဘယ္ရံုးမဆို ေပ်ာ္ေပ်ာ္ေနတတ္ျပီး အလုပ္လုပ္ခ်င္စိတ္ရိွတဲ႔သူတစ္ေယာက္ကို လုိုခ်င္ၾကမွာပါ .....။

Keep Hope Alive !!!!
Fighting!!!!!

လုိအပ္ရင္ေျပာဖုိ႕
http://www.techinterviews.com/interview-questions/java

ဒီေခါင္းစဥ္ေတြကိုလည္းဖတ္ထားပါ။
Struts
EJB
Spring
Hibernate
SQL (Oracle,MS SQL, MySQL)
MVC
Ajax

Thursday, March 18, 2010

NTFS Filesystem support on Linux

Ubuntu တို႕ Fedora တို႕မွာေတာ့ NTFS support က အစကတည္းကပါလာလိမ့္ရွိပါတယ္။ ဒါေတာင္တခါတစ္ေလၾက read ပဲရျပီး write မရပဲျဖစ္တက္ေသးတယ္။ က်ေနာ္က CentOS အသုံးမ်ားေတာ့ CentOS မွာက NTFS write support မပါတက္ဖူး။ Kernel recompile ရင္ေတာ့ရေပမယ့္ NTFS write ေလးရဖို႕ kernel ေတာ့ recompile မလုပ္ခ်င္ဖူး။ NTFS read/write ရေအာင္ NTFS-3G ဆိုတယ့္ FS module ရွိတယ္။ RPMforge repository မွာရွိပါတယ္။ လြယ္လြယ္ကူကူ အဲဒါေလးပဲ install လိုက္တာေကာင္းပါတယ္။

အရင္ဆုံး rpm-forge repo ကို yum repo ထဲမွာထဲ့ဖို႕လိုပါတယ္။ ဒါမွ yum နဲ႕ install လုပ္ရင္ သူ႕ဟာသူ dependency resolving လုပ္သြားမွာ။ မဟုတ္ရင္ ကိုယ့္ဟာကိုယ္ dependency ေတြ install ေနရမယ္။ CentOS လို႕ယူဆျပီးပဲ ေျပာပါမယ္။ ဒါေပမယ့္ RPM အလုပ္လုပ္တယ့္ Linux တိုင္းမွာ ရမွာပါ။

1. rpmforge rpm ေလးအရင္ download မယ္။ (wget ကေတာ့ ရွိျပီးသားလို႕ ယူဆလိုက္ပါတယ္။ မရွိရင္ေတာ့ wget အရင္ သြင္းပါ။)
#wget http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm


2. GPG key import လုပ္မယ္။ မဟုတ္ရင္ RPM ကို install လုပ္လို႕မရပဲျဖစ္ေနပါလိမ့္မယ္။ 3rd party RPM ျဖစ္ေနလို႕ပါ
#rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt


3. RPM ကိုအရင္စစ္
#rpm -K rpmforge-release-0.3.6-1.el5.rf.i386.rpm


4. RPMforge repo install လုပ္မယ္
#rpm -i rpmforge-release-0.3.6-1.el5.rf.i386.rpm

ဒီလို လုပ္လိုက္ျခင္းအားျဖင့္ ေနာက္ install လုပ္တိုင္း CentOS repo က တင္မဟုတ္ပဲ RPMforge repo ကပါ package ေတြကိုရွာပါလိမ့္မယ္။

5. RPMforge repo မွာရွိတယ့္ package ေတြရဲ့ list ကို အရင္ build လုပ္ရပါအုန္းမယ္။
#yum check-update


6. Kernel version ေလး တစ္ခ်က္ ၾကည့္ရေအာင္။ ဒါအေရးၾကီးပါတယ္။ Kernel version နဲ႕ kernel-devel version က တူဖို႕လိုပါတယ္
#uname -r


7. Kernel-devel install လုပ္မယ္။
#yum install kernel-devel

တကယ္လို႕ Kernel devel နဲ႕ Kernel နဲ႕ version မတူရင္ kernel ပါျပန္ install လုပ္ျပီး restart တစ္ခါခ်ရပါလိမ့္မယ္။ Kernel အသစ္နဲ႕ boot လုပ္ျပီးမွ က်န္တာ ဆက္လုပ္ပါ။

8. လိုအပ္တယ့္ Package ေတြကို တစ္ခါထဲ install လုပ္ရေအာင္
#yum install fuse fuse-ntfs-3g dkms dkms-fuse


9. NTFS partition ကို Linux ေပၚမွာ mount လို႕ရပါျပီ
#mount -t ntfs-3g /mount_point /windows_partition

Mount point ကေတာ့ ကိုၾကိဳက္ရာနဲ႕ အစားထိုးေပါ့။ အစကတည္းက ၾကိဳျပီး create မထားရင္လည္း အခု create လို႕ရပါတယ္။ Windows partitions ကိုမသိရင္ေတာ့ fdisk နဲ႕ၾကည့္ပါ။

#fdisk -l


ၾကလာတယ့္ table ထဲက NTFS file system နဲ႕ partition ကိုမွတ္ထား။ ဆိုၾကပါေတာ့ /dev/hda2 ဆိုရင္ အေပၚက /windows-partition ေနရာမွာ /dev/hda2 ကို အစားထိုးလိုက္ပါ။ စမ္းၾကည့္ပါ အဆင္ေျပမွာပါ။


Divinity

Server Clustering ဆိုတာ . . . (2)

Clustering မွာ ဘယ္လိုအဆင့္ေတြရွိလည္း ?
ေခါင္းစဥ္က သိပ္မကြဲပါဘူး။ ျမန္မာစာ ပညာရွိမဟုတ္ေတာ့ စကားလုံးေရြးရတာ တခါတေလ မလြယ္ဘူး။ Clustering မွာ ဘယ္လို level အလိုက္ရွိလည္းလို႕ေျပာရင္ ပိုေကာင္းမယ္။
1. Network Level Clustering
2. Service Level Clustering
3. Application Level Clustering ဆိုျပီး ေယဘူရအားျဖင့္ သုံးခုရွိပါတယ္။ Failover ပံုစံအလုပ္လုပ္မလား၊ NLB အလုပ္လုပ္မလားဆိုတာက ဘယ္လို Setup လုပ္လည္းဆိုတာေပၚမွာ မူတည္ပါတယ္။ ဘယ္လို Level clustering မွာမဆို ႏွစ္မ်ိဳးလုံး ( တစ္မ်ိဳးမဟုတ္ တစ္မ်ိဳး) setup လုပ္ဖို႕ျဖစ္ႏိုင္ပါတယ္။

Network Level Clustering ( Vs Service Level Clustering)
သူကရွင္းပါတယ္။ တကယ္လို႕ Cluster ထဲမွာ Server 5 လုံးရွိတယ္ဆိုပါေတာ့။ ဒီ Server ငါးလုံးက အခ်င္းခ်င္း Network reachability ကို စစ္ေနပါတယ္။ Engineer က configure လုပ္ထားသလို 5 seconds ဆိုလည္း 5 seconds တိုင္းမွာ၊ 5 minutes ဆိုလည္း 5 minutes တိုင္းမွာ စစ္ေနပါတယ္။ Network reachability ဆိုတာကေတာ့ က်ေနာ္တို႕ ping ၾကည့္သလိုေပါ့။ ကိုယ္သုံးတယ့္ clustering technology ေပၚမွာမူတည္ျပီး ဘယ္လိုစစ္ေနလည္းဆိုတာေတာ့ ကြာပါလိမ့္မယ္။ တကယ္လို႕ unreachable ျဖစ္သြားျပီဆိုရင္ အဲ Server down သြားျပီလို႕ ယူဆျပီး Server ကို Cluster ထဲကေနဖယ္လိုက္ပါတယ္။ ဒီ Clustering ရဲ့ အားနည္းခ်က္ကေတာ့ Server ၾကီးက မ down ဘူး၊ Server ေပၚက Service ကပဲ down ေနရင္ သူမသိပါဘူး။ သူက Network အရ ping ၾကည့္လို႕ ဒီ Server alive ရွိမရွိ စစ္တာမ်ိဳးပဲစစ္ျပီး ဆုံးျဖတ္လို႕ Network Level Clustering လို႕ေျပာတာပါ။

ဥပမာ စဥ္းစားၾကည့္ရေအာင္။ Windows Server 2003 မွာ Windows NLB Manager ဆိုတာ ပါပါတယ္။ သူက Network Level Clustering ပါ။ NLB ပံုစံ Clustering ပါ။ Server သုံးလုံးကို IIS web server run ျပီး Cluster လုပ္လိုက္ၾကတယ္ဆိုပါေတာ့ ။ User က Access လုပ္ရင္ Server သုံးလုံး တစ္လွည့္စီ respond လုပ္ေနမွာေပါ့။ တကယ္လို႕ Svr 1 က hang သြားတယ္ ဆိုပါေတာ့ ၊ ဒါမွမဟုတ္လည္း network ၾကိဳးလြတ္သြားတာပဲျဖစ္ျဖစ္၊ ဒါမ်ိဳးဆိုရင္ Svr 1 down သြားတာကို က်န္တယ့္ Sever ႏွစ္လုံးက သိပါတယ္။ လာသမွ် user ကို Svr 2 နဲ႕ 3 ကပဲ မွ်ျပီး respond လုပ္ပါလိမ့္မယ္။

ဒါေပမယ့္ တကယ္လို႕ Server 1 ၾကီးက ဘာမွမျဖစ္ဖူး ၊ IIS ကပဲ crash ျဖစ္ျပီး stop ျဖစ္သြားတယ္။ ဒီလို scenario မွာ က်န္တယ့္ Server ႏွစ္လုံးက မသိပါဘူး။ Network aspect အားျဖင့္ Server 1 က alive ရွိေနပါတယ္။ IIS Service down သြားတာ ၊ ဒီ Network Level Cluster မွာ ဒါကို မသိပါဘူး။ ဒါဆို ဘာျဖစ္မလည္း ? Cluster က Svr1 down ေနတာကို မသိတယ့္အတြက္ request 3 ခါမွာ တစ္ခါကို ထုံးစံအတိုင္း Svr1 ဆီကို ပို႕ေနပါလိမ့္မယ္။ ဒါေပမယ့္ IIS ၾကီးက down ေနေတာ့ သုံးခါမွာ တစ္ခါ error ျပေနမွာေပါ့။ Reload လုပ္လိုက္ရင္ ျပန္ေကာင္းသြားျပန္ေရာ။

ဒါဆိုဘယ္လိုလုပ္မလည္း ? Service Level ကိုပါ monitor လုပ္ႏိုင္ဖို႕လိုပါတယ္။ Windows ရဲ့ built-in ေတြမွာေတာ့ မေတြ႕မိပါဘူး။ က်ေနာ္မသိတာလည္းျဖစ္ႏိုင္ပါတယ္။ Linux မွာေတာ့ heartbeat version 2 တို႕ LDirector တို႕ေတာ့ Opensource ေတြရွိပါတယ္။ သူတို႕က Service port ကိုပဲျဖစ္ျဖစ္ Service ကိုတစ္နည္းနည္းနဲ႕ စစ္ေပးျပီး Service down ရင္လည္း Server down တယ္လို႕ သတ္မွတ္ျပီး Cluster ထဲကေန isolate လုပ္ေပးလိုက္ပါတယ္။

API ေတြနဲ႕ခ်ိတ္ဆက္ျပီး Application တစ္ခု Process တစ္ခုကို Server ေတြအမ်ားၾကီးေပၚမွာ ခြဲေဝျပီး အလုပ္လုပ္တယ့္ Application Level Clustering ကေတာ့ က်ေနာ္ ေသခ်ာမရွင္းႏိုင္တယ့္ အေၾကာင္းအရာမို႕ ေက်ာ္လိုက္ပါရေစ။

Divinity

Tuesday, March 16, 2010

Auto Increment ID

တစ္ခါတစ္ေလ ဒီလိုမ်ိဳးေလးမလား ၾကံဳဖူးမလားမသိဘူး။
Database Table ႏွစ္ခုရိွတယ္ဆုိပါေတာ႔။
Hibernate မသံုးတဲ႔ ရိုးရုိး ကိစၥေလးေတြမွာေျပာတာပါ။

ပထမ table ကို TableA လုိ႕ထားပါေတာ႔။
ဒုတိယ table က TableB. TableA မွာ Id က auto increment လုပ္ထားတယ္။

ရိုးသားၾကိဳးစားတဲ႔ DB Admin က normalize ေသခ်ာလုပ္ထားတဲ႔အတြက္ TableA ရဲ႕ primary key က TableB မွာ Foreign key အျဖစ္နဲ႕ ရိွပါတယ္။ ကြ်န္ေတာ္တို႕လုပ္ရမွာက Table A မွာ record တစ္ခုထည္႕လုိက္ျပီးတုိင္း TableB မွာ အဲဒီ ID ကို Foreign key အေနနဲ႕သံုးထားတဲ႔ ေနာက္ထပ္ Record တစ္ခုကို ထည္႕ရပါမယ္။
နမူနာပံုေလးကို ၾကည္႕ပါ။

Table A

ID Name NRIC
1 Zero 140222


Table B

ID ---- TableA_ID ----- Address
1 -------- 1 ---------------- Eunos Rainbow


အဲဒီလို record တစ္ေၾကာင္းစီ ထည္႕ခ်င္တာပါ။ ကြ်န္ေတာ္ေျပာခ်င္တာက Table A ကို row တစ္ခု insert လုပ္တာက ငွက္ေပ်ာသီး အခြံႏႊာတာထက္လြယ္ပါတယ္။ ေနာက္ေတာ႔ ID ကို ျပန္ရွာရတာက ပ်င္းစရာေကာင္းပါတယ္။ Select ျပန္လုပ္ရင္ရေပမယ္႔ ပ်င္းပါတယ္။ အဲဒီလို မလုိအပ္တဲ႔ code ေတြေရးမယ္႔အတူတူေတာ႔ ဘာလို႕ Developer လုပ္မွာလဲ ... ေဆာ႔ခေရတၱိေခတ္က စာကူးတဲ႔သူသြားလုပ္ေနမွာေပါ႔။ အဲဒီလုိ ငပ်င္းေတြအတြက္ တစ္ခုလုပ္လုိ႕ရတာရိွပါတယ္။ auto increment လုပ္ထားတဲ႔ ID ကို ျပန္ယူလိုက္လုိ႕ရပါတယ္။ စိတ္ခ်မ္းသာစရာေကာင္းပါတယ္။ မဟုတ္ရင္ ေနာက္တစ္ခါ သြား select လုပ္ရတဲ႔အတြက္ connection လည္းေျခေထာက္ေညာင္းမွာပဲ။ လူအေယာက္ တစ္သန္းသံုးတဲ႔ System မွာဆို အခ်ိန္အမ်ားၾကီးကုန္သြားမယ္။ ေလးငါးဆယ္ေယာက္ေလာက္သံုးဖုိ႕အတြက္ေတာ႔ System မလုိပါဘူး။ လက္နဲ႕ပဲ ေကာက္ေရးထားလုိက္ရင္ ရတာပါပဲ။ ပံုမွန္ အားျဖင္႔ Developer တစ္ေယာက္ဟာ database ကို တတ္ႏိုင္သေလာက္ အသြားအလာေလွ်ာ႔ရပါမယ္။ တစ္ခါသြားျပီး အကုန္ယူလုိ႕ရတာ ယူႏိုင္ရပါမယ္။ မယူႏုိင္ဘူးဆိုရင္ ကိုယ္႔ SQL ကို ျမွင္႔တင္ဖုိ႕လိုပါတယ္။ မဟုတ္ရင္ သြားတယ္ျပန္တယ္...ျပန္သြားတယ္ ထပ္သြားဦးမယ္ဆိုရင္ System ကေလးတယ္ ပိုေလးတယ္ ...အလုပ္မလုပ္ေတာ႔ေလာက္ေအာင္ေႏွးတယ္၊ DB sever ရဲ႕ CPU က ၁၀၀ရာခုိင္ႏႈန္း ကေနကို ျပန္က်မလာေတာ႔ဘူး။ အဲဒါမ်ဳိဳးေတြျဖစ္မယ္။ အဲဒီလိုေျပာင္ေျပာင္ေျမာက္ေျမာက္ ဒုကေပးတတ္တဲ႔ ခပ္ညံ႕ညံ႔ developer ေတြရဲ႕ code ကို boiler-plate code ေတြလုိ႕ေခၚပါတယ္။ maintain လုပ္ရတဲ႔သူကေတာ႔ ေမတၱာ အၾကိမ္ၾကိမ္ပို႕မွာ အေသအခ်ာပါပဲ။

အင္း ... အဲဒီ auto increment id ေလးျပန္ယူတာေလးေရးၾကည္႕ပါမယ္။
PreparedStatement pst = conn.prepareStatement(sQuery,Statement.RETURN_GENERATED_KEYS);
ResultSet rs = pst.getGeneratedKeys();
rs.next();
autoId = rs.getInt(1);

အဲဒီလိုေလးေရးလုိက္ရင္ autoId ကို ေနာက္တစ္ခါ ထပ္သြားမယူဘဲ သိရပါတယ္။ အသြားအလာ သက္သာသြာပါတယ္။ ေျခေထာက္မေညာင္းေတာ႔ပါဘူး။ အဲဒီ autoId ေလးကို ေကာက္ျပီး ဒုတိယ TableB မွာ insert လုပ္လုိက္ပါ။ မ်ားမ်ားစဥ္းစားျပီးနည္းနည္းပဲ အလုပ္လုပ္ပါ။ လြယ္တဲ႔နည္းေတြ ထြင္ထားျပိးသားရိွပါတယ္။ မ်ားမ်ားေလ႔လာျပီး သက္သာေအာင္ေနပါ။

သိပ္ပ်င္းတဲ႔သူေတြပဲ ထူးခြ်န္ႏိုင္တယ္။
try and error နည္းက လူပင္ပန္းသေလာက္ အက်ိဳးမရိွဘူး။ တြက္ေျခမကိုက္ဘူး။
work hard ဆိုတဲ႔စကားလံုးကို Developer ေတြမွာမသံုးပါဘူး။ Work smart လုိ႕ပဲ သံုးပါတယ္။ ပ်င္းတဲ႔သူဟာ Smart ၾကတဲ႕နည္းေတြအမ်ားၾကီးသိပါတယ္။ work hard ၾကီးေတြကို လူၾကီးေတြက ခ်ီးက်ဴးပါတယ္။ Work Smart ေတြကိုေတာ႔ ေလးစားၾကပါတယ္။ သက္သက္သာသာေလး ေလးစားခံထုိက္တဲ႔သူေတြျဖစ္ေအာင္ ၾကိဳးစားႏိုင္ၾကပါေစ။