Wednesday, October 12, 2011

Design Patterns

Design Patterns

Today, I brush up on design patterns.
Here is the link for you to read and to do so :

Sometimes, we knew it from the source code though we didn't see this is which design pattern. There will be a B=I=G questionmark about design patterns, do we need to know Design patterns? The question is as simple as that. But the answer will be not so straightforward. (Somebody may think the opposite of straightforward will be wavybackward.) Indeed, there is no such thing design patterns are the musts, all developer should know design patterns as his sweetheart's birthday. In the real world solution, we may use a lot of design patterns according to the framework's support or according to the structure of the architect/tech lead, who take most of the share from the projects. Anyway, the answer will absolutely depends on you. Do you want to know clearly and vividly about the design pattern though you may not use (except in your interviews)? If you give a mere yes or a small nod or shrug your shoulders, you should learn about these design patterns.

Unfortunately, there is no shortcut in reading a book. If you are equally lazy as me, try to read regular hour(/s) everyday instead of reading a tech-book per day as geeks do. There are some patterns you should know as a good developer. These patterns are very useful if you really want to write quality codes.

For design patterns, I am reading Head First Design Patterns - O'Reilly Media.
One of my friends who suggests to read this book says it is easier to understand than the book written by Gang of 4. Of course all the head first series are fun to read.

We should be professional at least. Though we may not use a lot of Design Pattern in current environments, we should know proper ways of coding and basic patterns.

Most of us learnt design patterns @ school. After we had got some experiences from work, we should now digest our knowledge from school and fill the gap in our understanding of the software development.

There are two ways to prevent the reinventing the wheel; the first is not to do anything, sit tight and do nothing special, the second is to learn the proven solutions that conquer the same old barriers before.

Sometimes, working 2 hard can lead you 2 B mediocre. Read in advance something you may need to know in your life/work before you encounter the big problems.

Thanks for reading my post.

I will try to post some design patterns summaries soon.

Regards,
Zero/Zero

Thursday, June 23, 2011

အပလာသခ်ာၤ အင္ အိုရီကယ္။

အပလာသခ်ာၤ အင္ အိုရီကယ္။

Applied Maths ကို ခပ္ၾကမ္းၾကမ္းဘာသာျပန္ပစ္လိုက္တာ။

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

Database ေတြဟာ သခ်ာၤရဲ႕ Set theroy ေတြေပၚမူတည္ျပီးတည္ေဆာက္ထားပါတယ္။
Intersect ေတြ Union ေတြ Minus ေတြရိွပါတယ္။

ဒီေန႕လိုခ်င္တာက NRIC တူျပီး PLAN မတူတဲ႔ policies ေတြပါ။

PLAN ေရာ NRIC ပါတူတာဆိုရင္ ဒီလုိယူလို႕ရပါတယ္။

select * from table_name where (NRIC,PLAN) in
(
('NRIC1','PLAN1'),
('NRIC2','PLAN2'),
('NRIC3','PLAN3'),
..etc
);


တစ္ခုတူျပီးတစ္ခုမတူတာကို ၾကေတာ႔ in နဲ႕လုပ္လုိ႕မရဘူးဗ်။

အဲဒီေတာ႔ excel မွာပဲ query ကို genereate လုပ္ျပီး၊ တစ္ေၾကာင္းစီ result ကို ျပန္ေပါင္းရေကာင္းမလားစဥ္းစားတယ္။ လိုင္း ၅၀၇ လိုင္းေလာက္ လုပ္ရမယ္။

ေနာက္ေတာ႔ ေဘးနားက တရုတ္ကိုေမးၾကည္႕တယ္။ သူလည္းမရဘူးလုိ႕ေျပာတယ္။ ျပီးေတာ႔မွ ထပ္စဥ္းစားျပီး MINUS နဲ႕လုပ္ရင္ရမယ္ထင္တယ္ဆိုျပီး formula ျပန္ေရးၾကတယ္။ သူစဥ္းစားတာမွန္တယ္။

အမွန္ကရတယ္။ ရုတ္တရတ္စဥ္းစားမိဖုိ႕ခက္တာပါ။ NIRC တူတာေတြကို ယူလိုက္ျပီး NRIC ေရာ PLAN ပါတူတာကို ျပန္ႏႈတ္လိုက္ရင္လိုခ်င္တဲ႔အေျဖကိုရပါတယ္။

select NRIC from tableA where NIC in (
'NRIC1',
'NRIC2',
'NRIC3',
....
)MINUS
select NRIC from tableA where (NRIC,PLAN) in
(
('NRIC1','PLAN1'),
('NRIC2','PLAN2'),
('NRIC3','PLAN3'),
..etc
);

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

ေနာက္တစ္ခုက Excel တစ္ခုလံုး အသံုးခ်နည္းဆိုျပီးေရးရမလားမသိဘူး။ Excel မွာလုပ္လုိ႕ရတာေတြအမ်ားၾကီးပဲရိွေသးတယ္။ အထူးသျဖင္႔ query ေတြကို sql format ေရးဖုိ႕ concat လုပ္ျပီး drag ဆြဲသြားလုိက္တာတုိ႕ဘာတုိ႕၊ သိပ္လြယ္တယ္။ ျမန္တယ္။

double qoutes ေပၚေအာင္ double code 4 ခုေရးရတာလည္း ရယ္စရာေကာင္းတယ္။ တစ္ခုက escape character အေနနဲ႕သံုးတာပါ။ ေနာက္ျပီး oracle မွာ နာမည္မွာ single quote ပါရင္ ဒီအတိုင္းထည္႕ေရးလို႕မရဘဲ || ေတြနဲ႕ concat လုပ္ဖုိ႕လုိတာကို excel မွာကတည္းက replace all လုပ္ပစ္လုိက္လုိ႕ရပါတယ္။ Excel ကို မ်ားမ်ားသံုးရင္ query ေတြ တလေဟာေရးရတဲ႔ေနရာေတြမွာ အေတာ္ေလးသက္သာပါတယ္။ TRIM လုပ္ဖုိ႕တုိ႕၊ substring ရွာဖုိ႕တုိ႕ကိုလည္း Excel မွာပါျပီးသားျဖစ္တဲ႔အတြက္ formula တစ္ခုေလာက္ေရးျပီး query ေတြ တရေဟာ drag လုပ္ႏုိင္ပါျပီ။

ကိုယ္သက္သာဖုိ႕ဆိုတာကိုယ္႔တာ၀န္ပါပဲ။
ဘာမွမသိလို႕ ခက္တဲ႔နည္းေတြနဲ႕လုပ္ေနရတာမ်ိဳး ဘယ္ေတာ႔မွမျဖစ္ေစနဲ႕။

ကိုယ္႔ထက္ေတာ္တဲ႔သူေတြသက္သာေနတာကိုလည္း အလကားေနအထင္မေသးနဲ႕။ သူတို႕ဆီက productive ျဖစ္တာေလးေတြေလ႔လာပါ။

Lazy developers rule the creation of the effective ways.

Thursday, June 2, 2011

Copy ကူးတာကိုလည္း တစ္ခါတေလ backup လုပ္တယ္လို႕ေခၚတယ္

တစ္ခ်ိဳ႕ေတြေပါ့၊ လိုခ်င္ေတာ့ ၾကီးၾကီးက်ယ္က်ယ္ ။ Daily full backup ၊ one month cycle တဲ့။ Backup software ေတာ့မဝယ္ခ်င္ဘူး ၊ ဘယ္လိုပဲရရတဲ့ backup ျဖစ္ရင္ျပီးေရာတဲ့။ File ေတြမွားမွားဖ်က္ၾက overwrite ေတြ မွားမွားလုပ္ၾကလြန္းလို႕တဲ့။ ဒီလိုလား ၊ ရပါတယ္။ xcopy နဲ႕ပဲ လုပ္လို႕ရပါတယ္။ အဲဒါနဲ႕ပဲ ဒီေန႕ သုံးေၾကာင္း bat script ေလးတစ္ခုေရးျဖစ္တယ္။ အမွန္က ဘယ္မွာေတြ့ဖူးမွန္းမသိတာတစ္ခုကို မွီညမ္းျပီး ဟိုးအရင္တစ္ခါက ေရးထားတာပါ။ နည္းနည္းေလးပဲျပင္လိုက္ရတယ္။

@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

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