Wednesday, October 12, 2011
Design Patterns
Thursday, June 23, 2011
အပလာသခ်ာၤ အင္ အိုရီကယ္။
Thursday, June 2, 2011
Copy ကူးတာကိုလည္း တစ္ခါတေလ backup လုပ္တယ္လို႕ေခၚတယ္
@Echo off
rd /s /q E:\$Recycle.bin
xcopy D:\Company\* E:\Serverbackp\Company\%date:~4,2%\* /Y /Q /S
ဒုတိယ တစ္ေၾကာင္းက ပံုမွန္ဆိုမလိုပါဘူး။ ဒီ user ေတြက ဘာေတြလုပ္မွန္းမသိ မၾကာမၾကာ recycle bin corrupted error ျဖစ္တယ္။ ဘာလို႕ျဖစ္လည္း သူတို႕ဘာလုပ္လည္းဆိုတာ သူတို႕ကိုတိုင္လည္းမသိဘူး။ Recycle bin ကအေရးမၾကီးဘူး၊ ရတယ္တဲ့။ ဟုတ္တယ္ေလ မွားဖ်က္မိလို႕ ျပန္လိုခ်င္ရင္ backup ေတြရွိေနမွာပဲ။ အဲဒါနဲ႕ က်ေနာ့ script ထဲမွာ အဲ quickfix ေလးထဲ့ေရးလိုက္တာ။
ပထမလိုင္းကေတာ့ အလကား output ေတြေပၚေပၚလာရင္ မ်က္စိေနာက္လို႕ echo off လိုက္တာ ။ Bat ေရးဖူးတဲ့သူတိုင္း သိပါတယ္။
ဒုတစ္ယလိုင္းကေတာ့ recycle bin error ကို quickfix အေနနဲ႕ Empty recycle bin လုပ္လိုက္တာ။ အမွန္က Recycle.Bin directory ကို ဖ်က္လိုက္တာပါ။ ဒါေပမယ့္ တစ္ခုခု delete လုပ္ရင္ျဖစ္ျဖစ္၊ logout / login လုပ္ရင္ျဖစ္ျဖစ္ recycle.bin folder က ျပန္ create ျဖစ္ပါတယ္။ အဲေတာ့ ဒါ command line က empty recycle bin လုပ္လိုက္တာပဲလို႕ သေဘာထားပါတယ္။ :D
ေနာက္ဆုံးလိုင္းကေတာ့ Windows ရဲ့ အသုံးတည့္ command ေလးတစ္ခုျဖစ္တဲ့ xcopy နဲ႕ files ေတြကို ကူးဖို႕ပါ။ ဒီမွာ ျပသနာ နည္းနည္းရွိပါတယ္။ က်ေနာ္တို႕က one month cycle လိုခ်င္တာပါ။ ဆိုလိုတာက ေန႕စဥ္ overwrite မလုပ္ခ်င္ပါဘူး။ ေန႕စဥ္ new backup set ထားသြားျပီး တစ္လၾကာမွ ပထမေန႕က backup set ကို overwrite ခ်င္တာပါ။ အဲဒါေၾကာင့္ ေနာက္က destination မွာ %date~:4,2% ဆိုတာေလးပါေနတာပါ။ Windows မွာ %date% environmental variable က system date ကို ကိုယ္စားျပဳပါတယ္။ %date% ကမွ ေလးလုံးေျမာက္ကေန ငါးလုံးေျမာက္အထိ ( ႏွစ္လုံးထဲ) လိုခ်င္လို႕ %date~:4,2% လို႕ေရးတာပါ။ ကိုယ္ယူထားတယ့္ date / time format ေပၚမွာ မူတည္ပါလိမ့္မယ္။ mm-dd-yyyy ဆိုရင္ေတာ့ 7,2 လို႕ယူရပါလိမ့္မယ္။ အေနာက္က /Y ကေတာ့ overwrite ဖို႕ yes / no prompt ေတြမွာ အကုန္ yes လို႕သတ္မွတ္ျပီး overwrite သြားဖို႕၊ /Q ကေတာ့ process output မျပဖို႕နဲ႕ ၊ /S ကေတာ့ subdirectories ေတြပါ ကူးဖို႕ ထဲ့ထားတာပါ။
Diskspace ပိုးဆိုးပက္စက္တက္တာကလြဲရင္ သူတို႕လိုခ်င္သလိုျဖစ္ပါတယ္။ Diskspace ကေတာ့ အမွန္ဆို compress ေလးေလာက္လုပ္သင့္တာေပါ့ေနာ္။ ဒါေပမယ့္ user က ဒီတိုင္းက သူတို႕အတြက္ ပိုေကာင္းတယ္၊ ဘာမွမလုပ္ရပဲ backup file ေတြကို ျမင္ရတာ ပိုသေဘာက်တယ္ဆိုလို႕ ျဖစ္သလိုပဲ လုပ္ေပးလိုက္ပါတယ္။ အမွန္က backup လုပ္တာလို႕ ေျပာဖို႕ေတာင္ ခက္ပါတယ္၊ တစ္ျခားတစ္ေနရာရာကို copy ကူးထားလိုက္တာပါပဲ။ ကိုယ့္ဟာကို compression လုပ္ခ်င္ရင္ေတာ့ winrar command line tools ေလးနဲ႕ လုပ္လို႕ရပါတယ္။
Divinity
Tuesday, May 31, 2011
MySQL root password reset
တျခား 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)
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
ေအာ္ရီကယ္
SELECT SUBSTR(DEPT, 1, INSTR(DEPT, '|') - 1) AS L_DEPT,
SUBSTR(DEPT, INSTR(DEPT, '|') + 1) AS R_DEPT,
DEPT
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