ေရႊပြဲလာတုိ႕၏ အားေပးမႈ

၂၀၀၉ ခုႏွစ္ ၾသဂုတ္လ ၁ ရက္ေန႕မွစ၍ လက္မွတ္ေစာင္ေရေပါင္း ေစာင္ တိတိ ေရာင္းခ်ခဲ့ရၿပီး ျဖစ္ပါသည္။
Showing posts with label နည္းလမ္း. Show all posts
Showing posts with label နည္းလမ္း. Show all posts

Tuesday, October 26, 2010

SQL Statement Level တြင္ Optimize လုပ္၍ Query Execution ကုိ ျမန္ဆန္ေစျခင္း

ေန႕က စာေရးသူ အိမ္ကုိ ျပန္ေနတုန္း အစ္မေတာ္က ခ်က္ခ်င္းပဲ G-talk ေပၚကုိ ၾကြပါလုိ႕ Message ပုိ႕လာပါတယ္။ ဒါနဲ႕ပဲ ဖုန္းကေန G-talk ကုိ ဖြင့္လုိက္ေတာ့ Query တစ္ခုကုိ run ထားတာ ၃ နာရီ နီးပါးရွိၿပီ၊ အေျဖမထြက္ေသးလုိ႕ ဘယ့္ႏွယ္လုပ္ရပါ့လုိ႕ ေမးပါေတာ့တယ္။ ဒီ စာတမ္းငယ္မွာ အလားတူ ျပႆနာတစ္ရပ္ (အေရးႀကီး အခ်က္အလက္မ်ား ပါ၀င္ေနသျဖင့္ မူလျပႆနာကုိ မေဖာ္ျပႏုိင္ပါ) ကုိ SQL Statement Level မွာ Optimize လုပ္ပံုကုိ ေရးသားေဖာ္ျပမွာ ျဖစ္ပါတယ္။

ပရိေဘာဂနဲ႕ မီးဖုိေခ်ာင္သံုး ပစၥည္း ေရာင္းတဲ့ကုမၸဏီတစ္ခုမွာ ေဖာက္သည္ေတြရဲ႕ အမည္၊ ေမြးေန႕၊ လိပ္စာ၊ ဖုန္းနံပါတ္၊ အခ်က္အလက္ေတြကုိ Table တစ္ခုနဲ႕ သိမ္းထားပါတယ္ (Customer Table ဆုိပါစုိ႕)။ ေဖာက္သည္ေတြ ပစၥည္း မွာယူတုိင္းမွာ အမွာလက္ခံတဲ့ Table တစ္ခုလဲ ရွိပါတယ္ (Order Table ဆုိပါစုိ႕)။ Order Table ဟာ ကုမၸဏီ သက္တမ္းၾကာတာနဲ႕အမွ် အရမ္းႀကီး လာတတ္လုိ႕ Production run ေနတဲ့ server မွာ ၃ - ၄ ႏွစ္စာပဲ ထားၿပီး က်န္တာကုိ သပ္သပ္ သိမ္းထားေလ့ ရွိပါတယ္။

ျဖစ္ပံုက ပရိေဘာဂ မ၀ယ္ဖူးေသးတဲ့ (မီးဖုိေခ်ာင္သံုး ပစၥည္းပဲ ၀ယ္ဖူးတဲ့) ေဖာက္သည္ေတြကုိ အထူး အေရာင္းျမွင့္တင္ေရး အစီအစဥ္နဲ႕ ပရိေဘာဂေတြ ေစ်းခ်ေရာင္းမဲ့ အေၾကာင္း ေၾကာ္ျငာစာ ပုိ႕ခ်င္တာပါပဲ။ အဲဒါနဲ႕ ေအာက္ပါ Query ကုိ ေရးပါတယ္။

SELECT cust_id, cust_name, cust_add

FROM customer_table

WHERE cust_id NOT IN (SELECT cust_id FROM order_table WHERE ord_type = ‘furniture’);

အဲဒီလုိ ေရးလုိက္တဲ့ Query ဟာ ၃ နာရီနီးပါး ၾကာတဲ့အထိ မၿပီးႏုိင္လုိ႕ စာေရးသူကို အပူကပ္ျခင္း ျဖစ္၏။ ဘာျဖစ္သနည္း အေျဖရွာေသာ္ ...

ကုမၸဏီသည္ ပရိေဘာဂ အမွာစာ အမ်ားအျပား လက္ခံရရွိခဲ့ရာ Sub-query မွ Row အေျမာက္အမ်ားကုိ ထုတ္ေပးေလသည္။ Row ၃ ေသာင္းေက်ာ္တဲ့။ Customer Table တြင္လဲ Row အမ်ားအျပား ရွိေပလိမ့္မည္။ ယခု ေဆြးေႏြးခ်က္တြင္ Customer Table ၏ Size မွာ အေရးမႀကီးပါ။ Query Optimizer သည္ Sub-query မွ constant results ကုိ ထုတ္ေပးေၾကာင္း သိသျဖင့္ Sub-query ကုိ တစ္ႀကိမ္သာ Run မည္ပဲထား၊ Customer Table မွ Row တစ္ေၾကာင္းစီ (cust_id တစ္ခုစီ) အား Sub-query မွ ေပးေသာ Row ၃ ေသာင္းေက်ာ္တြင္ ပါ၊ မပါကုိ စိစစ္ရန္မွာ လြယ္ကူေသာ အလုပ္ မဟုတ္ေခ်။ အဘယ္ေၾကာင့္ဆုိေသာ္ တၿပိဳင္နက္ အသံုးျပဳသူ အေျမာက္အမ်ားရွိတတ္ေသာ Database Server တြင္ အသံုးျပဳသူတစ္ေယာက္ (Query တစ္ခု) အတြက္ ခြဲေ၀ေပးေသာ ပင္မ မွတ္ဥာဏ္ (Primary Memory or RAM) ပမာဏသည္ အကန္႕အသတ္ ရွိသည့္အျပင္ Order Table တြင္ cust_id ျဖင့္ index တစ္ခု မရွိႏုိင္ျခင္းေၾကာင့္ ျဖစ္သည္။

မွတ္ခ်က္ ။ ။ စာျပန္ဖတ္ၾကည့္ရာ NOT IN ျဖင့္ေရးလွ်င္ Sub-query ကုိ အႀကိမ္ႀကိမ္ run လိမ့္မည္ျဖစ္ၿပီး cust_id ျဖင့္ index ရွိလဲ မသံုးဟု ဆုိသည္။ NOT EXISTS ျဖင့္ ေျပာင္းေရးလွ်င္ေတာ့ အဆုိပါ Index ကုိ သံုးေကာင္း သံုးႏုိင္သည္။ အကယ္၍ Order Table အတြက္ cust_id ျဖင့္ index တစ္ခု၊ ord_type အတြက္ Index တစ္ခုရွိပါက NOT EXISTS ကုိ သံုးျခင္းျဖင့္ အေျဖ ျမန္ျမန္ ရႏုိင္သည္ ဆုိသည္။ သုိ႕ရာတြင္ Transaction Table ျဖစ္ေသာ Order Table ၏ Primary Key မွာ Composite ေသာ္လည္းေကာင္း၊ Order Number ေသာ္လည္းေကာင္း ျဖစ္မည္ ျဖစ္ၿပီး မည္သည့္ စိတ္မွန္ေသာ Database Administrator မွ် ၂ ႏွစ္ေနလုိ႕ တစ္ခါ မလုပ္ေသာ အေရာင္းျမွင့္တင္ေရးအတြက္ အဆုိပါ index မ်ားကုိ ေဆာက္ထားမည္ မဟုတ္။ Index ေဆာက္ျခင္းသည္ Insert ႏွင့္ Update Query မ်ားအတြက္ စြမ္းေဆာင္ရည္ကုိ က်ဆင္းေစသည္။

သုိ႕ျဖစ္၍ Customer Table မွ cust_id တစ္ခုစီအား Sub-query မွ ေပးေသာ Row ၃ ေသာင္းေက်ာ္အတြင္း ပါ၊ မပါကုိ စိစစ္ရန္ cust_id တစ္ခုစီအတြက္ Sub-query အေျဖ ၃ ေသာင္းေက်ာ္ကုိ တစ္ႀကိမ္စီ ဖတ္ရမည္ ျဖစ္သည္။ Sub-query အေျဖ ၃ ေသာင္းေက်ာ္သည္ ပင္မ မွတ္ဥာဏ္အတြင္း မဆန္႕ျပန္ရာ ၄င္းတုိ႕ကုိ အစိတ္စိတ္ပုိင္း၍ အရန္ မွတ္ဥာဏ္ (Auxiliary Memory or Disk) သုိ႕ ေရးကာ ျပန္ျပန္ဖတ္ရမည္။ အရန္ မွတ္ဥာဏ္သို႕ ေရး/ဖတ္ ရသည့္ အလုပ္သည္ ေႏွးေကြးေသာ အလုပ္ျဖစ္သျဖင့္ Customer Table မွ cust_id တစ္ခုအတြက္ CPU Cycle အမ်ားအျပား ၾကာျမင့္မည္။ ထုိၾကာေသာ အလုပ္ကုိ Customer Table အတြင္းမွ ေျမာက္မ်ားစြာေသာ Row မ်ားအတြက္ အခါခါ လုပ္ရရာ ၃ နာရီ နီးပါး ၾကာေသာ္လည္း မၿပီးသည္မွာ မဆန္း။

နည္းလမ္းစဥ္ သရုပ္ခြဲခ်က္ (Algorithm Analysis) အရ Customer Table တြင္ Row n ခု၊ Order Table တြင္ Row m ခု၊ ပင္မ မွတ္ဥာဏ္တြင္ cust_id ေပါင္း p ခု သိမ္းဆည္းထားႏုိင္၍ cust_id ေပါင္း p ခုကုိ ပင္မ မွတ္ဥာဏ္အတြင္းသို႕ ကူးယူရန္ အခ်ိန္ c ၾကာသည္ဆုိပါက ပင္မ မွတ္ဥာဏ္သို႕ ေရးသည့္ လုပ္ငန္းခ်ည္း သက္သက္ အတြက္ O(nmc/p) ၾကာျမင့္မည္။ Sub-query မွ Row ၃ ေသာင္း အေျဖရ၍ Customer Table တြင္ Row ၄ ေသာင္း၊ p သည္ ၄၀၀၀၊ c သည္ ၀.၀၅ စကၠန္႕ ျဖစ္ပါက ပင္မ မွတ္ဥာဏ္ေပၚသို႕ ကူးတင္သည့္ ကိစၥအတြက္ပင္ ၄၀ ၀၀၀ x ၃၀ ၀၀၀၀ x ၀.၀၅ စကၠန္႕ / ၄၀၀၀ = ၁၅၀၀၀ စကၠန္႕ = ၄ နာရီ ၁၀ မိနစ္ (ညတ္ခၽြာျဖား !!!) ၾကာျမင့္မည္။

အဲဒါနဲ႕ ေအာက္ပါ Query နဲ႕ စမ္းၾကည့္ဖုိ႕ စာေရးသူက ေျပာလုိက္ရပါတယ္။

SELECT cust_id, cust_name, cust_add

FROM customer_table

WHERE cust_id IN (SELECT cust_id FROM customer_table

MINUS

SELECT cust_id FROM order_table WHERE ord_type = ‘furniture’);

ခဏနဲ႕ အေျဖရသြားပါသတဲ့။ ဘာမ်ားကြာသြားသလဲ စဥ္းစားၾကည့္ရေအာင္ေနာ္။

ပထမဆံုးအခ်က္က Sub-query ရဲ႕ Results ေသးသြားပါတယ္၊ ဒုတိယအခ်က္ကေတာ့ IN က Customer Table ထဲက cust_id တစ္ခုခ်င္းစီအတြက္ Sub-query Results ထဲမွာ တူတာ တစ္ခုေတြ႕တာနဲ႕ တြက္ခ်က္တာကုိ ရပ္လုိက္လုိ႕ရၿပီး (Short-circuiting လုိ႕ ေခၚပါတယ္) မူလ NOT IN ကေတာ့ Sub-query Results ကုန္ေတာ့မွ ရပ္လုိ႕ရပါတယ္၊ တတိယနဲ႕ ေနာက္ဆံုး အခ်က္ကေတာ့ MINUS က စီၿပီးမွ အလုပ္လုပ္ပါတယ္။ အေသးစိတ္ ရွင္းျပမယ္ေနာ္။

အေပၚက ဥပမာအတုိင္းဆုိလွ်င္ Sub-query မွ ပထမ SELECT Statement ရဲ႕ အေျဖဟာ Row ၄ ေသာင္းရွိၿပီး ဒုတိယ SELECT Statement ရဲ႕ အေျဖဟာ Row ၃ ေသာင္း ရွိပါတယ္။ Referential Integrity Enforcement အရ Order Table ထဲက cust_id ေတြရဲ႕ အစုဟာ Customer Table ထဲက cust_id ေတြရဲ႕ အစုရဲ႕ အစုပုိင္း ျဖစ္တာမုိ႕ Sub-query ရဲ႕ အေျဖက Row ၁ ေသာင္းသာ ရွိေတာ့မွာေပါ့။ ဒါေၾကာင့္ ပင္မ မွတ္ဥာဏ္ထဲကုိ ေရးရသည့္ အခ်ိန္ဟာလဲ ၄၀ ၀၀၀ x ၁၀ ၀၀၀ x ၀.၀၅ စကၠန္႕ / ၄၀၀၀ = ၅၀၀၀ စကၠန္႕ = ၁ နာရီ ၂၄ မိနစ္ေအာက္သာ ရွိေတာ့မွာေပါ့။ အစ္မေတာ္ရဲ႕ ျပႆနာကေတာ့ အေရအတြက္ ကြာတာမုိ႕ မိနစ္ပုိင္းနဲ႕ အေျဖရပါသတဲ့၊ ေကာင္းေလစြ။

Customer Table ထဲက cust_id တစ္ခုခ်င္းစီအတြက္ ပင္မ မွတ္ဥာဏ္ထဲကုိ Sub-query Results ေရးထည့္ၿပီး တူတာရွိ၊ မရွိ တုိက္ၾကည့္ရပါတယ္။ IN ရဲ႕ သေဘာ၊ သဘာ၀က တူတာ တစ္ခု ေတြ႕တာနဲ႕ စစ္တာကုိ ရပ္လုိက္လုိ႕ရပါတယ္။ ပင္မ မွတ္ဥာဏ္ထဲ Sub-query Results အားလံုးကုိ တခ်ိန္ထဲ ထည့္ထားလုိ႕ မရတဲ့အတြက္ p ခုစီ အခါခါထည့္ၿပီး စစ္ေနရာမွာ (p က ၄၀၀၀ ဆုိရင္ Sub-query Results ၁ ေသာင္းကုိ Disk ထဲကေန RAM ေပၚကုိ ၃ ခါခြဲၿပီး ကူးတင္ရပါမယ္။) ရွာေတြ႕သြားရင္ အဲဒီ cust_id အတြက္ ဆက္ထည့္ေပးဖုိ႕ မလုိေတာ့ပါဘူး (ဥပမာ ပထမ ၄၀၀၀ ထဲမွာ ရွာေတြ႕သြားရင္ က်န္တဲ့ ၆၀၀၀ ကုိ RAM ေပၚကုိ ကူးတင္ေပးစရာ မလုိေတာ့ပါဘူး၊ ၂ ခါသက္သာသြားၿပီ)။ ဒါ့အျပင္ ေနာက္ cust_id တစ္ခုအတြက္လဲ လက္ရွိ ထည့္ထားတဲ့ ၄၀၀၀ နဲ႕ ဆက္အလုပ္လုပ္ႏုိင္ပါေသးတယ္ (၃ ခါ သက္သာသြားၿပီ၊ တခါကုိ ၀.၀၅ စကၠန္႕ဆုိေတာ့ ၀.၁၅ စကၠန္႕သက္သာသြားၿပီ)။ NOT IN မွာကေတာ့ အစအဆံုး တုိက္ရတဲ့အတြက္ ဒီလုိလုပ္လုိ႕ မရပါဘူး။

A MINUS B ကုိ တြက္တဲ့အခါမွာ Oracle Database Server က A ကုိ စီ၊ B ကုိ စီၿပီးမွ Sorted File Merging နဲ႕တူတဲ့ နည္းလမ္းစဥ္ကုိ အသံုးျပဳ တြက္ခ်က္တာမုိ႕ စာေရးသူတင္ျပတဲ့ Sub-query ရဲ႕ အခ်ိန္အားျဖင့္ ခက္ခဲမႈ (Time Complexity) ဟာ O(nlog(n) + mlog(m) + m + n) ပဲ ရွိပါတယ္။ (m ႏွင့္ n သည္ Customer Table ရဲ႕ Size ႏွင့္ Order Table မွ မတူညီေသာ cust_id အေရအတြက္တုိ႕ အသီးသီး ျဖစ္သည္။) ဒါေပမဲ့ Customer Table မွာ cust_id ဟာ primary key ျဖစ္လုိ႕ သူ႕ Index ကုိ သံုးမယ္ဆုိရင္ O(mlog(m) + m + n) ပဲ က်န္ပါလိမ့္မယ္။ Cache ရွိမယ္ဆုိရင္ေတာ့ Sub-query ရဲ႕ ကုန္က်စရိတ္ဟာ မရွိသေလာက္ နည္းသြားမွာ ျဖစ္ပါတယ္။

မွတ္ခ်က္ ။ ။ NOT EXISTS ကုိ အသံုးျပဳေရးသားလွ်င္ကား Customer Table မွ cust_id တစ္ခုစီအတြက္ Sub-query တစ္မ်ိဳးစီ တြက္ထုတ္မည္ ျဖစ္သည္။ သုိ႕ရာတြင္ Order Table တြင္ cust_id ျဖင့္ index မရွိႏုိင္ရာ Short-circuiting သံုးႏုိင္ေသာ္လည္း Order Table ကုိ full table scan လုပ္ရမွာပဲ ျဖစ္သည္။ ထုိသုိ႕ဆုိလွ်င္ စာေရးသူ တင္ျပေသာ နည္းလမ္းႏွင့္ ၾကာခ်ိန္တူတူေလာက္ပဲ ျဖစ္မည္။ သုိ႕ရာတြင္ Database Server မ်ားတြင္ Query Results မ်ားကုိ Cache လုပ္ထားတတ္ရာ cust_id တစ္ခုစီအတြက္ Sub-query တစ္မ်ိဳးစီ တြက္ထုတ္ေနသာ နည္းလမ္းသည္ အၿမဲ Cache Miss ျဖစ္ေနၿပီး Sub-query တစ္မ်ိဳးတည္းသာရွိေသာ စာေရးသူ တင္ျပသည့္ နည္းလမ္းမွာကား Cache ကို အက်ိဳးရွိစြာ အသံုးခ်ႏုိင္သျဖင့္ စာေရးသူ တင္ျပေသာ နည္းလမ္းက ပုိမုိေကာင္းမြန္သည္ဟု ဆုိႏုိင္သည္။

Database နည္းပညာဟာ အလုပ္လုပ္ပံု အေသးစိတ္ကို သံုးစြဲသူ ေခါင္းမရႈပ္ရေအာင္ ၀ွက္ထားေပးတယ္ဆုိေပမဲ့ တခါတေလမွာ သူ႕ရဲ႕ Statistics နဲ႕ Query Optimizer Algorithm ဟာ သံုးစြဲသူရဲ႕ Knowledge ကုိ မယွဥ္ႏုိင္တာကုိ ေတြ႕ရပါတယ္။ ဒါေၾကာင့္ သင့္ရဲ႕ Query ကုိ Execute ရာမွာ လိုတာထက္ ပုိၾကာေနၿပီဆုိရင္ သင့္အေနနဲ႕ ၀င္ပါရေတာ့မွာ ျဖစ္ပါတယ္။ System Level Optimization, DBA Level Optimization စတာေတြကို အသံုးျပဳသူတုိင္း ေဆာင္ရြက္ခြင့္ မရၾကပါဘူး။ အဲဒီအခါမ်ိဳးမွာ Query Optimizer ရဲ႕ Query Plan Formulation Logic နဲ႕ အေျခခံ နည္းလမ္းစဥ္ သရုပ္ခြဲပညာတုိ႕နဲ႕ ယဥ္ပါးတဲ့ သံုးစြဲသူမ်ားအေနနဲ႕ အထက္ေဖာ္ျပပါကဲ့သုိ႕ SQL Statement Level Optimization မ်ားကို ေဆာင္ရြက္ႏုိင္ေၾကာင္း တင္ျပလုိက္ရပါသည္။

http://download.oracle.com/docs/html/A86647_01/vmqtune.htm#1004143 ကုိမွီျငမ္းပါသည္။

Sunday, October 11, 2009

ဥာဏ္စမ္းပေဟဠိမ်ားကုိ ကြန္ပ်ဴတာ အသံုးျပဳ ေျဖရွင္းျခင္း

သခ်ၤာဥာဏ္အေပၚတြင္ အေျခခံေသာ ဥာဏ္စမ္းပေဟဠိ၊ စကားအသြားအလာႏွင့္ ဘာသာစကားလွည့္ကြက္အေပၚတြင္ အေျခခံေသာ ဥာဏ္စမ္းပေဟဠိႏွင့္ အၾကားအျမင္ ဗဟုသုတ အေပၚတြင္ အေျခခံသည့္ ဥာဏ္စမ္းပေဟဠိစသည္ျဖင့္ ဥာဏ္စမ္းပေဟဠိ အမ်ိဳးမ်ိဳး ရွိရာ အခ်ိဳ႕ေသာ ပေဟဠိမ်ားသည္ ထည့္သြင္း စဥ္းစားရမည့္ ျဖစ္ႏုိင္ေသာ အေျဖ အေရအတြက္ အတုိင္းအဆမရွိ မ်ားျပားမႈအေပၚတြင္ အေျခခံေလသည္။ ေရွးက လူအားျဖင့္သာ ဥာဏ္စမ္းပေဟဠိမ်ားကို အေျဖထုတ္ခဲ့ၾကရာတြင္ ျဖစ္ႏုိင္ေသာ အေျဖ အလြန္မ်ားျပားေသာ ပေဟဠိမ်ားမွာ အေျဖကုိ ႀကိဳတင္ မသိသူ ေျဖဆုိသူတုိ႕ လက္ေျမွာက္အရႈံးေပးရသည္သာ မ်ားေသာ္လည္း ယေန႕ကြန္ပ်ဴတာေခတ္တြင္မူ ၄င္းတုိ႕ကုိ အလြယ္တကူ အေျဖထုတ္ႏုိင္ၿပီ ျဖစ္သည္။ ယခုေဆာင္းပါးတြင္ ၄င္းပေဟဠိ ၂ ပုဒ္ကုိ ကြန္ပ်ဴတာ အသံုးျပဳ ေျဖရွင္းပံုကို ေဖာ္ျပမည္ျဖစ္သည္။

ပထမ ပုစၧာမွာ ဤသုိ႕ျဖစ္သည္။ လယ္သမားတစ္ေယာက္သည္ သူ၏ၿခံတြင္ ေမြးျမဴရန္အတြက္ ႏြား၊ ၀က္ႏွင့္ ၾကက္ စုစုေပါင္း အေကာင္ ၁၀၀ ၀ယ္လုိသည္။ ပုိက္ဆံလဲ ၁၀၀ က်ပ္သာရွိသည္။ ၃ မ်ိဳးလံုးလဲ ေမြးလုိေသးသည္။ ႏြားတစ္ေကာင္ ၁၀ က်ပ္၊ ၀က္တစ္ေကာင္ ၃ က်ပ္ႏွင့္ ၾကက္တစ္ေကာင္ ၅ မူး (၀.၅၀ က်ပ္) ျဖစ္ေသာ္ အေကာင္ ၁၀၀ ရေအာင္ ေငြ ၁၀၀ ႏွင့္ ဘယ္လုိ ၀ယ္မည္နည္း။ တနည္းအားျဖင့္ မသိကိန္း ၃ လံုးပါ၊ တၿပိဳင္နက္ ညီမွ်ျခင္း ၂ ေၾကာင္း ပုစၧာျဖစ္သည္။ သီ၀ရီအရ အေျဖ မရွိ၊ တစ္ခုတည္းသာ၊ အမ်ားအျပား ရွိႏုိင္ေသာ ပုစၧာအမ်ိဳးအစားလဲ ျဖစ္သည္။ တၿပိဳင္နက္ ညီမွ်ျခင္း အမ်ားအျပားပါ တၿပိဳင္နက္ ညီမွ်ျခင္း စနစ္ (System of Linear Equations) တစ္ခုကုိ မက္ထရစ္ ညီမွ်ျခင္း တစ္ေၾကာင္းျဖင့္ ေဖၚျပႏုိင္ရာ လွန္မက္ထရစ္ေယာင္ (Pseudo Inverse) ကုိအသံုးျပဳၿပီး ျဖစ္ႏုိင္သည့္ အေျဖမ်ားကုိ အလြယ္တကူ တြက္ထုတ္ႏုိင္ပါသည္။

၄င္း သခ်ၤာနည္း၏ အားနည္းခ်က္မွာ ၄င္းနည္းစနစ္သည္ ကိန္းစစ္ ေျမွာက္ေဖာ္ကိန္း (Real Number Coefficients) မ်ားအတြက္ နည္းစနစ္ ျဖစ္ေနသျဖင့္ ကိန္းစစ္ အေျဖတြဲ အမ်ားအျပား ထြက္လာႏုိင္ျခင္းပင္ ျဖစ္သည္။ (Matlab မရွိသျဖင့္ စာေရးသူ မစမ္းၾကည့္ပါ။) ေမြးရန္ ၀ယ္ေသာ ႏြား၊ ၀က္၊ ၾကက္တုိ႕ကုိ တ၀က္၊ တစိတ္ စသျဖင့္ ၀ယ္မရႏိုင္ပါ (တ၀က္၀က္ရင္ ေသကုန္မွာေပါ့)။ တနည္းအားျဖင့္ အေျဖသည္ အေပါင္း ကိန္းျပည့္ ၃ ခု ျဖစ္ရမည္။ ေပါင္းလွ်င္ ၁၀၀ ရေသာ အေပါင္းကိန္းျပည့္ မ်ားစြာရွိရာ ကြန္ပ်ဴတာ အကူအညီမယူေသာ သခ်ၤာသီးသန္႕သမားတုိ႕အတြက္ ခက္ခဲေသာ ပုစၧာျဖစ္သည္။ ကြန္ပ်ဴတာ ပညာရွင္ တစ္ဦးသည္ ဤပုစၧာကို မ်က္ကန္းနည္း (Brute Force Method) အသံုးျပဳျခင္းျဖင့္ အလြယ္တကူ ေျဖရွင္းႏုိင္သည္။ ႏြား အေရအတြက္ အမ်ိဳးမ်ိဳး၊ ၀က္အေရအတြက္ အမ်ိဳးမ်ိဳးႏွင့္ ၾကက္အေရအတြက္ အမ်ိဳးမ်ိဳးတုိ႕အတြက္ အစီအစဥ္ငယ္တစ္ခုကုိ လွ်င္ျမန္စြာေရးသားၿပီး ၄င္းတို႕ ေပါင္းလဒ္၊ ၄င္းတုိ႕၏ က်သင့္ေငြ တုိ႕ကို တြက္ခ်က္ကာ ႏွစ္ခုလံုး ၁၀၀ ျဖစ္ေသာ အေျဖကုိ ထုတ္ေပးရံုသာျဖစ္သည္။ (အေျဖမွာ ႏြား ၅၊ ၀က္ ၁၊ ၾကက္ ၉၄ ျဖစ္သည္။)

မွတ္ခ်က္ ။ ။ ယခု ပုစၧာသာလွ်င္ လြယ္ကူျခင္း ျဖစ္သည္။ ကိန္းျပည့္ မသိကိန္း အမ်ားအျပားႏွင့္ ညီမွ်ျခင္း အေရအတြက္ အနည္းငယ္ (ညီမွ်ျခင္း အေရအတြက္က မသိကိန္းအေရအတြက္ထက္ ပိုနည္းေနေသာ) ပုစၧာပံုစံကြဲတစ္ခုကုိ စစ္ဆင္ေရး သုေတသန (Operation Research) ဘာသာရပ္တြင္ Integer Linear Programming (ILP) အမည္ႏွင့္ေတြ႕ရၿပီး ခက္ခဲေသာ ပုစၧာျဖစ္သည္။

ဒုတိယ ပုစၧာတြင္မူကား မ်က္ကန္းနည္း အသံုးျပဳရန္ အဆင္မေျပေတာ့ေပ။ ပုစၧာမွာ ဤသို႕ျဖစ္သည္။ ၁ မွ ၉ အထိ ဂဏန္း ၉ လံုး (တစ္လံုးကုိ တစ္ႀကိမ္စီသာပါ၀င္ေသာ) သန္းရာဂဏန္းရွိ ကိန္းတစ္လံုးသည္ ၉ ႏွင့္ စားလုိ႕ ျပတ္သည္။ အဆုိပါ ကိန္းမွ ခုဂဏန္းကုိ ဖယ္ထုတ္လုိက္ေသာ ဂဏန္း ၈ လံုးပါ ကိန္း (၁၀ ႏွင့္စားလွ်င္ ရေသာ ရလဒ္) သည္ ၈ ႏွင့္ စားလုိ႕ ျပတ္သည္။ တဖန္ ထုိကိန္းမွ ခုဂဏန္းကုိ ဖယ္ထုတ္ပါက က်န္ေသာ ကိန္းသည္ ၇ ႏွင့္ စားလုိ႕ ျပတ္သည္။ ေနာက္ဆံုး ၁ လံုးသာ က်န္သည္အထိ ဤနည္းအတုိင္း တစ္လံုးဖယ္တုိင္း က်န္ေသာ ဂဏန္းအေရအတြက္ႏွင့္ စားလုိ႕ ျပတ္ရသည္။ တနည္းအားျဖင့္ ဘယ္ဘက္ဆံုး x လံုးကုိ x ႏွင့္စား၍ ျပတ္သည္။ ထုိကိန္းကို ရွာပါ။ မ်က္ကန္းနည္းႏွင့္ တြက္လွ်င္ သန္းတစ္ရာ (၁၀၀ ၀၀၀ ၀၀၀) မွ ကုိးရာ ကုိးဆယ့္ ကုိးသန္း ကုိးသိန္း ကုိးေသာင္း ကုိးေထာင္ ကုိးရာ ကုိးဆယ့္ ကုိး (၉၉၉ ၉၉၉ ၉၉၉) အထိ ကိန္းေပါင္း သန္း ၉၀၀ နီးပါးကုိ ၁ မွ ၉ အထိ ကိန္းမ်ားျဖင့္ စားလုိ႕ ျပတ္မျပတ္ တြက္ထုတ္ (ဂဏန္းမ်ား ထပ္ေနမေန စစ္) ရမည္ ျဖစ္သျဖင့္ သိပ္အဆင္မေျပေသာ နည္းျဖစ္သည္။ (၁ မွ ၉ အထိ စားျပတ္မျပတ္ တစ္ခါတြက္လွ်င္ ၁ စကၠန္႕၏ တစ္သန္းပံု တစ္ပံုသာ ၾကာသည္ထား … အနည္းဆံုး စကၠန္႕ ၉၀၀ = ၁၅ မိနစ္မွ် ၾကာသြားႏုိင္သည္။ မစမ္းၾကည့္ပါ။)

အမွန္မွာ ၄င္းသည္ ၁ မွ ၉ အထိ ဂဏန္း ၉ လံုးကို ၉ ေနရာတြင္ စီခုိင္းေသာ (စီၿပီးလွ်င္ စစ္ခုိင္းေသာ) အစီ ပုစၧာ (Permutation Problem) သာျဖစ္သည္။ အစီ ပံုေသနည္းအရ ျဖစ္ႏုိင္သည့္ ကိန္းေပါင္း ၉ x ၈ x … x ၁ = ၃၆၂၈၈၀ သာ ရွိသည္။ အကယ္၍ ကုန္က်စရိတ္နည္းေသာ အစီ နည္းလမ္းစဥ္သာ ရွိခဲ့လွ်င္ ပြဲျပတ္ၿပီ ျဖစ္သည္။ (ကံဆုိးသည္မွာ အထူးတည္ေဆာက္ထားေသာ ကြန္ပ်ဴတာမ်ားမွ အပ မရွိ။) သုိ႕ရာတြင္ ၁၅ မိနစ္ထက္ေတာ့ ျမန္မည္မွာ ေသခ်ာပါသည္။ (မစမ္းၾကည့္ပါ။) ၂ နည္းစလံုးသည္ လူအားျဖင့္ တြက္ထုတ္ရန္ မျဖစ္ႏုိင္သည္မွာကား ေသခ်ာေပသည္။

အဆုိပါ ပုစၧာကုိ ျပင္ပ သခ်ၤာဗဟုသုတမ်ားျဖင့္ အားျဖည့္ကာ ပုိမုိေကာင္းမြန္ေသာ အစီအစဥ္ တစ္ရပ္ကုိ ဆြဲသားႏုိင္ပါသည္။ အသံုးျပဳေသာ သခ်ၤာနည္းစနစ္မွာ ကိန္းတစ္လံုးကုိ ၁ မွ ၉ အထိ ဂဏန္းမ်ားႏွင့္ စားလွ်င္ ရမည့္ စားၾကြင္းကုိ ရွာေသာ နည္းလမ္းမ်ားျဖစ္သည္။ အစီအစဥ္ မဆြဲမီ ျဖစ္ႏုိင္ေသာ ကိန္းမ်ားကို ေအာက္ပါအတုိင္း ဆင္ျခင္သည္။ (x ေနရာ = အေျဖကိန္းကုိ ဘယ္ဘက္မွ ေရတြက္လွ်င္ x ေနရာ)

  • ကိန္းတစ္လံုးကုိ ၉ ႏွင့္ စားျပတ္၊ မျပတ္ သိရန္အတြက္ အဆုိပါကိန္းတြင္ ပါ၀င္ေသာ ဂဏန္းမ်ား၏ မူလတန္ဖုိးမ်ားေပါင္းလဒ္ကုိ ၉ ျဖင့္ စားၾကည့္ႏုိင္သည္ (သုိ႕မဟုတ္ ေပါင္းေနရင္း ၉ ျပည့္လွ်င္ ဖယ္ဖယ္ထားခဲ့ႏုိင္သည္။) ပါ၀င္ရမည့္ ဂဏန္းမ်ားမွာ ၁ မွ ၉ အထိ ဂဏန္း ၉ လံုးျဖစ္သည္။ ၁ + ၈ = ၂ + ၇ = ၃ + ၆ = ၄+ ၅ = ၉ ျဖစ္ရာ … ၁ မွ ၉ အထိ ဂဏန္းအားလံုး (တစ္လံုးကုိ တစ္ႀကိမ္စီသာ ပါ၀င္ေသာ) ကိန္းသည္ ၉ ႏွင့္ အလိုအေလ်ာက္ စားလုိ႕ ျပတ္သည္။ ထည့္သြင္းစဥ္းစားရန္မလုိ။ ၁ မွ ၉ အထိ ဂဏန္း ၉ လံုးကုိ ေရွ႕ ၈ ေနရာတြင္သာ ေနရာခ် စမ္းသပ္ၾကည့္ၿပီး ေျပလည္ပါက က်န္ခဲ့ေသာ တစ္လံုးျဖင့္ ၉ ေနရာကို အလြယ္တကူ ျဖည့္ႏုိင္သည္။
  • ကိန္းတစ္လံုးကုိ ၂ (၄ ႏွင့္ ၈) တုိ႕ႏွင့္ စားျပတ္၊ မျပတ္ သိႏုိင္ရန္အတြက္ ညာဘက္ဆံုး ၁ လံုး (၂ လံုးႏွင့္ ၃ လံုး) သည္ ၂ (၄ ႏွင့္ ၈) ျဖင့္ စား၍ ျပတ္ရသည္။ ထုိ႕ေၾကာင့္ ၂ ေနရာတြင္ စံုကိန္းတစ္လံုး (၃၄ ေနရာတြင္ ၄ ႏွင့္စားျပတ္ေသာ ဆယ္ဂဏန္း တစ္လံုး၊ ၆၇၈ ေနရာတြင္ ၈ ႏွင့္ စားျပတ္ေသာ ရာဂဏန္း တစ္လံုး) ကုိ ျဖည့္သြင္းရမည္။
  • ကိန္းတစ္လံုးကုိ ၃ ႏွင့္ စားျပတ္၊ မျပတ္ သိႏုိင္ရန္အတြက္ အဆုိပါကိန္းတြင္ ပါ၀င္ေသာ ဂဏန္းမ်ား၏ မူလတန္ဖုိးမ်ား ေပါင္းလဒ္ကုိ ၃ ျဖင့္ စားၾကည့္ႏိုင္သည္။ ၄င္းကုိ အေျခခံ၍ ၂ ေနရာရွိ ဂဏန္းႏွင့္ ၃ ေနရာရွိဂဏန္းတုိ႕ကို အေျခခံ၍ ၁ ေနရာရွိ ဂဏန္းကို တြက္ခ်က္ႏုိင္သည္။၂ ေနရာတြင္ စံုကိန္းတစ္လံုး ေသခ်ာေပါက္ရွိၿပီး ၃၄ ေနရာတြင္ ၄ ႏွင့္ စားျပတ္ေသာ ဆယ္ဂဏန္း တစ္လံုး ေသခ်ာေပါက္ ရွိမည္ျဖစ္သျဖင့္ ၁၂၃၄ ေနရာရွိ ဂဏန္းမ်ား ျဖစ္ႏုိင္ေျခသည္ ၉ x ၈ x ၇ x ၆ =  ၃၀၂၄ မွ ၃ × သုညမဟုတ္ေသာ ၁၀ ေအာက္ စံုကိန္း (၂၊ ၄၊ ၆၊ ၈) အေရအတြက္ x ၄ ႏွင့္စားျပတ္ေသာ ဆယ္ဂဏန္း အေရအတြက္ (၃ × ၄ x ၂၂ = ၂၆၄) သုိ႕က်ဆင္းသြားမည္။ (စာေရးသူ စမ္းသပ္ရာတြင္ ဤနည္းကို မသံုးပဲ ကိန္း ၉၉၀ လံုးကို ၃ ႏွင့္စားျပတ္၊ မျပတ္ စစ္ထားပါသည္။)
  • ကိန္းတစ္လံုးကုိ ၅ ႏွင့္ စားျပတ္ရန္ အဆုိပါကိန္းသည္ ၀ (သုည) သုိ႕မဟုတ္ ၅ ႏွင့္ ဆံုးရမည္ျဖစ္သည္။ ၀ (သုည) ကုိ ပုစၧာအရ သံုးခြင့္မရွိသျဖင့္ ၅ ေနရာတြင္ ရွိမည့္ ဂဏန္းမွာ ၅ သာလွ်င္ ျဖစ္သည္။

အထက္ေဖာ္ျပပါ ထုိးထြင္းသိမ်ားျဖင့္ အစီအစဥ္တစ္ရပ္ကုိ အျမန္ ဆြဲသား တြက္ခ်က္ခဲ့ရာ ဂဏန္းတြဲ အေရအတြက္ ၂၄၁၉၂၀ ကုိသာ စိစစ္ခဲ့ၿပီး (၃၆၂၈၈၀ ႏွင့္ႏိႈင္းစာလွ်င္ ၃ ပံု ၂ ပံုခန္႕) ၆ ေနရာ၊ ၇ ေနရာတုိ႕တြင္ ၀ (သုည) ပါ၀င္ႏုိင္ၿပီး ဂဏန္း တစ္မ်ိဳးစီကုိ တစ္ႀကိမ္ထက္ ပိုမုိပါ၀င္ႏုိင္ေသာ္လည္း ဘယ္ဘက္ဆံုး x လံုးကုိ x ႏွင့္စား၍ ျပတ္ေသာ ကိန္း ၄၆၃ လံုးကုိ ရရွိခဲ့သည္။ ၄င္းတုိ႕ကုိ ပါ၀င္ေသာ ဂဏန္းမ်ား ၀ (သုည) ျဖစ္၊ မျဖစ္ႏွင့္ ထပ္၊ မထပ္ စစ္ေဆး စစ္ထုတ္ျခင္းျဖင့္ အေျဖကို ရေလေတာ့သည္။ (အေျဖမွာ ၃၈၁ ၆၅၄ ၇၂၉ ျဖစ္သည္။)

ေရႊပြဲလာအေပါင္း ျဖစ္ႏုိင္ေျခ ေထာင္ေသာင္းခ်ီသည့္ ပုစၧာမ်ားကို အလြယ္တကူ အေျဖထုတ္ႏုိင္ၾကပါေစ။

စာေရးသူ စမ္းသပ္ ေရးသားထားေသာ အစီအစဥ္မ်ားကုိ ရယူရန္

Thursday, August 27, 2009

အေျဖမွန္ အျမန္ေရြး၊ ပညာသင္ဆု ဘယ္မေ၀း ၁

လာၿပီ။ ေမးခြန္း ...

၅၆ ၇၈၃၉ × ၈၃ ၆၄၈၃ =

(က) ၄၃၈၈ ၅၄၂၀ ၉၈၄၇

(ခ) ၅၀၇၈ ၉၈၇၃ ၄၉၈၃

(ဂ) ၄၇၄၉ ၈၇၆၇ ၀၂၃၇

(ဃ) ၃၇၈၂ ၃၉၉၉ ၈၇၂၃

ႏုိင္ငံရပ္ျခား တကၠသိုလ္မ်ားတြင္ တက္ေရာက္ ပညာသင္ၾကားရန္ႏွင့္ ပညာသင္ဆု ေလွ်ာက္ထားရန္အတြက္ လုိအပ္တတ္ေသာ (SAT ကဲ့သုိ႕ေသာ စာေမးပြဲမ်ား၏) သခ်ၤာစာေမးပြဲ ေမးခြန္းလႊာမ်ားတြင္ ဤကဲ့သုိ႕ေမးခြန္းမ်ိဳး ပါေလ့ရွိသည္။ ဂဏန္းတြက္စက္ အသံုးျပဳခြင့္ေပးေသာ္လည္း အခ်ိန္ အကန္႕အသတ္ရွိတတ္ေသာ ထုိစာေမးပြဲမ်ားတြင္ ပုစၦာတစ္ပုဒ္အတြက္ ပ်မ္းမွ် မိနစ္၀က္ခန္႕သာ အခ်ိန္ရရာ ယခုကဲ့သုိ႕ေသာ ပုစၦာမ်ိဳးကို ဂဏန္းတြက္စက္ျဖင့္ အေျဖရွာပါက အခ်ိန္မမီပဲ ျဖစ္တတ္ေလသည္။

အမွန္မွာ ဤကဲ့သုိ႕ေသာ ပုစၦာမ်ိဳးကုိ ေျဖဆုိရန္အတြက္ အေျဖရေအာင္ တြက္ထုတ္ရန္ အေရးမႀကီးပါ။ ေပးထားေသာ အေျဖ ၄ ခုအနက္ အေျဖမွန္ ၁ ခုကုိသာ ေရြးထုတ္ႏုိင္ရန္ အေရးႀကီးသျဖင့္ ျဖတ္လမ္းနည္းမ်ားျဖင့္ ဤပုစၦာကုိ ေျဖရွင္းႏုိင္ရန္ ႀကိဳးစားႏုိင္ပါသည္။

ျဖတ္လမ္းနည္း (၁) အနီးဆံုးယူၿပီး တြက္ရန္

၅၆ ၇၈၃၉ ကုိ ၅၀ ၀၀၀၀၊ ၈၃ ၆၄၈၃ ကုိ ၈၀ ၀၀၀၀ ဟု အနီးဆံုး ယူလုိက္မည္။ ၄င္းတုိ႕ ၂ လံုးမွာ ေနာက္တြင္ သုညမ်ားပါသျဖင့္ ေျမွာက္ရလြယ္ပါသည္။ ၅ ကုိ ၈ ႏွင့္ ေျမွာက္လုိက္ရာ ၄၀ ဟု ထြက္လာသည္။ ၅၀ ၀၀၀၀ တြင္ သုည ၅ လံုး၊ ၈၀ ၀၀၀၀ တြင္ သုည ၅ လံုး၊ ေပါင္း ၁၀ လံုးပါသျဖင့္ အေျဖမွန္သည္ ၄၀၀၀ ၀၀၀၀ ၀၀၀၀ (၄၀ ေနာက္တြင္ သုည ၁၀ လံုးျဖည့္ထားေသာ ဂဏန္း) ထက္မနည္းေၾကာင္း ခန္႕မွန္းႏုိင္သည္။ သုိ႕ျဖစ္၍ (က)၊ (ခ) ႏွင့္ (ဂ) တစ္ခုခုသည္ အေျဖမွန္ျဖစ္သည္။ မွားလွ်င္ အမွတ္ႏႈတ္တတ္ေသာ စာေမးပြဲျဖစ္ပါက (SAT တြင္ Minus System ပါမပါ မေသခ်ာပါ) နံၾကားေထာက္ျဖည့္လွ်င္ ရွိသမွ် အမွတ္ကုန္သြားႏုိင္ရာ သိပ္မနိပ္ေသာ နည္းလမ္းျဖစ္သည္။

ဤေနရာတြင္ တစ္ခု သတိျပဳရန္မွာ အနီးဆံုးယူတာ ပုိမုိတိက်လွ်င္ အေျဖမွားမ်ားကုိ ဖယ္ထုတ္ႏိုင္စြမ္း ပုိေကာင္းလာမည္ျဖစ္သည္။ အထက္ပါ ဥပမာတြင္ ၅၆ ၇၈၃၉ ကုိ ၅၆ ၀၀၀၀၊ ၈၃ ၆၄၈၃ ကုိ ၈၃ ၀၀၀၀ ဟု အနီးဆံုး ယူလုိက္မည္ဆုိပါက အေျဖမွန္သည္ ၄၆၄၈ ၀၀၀၀ ၀၀၀၀ ထက္မနည္းဟု ခန္႕မွန္းႏုိင္မည္ျဖစ္ၿပီး ျဖစ္ႏုိင္သည့္ အေျဖမွန္ ၂ ခု (ခ ႏွင့္ ဂ) သာ က်န္ေနမည္ျဖစ္သည္။ တြက္ခ်က္မႈအတြက္ ၾကာျမင့္ခ်ိန္ အနည္းငယ္ တုိးလာေသာ္လည္း ရမ္းေျဖလုိက္ပါက ျဖစ္တန္စြမ္းသီ၀ရီ အရၾကည့္လွ်င္ မေျဖတတ္သျဖင့္ ဘဲဥကုိက္ရန္ ေသခ်ာေနေသာ ပုစၦာ ၂ ပုဒ္တုိင္းတြင္ ၁ ပုဒ္ မွန္မွာ ေသခ်ာသျဖင့္ (မွားလွ်င္ ႏႈတ္ေသာအမွတ္သည္ မွန္လွ်င္ေပးေသာ အမွတ္ထက္ နည္းေနပါက) သိပ္မဆုိးလွေသာ နည္းလမ္းျဖစ္သည္။

ျဖတ္လမ္းနည္း (၂) ေနရာလုိက္တန္ဖုိး၏ ဂုဏ္သတၱိကုိ အသံုးခ်ရန္

ဒုတိယနည္းလမ္းမွာ ေနရာလုိက္တန္ဖုိး၏ ဂုဏ္သတၱိကုိ အသံုးခ်ရန္ျဖစ္သည္။ မည္မွ်ႀကီးေသာ ကိန္းမ်ားကို ေျမွာက္ေျမွာက္ ရလဒ္၏ ခုေနရာရွိ ဂဏန္းမွာ မူလကိန္း ၂ လံုး၏ ခုေနရာရွိ ဂဏန္း ၂ လံုး ေျမွာက္လဒ္သာလွ်င္ ျဖစ္သည္။ (ဆယ္ဂဏန္းမွစ၍ ဂဏန္းမ်ား ခ်ေပါင္းရန္ လုိပါမည္။) ယခု ဥပမာတြင္ ၅၆ ၇၈၃၉ ၏ ခုေနရာရွိ ဂဏန္းမွာ ၉၊ ၈၃ ၆၄၈၃ ၏ ခုေနရာရွိ ဂဏန္းမွာ ၃ ျဖစ္ရာ ၄င္းတုိ႕ ေျမွာက္လဒ္၏ ခုေနရာရွိ ဂဏန္းမွာ (၉ × ၃ = ၂၇ ျဖစ္သျဖင့္) ၇ သာလွ်င္ ျဖစ္ရမည္၊ တနည္းအားျဖင့္ အေျဖမွန္သည္ ၇ ႏွင့္ ဆံုးရမည္။ ၇ ႏွင့္ ဆံုးေသာ အေျဖမွာ (က) ႏွင့္ (ဂ) သာရွိရာ အထက္ပါ နည္းလမ္းႏွင့္ ပူးတြဲစဥ္းစားပါက အေျဖမွန္သည္ (ဂ) ဟု ထင္ထင္ရွားရွား ထြက္လာေတာ့သည္။

ျဖတ္လမ္းနည္း (၃) အစားသီ၀ရီႏွင့္ ၉ ၾကြင္းရွာနည္းကုိ ေပါင္းစပ္ အသံုးျပဳျခင္း

အင္မတန္မွ ရက္စက္တတ္တဲ့ ေမးခြန္းထုတ္သူဟာ အေျဖအားလံုးကုိ ၄၆၄၈ နဲ႕စၿပီး ၇ နဲ႕ အဆံုးသတ္ထားပါလိမ့္မယ္။ ဘာလုိ႕လဲဆုိေတာ့ ဒီေမးခြန္းရဲ႕ အဓိက ဦးတည္ခ်က္ဟာ ဂဏန္းေျမွာက္တတ္/မတတ္ကုိ စစ္ေဆးဖုိ႕ မဟုတ္ပဲ ေျဖဆုိသူဟာ သခ်ၤာ ဂုဏ္သတၱိမ်ားကို က်င္က်င္လည္လည္ လွည့္ပတ္ အသံုးျပဳႏုိင္ျခင္း ရွိ/မရွိ စစ္ေဆးဖုိ႕ ျဖစ္ေနတာေၾကာင့္ပါပဲ။ ဒီေနရာမွာ ေနာက္တမ်ိဳး စမ္းၾကည့္သင့္တာကေတာ့ အစားသီ၀ရီနဲ႕ ၉ ၾကြင္းရွာနည္းတုိ႕ပဲ ျဖစ္ပါတယ္။

နာမည္ကုိ ဖတ္ၿပီး လန္႕မသြားပါနဲ႕ေလ။ နည္းလမ္းက လြယ္လြယ္ေလးပါ။

ပထမဆံုး ၅၆ ၇၈၃၉ နဲ႕ ၈၃ ၆၄၈၃ တုိ႕ကုိ တစ္လံုးတည္းျဖစ္ေအာင္ ေပါင္းပါ။ (ေနာက္တနည္း - ၉ ျပည့္ေအာင္ တြဲတြဲၿပီး က်န္တာေလးေတြ ေပါင္းလဲ ရတယ္။)

၅ + ၆ + ၇ + ၈ + ၃ + ၉ = ၃၈

၃ + ၈ = ၁၁

၁ + ၁ = ၂

၈ + ၃ + ၆ + ၄ + ၈ + ၃ = ၃၂

၃ + ၂ = ၅

ေနာက္ၿပီး အဲဒီ ေပါင္းလဒ္ ၂ ခုကို ေျမွာက္ပါ

၂ × ၅ = ၁၀

ရလဒ္ကုိ တစ္လံုးထည္းျဖစ္ေအာင္ ထပ္ေပါင္းပါဦး။

၁ + ၀ = ၁

အေျဖေတြကုိလဲ တစ္လံုးတည္းျဖစ္ေအာင္ ေပါင္းၾကည့္ပါ။

(က) ၄၃၈၈ ၅၄၂၀ ၉၈၄၇ ကုိ ေပါင္းေတာ့ ၈ ရတယ္။

(ခ) ၅၀၇၈ ၉၈၇၃ ၄၉၈၃ ကုိ ေပါင္းေတာ့ ၈ ရတယ္။

(ဂ) ၄၇၄၉ ၈၇၆၇ ၀၂၃၇ ကုိ ေပါင္းေတာ့ ၁ ရတယ္။

(ဃ) ၃၇၈၂ ၃၉၉၉ ၈၇၂၃ ကုိ ေပါင္းေတာ့ ၇ ရတယ္။

ေစာေစာက ေျမွာက္ၿပီး ေပါင္းထားတဲ့ (၂ × ၅ = ၁၀၊ ၁ + ၀ = ၁) ၁ နဲ႕တူတဲ့ (ဂ) ကိုေရြးလုိက္ရံုပါပဲ။

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

Sunday, August 9, 2009

Quick Sort ကုိ အသံုးျပဳၿပီး Sorting စီျခင္း

ေလာကအလွ အြန္လုိင္းမဂၢဇင္းတြင္ ေဖာ္ျပခဲ့ဖူးေသာ ေဆာင္းပါးကုိ ျပန္လည္ေဖာ္ျပျခင္း ျဖစ္ပါသည္။

ကြန္ပ်ဴတာ သိပၸံ (Computer Science) ေလ့လာသူေတြနဲ႕ သတင္းနည္းပညာ (IT) ေလ့လာသူေတြအတြက္ အစီအစဥ္ဆြဲနည္း (Programming) သင္ခန္းစာေတြမွာ မပါမျဖစ္ကေတာ့ အခ်က္အလက္မ်ားကုိ စီျခင္း (Sorting) အစီအစဥ္ပါပဲ။ Sorting စီတဲ့ နည္းလမ္းစဥ္ (Algorithm) အမ်ိဳးေပါင္း ေျမာက္မ်ားစြာ ရွိတဲ့အထဲက Bubble Sort, Counting Sort, Insertion Sort, Selection Sort နဲ႕ Quick Sort တုိ႕ဟာ ထင္ရွားပါတယ္။ (စာေရးသူ အႀကိဳက္ဆံုးကေတာ့ Selection Sort ျဖစ္ၿပီး အေၾကာင္းရင္းကေတာ့ နားလည္ရလြယ္လြန္းလုိ႕ ျဖစ္ပါတယ္။) ဒါေပမဲ့ လက္ေတြ႕ဘ၀မွာ အသံုး၀င္တာကေတာ့ နားလည္ရခက္၊ ေရးရတာ လက္၀င္တဲ့ Quick Sort ေလ။ ေရးလုိက္ၾကတဲ့ အစီအစဥ္ေတြတုိင္းမွာ စီစရာ (object, data type) တစ္မ်ိဳး ေပၚလာတုိင္း Quick Sort ကုိ တစ္ခါ ထထ ေရးရမယ္ ဆုိတာကေတာ့ လြန္လြန္းပါတယ္။ ဒါေၾကာင့္ C/C++ စံသတ္မွတ္ခ်က္မွာ Array အားလံုးကို စီႏုိင္ဖုိ႕ qsort ဆုိတဲ့ function ပါေနတာ ျဖစ္ပါတယ္။ ဒီေဆာင္းပါးမွာ အဲဒီ qsort ကုိ အသံုးျပဳနည္းကို ေရးသားေပးမွာ ျဖစ္ပါတယ္။

qsort ရဲ႕ သတ္မွတ္ခ်က္မွာ အစီအစဥ္ေရးသားသူ (programmer) ဒါမွမဟုတ္ ကုဒ္ဒါကို ၿခိမ္းေျခာက္ေနတာကေတာ့ pointer ေတြပါပဲ။ ရုိးရုိး Data Pointer ေတြတင္မကပဲ Function Pointer ႀကီးပါ ပါေနေတာ့ Pointer ဆုိရင္ ေက်ာစိမ့္ေနၾကလူေတြ လန္႕ကုန္တာ မဆန္းပါဘူး။ ဒါေပမဲ့ အေက်ာသိရင္ လြယ္လြယ္ကေလးပါ။ qsort ရဲ႕ အဓိပၸါယ္ သတ္မွတ္ခ်က္ကို အရင္ၾကည့္ရေအာင္ေနာ္။

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

ပထမဆံုး return type ကေတာ့ ဒီ function ဟာ return မျပန္ပါဘူးလုိ႕ အဓိပၸါယ္ရပါတယ္။ ဆုိလုိတာက ေပးလိုက္တဲ့ array ကုိ စီပဲ စီေပးမယ္။ ဘာ ဂဏန္းမွ တြက္ၿပီး အေျဖမထုတ္ေပးပါဘူးေပါ့။

ပထမဆံုး parameter က စီရမဲ့ array ရဲ႕ ပထမဆံုးအကြက္ရဲ႕ လိပ္စာ (address) ပါ။ အမ်ားေၾကာက္တဲ့ pointer ေပါ့။ Array အားလံုးဟာ Fix Pointer ေတြ ျဖစ္တဲ့အတြက္ စိတ္ခ်လက္ခ်ပဲ array name ကုိ ျဖည့္လုိက္လုိ႕ရပါတယ္။

ဒုတိယ parameter ကေတာ့ Array ရဲ႕ အရြယ္အစား (size) ျဖစ္ပါတယ္။ C/C++ မွာ Array ရဲ႕ size ကုိ compile-time/run-time check မလုပ္ပဲ ကုဒ္ဒါကပဲ အၿမဲ ကုိင္တြယ္ ႀကီးၾကပ္ရတာမုိ႕ ဒါကို ထည့္ေပးရတာပါ။ ႏုိ႕မုိ႕ရင္ ဘယ္ႏွခု စီရမလဲ မသိပဲ ျဖစ္ေနမယ္ေလ။ ကုိယ့္ Array မွာ Element ၁၀ ခုပါရင္ 10 လုိ႕ထည့္ေပါ့။ Variable တစ္ခုခု ထည့္လုိ႕လဲ ရပါတယ္။

တတိယ parameter ကေတာ့ စီခ်င္တဲ့ Array Element တစ္ခုခ်င္းရဲ႕ အရြယ္အစားေပါ့။ အဲဒါမွ အဲဒီ မွတ္ဥာဏ္တံုးႀကီး (memory block) ေတြကို ေရႊ႕လုိ႕ရမယ္ေလ။ ဒါလဲ မခက္ပါဘူး။ sizeof(element) လုိ႕ ေပးလုိက္ရင္ရပါတယ္။

စတုတၳနဲ႕ ေနာက္ဆံုး parameter ကေတာ့ နည္းနည္း ရွင္းျပရ လက္၀င္ပါတယ္။ ဒါဟာ Function Pointer ႀကီးျဖစ္ပါတယ္။ ကုိယ့္ဘာသာကုိယ္ သတ္မွတ္ထားတဲ့ Element ေတြကို ႏိႈင္းယွဥ္ခ်င္ရင္ ဒီ Function နဲ႕ တြက္ဆုိၿပီး ေျပာရတဲ့ သေဘာပါ။ (ေနာက္တမ်ိဳးေျပာရရင္ အဲဒီ Function ႀကီးကုိ qsort ကေန လွမ္းေခၚမွာ ျဖစ္ပါတယ္။ အဲဒီ Function ႀကီးက qsort ဆီကုိ ေရွ႕ကေကာင္က ငယ္ရင္ အႏႈတ္ကိန္း၊ တူရင္ သုည၊ ႀကီးရင္ အေပါင္းကိန္း တစ္ခုခု return ျပန္ရပါမယ္။) အဲဒီ Function ႀကီးရဲ႕ ပံုစံကလဲ

int function_name(const void* a, const void* b);

ပဲျဖစ္ရပါမယ္။ ပုိနားလည္လြယ္ေအာင္ ဥပမာေလးနဲ႕ ၾကည့္ရေအာင္ေနာ္။

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

class employee{

    int experience;     //in year

    float salary;    //in kyat

    /* Blar Blar Blar */

    public:

        bool operator < (employee &e)    {

            If(this->salary == e.salary) return (this->experience < e.experience);

            else return (this->salary < e.salary);

        }

        void my_emp_function(void) { }

        /* More Blar Blar Blar */

};

ေပါ့။ အဲဒီ Class မွာ လစာရယ္၊ လုပ္သက္ရယ္က Private Member ေတြ ျဖစ္ၿပီးေတာ့ အျပင္ကေန ၀န္ထမ္းေတြကို ႏိႈင္းယွဥ္ႏုိင္ဖုိ႕ operator '<' ကုိ overload လုပ္ထားတဲ့ Function တစ္ခုပါပါတယ္။ ဒါေပမဲ့ qsort ထဲကုိ အဲဒီ function ကုိ ထည့္လုိက္လုိ႕မရတဲ့အတြက္ (qsort က လုိခ်င္တဲ့ ပံုစံနဲ႕ operator '<' ရဲ႕ ပံုစံ Syntax မတူတဲ့အတြက္) qsort အတြက္ Function ကုိ ဒီလိုေရးရပါမယ္။

int employee_comparer(const void* a, const void* b) {

    employee *temp_e = (employee*) a;        //type cast from void*

    employee *temp_f = (employee*) b;        //to employee*

    if((*temp_e) < (*temp_f)) return -1;

        else return 1;    

}

ေရးထားတဲ့ Function ရဲ႕ ပထမ ၂ ေၾကာင္းကေတာ့ ဘာ type information မွမပါပဲ qsort က ရမ္းသန္းမွန္းသန္း ပုိ႕လႊြတ္လုိက္တဲ့ Pointer ၂ ခုကို employee Pointer ျဖစ္ေအာင္ ေျပာင္းယူတာပါ။ အဲဒီမွာ တခ်က္သတိထားဖုိ႕က အဲဒီလုိ ေျပာင္းယူၿပီးတာေတာင္ temp_e နဲ႕ temp_f က Pointer ပဲ ရွိပါေသးတယ္။ ဒါေၾကာင့္ သူတုိ႕ကုိ သံုးတဲ့အခါမွာ Data of လုိ႕ အဓိပၸါယ္ရတဲ့ '*' ေလးကို အၿမဲထည့္ရပါမယ္။ (တကယ္လုိ႕ သူတို႕ထဲက function ေတြ ေခၚမယ္ဆုိရင္လဲ operator '.' ကုိ မသံုးပဲ operator '->' ကုိ ဒီလုိေလး temp_e->my_emp_function() ဆုိၿပီးေတာ့ သံုးေပးရပါမယ္။) အဲဒီ '*' ေလးကို ထည့္ၿပီး operator '>' နဲ႕ ႏိႈင္းယွဥ္လုိ႕ရလာတဲ့ အေျဖေပၚမူတည္ၿပီး -1 သုိ႕မဟုတ္ +1 ကို qsort အတြက္ return ျပန္ေပးလုိက္ရပါမယ္။

ဒီ Function ေလးေရးလုိ႕ အခ်ိဳးေျပသြားၿပီဆုိရင္ေတာ့ qsort ကုိ စိတ္ေအးခ်မ္းသာ အသံုးျပဳႏုိင္ပါၿပီ။ (employee ရဲ႕ private member ေတြကို accessor method ေတြကေနတဆင့္ ေခၚထားတာ သတိျပဳပါ။ တကယ္တမ္း ေရးတဲ့အခါက်ေတာ့ သတိလက္လြတ္ ဒီတုိင္း ေရးမိတတ္ပါတယ္။ အဲဒီလုိေရးခ်င္ရင္ေတာ့လဲ friend လုပ္လုိက္ေပါ့ဗ်ာ၊ ေနာ။) ေအာက္မွာက main Function ပါ။

/* preprocessor Yada Yada Yada */

void main(void)

{

    employee myEmployeeArray[NUM_OF_EMPLOYEE];

    /* input data into myEmployeeArray */

    qsort(myEmployeeArray, NUM_OF_EMPLOYEE, sizeof(employee), employee_comparer);

    /* output sorted myEmployeeArray */

}

qsort ကုိ လြယ္လြယ္ေခၚၿပီး ကုဒ္ဒါအေပါင္း သက္သာၾကပါေစေၾကာင္း …

စာေရးသူ ေရးသားစမ္းသပ္ထားေသာ Code ကုိ ရယူရန္

Saturday, July 25, 2009

ဆီခ်က္ေခါက္ဆြဲ လုပ္နည္း

ဆီခ်က္ေခါက္ဆြဲဆုိတာ ျမန္မာတုိင္းသိတဲ့ အစားအေသာက္တမ်ိဳးပါ။ မူလကေတာ့ တရုတ္အစားအစာျဖစ္ၿပီး တရုတ္လူမ်ိဳးေတြ ျမန္မာႏုိင္ငံကုိ လာေရာက္ေရာင္းခ်ရာကေန တျဖည္းျဖည္း ျမန္မာမႈျပဳလိုက္တာ အခုဆုိရင္ ကမၻာေပၚမွာ ဘယ္ႏုိင္ငံမွာမွ မရွိ၊ ျမန္မာျပည္မွာသာရွိတဲ့ ဆီခ်က္ေခါက္ဆြဲဆုိၿပီး ျဖစ္လာပါေတာ့တယ္။ (စင္ကာပူမွာေတာ့ ဆီခ်က္ေခါက္ဆြဲ၊ ေကာ္ရည္ေခါက္ဆြဲတုိ႕နဲ႕ အေတာ္ဆင္တူတဲ့ မေလးမႈ ျပဳထားတဲ့ ေခါက္ဆြဲေတြ ေတြ႕ရပါတယ္။) အခ်ိန္ကုန္သက္သာ၊ ေငြကုန္သက္သာၿပီး စားရတာအရသာရွိတဲ့ ဆီခ်က္ေခါက္ဆြဲ လုပ္နည္းကုိ ေရႊပြဲလာပရိသတ္ႀကီးအတြက္ ကျပေဖ်ာ္ေျဖ ... အဲေလ ... မွားလုိ႕ စာရႈသူမိတ္ေဆြတုိ႕အတြက္ ေရးသားတင္ဆက္လုိက္ရပါတယ္။


ဆီခ်က္ေခါက္ဆြဲ (လူ ၃ ေယာက္မွ ၆ ေယာက္စာ) လုပ္ဖုိ႕ လုိအပ္တဲ့ ပစၥည္းေတြကေတာ့ ...

  • ေခါက္ဆြဲျပား - ၃ - ၆ ခြက္စာ (အသင့္စားေခါက္ဆြဲေတြ ၀ယ္ျပဳတ္လဲ ရပါတယ္။ ပိုေတာင္ အရသာ ေကာင္းပါေသးတယ္။ ဆီနဲ႕ေၾကာ္ထားတာမဟုတ္တာကုိ က်န္းမာေရးအတြက္ ေရြးခ်ယ္ပါ။)
  • ၀က္နံရုိးသား (သုိ႕မဟုတ္) ၾကက္ရင္အုပ္ - ၁၅ က်ပ္သား (၀က္ကေတာ့ ပုိေကာင္းသေပါ့ေလ)
  • ၾကက္သြန္ျဖဴ - ၁ ေျမွာင့္၊ ၂ ေျမွာင့္ (၃-၄ ေျမွာင့္ ဟိဟိ)
  • ဆီ - တမႈတ္ (က်န္းမာေရးနဲ႕ ညီညြတ္ေသာ ေနၾကာဆီကုိ သံုးစြဲသင့္ပါသည္။)
  • ၾကက္သြန္ၿမိတ္ - ၁ ပင္၊ ၂ ပင္ 
  • ပဲငံျပာရည္ (ေနာက္) - ၁ စားပြဲဇြန္း
  • ပဲငံျပာရည္ (ၾကည္) - ၂ စားပြဲဇြန္း
  • ဆန္ရွာလကာရည္ - ၁ စားပြဲဇြန္း
  • ဆား - အနည္းငယ္ တုိ႕ပဲ ျဖစ္ပါတယ္။


ၾကက္သြန္ျဖဴကုိ အခြံခြာ၊ ေရေဆးၿပီး အေပၚမွာ ျပထားသလုိ ေသးေသးေလးေတြ လွီးပါ။ (ႀကိတ္စက္ရွိရင္ ထည့္ႀကိတ္လုိက္ပါ။) ၿပီးေနာက္ ေၾကြပန္းကန္ (ပလတ္စတစ္၊ မယ္လမင္း ပန္းကန္ မသံုးပါႏွင့္) တစ္လံုးထဲကုိ ထည့္ထားပါ။ ၀က္နံရုိးကုိ ရွာလကာရည္၊ ပံငံျပာရည္ (ၾကည္/ေနာက္) ႏွင့္ ဆားတစ္ဇြန္းခန္႕ထည့္ၿပီး (ေအာက္ကပံုအတုိင္း) နယ္ပါ။ ဒယ္အုိးတစ္လံုးထဲကုိ ဆီထည့္ၿပီး မီးဖုိေပၚတင္ အပူေပးပါ။



ဆီပူၿပီး အေငြ႕ထြက္လာရင္ ေစာေစာတုန္းက ၾကက္သြန္ျဖဴပန္းကန္ထဲကုိ (အုိးဖင္ကပ္ ဇြန္းတ၀က္စာေလာက္ ခ်န္ၿပီး) ေလာင္းထည့္လုိက္ပါ။ ဒီအပိုင္းဟာ အလြန္အေရးႀကီးပါတယ္။ ၾကက္သြန္ကုိ ဆီပူအုိးထဲထည့္ ေၾကာ္ရတာ အင္မတန္ခက္ပါတယ္။ အေၾကာ္မတတ္ရင္၊ အေလ့အက်င့္မရွိရင္ ၾကက္သြန္ဟာ အၿမဲတူးပါတယ္။ (ငရုတ္သီးဆီခ်က္ခ်က္ဖုိ႕လဲ ဒီနည္းကို အသံုးျပဳႏုိင္ပါတယ္။) ဆီအေငြ႕တေထာင္းေထာင္း ထြက္ေနဖုိ႕ေတာ့ လုိအပ္ပါတယ္။ ဆီကုိေလာင္းထည့္ၿပီး တေအာင့္ေလာက္ အၾကာမွာ ေအာက္မွာျပထားသလုိ ေရႊေရာင္ေလးနဲ႕ ၾကက္သြန္ဆီခ်က္ က်က္သြားပါလိမ့္မယ္။


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

နာရီ၀က္ေလာက္ၾကာေအာင္ ေစာင့္ၿပီး ခ်က္ရမွာပ်င္းရင္ ပထမတခါ ေရနည္းနည္းခမ္းတာနဲ႕ မုိက္ခရုိေ၀့ဖ္မီးဖုိထဲ ထည့္ၿပီး ခ်က္လုိက္လဲ ရပါတယ္။ မီးအျပင္းဆံုးနဲ႕ ၃ မိနစ္ကေန ၅ မိနစ္အထိ အသားရဲ႕ အေနအထားေပၚလုိက္ၿပီး ခ်က္ရပါမယ္။ မုိက္ခရုိေ၀့ဖ္ထဲကုိ သတၱဳအုိးေတြမထည့္ဖုိ႕၊ မုိက္ခရုိေ၀့ဖ္နဲ႕ ခ်က္လုိ႕ရတဲ့ အာမခံဘူးကုိပဲ သံုးဖုိ႕ သတိထားပါ။ ေရအရမ္းခမ္းသြားရင္ ဆီအပူရွိန္အရမ္းျမင့္သြားတတ္လုိ႕ ေရခမ္းရင္ ေရျဖည့္ေပးဖုိ႕ မေမ့ပါနဲ႕။

အသားက်က္ေအာင္ ခ်က္ၿပီးရင္ ေအာက္မွာျပထားသလုိရေအာင္ အသားကုိ လွီးပါ။ (ေတာက္ေတာက္မစဥ္းပါနဲ႕။ လွီးတာကို ၾကြက္သားမွ်င္အတုိင္း မလွီးပါနဲ႕။ အဲဒါဆုိ ရွည္ရွည္ဖတ္ေတြပဲ ရတတ္ပါတယ္။ ၾကြက္သားမွ်င္ေတြကို ကန္႕လန္႕လွီးပါ။)

စိတ္မရွည္ျဖစ္ေနၿပီလား။ မပူပါနဲ႕။ ၿပီးေတာ့မွာပါ။ ၾကက္သြန္ၿမိတ္ကုိ ေရေဆးၿပီး ေသးေသးေလးေတြ လွီးပါ။ ျပင္ေပးမဲ့ ပန္းကန္ထဲမွာ ၀က္နံရုိးဟင္းက အရည္ရယ္၊ ဆီခ်က္ဖတ္ရယ္ (ဆီေတြ မယူပါနဲ႕ က်န္းမာေရးအတြက္ မေကာင္းဘူး) ဆားနည္းနည္းရယ္ထည့္၊ စဥ္းထားတဲ့ အသား ေတာ္သင့္ရံုနဲ႕ ေခါက္ဆြဲကုိထည့္ၿပီး ေရာေမႊေပးပါ။ ေမႊၿပီးရင္ အေပၚမွာ ၾကက္သြန္ၿမိတ္ဖတ္ေလးေတြ ျဖဴးလုိက္ရင္ ဆီခ်က္ေခါက္ဆြဲ ရၿပီေပါ့။ လြယ္တယ္၊ ျမန္တယ္၊ အကုန္အက် သက္သာတယ္ (အသား ၁၅ က်ပ္သားပဲေလ၊ က်န္တာက သိပ္ေစ်းမႀကီးဘူး) ေနာ္။ ဒါေၾကာင့္ ေခါက္ဆြဲဆုိင္ဖြင့္တဲ့ တရုတ္ေတြ ျမန္ျမန္ခ်မ္းသာၾကတာေနမွာ။


(ခ်က္ၿပီးခါနီးမွ သတိရလုိ႕ ပံုမွာ ၾကက္သြန္ၿမိတ္မပါပါ။)

Tuesday, June 9, 2009

မိုးႀကိဳး အႏၱရာယ္ကာကြယ္ေရး သိေကာင္းစရာ

The Voice Weekly Journal (June 8 2009) မွာ ရန္ကုန္တုိင္း၊ လႈိင္သာယာၿမိဳ႕နယ္၊ လယ္ကြင္းတစ္ခုအတြင္း ဂဏန္းႏႈိက္ေနစဥ္ မုိးႀကိဳးပစ္ခံရလုိ႕ တစ္ဦးေသဆံုးၿပီး ၃ ဦး ဒဏ္ရာရရွိေၾကာင္း ဖတ္ရႈရပါတယ္။ ဒါေၾကာင့္ မုိးႀကိဳးအႏၱရာယ္ကာကြယ္ေရး ေဆာင္းပါးကုိ ေရးသားတင္ဆက္လုိက္ရပါတယ္။

ဆံပင္ေထာင္သလား၊ သတိထား

ပထမဆံုး သိရမွာက မုိးႀကိဳးမုန္တုိင္းက်ေရာက္စဥ္မွာ မိမိမွာ အႏၱရာယ္ရွိမရွိ သံုးသပ္ဖုိ႕ လုိအပ္ပါတယ္။ နားလည္ရအလြယ္ကူဆံုးကေတာ့ ၃၀/၃၀ စည္းမ်ဥ္းပါပဲ။ မုိးႀကိဳးပစ္တဲ့ အလင္းေရာင္ ျဖတ္ကနဲ ျမင္လုိက္ရတဲ့အခ်ိန္ကစၿပီး ေရတြက္လုိ႕ စကၠန္႕ ၃၀ အတြင္းမွာ မုိးႀကိဳးပစ္သံကုိ ၾကားရရင္ စက္ကြင္းမလြတ္ဘူး၊ အႏၱရာယ္ရွိလာေတာ့မယ္လုိ႕ သိရပါမယ္။ (မုိးႀကိဳးမုန္တုိင္းက်တဲ့ ဧရိယာဟာ ၆ မုိင္ေလာက္ ရွိတတ္ၿပီး မုိးႀကိဳးပစ္သံဟာ ၅ စကၠန္႕ကုိ ၁ မုိင္သြားတာမုိ႕ စကၠန္႕ ၃၀ အတြင္းဆုိရင္ မလြတ္ဘူး ေျပာတာပါပဲ။) ဒါေပမဲ့ ဒီလုိ တုိင္းတာဟာ မုိးႀကိဳး အဆက္မျပတ္ ပစ္ေနတဲ့အခါမ်ိဳးမွာ အသံုးမ၀င္ႏုိင္ပါဘူး။ သင့္ေဘးက လူ ဆံပင္ေတြ ေထာင္ေနရင္၊ သင့္ဆံပင္ေတြ တင္းေနၿပီဆုိရင္ အႏၱရာယ္နဲ႕ အရမ္းနီးေနၿပီဟု သိပါ။

ကားထဲမွာ ၿငိမ္ၿငိမ္ေန၊ ေလွ်ာက္မကုိင္နဲ႕

မုန္တုိင္းက်လုိ႕ မုိးႀကိဳးပစ္မဲ့ အလားအလာကုိ ေတြ႕ရၿပီဆုိရင္ ခုိနားစရာ ခ်က္ခ်င္း ရွာရပါမယ္။ (မ်ားေသာအားျဖင့္ မုိးလဲ ရြာေနတတ္ပါတယ္။) သစ္ပင္ျမင့္ျမင့္ေတြမွာ ခုိ၀င္ျခင္းဟာ အႏၱရာယ္မကင္းဘူးဆုိတာ လူအမ်ားသိၿပီး ျဖစ္ပါတယ္။ မုိးႀကိဳးပစ္တယ္ဆုိတာ ေကာင္းကင္ေပၚက လွ်ပ္စစ္လံုးႀကီး က်လာတာမဟုတ္ပဲ ေကာင္းကင္က လွ်ပ္စစ္ငုတ္ (တိမ္တုိက္) နဲ႕ ေျမျပင္ေပၚက လွ်ပ္စစ္ငုတ္အၾကား ဗုိ႕အားျမင့္ လွ်ပ္စစ္စီးသြားတာပါပဲ။ ခၽြန္ထက္ ျမင့္မားတဲ့ အရာေတြဟာ အဲဒီလုိ လွ်ပ္စစ္စီးဖုိ႕ လြယ္တဲ့အတြက္ သစ္ပင္ေအာက္မုိးမခုိနဲ႕၊ ထီး (သံခၽြန္ပါတဲ့ထီး) မေဆာင္းနဲ႕၊ ဓာတ္တုိင္ေတြနားမွာ မေနနဲ႕ လုိ႕ ေျပာၾကတာပါပဲ။ မုိးႀကိဳး မုန္တုိင္းက်ေရာက္ေနစဥ္မွာ ခုိင္ခံ့တဲ့ အေဆာက္အဦ (မုိးႀကိဳးလႊဲ စနစ္တက် တပ္ဆင္ထားလွ်င္ ပိုေကာင္းသည္) အတြင္းသို႕ ၀င္ေရာက္ ခုိနားသင့္ပါတယ္။ ျပတင္းေပါက္မ်ားနဲ႕ သတၱဳပစၥည္းမ်ားနဲ႕ ေ၀းေ၀းေနပါ။ အိမ္ထဲမွာမုိ႕ ေအးေဆးဆုိၿပီး ပလပ္တပ္ထားတဲ့ လွ်ပ္စစ္အသံုးအေဆာင္ (တီဗြီ၊ ေရခဲေသတၱာ) တုိ႕ကုိ ကုိင္တြယ္ျခင္း မျပဳရပါဘူး။ (ျဖစ္ႏုိင္ရင္ အဲဒီပစၥည္းေတြကုိ ႀကိဳးျဖဳတ္ထားျခင္းျဖင့္ ပစၥည္းပ်က္စီးမႈကို ကာကြယ္ႏုိင္ပါတယ္။ ႀကိဳလုပ္ပါ။) အနီးပတ္၀န္းက်င္မွာ ခုိင္ခံ့တဲ့ အေဆာက္အဦမရွိခဲ့လွ်င္ ေမာ္ေတာ္ကားအတြင္းသို႕၀င္ၿပီး ကားမွန္မ်ားကုိ အကုန္တင္ထားပါ။ (သတိ၊ မုိးပြင့္ကားလွလွေလးမ်ားကုိ မဆုိလုိပါ။) ေမာ္ေတာ္ကားသည္ သံကြန္ခ်ာကဲ့သုိ႕ ျဖစ္ေနသျဖင့္ သင့္အား မုိးႀကိဳးေၾကာင့္ ဓာတ္လုိက္ေသဆံုးျခင္းမွ ကာကြယ္ေပးမွာ ျဖစ္ပါတယ္။ သတၱဳနဲ႕ ျပဳလုပ္ထားတဲ့ ကားေမာင္းေခြ (steering wheel)၊ ဂီယာေျပာင္းတံတုိ႕ကုိ မကုိင္ရန္လဲ သတိထားပါ။ ကားအတြင္းရွိ ေရဒီယုိကုိလဲ မဖြင့္သင့္ပါ။

၀မ္းလ်ားေမွာက္မေနပါနဲ႕

ကြင္းျပင္အတြင္းမွာ ခုိကုိးရာမဲ့ ျဖစ္ေနၿပီဆုိပါက ေဆာင့္ေၾကာင့္ထုိင္ခ်ၿပီး ဖေနာင့္နဲ႕ ေျမႀကီးကို ေသခ်ာထိထားပါ။ သင့္နားရြက္ကုိ သင္ကုိင္ထားၿပီး လံုးလံုးေလး ျဖစ္ေနပါေစလုိ႕ သိပၸံပညာရွင္မ်ားက ဆုိပါတယ္။ အမ်ားေျပာသလုိ ဗုိက္နဲ႕ ေျမႀကီးထိၿပီး ၀မ္းလ်ားေမွာက္မေနပါနဲ႕။ ၀မ္းလ်ားေမွာက္ေနျခင္းေၾကာင့္ သင့္အား မုိးႀကိဳးတည့္တည့္မပစ္ေသာ္လည္း သင့္ေဘးက ေျမျပင္ (သို႕မဟုတ္) သစ္ပင္စသည္တုိ႕ကုိ ပစ္လုိ႕ စက္ကြင္းမလြတ္ခဲ့လွ်င္ သင့္၀မ္းတြင္း ကလီစာမ်ားအားလံုး ဓာတ္လုိက္ခံရမွာ ျဖစ္ပါတယ္။ ဒါဆုိရင္ မုိးႀကိဳးအပစ္မခံရေသာ္လည္း အသက္ေသဆံုးႏုိင္ပါတယ္။ သိပၸံလက္ေတြ႕ စမ္းသပ္ခန္းတစ္ခုမွာ စမ္းျပတာကေတာ့ ခၽြန္ေနတဲ့ သတၱဳတံနဲ႕ လံုးေနတဲ့ သတၱဳလံုးကို မုိးႀကိဳးပစ္ေစရာ (၂ ခုလံုးကုိ တူညီေသာ လွ်ပ္စစ္အေျခေပးေသာ္လည္း) သတၱဳတံကုိ အႀကိမ္ေပါင္းမ်ားစြာပစ္မွ သတၱဳလံုးကို တႀကိမ္သာ ပစ္တာကို စာေရးသူ မ်က္ျမင္ေတြ႕ခဲ့ဖူးပါတယ္။ သိပၸံပညာရွင္မ်ား အဆုိအရ အထက္ပါပံုစံႏွင့္ ထုိင္ေနပါက မိုးႀကိဳးပစ္ခံရသည့္တုိင္ ကုိယ္တြင္းအဂၤါမ်ား ဓာတ္လုိက္မခံရသျဖင့္ အသက္ေသဆံုးရန္ အခြင့္အလမ္း နည္းပါးတယ္လုိ႕ ဆုိပါတယ္။

မုိးႀကိဳးပစ္ခံရသူ အႏူမဟုတ

မုိးႀကိဳးပစ္ျခင္းခံရပါက အပူေၾကာင့္ ေလာင္ကၽြမ္းျခင္းႏွင့္ လွ်ပ္စစ္ဓာတ္လုိက္ခံရသျဖင့္ ႏွလံုးရပ္သြားျခင္းတုိ႕ ခံစားရတတ္သျဖင့္ တစံုတေယာက္ မုိးႀကိဳးပစ္ခံရပါက ၄င္းကို ခ်က္ခ်င္း ေဆးကုသမႈ ေပးရန္ အေရးႀကီးပါတယ္။ မီးေလာင္ေနပါက မီးၿငိမ္းသတ္ေပးရန္ လုိအပ္ေသာ္လည္း မီးေလာင္ဒဏ္ရာမ်ားကုိ အရင္မကုသပါႏွင့္။ ႏွလံုးမခုန္ပါက အသက္ရွဴအားကူ ကုသျခင္းျဖင့္ ခ်က္ခ်င္း နည္းမွန္လမ္းမွန္ ကုသပါ။ လူနာကုိ ထိေတြ႕ျခင္းျဖင့္ ကူညီကုသသူကုိ ဓာတ္မလုိက္ႏုိင္ပါ။ (သို႕ရာတြင္ … ကြင္းျပင္ထဲရွိ လူနာအနီးတြင္ မုိးႀကိဳးပစ္ခံရခ်င္စရာေကာင္းေအာင္ ကုိးရုိးကားယား လုပ္မေနပါႏွင့္။ လံုၿခံဳေသာေနရာသုိ႕ ေရႊ႕ေျပာင္းသင့္က ေရႊ႕ေျပာင္းပါ။)

စာရႈသူမ်ား မုိးႀကိဳးအႏၱရာယ္ ကင္းေ၀းပါေစ။

ကုိးကား ။ ။ http://www.fema.gov/kids/sabrina.htm, http://firstaid.about.com/od/heatcoldexposure/ht/07_avoid_ltning.htm

Tuesday, May 12, 2009

စင္ကာပူ နမ့္ပစ္ဖူး (ေလာရွည္ ပဲၾကာဇံသုပ္)

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

ဟုိတေန႕က အစ္မတစ္ေယာက္က ပဲၾကာဇံသုပ္ အိမ္မွာလာသုပ္ေကၽြးတယ္။ (အေမသုပ္တာနဲ႕ေတာ့ မတူပါဘူး။ အေမက သက္သတ္လြတ္သုပ္တာေလ။ ပုဇြန္ေျခာက္ေတာင္ မပါဘူး။) ငါးေသတၱာတုိ႕ ၾကက္အူေခ်ာင္းတုိ႕နဲ႕ သုပ္တာ။ ဒီမနက္က်ေတာ့ မနက္စာကုိ ေဂၚဖီေလးနဲ႕ မုန္လာဥနီေလးေတြ ေရေႏြးေငြ႕ရုိက္၊ ခရမ္းခ်ဥ္သီးေလးလွီးၿပီး ကၽြန္း ၁၀၀၀ အႏွစ္ နဲ႕ ဆမ္းစားမလုိ႕ ျပင္ေနတုန္း ဟုိတေန႕က ပုိေနတဲ့ ပဲၾကာဇံသုပ္တဲ့ ပစၥည္းေတြကုိ သတိရသြားတယ္။ အဲဒါနဲ႕ ပဲၾကာဇံပါ ထည့္သုပ္မလုိ႕ လုပ္တုန္း … ပဲပုတ္ကေလးထည့္ရင္ နမ့္ပစ္ဖူးနဲ႕ အရသာတူမွာလုိ႕ စဥ္းစားမိတယ္။ ဒါနဲ႕ပဲ စင္ကာပူ နမ့္ပစ္ဖူး (ေလာရွည္ ပဲၾကာဇံသုပ္) ျဖစ္လာပါေလေရာ။

ပါ၀င္ပစၥည္းမ်ား (လူ ၂ ေယာက္စာအတြက္)

ပဲၾကာဇံ     - လက္တဆုပ္စာေလာက္

ပဲပုတ္ခ်ပ္    - ၂ ခ်ပ္

ေဂၚဖီထုပ္    - ခပ္ေသးေသး တစိတ္

မုန္လာဥနီ    - ၁ ေတာင့္

ခရမ္းခ်ဥ္သီး    - ၂ လံုး

ၾကက္အူေခ်ာင္း    - ၃ ေခ်ာင္း

ၾကက္သြန္ျဖဴ    - ၂ ေျမွာင့္

ႏွမ္းမႈန္႕        - အနည္းငယ္

ဆား        - အနည္းငယ္

ဆီ        - အနည္းငယ္

ရွာလကာရည္    - ဟင္းခ်ဳိေသာက္ဇြန္း ၁ ဇြန္း

သံပရာသီး    - ၁ လံုး

နံနံပင္        - အနည္းငယ္

ငရုတ္သီးစိမ္း    - ၂ ေျမွာင့္

ပဲၾကာဇံကုိ ေရေႏြးနဲ႕ စိမ္ပါ။ ပဲပုတ္ခ်ပ္ (အျပား၀ုိင္းႀကီးေတြကို ေျပာတာ) ကုိ ေၾကာ္ခ်င္ေၾကာ္၊ ဖုတ္ခ်င္ဖုတ္ၿပီး အမႈန္႕ျဖစ္ေအာင္ ေထာင္းပါ။ (ေၾကာ္မယ္ဆုိရင္ ဆီကို အေငြ႕ထြက္ေအာင္တည္၊ မီးပိတ္ၿပီးမွ ပဲပုတ္ခ်ပ္ကုိထည့္ပါ။ ႏုိ႕မဟုတ္ရင္ ခါးပါလိမ့္မယ္။ ေထာင္စရာ ဆံုမရွိရင္ စကၠဴထဲထည့္ၿပီး ပုလင္းနဲ႕ လွိမ့္ႀကိတ္လဲ ရပါတယ္။ အမႈန္႕ႀကိတ္စက္ရွိရင္လဲ အမႈန္႕ႀကိတ္စက္နဲ႕ ႀကိတ္ေပါ့။ ေလာရွည္ကေတာ့ အဲဒီအမႈန္႕ကုိ ေနရာတကာမွာသံုးဖုိ႕ ဗူးထဲထည့္ေဆာင္ထားတယ္။) ၾကက္သြန္ျဖဴေလးေတြ ပါးပါးလွီးၿပီး ဆီသတ္ပါ။ ငရုတ္သီးမႈန္႕ရွိရင္ ငရုတ္သီးဆီသတ္လဲ လုပ္ခ်င္လုပ္ပါ။ (ငရုတ္သီးဆီသတ္လုပ္ဖုိ႕အတြက္ ငရုတ္သီးမႈန္႕ကုိ ပန္းကန္ထဲထည့္၊ အေငြ႕ထြက္ေအာင္ တည္ထားတဲ့ ဆီကုိ အဲဒီပန္းကန္ထဲ ေလာင္းခ်လုိက္ပါ။ ဒါဆုိ မေညွာ္ပါဘူး။ အေမ့နည္းကြ။) ၾကက္အူေခ်ာင္းကုိ ျပဳတ္ပါ။ (Microwave မီးဖုိ ရွိရင္ အဲဒါနဲ႕လုပ္လဲ ရပါတယ္။ ျမန္တာေပါ့။) မုန္လာဥနီကုိ ေသးေသးေလးေတြတံုးၿပီး ေရေႏြးေဖ်ာပါ။ အဲဒါၿပီးရင္ ပူမဲ့ေလာင္မဲ့ ကိစၥေတြ (ေရေႏြးစိမ္ျခင္း၊ ဆီသတ္ျခင္း) ၿပီးပါၿပီ။

အခု ေအးတဲ့ကိစၥေတြ လာပါမယ္။ ေဂၚဖီကုိ ေရစင္စင္ေဆးၿပီး ပါးပါးလွီးပါ။ ခရမ္းခ်ဥ္သီးကုိ ပါးပါးလွီးပါ။ သံပရာသီးကုိ အရည္ညွစ္ဖုိ႕အသင့္ လွီးထားပါ။ ၾကက္အူေခ်ာင္းကုိ ခပ္ေသးေသးလွီးပါ။ ငရုတ္သီးနဲ႕ နံနံပင္ကုိလဲ ေရေဆးၿပီး ေသးေသးေလးေတြလီွးထားပါ။ (ပဲၾကာဇံနဲ႕ မုန္လာဥနီ ေရေႏြးထဲက ဆယ္ေတာ့၊ ရၿပီ။) ၾကက္သြန္ျဖဴ ဆီခ်က္၊ ငရုတ္သီး ဆီခ်က္၊ ပဲပုတ္မႈန္႕၊ ရွာလကာရည္တုိ႕ကုိ ပဲၾကာဇံ၊ ၾကက္အူေခ်ာင္း၊ ေဂၚဖီ၊ မုန္လာဥနီ၊ ခရမ္းခ်ဥ္သီးတုိ႕နဲ႕ ေရာနယ္ပါ။ ဆားထည့္ပါ။ ႏွမ္းမႈန္႕ကုိ ျဖဴးပါ။ ငရုတ္သီး လွီးထားတာေလးထည့္၊ သံပရာသီးအကုန္ညွစ္ၿပီး ဆက္နယ္။ နယ္လုိ႕ ႏွံ႕ရင္ နံနံပင္ေလးျဖဴး၊ စားလုိ႕ ရပါၿပီ။


Sunday, October 12, 2008

ငါးထမင္းနယ္ (ရွမ္းထမင္းခ်ဥ္) လုပ္နည္း

ဒီေန႕ သတင္းကၽြတ္ အဖိတ္ေန႕ (သီတင္းကၽြတ္ လဆန္း ၁၄ ရက္ေန႕)။ ေလာရွည္ ေမြးေန႕ေပါ့။ အဲဒါ မမ Red က ေမာင္ေလးေမြးေန႕မုိ႕ ငါးထမင္းနယ္လုပ္ေကၽြးမယ္လုိ႕ မေန႕ညကတည္းကေျပာၿပီး ဒီမနက္ လုပ္ေကၽြးတယ္။ ေပ်ာ္လုိက္တာ။ ေၾသာ္ ငါ့ကုိ ဂရုစုိက္သားဆုိၿပီ။ စားၿပီးေတာ့ ေမးၾကည့္ေတာ့ သူ႕ေမာင္အရင္းက ေအာက္တုိဘာ ၁၃ ေမြးတာမုိ႕ သူ႕ေမာင္ေလးေမြးေန႕ကုိ လုပ္ေကၽြးတာတဲ့။ ေသေရာ ။ ဘာပဲျဖစ္ျဖစ္ အေမတုိ႕လုပ္တာ ၾကည့္ထားတာနဲ႕ သူ႕ဆီက ခ်က္နည္းေမးထားတာေလးေတြ ေရာသမေမႊၿပီး ငါးထမင္းနယ္လုပ္နည္းကို တင္ဆက္လိုက္ရပါတယ္။

ပါ၀င္ပစၥည္းမ်ား
ၾကက္သြန္ၿမိတ္        - အနည္းငယ္
နံနံပင္            - အနည္းငယ္
ဆား            - အနည္းငယ္
ခရမ္းခ်ဥ္သီး        - ၃ လံုး
မန္က်ည္းႏွစ္        - အနည္းငယ္
ၾကက္သြန္ျဖဴ        - ၃ လံုး
ငါး (ေရခ်ိဳငါး)        - ၂၅ သားခန္႕
အာလူး             - ၂ လံုးခန္႕
ဆန္            - ၅ လံုး (ထမင္းေပါင္းအိုးနဲ႕ပါလာေသာ ဗူးနဲ႕ ခ်ိန္ပါ၊ ႏုိ႕ဆီဗူး မဟုတ္ပါ)
ပထမဆံုး ငါးနဲ႕ အာလူးကုိ ဆားအနည္းငယ္စီ ထည့္ၿပီး (တအုိးစီ) ျပဳတ္ထားပါ။ အဲဒါေတြ ျပဳတ္ေနတုန္းမွာ ထမင္းကုိလဲ တၿပိဳင္နက္ခ်က္ (ေရ ၇-၈ လံုးေလာက္ထည့္ခ်က္ပါ)၊ မန္က်ည္းႏွစ္ကုိ ေရေႏြးေဖ်ာ၊ ၾကက္သြန္ၿမိတ္နဲ႕ နံနံပင္ကုိ လွီး၊ ၾကက္သြန္ျဖဴ အခြံခြာထားပါ။ ငါးနဲ႕ အာလူးရရင္ (ေရခမ္းျပဳတ္ရပါသည္။) ခရမ္းခ်ဥ္သီးကုိ ျပဳတ္ပါ။ ငါးကုိ အသားႏႊင္၊ အာလူးကုိ ေခ်ပါ။ ခရမ္းခ်ဥ္သီး ျပဳတ္တာ ၿပဲသြားရင္ သူ႕ကုိလဲ ေခ်ပါ။ ၾကက္သြန္ျဖဴေထာင္းပါ။ ညက္လွ်င္ ၾကက္သြန္ျဖဴဆီခ်က္ ခ်က္ပါ။ (ဆီထဲကုိ ၾကက္သြန္ျဖဴ ေထာင္းထားတာ ထည့္ေၾကာ္ပါဟု ဆုိလုိသည္၊ ေရႊ၀ါေရာင္သန္းလာလွ်င္ အုိးေပၚမွခ်၊ ပန္းကန္ထဲ ေျပာင္းထည့္ပါ။ သုိ႕မဟုတ္က တူးလိမ့္မည္။) ၿပီးလွ်င္ ၾကက္သြန္ျဖဴ ဆီခ်က္၊ မန္က်ည္းႏွစ္ႏွင့္ ၾကက္သြန္ၿမိတ္၊ နံနံပင္မွအပ အားလံုးေရာနယ္ပါ။ ၿပီးလွ်င္ အေနေတာင္ အလံုးေလးေတြ လံုးထားပါ။ (ႀကီးႀကီးလံုးလဲ ဘာမွ မျဖစ္ပါ)

စားခ်င္စဖြယ္ပါပဲ
တည္ခင္းရာတြင္ အလံုးကို ပန္းကန္ျပားထဲ ထည့္ျပားၿပီး မန္က်ည္းႏွစ္၊ ၾကက္သြန္ျဖဴ ဆီခ်က္ဖတ္၊ နံနံပင္၊ ၾကက္သြန္ၿမိတ္ျဖဴးၿပီး ျပင္ေပးပါ။ ဂ်ဴးျမစ္ (အစိမ္း) ႏွင့္ တြဲစားလွ်င္ အလြန္ေကာင္းပါသည္။ ငရုတ္သီးႀကိဳက္သူမ်ား ငရုတ္သီးဆီခ်က္ႏွင့္လဲ တြဲဖက္စားသံုးႏုိင္ပါသည္။

Wednesday, July 9, 2008

UMDH ျဖင့္ မွတ္ဥာဏ္ယုိေပါက္မ်ားကုိ ရွာေဖြျခင္း

ေအာက္ပါ post ပါအေၾကာင္းအရာမ်ားကုိ Intel® Core™2 Duo E6550 @2.33 GHz, DDR 2 1GB x 4, Microsoft Windows XP Professional Service Pack 2 တပ္ဆင္ထားေသာ ၃၂ ဘစ္ စက္တြင္သာ စမ္းသပ္ထားၿပီး ျဖစ္ၿပီး ေရးသားခ်ိန္တြင္ တတ္ႏုိင္သေလာက္ တိက် မွန္ကန္ေစရန္ ႀကိဳးစားထားေသာ္လည္း post ပါ အေၾကာင္းအရာမ်ား၏ မွန္ကန္တိက် မွီခုိႏုိင္စြမ္းကုိ ေလာရွည္ - ကတဲ့ပြဲမွ အာမမခံပါ။ သံုးစြဲျခင္းေၾကာင့္ တစံုတရာ နစ္နာဆံုးရႈံးမႈ ျဖစ္ပြားလာပါက သံုးစြဲသူ၏ တာ၀န္သာ ျဖစ္ေၾကာင္း ႀကိဳတင္ အသိေပးအပ္ပါသည္။ 

Pointer Arithmetic အသံုးျပဳေသာ အစီအစဥ္ (Program) မ်ားကုိ ေရးသားရာတြင္ ျဖစ္တတ္ေသာ ျပႆနာတစ္ရပ္မွာ ရယူထားေသာ မွတ္ဥာဏ္ (memory) ေနရာ (space) မ်ားကုိ ျပန္လည္စြန္႕လႊတ္ျခင္း (deallocation) မျပဳမိသည့္အခါ အပံု (heap) ထဲတြင္ မွတ္ဥာဏ္ေနရာလြတ္ ကုန္ခမ္း သြားတတ္ျခင္းပင္ ျဖစ္သည္။ အထူးသျဖင့္ အမႈိက္သိမ္းစနစ္ (Garbage Collection System) မပါရွိသည့္ C/C++ ကဲ့သုိ႕ေသာ ဘာသာစကားမ်ားတြင္ အဆုိပါ ျပႆနာသည္ ေကာက္ရုိးပံု အပ္ေပ်ာက္သလုိ ရွာရခက္ေသာ ျပႆနာ တစ္ရပ္ျဖစ္ပါသည္။ Windows NT Platform (Windows NT, Windows 2000, Windows XP and Windows Vista) တြင္ အဆုိပါ ျပႆနာကုိ အေျဖရွာႏုိင္ရန္အတြက္ UMDH ဟုေခၚေသာ အစီအစဥ္တစ္ခုကို Microsoft မွ အခမဲ့ ျဖန္႕ျဖဴးေပးထားရာ ယခုေဆာင္းပါးငယ္တြင္ အဆုိပါ အစီအစဥ္ကုိ အသံုးျပဳပံု အဆင့္ဆင့္ကုိ ေရးသားရွင္းလင္းမည္ ျဖစ္ပါသည္။ 

UMDH သည္ Debugging Tools for Windows package တြင္ပါ၀င္ေသာ အစီအစဥ္တစ္ခု ျဖစ္သည္။ ၄င္းကုိ အသံုးျပဳရန္အတြက္ အဆုိပါ package ကုိ အရင္ဆံုး download လုပ္ရမည္ျဖစ္သည္။ မိမိ အသံုးျပဳမည့္ စနစ္ႏွင့္ ကိုက္ညီရာကုိ ေရြးခ်ယ္ရန္ သတိျပဳပါ။ ထုိ႕ေနာက္တြင္ Windows Symbol Package ကုိ download လုပ္ရယူရမည္ျဖစ္သည္။ Symbol Package ကုိ ေရြးခ်ယ္ရာတြင္ မိမိ debug လုပ္မည့္ အစီအစဥ္ကုိ အသံုးျပဳမည့္ စက္ေမာင္းႏွင္စနစ္ (Operating Systems) ႏွင့္ကုိက္ညီရာကုိ ေရြးခ်ယ္ရမည္ျဖစ္သည္။ (စက္တလံုးတည္းတြင္ debug လုပ္မည္ဆုိပါက အဆိုပါစက္၏ ေမာင္းႏွင္စနစ္ကုိသာ ေရြးပါ။) 

အထက္ပါ အေပ်ာ့ထည္မ်ားကုိ ထည့္သြင္းၿပီးပါက သင္၏ စက္ေမာင္းႏွင္စနစ္ကုိ debug mode ျဖင့္ စႏႈိး (boot) ပါ။ Windows XP Professional တြင္ My Computer ကုိ ညာကလစ္ျဖင့္ ႏွိပ္ပါ။ Properties ကုိေရြးပါ။ Advanced tab ကုိ သြားပါ။ Startup and Recovery Setting ကုိ ႏွိပ္ပါ။ Edit ကုိ ႏွိပ္ပါ။ သင္၏ စက္ေမာင္းႏွင္စနစ္ စာေၾကာင္း ေဘးတြင္ "/debug" ဟုျဖည့္သြင္းပါ။ (ဥပမာ …\WINDOWS="Microsoft Windows XP Professional" /fastdetect /debug အခ်ိဳ႕ကမူ ထုိစာေၾကာင္းကို ၂ ေၾကာင္းကူးၿပီး တစ္ခုတြင္ "/debug" ဟု ထည့္သြင္းတတ္သည္။)

ထုိ႕ေနာက္ System Path Variable ကုိ UMDH (ႏွင့္ Debugging Tools for Windows) ထည့္သြင္းထားေသာ လမ္းညႊန္ (Directory) သုိ႕ ေျပာင္းေပးပါ။ My Computer ကုိ ညာကလစ္ႏွိပ္ၿပီး Properties ကုိေရြးပါ။ Advanced tab ကုိသြားပါ (အထက္ပါအတုိင္းတူတူပင္ျဖစ္သည္။) Environment Variables ကုိ ႏွိပ္ပါ။ System variables မွ path ကုိရွာၿပီး UMDH ရွိရာ လမ္းညႊန္ကုိ ဆီမီး ၉ လံုး (semi-colon) ခံၿပီး ေနာက္ဆံုးတြင္ ထည့္သြင္းပါ။ အားလံုးကုိ အုိေကႏွိပ္ပါ။ စက္ကုိ restart လုပ္ပါ။ 

စက္ျပန္တက္လာလွ်င္ _NT_SYMBOL_PATH ဟုေခၚေသာ Environment Variable ကုိ သင္ Symbol ထည့္သြင္းထားခဲ့ေသာ လမ္းညႊန္သုိ႕ ေျပာင္းေပးရမည္ျဖစ္သည္။ set _NT_SYMBOL_PATH=SRV*c:\Windows\Symbols ဟု အမိန္႕ေပးပါ။ (Symbol မ်ားကုိ အျခား လမ္းညႊန္သို႕ ထည့္သြင္းမိလွ်င္ c:\Windows\Symbols အစား အဆုိပါလမ္းညႊန္၏ လမ္းေၾကာင္းကုိ ျဖည့္သြင္းပါ။) သင့္ အစီအစဥ္အတြက္ gflags ကုိ ခ်ိန္ေပးရန္အတြက္ "gflags /i yourprogram.exe +ust" ဟု အမိန္႕ေပးပါ။ UMDH သံုးစြဲရန္ အသင့္ျဖစ္ပါၿပီ။ 

သင္၏ အစီအစဥ္ကုိ မွတ္ဥာဏ္ယိုေပါက္ (memory leakage) မျဖစ္ခင္ အေနအထားတြင္ ရပ္တန္႕ေစ၍ (breakpoint ေပးလုိက္လွ်င္ အလြယ္ဆံုးျဖစ္သည္) umdh –p:<your_program_process_id> -f:<logfile1_path_with_ext> -g ဟု အမိန္႕ေပးပါ။ (Process Id ကုိ သိရန္အတြက္ tlist ဟု အမိန္႕ေပး၍ ၾကည့္ရႈႏုိင္ပါသည္။) ထုိ႕ေနာက္တြင္ မွတ္ဥာဏ္ယုိေပါက္ အၿပီးေလာက္ဟု ထင္ေသာေနရာသုိ႕ ေရာက္သည္အထိ ဆက္လက္လုပ္ေဆာင္ေစပါ။ umdh –p:<your_program_process_id> -f:<logfile2_path_with_ext> -g ဟု ထပ္မံအမိန္႕ေပးပါ။ 

ယခု သင္၏ အစီအစဥ္ရွိ မွတ္ဥာဏ္ယုိေပါက္မတုိင္မီႏွင့္ မွတ္ဥာဏ္ယိုေပါက္အၿပီး မွတ္ဥာဏ္အသံုးခ်မႈဆုိင္ရာ အခ်က္အလက္မ်ား logfile1 ႏွင့္ logfile2 တုိ႕တြင္ သိမ္းဆည္းၿပီး တည္ရွိေနပါၿပီ။ အဆုိပါ file မ်ားကုိ ႏႈိင္းယွဥ္ၾကည့္ရႈရန္အတြက္ umdh –d –v –l <logfile1_path> <logfile2_path> ဟု ႏွိပ္ပါက အဆုိပါ အစီအစဥ္ ေနရာ ၂ ခုၾကား ရယူထားၿပီး ျပန္မစြန္႕လႊတ္ရေသးသည့္ မွတ္ဥာဏ္ေနရာမ်ားကုိ ေတြ႕ရွိရပါလိမ့္မည္။ ("> <text_file_path>" ဟု အမိန္႕ေနာက္တြင္ ျဖည့္သြင္းၿပီးမွ အမိန္႕ေပးလွ်င္ ဖန္သားျပင္ေပၚတြင္ ေပၚလာမည့္ အေျဖမ်ားကုိ အဆုိပါ text_file_path တြင္ ေရးသားေပးပါသည္။) 

ဥပမာ

+ 4132 ( 4132 - 0) 1 allocs    BackTraceD3

+ 1 ( 1 - 0)    BackTraceD3    allocations

    (blar blar blar)

    MSVCR80D!fprintf+0000029C (f:\rtm\vctools\crt_bld\self_x86\crt\src\fprintf.c, 70)

    YourProject!leakyFunction+000005EB (d:\leaky.cpp, 325)

    (blar blar blar)

    kernel32!RegisterWaitForInputIdle+00000049

ဟုေတြ႕ရွိရပါက မွတ္ဥာဏ္ မွတ္တမ္း ၂ ခုအၾကားတြင္ leakyFunction (leaky.cpp မွ လိုင္းအမွတ္ ၃၂၅) မွ မွတ္ဥာဏ္ ၄၁၃၂ ဘုိက္ရယူထားၿပီး ျပန္မစြန္႕လႊတ္ရေသးသည္ကုိ ေတြ႕ရွိရပါလိမ့္မည္။ 

စာရႈသူ မိတ္ေဆြမ်ား မွတ္ဥာဏ္ယိုေပါက္မ်ားျဖင့္ ေခါင္းကိုက္ရျခင္း ဒုကၡမွ ကင္းေ၀းပါေစ။ 

Friday, May 9, 2008

၀က္ေျခေထာက္ဟင္းေအး ခ်က္နည္း


အေပၚကပံုက အေမေရးပုိ႕လာတဲ့ စာေလးက ျဖတ္ထားတာပါ။ ၀က္ေျခေထာက္ဟင္းေအး (ဟင္းတံု) လုိ႕ေခၚတဲ့ တံုတံုတံုတံုနဲ႕ ရွမ္းဟင္းေလးကုိ အားလပ္ရက္မွာ ခ်က္စားလုိသူမ်ားအတြက္ တင္ျပလုိက္ပါတယ္။

ပါ၀င္ပစၥည္းမ်ား။
၀က္ေျခေထာက္ (ေရွ႕လက္) ၁ ေခ်ာင္း၊
၀က္ၾကြက္သားလံုးသား ၁ လံုး၊
ခရမ္းသီး (လတ္လတ္) ၁ လံုး၊
ခရမ္းခ်ဥ္သီး (အရြယ္ေတာ္) ၂ လံုး၊
ဆား အနည္းငယ္၊
ပဲငံျပာရည္ (က်ဲ) အနည္းငယ္၊
ခရမ္းခ်ဥ္သီးေဆာ့စ္ အနည္းငယ္၊
ၾကက္သြန္ျဖဴ ၁ လံုး၊
ၾကက္သြန္နီ ၂ လံုး၊
ဆီ အနည္းငယ္၊

ပထမဆံုး ၀က္ေျခေထာက္နဲ႕ ၾကြက္သားလံုးသားကုိ ဆားပါေလရံု၊ ပဲငံျပာရည္ တဇြန္းနဲ႕ ေရခမ္းျပဳတ္ပါ။ ႏူးအိေပ်ာ့ၿပဲသြားတဲ့အထိ ျပဳတ္ရမွာျဖစ္ပါတယ္။ ျပဳတ္ေနတုန္းမွာ ၾကက္သြန္ျဖဴအခြံခြာ ဓားျပားရုိက္ထားပါ။ ၾကက္သြန္နီကုိလဲ အခြံခြာ၊ လွီး၊ ခရမ္းခ်ဥ္သီးကုိလဲ လွီး၊ ခရမ္းသီးကုိ အခြံခြာ (မွားရုိက္တာမဟုတ္ပါ၊ ခရမ္းသီးကုိ အခြံခြာရပါမယ္) အတံုးေသးေသးေလးေတြ လွီးထားပါ။

၀က္သားေတြေပ်ာ့ၿပဲသြားၿပီဆုိရင္ အရုိးႏႊင္ၿပီး ေသးေသးေလးေတြ လွီးပါ။ ဆီအုိးတည္၊ ဆီပူရင္ ၾကက္သြန္ျဖဴ/နီကုိ ဆီသတ္ (ဆီထဲထည့္ေၾကာ္ဟု ဆုိလုိသည္)၊ အနံ႕ေလးေမႊးလာရင္ ခရမ္းခ်ဥ္သီးလွီးထားတာ အုိးထဲထည့္ပါ။ ခဏေမႊေပးရင္ ခရမ္းခ်ဥ္သီး အရည္ေပ်ာ္သြားပါလိမ့္မယ္။ ဆားထည့္ပါ။ ခရမ္းခ်ဥ္သီးေဆာ့စ္ကုိလဲ ထည့္ပါ။ ေရနဲနဲနဲ႕ ခရမ္းသီးလွီးထားတာပါထည့္ပါ။ ခဏေလာက္ထပ္ၾကာရင္ ခရမ္းသီးက ေပ်ာ့လာပါလိမ့္မယ္။ အဲဒီအခ်ိန္မွာ လွီးထားတဲ့ ၀က္ေျခေထာက္ေတြနဲ႕ ၀က္သားေတြ ထည့္ေမႊပါ။ ေရနည္းနည္းထပ္ထည့္ပါ။ အုိးကုိ မီးေအးေအးနဲ႕ (မီးသိပ္မျပင္းေစပဲနဲ႕) ထားၿပီး အဆက္မျပတ္ေမႊေပးပါ။

တျဖည္းျဖည္းပ်စ္လာတာကုိ ခံစားရပါလိမ့္မယ္။ အေတာ္အတန္ပ်စ္လာၿပီဆုိရင္ အုိးကို မီးေပၚကခ်။ အေအးခံပါ။ ေအးၿပီဆုိမွ ခြက္ေလးေတြထဲကုိထည့္၊ ေရခဲေသတၱာေအာက္ထပ္ (အေပၚထပ္မဟုတ္ပါ၊ ေအးတဲ့ေဒသမွာဆုိရင္ေတာ့ ေရခဲေသတၱာထဲ ထည့္စရာမလုိပဲ ဒီအတုိင္း စားပြဲေပၚ တင္ထားလဲ ရပါတယ္။ ခဲပါတယ္။) ထဲကုိ ထည့္။ ၃ နာရီေလာက္ၾကာၿပီဆုိရင္ စားလုိ႕ရပါၿပီ။ (နံနံပင္ေလးေတြ လွီးၿပီး ကပ္စားရင္ပုိေကာင္းပါတယ္။ ထမင္း သို႕မဟုတ္ ေပါင္မုန္႕နဲ႕ စားႏုိင္ပါတယ္။) ေအာက္မွာ ခ်က္ၿပီးသားပံုေလးပါ။

Wednesday, August 22, 2007

၃၇၇၃ျဖင့္ စာတမ္းငယ္အလြယ္ေရးနည္း။

က်ိဳးေၾကာင္းျပ စာစီစာကံုး၊ စာတမ္းငယ္ (Analytical Essay)ေရးတယ္ဆုိတာ လြယ္ကူတဲ့ အလုပ္တစ္ခု မဟုတ္ပါဘူး။ အေလ့အက်င့္ မရွိတဲ့လူေတြအဖုိ႕ စာရြက္နဲ႕ ခဲတံ ေပးထားလဲ အခ်ိန္တုိအတြင္းမွာ ေကာင္းမြန္တဲ့ စာတမ္းငယ္တစ္ေစာင္ ေရးသားဖုိ႕က အခက္အခဲ ရွိပါတယ္။ ေကာင္းမြန္စြာ ေလ့က်င့္ထားတဲ့ အေတြ႕အႀကံဳရင့္ ပညာရွင္မ်ားပင္လ်င္ စိတ္မပါလုိ႕ရွိရင္ အရည္အေသြးမီ စာတမ္းႈငယ္မ်ား ေရးသားႏုိင္ျခင္း မရွိပါဘူး။

ဒါေပမဲ့ မေရးပဲ ေနလုိ႕ကလဲ မျဖစ္ဘူးေလ။ ဘာလုိ႕လဲဆုိေတာ့ အေမရိကားႏွင့္တကြ ကမၻာအႏွံ႕အျပားမွာ ဘြဲ႕ႀကိဳ/ဘြဲ႕လြန္ ဒီပလုိမာ၊ ဒီဂရီ၊ မဟာဘြဲ႕ စတာေတြကို တက္ေရာက္ဖုိ႕ လုိအပ္တဲ့ တုိဖယ္လ္/တီဒဗလ်ဴအီး (TOEFL/TWE) စာေမးပြဲေတြ၊ အက္စ္ေအတီ ၁ (SAT I) နဲ႕ အေထြေထြ ဂ်ီအာရ္အီး (GRE - General) စာေမးပြဲေတြမွာ အခ်ိန္တုိ မိနစ္ ၃၀ မွ ၄၅ မိနစ္အတြင္း က်ိဳးေၾကာင္းျပ စာစီစာကံုး၊ စာတမ္းငယ္မ်ားကုိ ေရးသားသီကံုးဖုိ႕ လုိအပ္လုိ႕ပဲ ျဖစ္ပါတယ္။

ဒီေလာက္ခက္ခဲတဲ့ စာတမ္းငယ္ေရးသားျခင္းကုိ အခ်ိန္တုိအတြင္း အရည္အေသြးမီ ေရးသားႏုိင္ဖုိ႕ ျဖတ္လမ္းနည္းတစ္ခုေတာ့ ရွိပါတယ္။ ဒီနည္းကုိ ပညာေရး၊ လူမႈေရး၊ စီးပြားေရးဆုိင္ရာ နယ္ပယ္မ်ားမွာ အသံုးမျပဳႏုိင္ေပမဲ့ စာေမးပြဲမ်ား ေျဖဆုိရာမွာ အခ်ိန္တုိ (နာရီ၀က္ - မိနစ္ ၄၀) အတြင္း အရည္အေသြးမီ စာတမ္းငယ္မ်ား ေရးသားဖုိ႕ အသံုးျပဳႏုိင္ပါတယ္။ ယခု ၃၇၇၃ (သရီး ဆဲဗင္း ဆဲဗင္း သရီး) လုိ႕ အလြယ္ေခၚေ၀ၚၾကတဲ့ စာတမ္းငယ္ေရးသားနည္းကုိ ေဖာ္ျပမွာျဖစ္ပါတယ္။

၃၇၇၃ ဆုိတဲ့ ဂဏန္း ၄ လံုးဟာ စာပုိဒ္ေလးပုိဒ္မွာပါ၀င္တဲ့ ၀ါက်ေၾကာင္းေရကုိ ေဖာ္ျပတာျဖစ္ပါတယ္။ (ပံုမွန္အားျဖင့္ ဒီနည္းနဲ႕ ေရးတဲ့ စာတမ္းငယ္မ်ားဟာ စာလံုးေရ ၃၀၀ - ၄၅၀ ၾကား ေရးသားသူရဲ႕ စကားလံုး ၾကြယ္၀မႈေပၚမူတည္ၿပီး ရွိတတ္လုိ႕ စာေမးပြဲမ်ားရဲ႕ လုိအပ္ခ်က္နဲ႕ ကြက္တိပါပဲ) ဆုိလုိတာက ပထမ နိဒါန္း စာပုိဒ္မွာ ၀ါက် ၃ေၾကာင္း၊ ဒုတိယနဲ႕ တတိယစာပုိဒ္မ်ားမွာ ၀ါက် ၇ေၾကာင္းစီနဲ႕ ေနာက္ဆံုး နိဂံုး စာပုိဒ္မွာ ၀ါက် ၃ေၾကာင္း ပါ၀င္ရမယ္လုိ႕ ဆုိလုိတာျဖစ္ပါတယ္။

အဆုိပါ၀ါက်မ်ားမွာ ဘာေတြ ေရးထည့္လုိက္ရမယ္ ဆုိတာကုိ မေျပာခင္မွာ စာေမးပြဲေတြမွာ ေမးေလ့ရွိတဲ့ ေမးခြန္းပံုစံကုိ ၾကည့္ၾကစုိ႕။ မ်ားေသာအားျဖင့္ ေမးေလ့ရွိတာက ႀကိဳတင္ျပင္ဆင္မႈ မလုိအပ္တဲ့ အေျဖမွန္မရွိတဲ့ အေထြေထြ ၀ိေရာဓိ ေမးခြန္းေတြပဲ ျဖစ္ပါတယ္။ ဥပမာအားျဖင့္ သုေတသနလုပ္ငန္းမ်ားအေနႏွင့္ အေျခခံ လုိအပ္ခ်က္မ်ားကုိ ျဖည့္ဆည္းေရး ဦးစားေပးသင့္သလား၊ အဆင့္ျမင့္ နည္းပညာမ်ားကုိ ရွာေဖြေတြ႕ရွိေရး ဦးစားေပးသင့္သလား ဆုိတဲ့ ေမးခြန္းမ်ိဳးပဲ ျဖစ္ပါတယ္။

အထက္ပါ ဥပမာ ေမးခြန္းအရဆုိရင္ ပထမ နိဒါန္းစာပုိဒ္မွာ ဘာကုိေရးရမလဲဆုိေတာ့ (၁) ၀ိေရာဓိကုိ အနက္ဖြင့္ျပတဲ့ စာေၾကာင္း (၂) အနက္ဖြင့္ျပတဲ့ စာေၾကာင္းကုိ ရွင္းျပခ်က္ (၃) ဒီစာတမ္းမွာေတာ့ ဒီ၀ိေရာဓိကုိ ခ်က္က်လက္က် သံုးသပ္ျပမွာျဖစ္ပါတယ္ဆုိတဲ့ အေၾကာင္း ေတြကုိ ေရးရမွာျဖစ္ပါတယ္။ မူကြဲတမ်ိဳးမွာေတာ့ (၁) အေျခခံလုိအပ္ခ်က္ဟာ အေရးႀကီးတယ္လုိ႕ တခ်ိဳ႕က ယူဆၾကတယ္ (၂) တခ်ိဳ႕က်ေတာ့လဲ အဆင့္ျမင့္နည္းပညာမ်ားျပည့္စံုရင္ အေျခခံလုိအပ္ခ်က္ အေရးမႀကီးဘူးလုိ႕ ေျပာတယ္ (၃) ဒီ၀ိေရာဓိကုိ သံုးသပ္ျပမွာ ျဖစ္ပါတယ္လုိ႕ ေရးခုိင္းၾကပါတယ္။ ဒါကေတာ့ ေမးခြန္းေပၚမွာ မူတည္ၿပီး သင့္ေတာ္သလုိ လွည့္ပတ္ ေရးသားရမွာ ျဖစ္ပါတယ္။

ဒုတိယစာပုိဒ္နဲ႕ တတိယစာပုိဒ္ ဖြဲ႕စည္းပံုက တူတူပါပဲ။ ဘက္တစ္ဘက္စီကုိ စာပုိဒ္တစ္ပုိဒ္နဲ႕ သံုးသပ္တင္ျပရတာျဖစ္ပါတယ္။ ပံုေသနည္းအရေတာ့ အဆုိတင္သြင္း၀ါက်တစ္ေၾကာင္း၊ ဥပမာျပ၀ါက်တစ္ေၾကာင္းက်စီနဲ႕နဲ႕ အဆုိ ၃ ခုကုိတင္သြင္းၿပီး အပိတ္စာေၾကာင္း တစ္ေၾကာင္း (စုစုေပါင္း ၇ ေၾကာင္း)ေရးရမွာျဖစ္ပါတယ္။ သုိ႕ေသာ္လဲ အႏွစ္သာရအရေတာ့ အေရးအသား ကၽမ္းက်င္ပုိင္ႏုိင္ရင္ ပုိင္ႏုိင္သလုိ အဆုိ ၃ ခု မတင္သြင္းပဲ သင့္ေတာ္သလုိ ဘက္တစ္ဘက္စီအတြက္ စာတစ္ပုိဒ္စီ သံုးသပ္တင္ျပရင္ ၿပီးတာပါပဲ။ (စာေရးသူ ကုိယ္တုိင္ကေတာ့ ပံုေသနည္းကေန နည္းနည္းခြဲထြက္ၿပီး ေရးေလ့ရွိပါတယ္။ ႏုိ႕မုိ႕ဆုိ ကုိယ့္လုိ ပံုေသနည္းသံုးသူေတြ မ်ားေနရင္ ပံုစံတူၿပီး အမွတ္သိပ္မရမွာ စုိးလုိ႕ ျဖစ္ပါတယ္။)

ေနာက္ဆံုးစာပုိဒ္ (နိဂံုး) မွာေတာ့ (၁) ဒုတိယစာပုိဒ္ရဲ႕ အခ်ဳပ္ (၂) တတိယစာပုိဒ္ရဲ႕ အခ်ဳပ္နဲ႕ (၃) ကုိယ့္အျမင္ကုိ ေရးသားရမွာျဖစ္ပါတယ္။ ဘက္တစ္ဘက္စီရဲ႕ စာပုိဒ္ေတြရဲ႕ အခ်ဳပ္ဆုိတာကေတာ့ ဥပမာအားျဖင့္ က၊ ခ၊ ဂ တုိ႕ေၾကာင့္ အေျခခံလုိအပ္ခ်က္မ်ား အေရးႀကီးပါသည္ ဆုိတာမ်ိဳးေပါ့။ ေနာက္ဆံုး ကုိယ့္အျမင္ကေတာ့ ခ်ံဳၾကည့္လုိက္ရင္ အေျခခံလုိအပ္ခ်က္/အဆင့္ျမင့္နည္းပညာက ပုိအေရးႀကီးသည္ကုိ ေတြ႕ရွိရပါသည္ ဆိုတာမ်ိဳးျဖစ္ပါတယ္။ မူကြဲတမ်ိဳးမွာေတာ့ တူတူပဲ အေရးႀကီးပါတယ္ ဒါမွမဟုတ္ အေျခအေနေပၚ မူတည္ပါတယ္လုိ႕ ေရးခုိင္းပါတယ္။ ဒါေပမဲ့လဲ အဲဒီလုိေရးတာက ေကာင္းက်ိဳး ဆုိးကြက္ေတြ ရွိပါတယ္။

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

ဒီေလာက္ဆုိရင္ျဖင့္ စာရႈသူအေဆြတုိ႕ ၃၇၇၃ ကုိအသံုးျပဳလုိ႕ စာတမ္းငယ္မ်ား ေခ်ာေခ်ာေမြ႕ေမြ႕ ေရးသားႏုိင္ေလာက္ၿပီထင္ပါတယ္။ တစ္ခု မေမ့ဖုိ႕က ၃၇၇၃ ကုိ ၂ ခါ ၃ ခါေလာက္ စမ္းသပ္ေရးသားၿပီးမွ တုိက္ပြဲ၀င္ (စာေမးပြဲေျဖ) ဖုိ႕ပါပဲ။ ၃ - ၄ ခါေလာက္ေလ့က်င့္ၿပီးသြားရင္ ထပ္ေလ့က်င့္စရာမလုိေတာ့ပဲ စာေမးပြဲတုိင္းကုိ ေျဖခ်င္တဲ့အခ်ိန္။ေနရာမွာ ေျဖဆုိႏုိင္မွာ ျဖစ္ပါတယ္။ စာေရးသူ ေရးသားထားတဲ့ နမူနာ စာတမ္းငယ္ေတြကုိလဲ ဖတ္ၾကည့္လုိက္ပါဦးေနာ္။ (အားလံုးကုိ ၃၇၇၃ေရးနည္းျဖင့္ မေရးထားပါ)

Impact of Media on Celebrities

Disclaimer: The followings are just an analytical essay for educational purposes only and may not reflect the blogger's opinion on the subject matter.

Movie and TV starts, famous vocalists, politicians, governors and royalties inevitably find that they lost their privacy. Some argue that the lost of privacy is, in fact, the price of their becoming public figure. However, some public figures and their spoke person insisted on maintaining their privacy. In this essay, we are going to analyze the arguments concerning privacy of public figures.

Once a person becomes a celebrity, it is intolerable that he may have a group of fans. The fans love their idol. They respect him. And they are curious of the detailed daily life of their celebrity as if caring parents aware of their child’s affairs. The only difference is that our celebrity is a famous adult who love his privacy. Most of the public understand not to interfere with other people’s affair but they love so deep and feel so familiar with the public figure that they forget the fact that the celebrity in question is a complete stranger to them.

On the other hand, too much curiosity can disturb any person’s individual life. If every detail of the actions and behavior of a celebrity had been recorded and published, he would – no doubt – lose his personal privacy. Privacy is one of the most fundamental human rights. If we are to be civilized, we should respect their individual privacy. For example, a famous pop-star can be a homosexual and, like every gay on earth, he would not like to announce this fact. He may want to keep it secret but his publicity attracts yellow journalists and it is revealed. To whom the pop-star would blame to?

Besides, interfering celebrities’ privacy can cause financial lost and sometimes even harm. A famous artist cannot walk home from work like any other normal personnel as he might run into exciting mob asking for autographs. In this case, he was unintentionally prohibited from walking back home which a typical worker can enjoy. Princess Diana’s death is also another vigorous example of the dark side of publicity interfering personal privacy.

Actually, success and publicity almost always leads to loss of privacy. But fans should be more aware that their idol is also a human being and he or she may want some liberty. Public and journalists should control themselves not to interfere too much into celebrities’ private life. However, public figures should understand that the inevitable price of becoming a big-one is the loss of privacy.

409 words (inclusive the headers)

Investment: to Hi-techs or to Basic Needs

Disclaimer: The followings are just an analytical essay for educational purposes only and may not reflect the blogger's opinion on the subject matter.

The statement, “governments should not invest more on higher technologies, like advance computing, electronic and/or weaponry, while some civilians suffer poverty”, can actually translated into “Macro-economics theories cannot be practiced when the country is under-developed.” In fact, macro-economists, who tend to solve the cause of a problem, and micro-economists, who prefer short-term remedies, fought the similar arguments over many decades. In this essay, I’d contrast the advantages of investing in hi-tech including computer, electronic and communications technologies over spending budget more in solving basic needs.

Basic needs arise from poverty, which, in turn, arises from lack of technologies. A country can never be developed until it obtains proper “technical-know-how” to prop its economy instead of “technical-no-how”. Allocating more budgets for solving basic needs is but a temporary solution as it does not solve the problem. However, spending more research funds in technical fields like computing, computer science and computer engineering is a permanent solution, gaining technological advancement which can solve, eventually in time, basic needs of the whole country.

For example, India government had spent millions of dollars to alleviate the poverty of farmers of remote regions. Despite the amount of funds India government spent over many decades, the farmers were still poor. Finally, India’s Department of Agriculture introduced a scheme where farmers can access the internet (free of charge) via a computer with a hand winding generator on back of wandering bicycles. They can only access internet only once, sometimes twice, a week. However, the farmers are more updated of the price-changes in the grocery market and the poverty problem was somewhat relieved.

Therefore, both spending directly for basic needs and investing in technical matters can help the civilians a lot. However, investment is a long-term and strategic decision whereas solving directly basic needs is a short-term and tactical decision. What amount of budget in percentage to be allotted to each depends on many other factors, including but not limited to country’s population, economic situation, politics and other factors.

337 words (inclusive the header)