1 Programming Skill တက္လာေစရန္ ေလ့က်င့္ခန္းမ်ား 14th October 2009, 6:21 pm
sHa92
Founder
ဒီေလ့က်င့္ခန္းေတြဟာ Programming ကိုေလ့လာေနသူ မ်ားအတြက္သာမက ၊ Reverse Engineering ကိုေလ့လာေနေသာ က်ေနာ္တို႔လုိ လူငယ္မ်ားအတြက္ပါ အက်ိဳးရိွေစတဲ့အတြက္ ေသခ်ာေလး လုပ္ၾကည့္ဖို႔ ေၿပာခ်င္ပါတယ္။
ဒီေလ့က်င့္ခန္းေတြကို Binary Auditor ကေန ရရိွထားတာ ၿဖစ္ၿပီးေတာ့ Cracking လုပ္ဖို႔အတြက္ က်ေနာ္ကိုယ္တုိင္လည္း ေလ့လာခဲ့ရတဲ့ ေလ့က်င့္ခန္းေတြၿဖစ္ပါတယ္။
မူရင္းနဲ႔ေတာ့ အေရးအသားကြာပါတယ္။ ၿမန္မာေတြနဲ႔ကိုက္ညီမယ့္ ဇာတ္လမ္းေလးေတြအေနနဲ႔ ၿပင္ၿပီးေရးထားလို႔ပါ။ [You must be registered and logged in to see this image.]
Logic ေကာင္းလာေစဖို႔အတြက္ ရည္ရြယ္၍ ေရးသားေပးပါသည္။
အခန္းဆက္နဲ႔ သြားမွာၿဖစ္ပါတယ္။ Array အတြက္ဆုိ Array ေလ့က်င့္ခန္းေတြနဲ႔ ၊ File I/O ၊ String စသည္ၿဖင့္ အခန္းလုိက္ေလ့က်င့္ခန္းေတြေရးေပးသြားမွာပါ။
တစ္ခုေၿပာခ်င္တာကေတာ့ က်ေနာ္ေရးေပးမယ့္ Problem ေတြကိုေၿဖရွင္းမယ့္သူေတြအေနနဲ႔ Reverse Engineering ကိုေလ့လာေနတဲ့သူဆုိရင္ Problem မ်ားေၿဖရွင္းရာမွာ C (သို႔) C++ (သို႔) Assembly တစ္ခုခုကိုသာ သံုးေစခ်င္ပါတယ္။ အကုန္လုံးရရင္ေတာ့ အကုန္လုံးနဲ႔သာေရးၾကည့္ေပေတာ့။ [You must be registered and logged in to see this image.]
ရိုးရိုးတန္းတန္း Programming သက္သက္ ကို ေလ့လာတာဆုိရင္ေတာ့ ၾကိဳက္တာသံုးၿပီးေရးပါ။ အဓိကကေတာ့ Logic ပါဘဲ။
Chapter 1- Common Array Algorithms
1.1 Acid Level of Coffee
က်ေနာ္တို႔ဟုိရက္တစ္ရက္က Coffee တစ္ခြက္မွာပါတဲ့ Acid Level နဲ႔ ပါတ္သက္ၿပီးေတာ့ စိတ္၀င္စားလို႔ေလ့လာခ်င္တဲ့အတြက္ ေၿမနီကုန္းက IceBerry ကို သြားခဲ့ပါတယ္။
အဲဒီ့လည္းေရာက္ေရာ ေကာ္ဖီတစ္ခြက္မွာလိုက္ၿပီးေတာ့ ၊ လာခ်တဲ့ ေကာ္ဖီခြက္မွာ က်ေနာ့္ဆီမွာ အသင့္ပါလာတဲ့ pH meter ေလးနဲ႔ တုိင္းလုိက္တဲ့အခါမွာရလာတဲ့ result ေတြကို စာရြက္တစ္ရြက္ နဲ႔ မွတ္လိုက္တာ ေအာက္ပါအတိုင္း ရလာပါတယ္။ (ပထမဆုံးလိုင္းက (13) ဆုိတာကေတာ့ Data ဘယ္ေလာက္ရိွလဲဆုိတာကို မွတ္ထားတာပါ)
ကံမေကာင္းစြာနဲ႔ဘဲ က်ေနာ္ရဲ႕ pH meter က စုတ္ေနေတာ့ တုိင္းတာတြက္ခ်က္မႈ သိပ္ၿပီး မတိက်တဲ့အတြက္ အမ်ိဳးမ်ိဳးေသာ အေၿဖေတြထြက္လာပါတယ္။ အဲဒီ့အတြက္ က်ေနာ့္ အေနနဲ႔ ရလာတဲ့ အေၿဖေတြထဲကေန Average ရွာဖို႔အတြက္စဥ္းစားမိပါတယ္။ အဲဒါနဲ႔ ပတ္သက္ၿပီးေတာ့ Program ေရးဖို႔အတြက္လည္းက်ေနာ့္သူငယ္ခ်င္း တစ္ေယာက္က နည္းနည္း ေၿပာၿပထားပါတယ္။ ဒါေပမယ့္ က်ေနာ္က မေရးတတ္ဘူးၿဖစ္ေနလို႔ ကူညီပါဦးေနာ္....
သူေၿပာၿပသြားတာကေတာ့...
text file တစ္ခုကို create လုပ္ၿပီးေတာ့ ခုနက data ေတြကိုထည့္ထားပါ။ ၿပီးရင္ Program ေရးၿပီးေတာ့ array ခန္းထဲကို အဲဒီ့ text file ထဲက Data ေတြကို ထည့္လိုက္ပါ။ အဲဒီ့ data ေတြကို တြက္ခ်က္ၿပီးေတာ့ Average တစ္ခုအရင္ရွာပါ။ ရလာတဲ့အေၿဖနဲ႔ အေ၀းဆုံးတန္ဖိုး (ၾကီးလည္းရတယ္ ၊ ငယ္လည္းရတယ္) ကို ခုနက Array ခန္းထဲမွာသြားၿပန္ရွာပါ။ ရွာလို႔ေတြ႔တဲ့ တန္ဖုိးကို -1 ဆုိၿပီးေတာ့ ေၿပာင္းလုိက္ပါ။ (Program Run ရာမွာ Array ထဲမွာ ထည့္မစဥ္းစားဖူးဆုိတဲ့ သေဘာကိုေၿပာတာပါ)။ အဲလို -1 ကိုေၿပာင္းၿပီးရင္ေတာ့ Average ထပ္ရွာပါ။
ရလာတဲ့ Average ဟာ အေၿဖမွန္ပါဘဲ။
သူေၿပာတာေတာ့လြယ္တယ္ေနာ္။ က်ေနာ့္အတြက္ကေတာ့ Coding ေရးရတာ ရႈပ္ေနလို႔ ၊ ဖိုရမ္ထဲက ညီအစ္ကိုေမာင္ႏွမမ်ား အေနနဲ႔ ကူညီၾကမယ္ထင္ပါရဲ႕....
ေအာ္ သူက က်ေနာ္ ခုနက ရလာတဲ့ အေၿဖကို Program Run ၿပလုိက္ေသးတယ္။ အေၿဖမွန္က ဘာလဲဆုိတာသိေအာင္လို႔တဲ့ေလ..
သူ႔ Program Run တာကို ၾကည့္တာနဲ႔တင္ အစ္ကို၊အစ္မတို႔ Coding ေရးတတ္ေနၿပီထင္တယ္... က်ေနာ္ကေတာ့ ဘယ္လိုသင္သင္ မေရးတတ္လို႔ဗ်ာ..... ေတာ္ေတာ္ အခက္ေတြ႔ေနရတယ္...
အဲဒါေၾကာင့္ က်ေနာ့္ကို ကူညီၿပီးေၿဖရွင္းေပးၾကပါေနာ္။
ဒီေန႔အတြက္ က်ေနာ့္အခက္အခဲကေတာ့ ဒီေလာက္ပါဘဲ။ ေနာက္ေန႔ေတြမွာ ဆက္ၿပီးေတာ့ က်ေနာ့္ အခက္အခဲေလးေတြ လာေမးပါဦးမယ္.... [You must be registered and logged in to see this image.]
ေပ်ာ္ရႊင္ၾကပါေစ....
ဒီေလ့က်င့္ခန္းေတြကို Binary Auditor ကေန ရရိွထားတာ ၿဖစ္ၿပီးေတာ့ Cracking လုပ္ဖို႔အတြက္ က်ေနာ္ကိုယ္တုိင္လည္း ေလ့လာခဲ့ရတဲ့ ေလ့က်င့္ခန္းေတြၿဖစ္ပါတယ္။
မူရင္းနဲ႔ေတာ့ အေရးအသားကြာပါတယ္။ ၿမန္မာေတြနဲ႔ကိုက္ညီမယ့္ ဇာတ္လမ္းေလးေတြအေနနဲ႔ ၿပင္ၿပီးေရးထားလို႔ပါ။ [You must be registered and logged in to see this image.]
Logic ေကာင္းလာေစဖို႔အတြက္ ရည္ရြယ္၍ ေရးသားေပးပါသည္။
အခန္းဆက္နဲ႔ သြားမွာၿဖစ္ပါတယ္။ Array အတြက္ဆုိ Array ေလ့က်င့္ခန္းေတြနဲ႔ ၊ File I/O ၊ String စသည္ၿဖင့္ အခန္းလုိက္ေလ့က်င့္ခန္းေတြေရးေပးသြားမွာပါ။
တစ္ခုေၿပာခ်င္တာကေတာ့ က်ေနာ္ေရးေပးမယ့္ Problem ေတြကိုေၿဖရွင္းမယ့္သူေတြအေနနဲ႔ Reverse Engineering ကိုေလ့လာေနတဲ့သူဆုိရင္ Problem မ်ားေၿဖရွင္းရာမွာ C (သို႔) C++ (သို႔) Assembly တစ္ခုခုကိုသာ သံုးေစခ်င္ပါတယ္။ အကုန္လုံးရရင္ေတာ့ အကုန္လုံးနဲ႔သာေရးၾကည့္ေပေတာ့။ [You must be registered and logged in to see this image.]
ရိုးရိုးတန္းတန္း Programming သက္သက္ ကို ေလ့လာတာဆုိရင္ေတာ့ ၾကိဳက္တာသံုးၿပီးေရးပါ။ အဓိကကေတာ့ Logic ပါဘဲ။
Chapter 1- Common Array Algorithms
1.1 Acid Level of Coffee
က်ေနာ္တို႔ဟုိရက္တစ္ရက္က Coffee တစ္ခြက္မွာပါတဲ့ Acid Level နဲ႔ ပါတ္သက္ၿပီးေတာ့ စိတ္၀င္စားလို႔ေလ့လာခ်င္တဲ့အတြက္ ေၿမနီကုန္းက IceBerry ကို သြားခဲ့ပါတယ္။
အဲဒီ့လည္းေရာက္ေရာ ေကာ္ဖီတစ္ခြက္မွာလိုက္ၿပီးေတာ့ ၊ လာခ်တဲ့ ေကာ္ဖီခြက္မွာ က်ေနာ့္ဆီမွာ အသင့္ပါလာတဲ့ pH meter ေလးနဲ႔ တုိင္းလုိက္တဲ့အခါမွာရလာတဲ့ result ေတြကို စာရြက္တစ္ရြက္ နဲ႔ မွတ္လိုက္တာ ေအာက္ပါအတိုင္း ရလာပါတယ္။ (ပထမဆုံးလိုင္းက (13) ဆုိတာကေတာ့ Data ဘယ္ေလာက္ရိွလဲဆုိတာကို မွတ္ထားတာပါ)
13
5.6
6.2
6.0
5.5
5.7
6.1
7.4
5.5
5.5
6.3
6.4
4.0
6.9
ကံမေကာင္းစြာနဲ႔ဘဲ က်ေနာ္ရဲ႕ pH meter က စုတ္ေနေတာ့ တုိင္းတာတြက္ခ်က္မႈ သိပ္ၿပီး မတိက်တဲ့အတြက္ အမ်ိဳးမ်ိဳးေသာ အေၿဖေတြထြက္လာပါတယ္။ အဲဒီ့အတြက္ က်ေနာ့္ အေနနဲ႔ ရလာတဲ့ အေၿဖေတြထဲကေန Average ရွာဖို႔အတြက္စဥ္းစားမိပါတယ္။ အဲဒါနဲ႔ ပတ္သက္ၿပီးေတာ့ Program ေရးဖို႔အတြက္လည္းက်ေနာ့္သူငယ္ခ်င္း တစ္ေယာက္က နည္းနည္း ေၿပာၿပထားပါတယ္။ ဒါေပမယ့္ က်ေနာ္က မေရးတတ္ဘူးၿဖစ္ေနလို႔ ကူညီပါဦးေနာ္....
သူေၿပာၿပသြားတာကေတာ့...
text file တစ္ခုကို create လုပ္ၿပီးေတာ့ ခုနက data ေတြကိုထည့္ထားပါ။ ၿပီးရင္ Program ေရးၿပီးေတာ့ array ခန္းထဲကို အဲဒီ့ text file ထဲက Data ေတြကို ထည့္လိုက္ပါ။ အဲဒီ့ data ေတြကို တြက္ခ်က္ၿပီးေတာ့ Average တစ္ခုအရင္ရွာပါ။ ရလာတဲ့အေၿဖနဲ႔ အေ၀းဆုံးတန္ဖိုး (ၾကီးလည္းရတယ္ ၊ ငယ္လည္းရတယ္) ကို ခုနက Array ခန္းထဲမွာသြားၿပန္ရွာပါ။ ရွာလို႔ေတြ႔တဲ့ တန္ဖုိးကို -1 ဆုိၿပီးေတာ့ ေၿပာင္းလုိက္ပါ။ (Program Run ရာမွာ Array ထဲမွာ ထည့္မစဥ္းစားဖူးဆုိတဲ့ သေဘာကိုေၿပာတာပါ)။ အဲလို -1 ကိုေၿပာင္းၿပီးရင္ေတာ့ Average ထပ္ရွာပါ။
ရလာတဲ့ Average ဟာ အေၿဖမွန္ပါဘဲ။
သူေၿပာတာေတာ့လြယ္တယ္ေနာ္။ က်ေနာ့္အတြက္ကေတာ့ Coding ေရးရတာ ရႈပ္ေနလို႔ ၊ ဖိုရမ္ထဲက ညီအစ္ကိုေမာင္ႏွမမ်ား အေနနဲ႔ ကူညီၾကမယ္ထင္ပါရဲ႕....
ေအာ္ သူက က်ေနာ္ ခုနက ရလာတဲ့ အေၿဖကို Program Run ၿပလုိက္ေသးတယ္။ အေၿဖမွန္က ဘာလဲဆုိတာသိေအာင္လို႔တဲ့ေလ..
C:\> CoffeeAverage < CoffeeData.txt
data[ 0 ] = 5.6
data[ 1 ] = 6.2
data[ 2 ] = 6.0
data[ 3 ] = 5.5
data[ 4 ] = 5.7
data[ 5 ] = 6.1
data[ 6 ] = 7.4
data[ 7 ] = 5.5
data[ 8 ] = 5.5
data[ 9 ] = 6.3
data[ 10 ] = 6.4
data[ 11 ] = 4.0
data[ 12 ] = 6.9
average: 5.930769230769231
most distant value: 4.0
new average: 5.6230769230769235
သူ႔ Program Run တာကို ၾကည့္တာနဲ႔တင္ အစ္ကို၊အစ္မတို႔ Coding ေရးတတ္ေနၿပီထင္တယ္... က်ေနာ္ကေတာ့ ဘယ္လိုသင္သင္ မေရးတတ္လို႔ဗ်ာ..... ေတာ္ေတာ္ အခက္ေတြ႔ေနရတယ္...
အဲဒါေၾကာင့္ က်ေနာ့္ကို ကူညီၿပီးေၿဖရွင္းေပးၾကပါေနာ္။
ဒီေန႔အတြက္ က်ေနာ့္အခက္အခဲကေတာ့ ဒီေလာက္ပါဘဲ။ ေနာက္ေန႔ေတြမွာ ဆက္ၿပီးေတာ့ က်ေနာ့္ အခက္အခဲေလးေတြ လာေမးပါဦးမယ္.... [You must be registered and logged in to see this image.]
ေပ်ာ္ရႊင္ၾကပါေစ....