Tuesday, May 31, 2011

MySQL root password reset

MySQL ကဘယ္ သေကာင့္သားက install သြားမွန္းမသိ၊ root password လည္း ဘယ္နားမွာမွ မွတ္မထား၊ documentation ကလည္းမရွိ ၊ ဟုတ္ေတာ့ေနျပီ ။ ဒီထဲက database ေတြကို ေရႊ႕ဖို႕ဟာ ဘယ္ mysql account password မွမသိဘူး။ ဘယ္လို export ထုတ္ရပါ့။ o_O

တျခား database ေတြလည္း သိပ္မရင္းႏွီးေတာ့ တျခား database ေတြမွာ ခက္လားမခက္လား ေတာ့ မသိဘူး။ MySQL မွာေတာ့ မခက္ပါဘူး။ MySQL server command ေတြထဲမွာ skip-grant-tables ဆိုတယ့္ option ရွိပါတယ္။ Privileges system ကို မသုံးပဲ ၊ database အားလုံးကို unrestricted access ျဖစ္သြားပါတယ္။ Database downtime ေလး မိနစ္ဝက္ေလာက္ေတာ့ ရွိမွာေပါ့။ ဘယ္တတ္ႏိုင္မလည္း ။

ပထမဆုံး MySQL ကို --skip-grant-tables option နဲ႕ ျပန္စပါ။
> mysqld_safe --skip-grant-tables &


ေနာက္ဆုံးက Ampersand (&) ေလးကေတာ့ process ကို background process အျဖစ္ run လိုက္တာပါ ။ ဒီလို run လိုက္ရင္ MySQL က ဝင္ခ်င္တိုင္းဝင္ ထြက္ခ်င္တိုင္းထြက္လို႕ရျပီ ။
> mysql


Root user အေနနဲ႕ MySQL ထဲကို ဝင္သြားပါလိမ့္မယ္။ အဲၾကမွ password ျမန္ျမန္ reset လုပ္ေပါ့။
mysql> UPDATE mysql.user SET password=PASSWORD('New-password') WHERE User='root';


Mysql database ထဲက user ဆိုတယ့္ table မွာ password ဆိုတယ့္ column ကို update လိုက္တာေပါ့။ ေနာက္က Password(' ') ဆိုတာၾကီးကေတာ့ MySQL ရဲ့ password hashing function ပါ။ Query မွာတုန္းက plain text ၾကီးနဲ႕ ႐ိုက္ေပမယ့္ database ထဲကို hash အေနနဲ႕ insert သြားလုပ္လိမ့္မယ္။ ဒီ query က တျခား mysql account password ေမ့ရင္လည္း အသုံးတဲ့ပါတယ္။

ျပီးရင္ flush privileges လုပ္လိုက္ရင္ privileges system ျပန္ျပီး active ျဖစ္ပါျပီ။ ဆိုလိုတာက ပံုမွန္အတိုင္ တျခား account restriction ေတြျပန္ရွိျပီေပါ့။ က်ေနာ္ကေတာ့ MySQL ကို restart ျပန္လုပ္ေလ့ရွိပါတယ္။ init script ကို ျပန္ေခၚျပီး restart ခ်လိုက္တာ ဘာေလာက္မွမၾကာပါဘူး။

ကဲ ဒါဆို MySQL root password reset ရသြားျပီ။ က်န္တာေတာ့ ကိုယ့္ဟာကို export ဆက္လုပ္ေတာ့ေပါ့။ :)

Divinity

Friday, May 20, 2011

OpenSource ေတြသုံးၾကည့္ရေအာင္ (1) ( Openfiler - Opensource NAS)

ဒီေန႕ေခတ္က OpenSource ရဲ့ေခတ္လို႕ေျပာရင္ေတာင္ လြန္မယ္မထင္ဘူး။ Commercial products ေတာ္ေတာ္မ်ားမ်ားအတြက္ alternative အေနနဲ႕ Opensource product ေတြရွိေလ့ရွိပါတယ္။ Microsoft Office ေလာက္မေကာင္းဘူးလို႕ေျပာလို႕ရေပမယ့္ OpenOffice.org ဆိုလည္း သုံးလို႕ အဆင္ေျပပါတယ္။ Firewall မွာလည္း Fortinet တို႕ Checkpoint တို႕ကို မမွီေပမယ့္ home and small office users ေတြေလာက္အတြက္ လံုေလာက္တယ့္ capability ကိုေပးႏိုင္တယ့္ Opensource firewall ေတြအမ်ားၾကီးပါ ။ Licensed version လည္း ဝယ္သုံးရတာ သက္သာတာ က်ေနာ္တို႕ႏိုင္ငံမွာပဲရွိပါတယ္။တျခားႏိုင္ငံေတြက က်ေနာ္တို႕ေလာက္ License version မသုံးႏိုင္လို႕ Opensource ေတြကို အားကိုးရတယ္။ EMC ကိုဖို႕မျဖစ္ႏိုင္ေပမယ့္ budget cut down ျဖစ္ျပီး အသုံးတဲ့တယ့္ Opensource NAS တစ္ခုအေၾကာင္း သတင္းေပးခ်င္ပါတယ္။

Small office တစ္ခုအေနနဲ႕ centralized file storage တစ္ခုေတာ့ထားခ်င္တယ္၊ ဒါေပမယ့္ storage server license ဝယ္ရမွာလည္း ေစ်းၾကီးတယ္။ Office မွာကမွ လူက ဆယ္ေယာက္ေလာက္ရွိတာ၊ server license ေတာ့မဝယ္ခ်င္ဖူးဆိုရင္ Opensource nas ေတြအမ်ားၾကီးရွိပါတယ္။ အဲဒီထဲမွာေတာ့့ OpenNAS နဲ႕ Openfiler က stable ျဖစ္ျပီး လူသုံးမ်ားတယ္။ Small office မဟုတ္ေပမယ့္လည္း budget cut down လုပ္ခ်င္ရင္ stable ျဖစ္လို႕ သုံးလို႕ အဆင္ေျပႏိုင္ပါတယ္။ ဒီ post မွာ က်ေနာ္တို႕ Openfiler ရဲ့ capability ကို ၾကည့္ၾကည့္ရေအာင္ ။

Overview
Linux based ပါပဲ။ OpenLDAP ၊ NFS ၊ NIFS ၊ SAMBA ၊ iSCSI initiator အစရွိသျဖင့္ NAS တစ္ခုအတြက္ လိုအပ္တာေတြျပန္ ေပါင္းထဲ့ထားတယ့္ Linux based တစ္ခုပါပဲ။ Software RAID ၊ Hardware RAID ႏွစ္ခုလုံးကို support လုပ္ပါတယ္။ WebUI ပါလို႕ administration လြယ္ကူပါတယ္။ ဒါေပမယ့္ UI ကေနမရတယ့္ configuration အတြက္လည္း ကိုယ့္ဟာကိုယ္ console terminal ကေန ျပင္လို႕ troubleshoot လုပ္လို႕ရတာမို႕ သုံးရတာ flexible ျဖစ္ပါတယ္။ WebUI မွာတင္ Java servlet တစ္ခုနဲ႕ console access ထဲ့ေပးထားပါတယ္။ ( init 1 ႐ိုက္ဖို႕လိုရင္ေတာ့ သုံးလို႕မရႏိုင္ေပမယ့္ ေတာ္ရုံေတာ့ အသုံးတဲ့ပါတယ္)

Storage Flexibility
Openfiler မွာ iSCSI configure လုပ္လို႕ရလို႕ iSCSI capable external enclosure တစ္ခုခုနဲ႕ ခ်ိတ္ဆက္သုံးလို႕ရပါတယ္။ Storage တိုးခ်င္ရင္ enclosure ထဲမွာ hard disk ေတြထပ္တိုးျပီး Openfiler က Volume Group expend လုပ္လိုက္ရင္ရျပီ ။ အဲေတာ့ အျမဲတိုးတက္လာတယ့္ storage space လိုအပ္ခ်က္ကို အမွီလိုက္ႏိုင္ပါတယ္။ လက္ရွိ version မွာ 60 TB အထိ support လုပ္ပါတယ္။ Online volume resizing လုပ္လို႕ရတာမို႕ space expend လုပ္ခ်င္ရင္ေတာင္ downtime မရွိ လုပ္ႏိုင္ပါတယ္။

User Account Control
OpenLDAP ပါတာမို႕ local ldap server configure လုပ္ျပီး user acct control လုပ္လို႕ရပါတယ္။ တကယ္လို႕ network ထဲမွာ authentication server ရွိျပီးသားဆိုလည္း ရွိေနျပီးသား LDAP server သို႕မဟုတ္ AD ကိုခ်ိတ္ဆက္အသုံးျပဳႏိုင္ပါတယ္။ ဘယ္ user / group က ဘယ္ share ကို အသုံးျပဳႏိုင္သလည္းဆိုတာကိုလည္း configure လုပ္ရတာ လြယ္ကူပါတယ္။

Quota control
User ေတြကို quota သတ္မွတ္လို႕ရသလို ၊ share တစ္ခုခ်င္းကိုလည္း ဘယ္ share က ဘယ္ေလာက္ space ထိပဲ grow လုပ္ခြင့္ျပဳမယ္ဆိုျပီး သတ္မွတ္လို႕ရပါတယ္။ Company အတြင္းက ဘယ္ department က ဘယ္ေလာက္ space ပဲသုံးလို႕ရမယ္ဆိုျပီး သက္မွတ္တာမ်ိဳးအတြက္ အဆင္ေျပပါတယ္။

Rich Communication methods
SSH ၊ SMB ၊ CIFS ၊ NFS ၊ FTP အကုန္ support လုပ္လို႕ Unix ၊ Linux ၊ Mac ၊ Windows မေရြး ခ်ိတ္ဆက္အသုံးျပဳႏိုင္ပါတယ္။

High Availability
Openfiler မွာ HA cluster setup လုပ္လို႕ရပါတယ္။ တစ္လုံးထက္ပိုတယ့္ Openfiler server ေတြကေတာ့ Cluster တစ္ခုအေနနဲ႕ serve လုပ္ႏိုင္တာမို႕ single point of failure ကိုေရွာင္ႏိုင္ပါတယ္။ (ဒါကလည္း iSCSI လိုမ်ိဳးနဲ႕ တြဲမွ အဆင္ေျပမွာပါ။ )

Snapshot
Openfiler ရဲ့ volume တစ္ခုခ်င္းကို snapshot ႐ိုက္ျပီးတစ္ေနရာရာ ျပန္သြားထားလို႕ရပါေသးတယ္။ Storage server ကို backup ျပန္လုပ္တာေပါ့။ Revert ျပန္လုပ္ရတာလည္း လြယ္လြယ္ကူကူပဲ။

Easy Administration
ခုနကေျပာသလို ႐ိုးရွင္းျပီး ျပည့္စံုတယ့္ WebUI ေၾကာင့္ administrate လုပ္ရတာ လြယ္ကူလြန္းပါတယ္။ Volume group ေတြ၊ User / group quota ေတြနဲ႕ မစိမ္းဖူးဆိုရင္ ဘာမွ အထူးအစမ္းမရွိႏိုင္ပါဘူး။

Openfiler ရဲ့ ေကာင္းတယ့္အခ်က္ေတြအမ်ားၾကီးရွိပါေသးတယ္။ အလကားရတာမို႕ Cost effective ျဖစ္တယ္လို႕ေျပာရင္ လြန္မယ္မထင္ပါဘူး။ Exchange server ၊ VMware စတာတို႕နဲ႕တြဲျပီး storage အျဖစ္သုံးလို႕လည္းရပါတယ္။ Opensource တို႕ရဲ့ထုံးစံအတိုင္း documentation ကေတာ့ သိပ္အားမေကာင္းပါဘူး။ ဒါေပမယ့္ feature ေတာ္ေတာ္မ်ားမ်ားက ဘာ technical skills မွမလိုပဲ လြယ္လြယ္ကူကူပဲ သုံးလို႕ရပါတယ္။

က်ေနာ့္ ပတ္ဝန္းက်င္မွာ က်ေနာ္ေန႕စဥ္အမွ် ထိေတြ႕ေနရတယ့္ Opensource product ေတြအေၾကာင္း တစ္ခုခ်င္း ေရးပါအုန္းမယ္ ။ ( ေျပာျပန္ျပီ)

Divinity

Thursday, May 19, 2011

ေအာ္ရီကယ္

ေအာ္ရီကယ္

ဒီေန႕ ရံုးမွာ ေရွ႕ကလူက data ႏွစ္ခုကို column ႏွစ္ခုမခြဲဘဲ ေပါင္းထည္႕သြားတာကို query ျပန္ေရးတဲ႔အခါ ႏွစ္ခုခြဲျပီးျပန္လိုခ်င္တာနဲ႕ delimter တို႕ splitter တို႕အေၾကာင္းကိုေရာက္သြားတယ္။
တစ္ခါတစ္ေလ knowledge transfer လုပ္တာေကာင္းတယ္။ လူမ်ားသိျပီးသားကို ပြားယူလုိက္တယ္။ ေဘးနားက ကတံုးနဲ႕ညီေလးကို ေဟ႔ေကာင္ ငါဒီလိုလိုခ်င္တာေလး ေရးပါဦးဆိုျပီး ေမးလုိက္ေတာ႔ သံုးမိနစ္အၾကာမွာ ေအာက္ပါ script ကိုရတယ္။

SELECT SUBSTR(DEPT, 1, INSTR(DEPT, '|') - 1) AS L_DEPT,

SUBSTR(DEPT, INSTR(DEPT, '|') + 1) AS R_DEPT,

DEPT

FROM INCOME.T_MCS_ENDOR_UPLOAD;


မူလျပႆနာက ဒီလို Dept(Department) Column မွာ Department နဲ႕ Cost Centre values ႏွစ္ခုကို pipe(|) demlimter နဲ႕ၾကံၾကံဖန္ဖန္ထည္႕သြားတယ္။ Department Data ေတြက

356|T&O-SG-Account Services
7185|IBG3-E2-E

စသျဖင္႔ေပါ႔ေလ။ ေရွ႕က Cost Center ။ Pipe ေနာက္က Department ။ အေပၚက query ကိုၾကည္႕ရင္
SUBSTR(DEPT, 1, INSTR(DEPT, '|') - 1) AS L_DEPT

substr Function ကိုသံုးထားတယ္။ Substring ရဲ႕အတုိေကာက္လုပ္ထားတာမွန္းသိသာတယ္။ ဘာကို substring လုပ္မွာလဲဆိုတာကို ၾကည္႕ရင္ အေနာက္မွာ Dept ဆိုတဲ႔ Department column ကိုေတြ႔မယ္။ ဆက္ၾကည္႔ရင္ 1 ကိုေတြ႕မယ္။ 1 က start position ပါ။ Java မွာလို zero ကမစပါဘူး။ ေရွ႕ဆံုးကေကာင္က postion 1. ဟုတ္ျပီ ေရွ႕ဆံုးက ရျပီ။ ဘယ္နားမွာဆံုးမလဲ။ ဒီအတိုင္းေတြးၾကည္႕ pipe ေရွ႕မွာဆံုးမယ္။ pipe ရဲ႕ေရွ႕တစ္ေနရာဆိုေတာ႔ pipe ရဲ႕ေနရာ -1။ pipe ရဲ႕ေနရကို ရွာဖို႕ INSTR function သံုးတယ္။ Department Data ရဲ႕ pipe (|) ရိွတဲ႔ေနရာဆိုေတာ႔ INSTR(DEPT, '|') ဆိုျပီးရွာတယ္။ AS L_DEPT ကေတာ႔ Alias လုပ္တာေပါ႔။ အဲဒီ pipe ရဲ႕ ဘယ္ဘက္ျခမ္းေပါ႔။ တစ္နည္းအားျဖင္႔ as CostCentre ေပါ႔။

ဒုတိယပိုင္းကေတာ႔ပိုလြယ္သြားပါျပီ။ pipe ေနာက္ကေန အဆံုးအထိ။ အဆံုးအထိဆိုရင္ end position မထည္႕ေပးလည္းရပါတယ္။ စတဲ႔ေနရာက pipe ရဲ႕ေနာက္။ pipe ရဲ႕ အေရွ႕ေနရာမွာ တစ္ႏႈတ္ရင္ pipe ရဲ႕ေနာက္တစ္ေနရာ တစ္ေပါင္းလုိက္ရံုပါပဲ။

SUBSTR(DEPT, INSTR(DEPT, '|') + 1) AS R_DEPT

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

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

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

ေအာ္ စင္ကာပူ ေဆာ႔ဖ္၀ဲေလာက ....... သနားစရာ။


Notes:
အလကားေပးေနတဲ႔ JDK ေတြကိုေတာင္ အနည္းဆံုး Java2 (JDK 1.5) ေျပာင္းမသံုးႏုိင္တဲ႔ စင္ကာပူက အူေၾကာင္ေၾကာင္ Architect ေတြရဲ႕ Decision making ကို အံ႔အားသင္႔ပါတယ္။ Backward compatibility အတြက္လည္းမဟုတ္ပါဘူး။ ဘာမွန္းကို မသိတာ။ ပိုဆိုးတာ အစိုးရေဆာ႔ဖ္၀ဲလ္ေတြ။ JDK 1.3။

ဒုတိယ အညံ႔ဆံုး ေဆာ႔ဖ္၀ဲေတြကိုေတာ႔ starhub မွာေရးတယ္ထင္တယ္။ ဘယ္ေနရာမွမဆို error ေလးအေဖြးသားနဲ႕။

Thursday, May 12, 2011

Think B4 it's 2 La8.

Think B4 it's 2 La8.

အလုပ္က ခက္တာမဟုတ္ဘဲ လြယ္တာေလးေတြမ်ားေနရင္ ဘယ္လုိ Handle လုပ္မလဲ။

အခုေနာက္ပိုင္းမွာ productive programmer ေတြက code ကိုမေရးဘူး။ generate လုပ္တယ္။

ေန႔တိုင္းလုပ္ေနရတဲ႔အလုပ္ေတြကို ထုိင္စဥ္းစားၾကည္႕တယ္။ တစ္ေန႕လား sql script ေရး၊ ေနာက္တစ္ေန႕လာ script ေရးနဲ႕ပဲ လုပ္ေနရတာမ်ားတယ္။ ဘာမွမဟုတ္ေပမယ္႔ လက္၀င္တယ္။ ဆိုပါေတာ႔ policy အခု တစ္ေထာင္ေလာက္ကို စစ္ရမယ္ဆိုရင္ သူတုိ႕ေပးလိုက္တဲ႔ txt file ထဲက policy number ေလးေတြကို တယုတယေလး comma code ျပီး select where policy in ('') ထဲထည္႕ဖုိ႕ေတာင္ တစ္ခုခ်င္းစီလုပ္ေနရင္ သိပ္ၾကာတယ္။ အဲဒီေတာ႔ program ေလးတစ္ခုေရးထားတယ္။ ဘာမွလုပ္တာမဟုတ္ဘူး။ comma ေတြ single code ေတြ တပ္ေပးတာမ်ိဳး၊ ကုိယ္လုပ္ရမွာပ်င္းတာေတြ လုပ္ေပးတဲ႔ office helper ဆိုတဲ႔ project ေလးကို လုပ္ျဖစ္တယ္။ သက္သာတယ္။ productive ပိုျဖစ္လာတယ္။ အခ်ိန္မ်ားမ်ားမလိုဘဲျပီးတယ္။

အားေနရင္ Framework ေတြေလ႔လာတာေကာင္းတယ္။ Java မွာ အလားအလာသိပ္ေကာင္းေနတဲ႔ ွSpring framework လိုဟာမ်ိဳးကိုေလ႔လာသင္႔တယ္။ ေနာက္ထပ္ ဆယ္ႏွစ္အတြင္း သူ႕ကို ပစ္ပယ္လုိ႕မရေသးဘူး။ အခု VM ware ေအာက္ေရာက္သြားလုိ႕ ပိုခိုင္မာလာတယ္။ Spring Source မွာ ေလ႔လာလုိ႕ရတယ္။ Spring Tools Suite ေတြလည္းထုတ္တယ္။ ပ်င္းရင္ စမ္းၾကည္႕ဖုိ႕ေကာင္းတယ္။

Code ေရးတာတင္မဟုတ္ဘဲ Framework ေတြကို နားလည္ရင္ ပိုအဆင္႔ျမင္႔တဲ႔ code ကို ေရးလုိ႕ရတယ္။ Spring batch မွာဆို file ေတြကို သူ႕ဘာသာသူ handle လုပ္ထားတာေတြအမ်ားၾကီးပါတယ္။ reader ေတြ၊ writer ေတြ မလုိဘဲ ေရးရတာေတြသက္သာသြားတယ္။

ဖတ္လက္စဟာေတြေရးမယ္ ေရးမယ္နဲ႕မေရးျဖစ္ဘူး။ Divinity ပို႕စ္ႏွစ္ခုတက္လာမွ စာမေရးတာၾကာျပီလုိ႕သတိထားမိတယ္။ Language ေတြရဲ႕ေရွ႕မွာ concept အရင္လာတယ္။ အဲဒီ concept ကို သိရင္ ဘာ language နဲ႕မဆို implement လုပ္ဖုိ႕ ဆက္ၾကိဳးစားလုိ႕ရႏိုင္တယ္။

IOC , inversion of control နဲ႕ Dependency Injection ကို အတူတူပဲဆိုတာမသိဘဲ spring နဲ႕ေရးတာေတြကို maintain လုပ္ခဲ႔ဖူးတယ္။ အေတြ႕အၾကံဳအရ ဘာေတြကို ဘယ္လုိ configure လုပ္ျပီး ဘယ္လိုေရးလုိက္ရင္ရတယ္ဆိုတာက မခက္ဘူး။ အမွန္က အဲဒါက ကြ်န္ေတာ္ အသံုးမက်ဘဲ ဘ၀င္ျမင္႔မိတဲ႔အခ်က္ပဲ။ လူမ်ား အေျခခံလုပ္ထားျပီးသားကို ၀င္ျပင္တာက ဘာပညာမွမပါသေလာက္ပါပဲ။ ဘာနဲ႕တူလဲဆိုရင္ စြန္လႊတ္ရင္ လူမ်ားတင္ထားတဲ႔စြန္ ၀င္လႊတ္သလိုပဲ။ မခက္ဘူး။ ေလမိေနတဲ႔စြန္ေပါ႔ေလ။ သူ႕ဘာသာသူလည္း ျပဳတ္က်မလာဘူး။ အဲဒီလို ေရးႏိုင္တာနဲ႕ပဲ ကြ်န္ေတာ္ထင္လာတယ္။ ဘယ္ framework မွမခက္ဘူး။ ဘာမွလည္းမဟုတ္ဘူး။ ဟိုေနရာေလးမွာ ဟိုဟာျပင္၊ ဒီေနရာေလးမွာဒီဟာျပင္ပဲလို႕ထင္တယ္။ အဲ.... ထင္ခဲ႔တယ္ေပါ႔ေလ။ လူဆိုတာက အေတာ္ေလးထူးဆန္းတဲသတၱ၀ါ၊ လူမ်ားအသံုးမက်တာကို သာ ထင္ထင္ရွားရွားျမင္ရတယ္။ ကိုယ္အသံုးမက်ဘူးဆုိတာကိုေတာ႔ အတတ္ႏိုင္ဆံုးေမ႔ထားမိတယ္။

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

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

Spring မွာဆို AOP, Aspect Oriented Programming အတြက္ သူက အမ်ားၾကီး support လုပ္တယ္။ ကိုယ္က Spring 2.0 ေလ႔လာေနတုန္း၊ xml နဲ႕ configure လုပ္ေကာင္းတုန္းမွာ SpringSource က Spring 3.0 ကို annotation ေတြနဲ႕ သံုးတာကို promote လာလုပ္ေနတာေတြ႕ရတယ္။ IT မွာေပ်ာ္စရာေကာင္းတာက အဲဒါပဲ။ ေလ႔လာလုိ႕မဆံုးဘူး။ ေပ်ာ္တတ္ရင္ေပ်ာ္စရာေကာင္းပါတယ္။ အသံုးမက်တဲ႔သူနဲ႕ အသံုးက်တဲ႔သူကြာျခားသြားဖုိ႕ အေျပာင္းအလဲမ်ားမ်ားလုိတယ္။ သိပ္ကိုလြယ္ကူတဲ႔ေနရာမ်ိဳးမွာ ဘယ္သူက ေတာ္ျပီး ဘယ္သူက ညံ႕လဲခြဲရသိပ္ခက္တယ္။ အေျပာင္းအလဲကို မေၾကာက္ဘဲ၊ ေလ႔လာရမွာေပ်ာ္တတ္ဖို႕စိတ္ကိုျပင္ဆင္ထားရင္ ေနေပ်ာ္ပါလိမ္႔မယ္။

AOP ကို အရင္က ခက္ခက္ခဲခဲေရးၾကရတယ္။ အခုေတာ႔ သံုးေလးငါးေၾကာင္း config လုပ္လုိက္ရံုနဲ႕အဆင္ေျပတဲ႔ေခတ္ကိုေရာက္လာျပီ။ အၾကမ္းဖ်င္းေျပာရရင္ေတာ႔ AOP က Transaction Advice ေတြ ဘာေတြ လုပ္တဲ႔အခါသံုးတာေပါ႔။ ဥပမာ Customer A ကို database ထဲ insert မလုပ္ခင္၊ သူ Registered လုပ္ထားလားစစ္မယ္၊ျပီးေတာ႔ သူ႕ကို တစ္ျခား Black List Table မွာ တိုက္ဆုိင္မယ္၊ စတဲ႔ကိစၥမ်ိဳးေတြကို Before မွာလုပ္မယ္။ Customer A ကို create လုပ္ျပီးရင္ After မွာလုပ္ခ်င္တာေတြကို စုျပီး configure လုပ္ထားလုိ႕ရပါတယ္။ ဒါေတြလုပ္ဖုိ႕မ်ား AOP မလိုပါဘူးဆိုတာေတြျဖစ္ခ်င္လည္းျဖစ္လာမယ္။ Real world မွာေတာ႔ ဒီထက္ခက္ခဲတာေတြရိွပါတယ္။ Stand alone system နဲ႕ Distributed System ေတြရဲ႕ Complexity ေတြက ဘယ္လိုမွယွဥ္လို႕မရပါဘူး။ ေနာက္ပိုင္းမွာ code level မွာျပင္တာေတြထက္ Config ကေနပဲ လိုတာေတြကို ျပင္လုိ႕ရလာေအာင္ Flexibility နဲ႕ Maintainability အတြက္ ျပင္ဆင္လာၾကတာေတြ႕ရပါတယ္။

ဥပမာ Spring မွာ အရင္က iBATIS သံုးတယ္။ သူကေတာ႔ ဘုရားစူး ORM (Object-Realational Mapping)။ ORM framework ေတြေတာ္ေတာ္မ်ားမ်ားရိွတယ္။ Hibernate ကေတာ႔ ဆ်ာဂ်ီးေပါ႔။ သူတို႕မွာလည္း သူတုိ႕ျပႆနာနဲ႕သူရိွတာေတာ႔ရိွတယ္။ ORM ဆိုလို႕ သူတုိ႕ကို ဘာအတြက္သံုးလဲဆုိတာေလး နည္းနည္းျဖည္႕ေျပာလုိက္ခ်င္တယ္။ Database ခမ်ာ ႏွစ္ေပါင္းမ်ားစြာ Relational အျဖစ္နဲ႕ေနလာရာကေန OO ေတြ က သူ႕ကို OO လုိ နားမလည္တဲ႔ေကာင္ဆိုျပီး ေျပာတာကို ခံေနရတာၾကာျပီ။ အဲဒီေတာ႔ OO နဲ႕ Relational DB ေျပာရဆုိရလြယ္ေအာင္နဲ႕ အသံုးပိုက်လာေအာင္ ORM ေတြသံုးလာတာပါ။ အရင္က Obj တစ္ခုလံုးကို Table ထဲထည္႕လုိ႕မရဘူး။ သပ္သပ္စီပဲ။ Table ထဲထည္႕ခ်င္ရင္ column data တစ္ခုစီကို insert လုပ္ရတယ္။ Customer data ဆိုရင္ name,nric, ဘာညာ၊ဘာညာေတြ insert လုပ္ရတာသိပ္ပ်င္းဖုိ႕ေကာင္းတယ္။ အခုေတာ႔ ORM ေတြေၾကာင္႔ Insert(Customer) ဆိုတာမ်ိဳးနဲ႕ကိစၥျပီးတယ္။ စကားကိုျပန္ေကာက္ရရင္ Spring မွာ iBATIS အစား Hibernate ေျပာင္းသံုးခ်င္လည္း သိပ္အမ်ားၾကီးျပင္စရာမလုိဘူးဆိုတာပါ။ အဲဒီလို ေရရွည္မွာ ကိုယ္႔ဘ၀ကို သက္သာေစမယ္႔ကိစၥေတြမ်ားမ်ားသိသင္႔တယ္။ အဲဒါေတြကိုလည္း ကိုယ္႔ထက္ေတာ္တဲ႔သူေတြ လုပ္ထားျပီးျပီ။ နည္းနည္းေတာ႔ေလ႔လာလိုက္၊ အဆင္ေျပသြားေစရမယ္ဆိုတာမ်ိဳး။ (Spring ကို promote လုပ္ေနသလုိမ်ားျဖစ္ေနျပီလားမသိ။)

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

ဒီမွာလည္း Technical စစ္စစ္ၾကီးေတြမေရးေသးဘဲ စကားပဲမ်ားေနရတာလည္းအေၾကာင္းရိွပါတယ္။ တကယ္ေလ႔လာခ်င္တဲ႔သူေတြက ေျမွာက္ေပးဖုိ႕ပဲလုိတာပါ။ အဲေလ ... တုိက္တြန္းတာ၊ suggest လုပ္တာ .. အဲဒါေတြပဲလုိပါတယ္။ Professional အလုပ္လုပ္စားျပီး ေယာင္တိေယာင္နဆို ေရလည္ အျမင္ကတ္မိတယ္။ လူမ်ားပိုက္ဆံကို ညာယူတဲ႔သူမ်ိဳးလုိ႕ပဲထင္တယ္။ Professional ဆိုတာ လူမ်ားထက္ ဒီအလုပ္မွာ ပိုေတာ္ျပီး ေထာင္႔ေစ႔တဲ႔သူမ်ိဳးပဲျဖစ္ရမယ္။ ကိုယ္ေလာက္မသိတဲ႔သူကေမးရင္ ခ်က္ခ်င္းေဒါက္ခနဲမေျဖႏိုင္ဘဲ၊ ေဒါက္ခနဲ ေအာက္ေမးျပဳတ္က်ျပီး ပါးစပ္အေဟာင္းသားျဖစ္ရတာေလာက္ ရွက္စရာေကာင္းတာမရိွဘူးလို႕ထင္တယ္။ တစ္ခုခုေမးမွ I am not sure ဆုိရင္ အဲဒါ professional မဟုတ္ေတာ႔ဘူး။ ကိုယ္႔ကိုယ္ကို အလုပ္နဲ႕ပတ္သက္ရင္ Professional ဆိုတာကို ေမ႔မထားေစခ်င္ဘူး။ အဲဒီ အေတြးအေခၚေတြကို အဓိက promote လုပ္ခ်င္တာပါ။ ျမန္မာအမ်ားစုက ကိုယ္႔အထက္မွာ ျမန္မာတစ္ေယာက္ရိွတယ္ဆိုရင္ ေမးလုိ႕ကိုမဆံုးဘူး။ အလုပ္လုပ္မွာလား၊ ဒါမွမဟုတ္ ကိုယ္က စာလာသင္တာလားဆုိတာကိုေမ႔ေနၾကသလိုျဖစ္ေနတယ္။ တကယ္႔ဘ၀ၾကီးမွာ ကို္ယ္႔ဘာသာကိုယ္ေလ႔လာမွပဲ ကိုယ္တုိင္သိတဲ႔အသိကိုရတယ္။ သူမ်ားကိုေမးေနတာေတြက ခဏေနဆိုျပန္ေမ႔သြားတာပါပဲ။ ကိုယ္ သံုးေလးရက္ ရွာဖတ္ျပီးမွ သိလုိက္တဲ႔ဟာနဲ႕ လူမ်ားကို အလြယ္တကူေမးလုိ႕သိလုိက္ရတာနဲ႕က မွတ္မိပံုခ်င္းတူကိုမတူပါဘူး။

B a Professional @ Work

ျဖစ္ႏုိင္ရင္ တျခားသူေတြလုပ္ႏိုင္တာထက္ ပိုျပီး quality ေကာင္းေအာင္လုပ္ပါ။ ဘယ္ေနရာမွာမဆို၊ ကိုယ္လုပ္လုိက္တာဟာ နည္းနည္းေတာ႔ value added ျဖစ္ေအာင္။ ေမးလ္ျပန္ပို႕ရင္ေတာင္ လုိအပ္ရင္ အေရာင္ေလးဘာေလးသံုး၊ highlight လုပ္၊ ကိုယ္႔ေမးလ္ကို follow up လုပ္။ ဘယ္သူပဲၾကည္႕ၾကည္႕ ကိုယ္အလုပ္လုပ္ႏိုင္တာကို သိသာေအာင္ေနပါ။ အလုပ္လုပ္ႏုိင္ျပီး အျမန္ျပီးေအာင္လုပ္၊ ပိုတဲ႔အခ်ိန္သက္သာေအာင္ေနတာနဲ႕ လြယ္လြယ္ေလးေတြကို ခက္ေနတာနဲ႕ကလည္း တူသလုိလုိနဲ႕ အေတာ္ၾကီးကြာတယ္။

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

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

ကဲ ကဲ .. တရားသိမ္းၾကရေအာင္။ အဲေလ ... နိဂံုးခ်ဳပ္ၾကစို႕ ...။ လုိက္ဆိုလုိက္ပါဦး။

I will be a Professional @ work.

This is my commitment.



Ctrl+C De Bono's last book title :.

Ctrl+V In this post


R3gArdS,

Z3R0

Friday, May 6, 2011

Geez, what hardware spec i've got there ?

တစ္ခါတစ္ေလ Server ေတြရဲ့ Hardware spec ျပန္ၾကည့္ခ်င္တယ္၊ Serial Number ျပန္ၾကည့္ခ်င္တယ္၊ Server ကလည္း အနားမွာမရွိဘူး ၊ က်ေနာ္လို႕ documentation ေကာင္းရင္ ဘာ server သုံးခဲ့မိမွန္းေတာင္ မမွတ္မိေတာ့ဘူးဆိုရင္ command line ကေန ၾကည့္လို႕ရပါတယ္။ အမ်ားဆုံးျဖစ္တတ္တာက က်ေနာ္တို႕ဆို memory upgrade လုပ္ခ်င္တာ၊ memory type သိခ်င္ရုံနဲ႕လည္း Data center အထိမသြားခ်င္၊ သြားျဖစ္လည္း ဒါေလးအတြက္နဲ႕ BIOS ထဲဝင္မၾကည့္ခ်င္ရင္ အသုံးတဲ့ပါတယ္။

Linux မွာေတာ့ dmidecode command က ေတာ္ေတာ္အသုံးဝင္ပါတယ္။
Serial number ေလာက္ျပန္ၾကည့္ခ်င္တာဆို
# dmidecode --type 1

လို႕႐ိုက္လိုက္ရင္ Chassis က serial number ကိုျပေပးပါတယ္။ Memory slot ေတြနဲ႕ ပတ္သက္တယ့္ information က type 16 ျဖစ္ေလ့ရွိပါတယ္။ Slot အေရအတြက္နဲ႕ Max capacity ျပပါလိမ့္မယ္။ အခုလက္ရွိတပ္ထားတယ့္ memory ကိုၾကည့္ခ်င္ရင္ေတာ့ Server အဖုံးဖြင့္ၾကည့္ရပါတယ္။ အခုလက္ရွိ တပ္ထားတယ့္ memory ရဲ့ information ေလာက္ပဲၾကည့္ခ်င္ရင္ေတာ့ 'dmidecode --type 17' ဆိုရင္ရပါတယ္။ DDR အမ်ိဳးအစားနဲ႕ speed ကိုျပပါလိမ့္မယ္။

Type နံပါတ္မေသခ်ာရင္လည္း dmidecode ရဲ့ output တစ္ခုလုံးကို output pipe နဲ႕ more ဒါမွမဟုတ္ less ဆိုျပီး ၾကည့္ရင္လည္းရပါတယ္။ Output ကရွင္းပါတယ္ ၊ လိုတယ့္ information ကိုရွာလို႕ လြယ္ပါတယ္။ ဒါဆို command က ဒါမ်ိဳးေပါ့။
# dmidecode | less


Linux ရဲ့ dmidecode ကေတာ့ hardware info ကိုပဲ အဓိကျပပါတယ္။

Windows မွာဆိုရင္ေတာ့ wmic ဆိုတယ့္ command တစ္ခု ပါပါတယ္။ Windows Management Instrumentation ေပၚမွာ အေျခခံထားတယ့္ command ပါ။ wmic command output ကရွုပ္လို႕ တစ္ခါမွ လိုက္မၾကည့္ဖူးပါဘူး။ လိုတာပဲမွတ္ထားမိတယ္။ ဒါေပမယ့္ သူကေတာ့ ပိုျပီး information မ်ားမ်ား retrieve လုပ္ႏိုင္ပါတယ္။

Serial number ကေတာ့ BIOS မွာရွိပါတယ္ ။
> wmic bios

ဆိုရင္ မ်က္စိေနာက္စရာ output နဲ႕ျပပါတယ္။ လိုခ်င္တာေလးျပန္ ျဖတ္ၾကည့္ရတယ္။
> wmic bios get serialnumber

ဒါမွ လိုခ်င္တာေလးျပတယ္။

Memory speed ကေတာ့ memorychip ထဲမွာပါ။
> wmic memorychip get speed

ဒါမွမဟုတ္ပဲ တျခားဘာေတြရွိေသးလည္းၾကည့္ခ်င္ရင္ ေနာက္က get speed ျဖဳတ္႐ိုက္ေပါ့။ အဲ Memory capacity က်ေတာ့ memphysical ထဲမွာ ။
>wmic memphysical get maxcapacity

ဆိုရင္ maximum capacity ျပျပီး ၊
>wmic memphysical get memorydevices

ဆိုရင္ slot ဘယ္နခုရွိလည္း ျပပါတယ္။

WMIC က hardware info retrieve လုပ္ဖို႕ေလာက္ လုပ္ထားတာမဟုတ္ပဲ current system ရဲ့ info ေတာ္ေတာ္မ်ားမ်ား process info ေတြ ၊ partition table ေတြပါၾကည့္လို႕ရပါတယ္။ WMIC အေၾကာင္းထပ္သိခ်င္ေသးရင္ ဒီ link မွာ ရွိပါေသးတယ္။ အေသးစိတ္ကေတာ့ Google ကရွာျပီး Microsoft technet article သာရွာဖတ္ၾကည့္ေပါ့။

http://www.robvanderwoude.com/ntadmincommands.php

အသုံးတဲ့မယ္ထင္ပါတယ္။ မတဲ့လည္း သုံးၾကည့္ေပါ့ ။ :D

Divinity