Wednesday 29 June 2011

C# 2008 တြင္ပါ၀င္ေသာ Features အသစ္မ်ား

က်ေနာ္ C# ကို လက္ရိွ ေလ့လာေနတုန္းမွာ သိလာတာေလးေတြကို ေရးေပးမွာပါ။ Programming နဲ႔ ပတ္သက္လို႔ က်ေနာ့္အေနနဲ႔ Beginner အဆင့္ေလာက္ေတာင္မွ မသိေသးတဲ့အတြက္ အမွားအယြင္းေတြ အမ်ားၾကီး ပါႏိုင္ပါတယ္။ ၿပင္ဆင္ေပးၾကပါ။
ဒီလိုမ်ိဳး C# ရဲ႕ Features အသစ္ေတြ အေၾကာင္းကို ႏုိင္ငံၿခားဖိုရမ္ေတြမွာ အမ်ားၾကီးရွာေတြ႔ႏုိင္ပါတယ္။ C# 2008 ထြက္တာလည္း ေတာ္ေတာ္ၾကာေနပါၿပီ။ ဒါေပမယ့္ ၿမန္မာႏုိင္ငံက C# 2005 ကို သံုးေနတဲ့ သူေတြ အေနနဲ႔ C# 2008 မွာ ဘာမ်ား အသစ္ရိွလဲဆုိတာသိခ်င္တယ္ဆိုရင္ ၿမန္မာလို ေလ့လာလုိ႔ရေအာင္ေရးေပးလိုက္တာၿဖစ္ပါတယ္။ သိၿပီးသားဆုိရင္လည္း က်ေနာ္ ေရးတာက်န္ေနရင္ ၿဖည့္ေပးၾကဖုိ႔ ထပ္မံေၿပာခ်င္ပါတယ္။

အမ်ိဳးမ်ိဳးေသာ language extensions ေတြကို C# 3.0 မွာ “Orcas” ဆုိတဲ့ code-named နဲ႔ မိတ္ဆက္ခဲ့ၿပီးၿဖစ္ပါတယ္။ အဲဒီ့ Extension ေတြဟာ C# 2.0 ေပၚမွာအေၿခခံၿပီးတည္ေဆာက္ထားတာ ၿဖစ္ၿပီးေတာ့ Programming ေရးသားရာမွာ ေခတ္စားေနတဲ့ Functional Programming Style ကိုလည္း အေထာက္အကူၿဖစ္ေအာင္ ဖြဲ႔စည္းေပးထားပါတယ္။ အသစ္ၿဖစ္တဲ့ Feature ေတြကေတာ့...

• Auto-implemented Properties
• Implicitly Typed Local Variables
• Extension Methods
• Lambda Expressions
• Object Initializers
• Collection Initializers
• Anonymous Types
• Partial Methods
• Expression Trees
• Query Expressions စတာေတြဘဲၿဖစ္ပါတယ္။

အဲဒီ့ Feature အသစ္ေတြ အေၾကာင္းမေၿပာခင္ က်ေနာ့္အေနနဲ႔ .NET Programmer ေတြရဲ႕ ေရးသားနည္း အသစ္ၿဖစ္တဲ့ Functional Programming Style အေၾကာင္း အနည္းငယ္ေၿပာခ်င္ပါတယ္။ အဲဒီ့မွာ ၂ ပိုင္းခြဲထားပါေသးတယ္....

1. Functional Programming
Functional Programming ဆုိတာကေတာ့ Problem Solving လုပ္ရာမွာ Function စစ္စစ္ကိုသာ အဓိကသံုးၿပီးေရးသြားတဲ့ ပံုစံၿဖစ္ပါတယ္။ OOP programming language အမ်ားစုၿဖစ္တဲ့ Java,C#,C++ စတာေတြဟာေတာ့ Procedural Programming ကို ဦးစားေပးၿပီးေတာ့ Support လုပ္ပါတယ္။

2. Procedural Programming
Procedural Programming ဆုိတာကေတာ့ task တစ္ခု ဒါမွမဟုတ္ နည္းလမ္းတစ္ခုခုဟာ ၿပႆနာေၿဖရွင္းတဲ့ အခါမွာ ဘယ္လိုမ်ိဳးပံုစံနဲ႔ အလုပ္လုပ္သြားတယ္ဆုိတာကိုဘဲ အဓိကထားၿပီးေရးသားပါတယ္။ ဆုိလိုတာကေတာ့ Program တစ္ခုလံုးရဲ႕ Algorithms ေတြကို အဓိကထားၿပီးေရးၾကပါတယ္။ ဒါေပမယ့္ Functional Programming နဲ႔ ေရးေလ့ရိွတဲ့ Programmer ေတြအေနနဲ႔ကေတာ့ Method ဒါမွမဟုတ္ရင္ Function ေတြကို ေၾကၿငာတဲ့အခါမွာ အခ်က္အလက္ေတြဟာ ဘယ္ကေန ဘယ္ကို ၊ ဘယ္လိုပံုစံမ်ိဳးနဲ႔ ေၿပာင္းလဲသြားၾကတယ္ဆုိတာကို သာၾကည့္ၾကပါတယ္။ Procedure တစ္ခုလုံးရဲ႕ Algorithms ေတြကို အဓိကထား မစဥ္းစားေတာ့ပါဘူး။

အဲဒါေတြကေတာ့ Coding ေရးသားတဲ့ Style ႏွစ္ခုရဲ႕ ကြာၿခားခ်က္ေလးကို က်ေနာ္ သိသေလာက္ နည္းနည္းရီႊးၾကည့္တာပါ။

Auto-implemented Properties

က်ေနာ္ C# 2005 ကို သံုးဖူးတုန္းကဆုိရင္ Properties တစ္ခုကို ေၾကၿငာမယ္ဆုိရင္ေတာင္မွ Coding ရိုက္ရတာ တအားရွည္တဲ့ အတြက္ C# 2005 ကို ၁ လ သံုးၾကည့္ၿပီးေတာ့ ဆက္မသုံးေတာ့ပါဘူး။ အခု C# 2008 ထြက္လာေတာ့ သူ႔ရဲ႕ ဖီးခ်ား အသစ္ေတြကို နည္းနည္း ေလ့လာၾကည့္တဲ့အခါ Auto-Implemented Properties ပါေနတာေတြ႔ရလို႔ က်ေနာ့္အေနနဲ႔ C# ကို ၿပန္ေလ့လာၿဖစ္တာပါ။ ႏို႔မို႔ဆုိရင္ ခုခ်ိန္ထိ VB ကေန ထြက္ႏုိင္ဦးမွာမဟုတ္ေသးဘူး။ (ခုလည္း VB ကေန ခဏထြက္လာတာပါ။ ၿပီးရင္ ၿပန္၀င္ရဦးမွာ။ ပိုက္ပိုက္က အဲဒါနဲ႔ ရွာရမွာ။  ေလနည္းနည္းရွည္သြားဘီ။ ဆက္ေၿပာပါမယ္။

က်ေနာ္တုိ႔ C# 2.0 (2005) တုန္းကဆုိရင္ Properties တစ္ခုကို Declare လုပ္မယ္ဆုိရင္ ေအာက္ပါအတုိင္းလုပ္ရပါတယ္။


private int iStudID;
private string strStudName;

public int StudID
{
get
{ return iStudID; }
set
{ iStudID = value; }
}
public string StudName
{
get
{ return strStudName; }
set
{ strStudName = value; }
}


စာဖတ္သူအတြက္ေတာ့ ဘယ္လိုေနလဲမသိဘူး ၊ က်ေနာ့္အေနနဲ႔ကေတာ့ အဲဒီ့ Code ကို ရိုက္ရတာ ေတာ္ေတာ္ပင္ပန္းတယ္ဗ်ာ။
ဒါေပမယ့္ အခု C# 3.0 (2008) ထြက္လာတဲ့အခါမွာေတာ့ Auto-Implemented Properties နဲ႔တင္ ေတာ္ေတာ္ေလး အဆင္ေၿပသြားတယ္....မယံုရင္ ေအာက္က Coding ကိုၾကည့္လိုက္ပါ။


public class AutoProperties
{
public int
StudID { get; set; }
public string
StudName { get; set;}
}


ကဲ ဘယ္ေလာက္ တုိလဲ။ ေရးရတာမ်ား သက္သာလိုက္တာ ေၿပာမေနနဲ႔။ ဒါေပမယ့္ ဒီလို အလြယ္လိုက္ခ်င္ရင္ေတာ့ နည္းနည္း စဥ္းစားတတ္ဖို႔ေတာ့လိုမယ္ေနာ္။ သူ႔အလုပ္လုပ္ပံုကေတာ့ Program Run ေနတုန္းမွာ ေနာက္ကြယ္ကေနၿပီးေတာ့ Anonymous Data Fields ေတြကို Create လုပ္ပါတယ္။ အဲဒီ့လို Create လုပ္ရင္းနဲ႔ Auto-Implemented Properties ကေနၿပီးေတာ့ Program ကိုထိန္းခ်ဳပ္ေပးသြားပါလိမ့္မယ္။

Implicitly Typed Local Variables


အကယ္လို႔မ်ား က်ေနာ္တုိ႔ဟာ ကိုယ့္ Program မွာ Local Variable တစ္ခုအေနနဲ႔ var ဆုိၿပီးေၾကၿငာခဲ့မယ္ဆိုရင္ Compiler ကေနၿပီးေတာ့ အဲဒီ့ Variable သက္ဆုိင္ရာ Datatype ကို အလုိလိုသတ္မွတ္ေပးသြားပါတယ္။
ဥပမာအားၿဖင့္


var iAge = 17;
var strName = "SYKO";
var Exp = 2.0 * 3.0;


အဲလိုေၾကၿငာခဲ့မယ္ဆုိရင္ေတာ့ သူတို႔ဟာ ေအာက္ပါ Code ေတြရဲ႕ အဓိပၸါယ္နဲ႔ တူညီပါတယ္။


int iAge = 17;
string strName = "SYKO";
double Exp = 2.0 * 3.0;


အဲဒီ့ Datatype ကို တစ္ခါတည္း မသတ္မွတ္ထားတဲ့ Implicit Local Variable ေတြဟာလည္း ကန္႔သတ္ခ်က္တစ္ခ်ိဳ႕ေတာ့ရိွပါတယ္။ အဲဒီ့ကန္႔သတ္ခ်က္ေတြ နဲ႔ ေရးသားသင့္တဲ့ နည္းေတြကေတာ့...
• Implicit Variables ေတြကို Local မွာဘဲေၾကၿငာပိုင္ခြင့္ရွိပါတယ္. Global အေနနဲ႔ ေၾကၿငာပိုင္ခြင့္မရိွပါဘူး။

null အၿဖစ္သတ္မွတ္ထားတဲ့ Variable ေတြကိုလည္း 'var' အေနနဲ႔ ေၾကၿငာခြင့္မရွိပါဘူး။
var x = null;


var နဲ႔ ေၾကၿငာမယ္ဆုိရင္ေတာ့ ၊ အဲဒီ့ေၾကၿငာတဲ့ Variable တန္ဖုိးကို အရင္ဆုံး တစ္ခုခုေတာ့ သတ္မွတ္ေပးရပါလိမ့္မယ္။ ေအာက္က Code လုိမ်ိဳးေရးလို႔ မရပါ။
var y;


• Intialize တန္ဖိုး သတ္မွတ္တဲ့အခါ Object ကို သတ္မွတ္လို႔လည္းရပါတယ္။ Object ကို သတ္မွတ္မယ္ဆုိရင္ေတာ့ keyword ၿဖစ္တဲ့ "new" ဆုိတာကို ထည့္ေပးရပါလိမ့္မယ္။
var x = new Int32[] { 1, 2, 3 };


အကယ္လို႔ ေအာက္က Code လိုမ်ိဳး new ဆုိတာ မပါခဲ့ရင္ေတာ့ Error တက္ပါလိမ့္မယ္။
var x = { 1, 2, 3 };

var x = Int32[] { 1, 2, 3 };


• အေပၚက Feature အသစ္ၿဖစ္တဲ့ Auto-Implemented Properties ကိုလည္း var နဲ႔ ေအာက္မွာေရးထားသလို တြဲသံုးလို႔မရပါဘူး။
public var StudID { get; set; }


• Implicit Variables ေတြကို Iterative Statements(Looping) ေတြၿဖစ္တဲ့ "for" ေတြနဲ႔ေတာ့ တြဲသံုးလို႔ရပါတယ္။
foreach (var a in new Int32[] {1, 2, 3})
Console
.WriteLine(a);


• Implicit Type သံုးထားတယ္ဆုိရင္ေတာ့ Methods ေတြဟာ Return ၿပန္ႏိုင္စြမ္းမရိွေတာ့ပါဘူး။ မယံုရင္ ေအာက္က Code ကို Run ၾကည့္ပါ။ Compile လုပ္ေနခ်ိန္မွာ Error တက္မွာေသခ်ာပါတယ္။
public var BadThings()
{
return
0;
}


ဒါကေတာ့ Implicitly Typed Local Variables နဲ႔ ပါတ္သက္လို႔ က်ေနာ္ေလ့လာမိသေလာက္ပါ။ က်န္ရင္လည္းက်န္မယ္ထင္တယ္။ တခ်ိဳ႕ ႏုိင္ငံၿခားဖိုရမ္ေတြမွာေတာ့ ရွင္းထားတာ ပိုၿပီးမ်ားတယ္ထင္တယ္။

Extension Methods

Extension Method ဆုိတာကေတာ့ instance method ေတြမွာပါေလ့ရိွတဲ့ static method ေတြကိုေခၚတာပါ။ Static Method ကိုေတာ့ Static Class ေတြမွာသာ ေၾကၿငာလို႔ရတယ္ဆုိတာ Programmer တုိင္းသိၾကမယ္ထင္ပါတယ္။ မသိေသးတဲ့ ပရုိဂရမ္မာေပါက္စေလးေတြလည္း က်ေနာ္နဲ႔ အတူေလ့လာၾကည့္ရေအာင္ေနာ္။(က်ေနာ္လည္း ဘာမွမသိေသးလို႔ပါ


public static void ExportToExcel (this DataSet ds)
{
//do something...

}


Extension Methods ေတြကို "this" ဆုိတဲ့ keyword နဲ႔ ေၾကၿငာၿပီးေတာ့ ေရွ႕ဆုံးက ပါရာမီတာ မွာ ေမာ္ဒီဖိုင္ရာ တစ္ခုအေနနဲ႔ သတ္မွတ္ပါတယ္။ အေပၚက ကုဒ္မွာဆုိရင္ ExportToExcel ဆုိတဲ့ method ဟာ Dataset ဆုိတဲ့ Class တစ္ခုရဲ႕ Extension Method အေနနဲ႔ ေၾကၿငာထားတာပါ။

Extensin Method ေတြဟာ သူတို႔ကိုေၾကၿငာထားတဲ့ Static Class ေတြရိွေနတဲ့ NameSpace ထဲမွာပါ ရိွေနပါတယ္။
ေအာက္က ဥပမာကို ေလ့လာၾကည့္ပါမယ္။

namespace Orcas.Samples
{
public static class Extensions
{
public static void
ExportToExcel(this DataSet ds)
{
//do something...

}
}
}


အေပၚက Method ေလးကေတာ့ Client Program မွာပါတတ္ပါတယ္။ ဘယ္လိုပါတတ္လဲဆုိေတာ့

using Orcas.Samples;


DataSet ds = new DataSet();
ds.ExportToExcel();


Extension methods ကို အသံုးၿပဳခ်င္တယ္ဆုိရင္ေတာ့ လိုက္နာရမယ့္စည္းကမ္းေတြလည္းရိွပါေသးတယ္။

* Instance methods ေတြကို Static Class ေတြထဲမွာဘဲ declared လုပ္ပိုင္ခြင့္ရိွပါတယ္။
* Instance methods ေတြဟာ extension methods ေတြထက္ ဦးစားေပးခံရပါတယ္။
* Inner NameSpace ထဲမွာရိွတဲ့ Extension methods ေတြဟာ ၊ တၿခား namespace ေတြေပၚမွာရိွတဲ့ Extension Methods ေတြထက္ ဦးစားေပးခံရပါတယ္။

Monday 2 May 2011

ကြန္ပ်ဴတာမွာ Stick မတက္ ဘူးဆိုရင္

USB Memory Stick ေတြဟာ တျခား External HD ေတြနဲ႔ ႏႈိင္းယွဥ္ရင္ သိုေလွာင္မႈ နည္းပါးၿပီး ေစ်းျမင့္တယ္လို႔ ထင္ရေပမယ့္ သံုးစြဲရ လြယ္ကူ အဆင္ေျပေစပါတယ္။ သို႔ေပမယ့္ pen drive, flash drive ေတြနဲ႔ USB ေပါက္မွာ ထိုးတဲ့ တျခား external device ေတြဟာ တစ္ခါတစ္ရံမွာ detect မမိျဖစ္ေနတက္ပါတယ္။ ဒီအခါ Tast-bar မွာ "USB Drive Not Recognized" လို႔ Error Message ျပသတက္ပါတယ္။

ဒီအေျခအေနမ်ိဳးမွာ မ်ားေသာအားျဖင့္ USB Memory Stick ကို ျဖဳတ္တပ္လုပ္ဖို႔ပဲ စဥ္းစားမိၾကပါလိမ့္မယ္။ ဒါဟာ အလုပ္မျဖစ္ႏိုင္ပါဘူး။ ကြန္ပ်ဴတာ က USB ကို မသိျခင္း၊ ဒါမွမဟုတ္ Window ခၽြတ္ယြင္းျခင္း ျပႆနာကို ႐ိုးရွင္းတဲ့ ေအာက္ပါ နည္းလမ္းႏွစ္သြယ္နဲ႔ ေျဖရွင္းပါလိမ့္မယ္။

နည္းလမ္း(၁)

- ကြန္ပ်ဴတာကို ပိတ္ၿပီး Power Supply ႀကိဳးကို ျဖဳတ္လိုက္ပါ။(မားသားဘုတ္မွာ Power ဝင္ေနတဲ့အတြက္ ႀကိဳးေတြ ျဖဳတ္လိုက္ဖို႔ လိုအပ္ပါတယ္)

- တစ္မိနစ္ၾကာတဲ့အထိ ကြန္ပ်ဴတာကို ပိတ္ထားပါ။

-ၿပီးရင္ ကြန္ပ်ဴတာကို ျပန္ဖြင့္ပါ။ System မွာ (Printer, Network Service...) ေတြ ၿပီးဆံုးေအာင္အထိ တပ္ၿပီးမွ Memory Stick ကို စက္မွာ ျပန္ထုိးပါ။

နည္းလမ္း(၂)

- ေနာက္တစ္နည္းကေတာ့ Run Box မွာdevmgmt.msc ကို ႐ိုက္ထည့္လိုက္ပါ။

- Device Manager ေပၚလာရင္ My Computer မွာ ကလစ္ႏွိပ္ပါ။(Stick ကိုစက္မွာ တပ္ၿပီးသား ျဖစ္ပါေစ)

- Action Menu ေအာက္က "Scan for Hardware Changes" command ကိုႏွိပ္လုိက္ပါ။

ဒီအခါမွာ ကြန္ပ်ဴတာက USB ကိုျမင္ႏုိင္ပါၿပီ။ အဝါေရာင္ Error Message ကို ျမင္ခ်င္ပါတယ္ဆိုတာေတာင္ ျမင္ရမွာ မဟုတ္ေတာ့ပါဘူး။

Saturday 30 April 2011

Website တစ္ခုလံုး Copy ကူးျခင္းနည္းလမ္းမ်ား

Website တစ္ခုလံုး Copy ကူး ေလ႔လာခ်င္သူမ်ား အတြက္

၁ ။ အရင္ဆံုး Web Copier ကုိ Install လုပ္ပါ ။

၂ ။ Web Copier ရဲ႔ File ေအာက္က New ကုိ ေရြးပါ ။

၃ ။ Next ကုိ Click ပါ ။

၄ ။ Project Title မွာ ကုိယ္ဆြဲမယ္႔ Website အမည္ကုိ ေပးပါ ။

၅ ။ Add the address entering by its URL ကုိ ေရြးပါ ။

၆ ။ Next ကုိ Click ပါ ။

၇ ။ URL မွာ ကုိယ္ Copy ကူးမယ္႔ Website ရဲ႔ Address ကုိေပးပါ ။ ( http://www.w3Schools.com )

၈ ။ Next ကုိ Click ပါ ။

၉ ။ User ID နဲ႔ Password ကုိ တစ္ခုခု ေပးပါ ။

၁၀ ။ Save in Directory မွာ သိမ္းခ်င္တဲ႔ ေနရာကုိ ေပးပါ ။ ( C:\Program Files\WebCopier\Download\ ေအာက္မွာ သူက အလုိလုိ သိမ္းမွာပါ ။ ၾကိဳက္ရာေျပာင္းသိမ္းနုိင္ပါတယ္ )

၁၁ ။ Next ေရြးပါ ။

၁၂ ။ Use the default Download Option ေရြးပါ ။

၁၃ ။ Next ေရြးပါ ။

၁၄ ။ Save the project and start Download now ဆုိတာေလးကုိ Check ေပးလုိက္ပါ ။

၁၅ ။ Finish နွိပ္ပါ ။

၁၆ ။ File Name မွာ NewProject.wcp ဆုိတဲ႔ ေနရာမွာ ၾကိဳက္တဲ႔ Name ေပးပါ ။ ( w3Schools.wcp ဆုိပါေတာ႔ )

၁၇ ။ ျပီးရင္ Save နွိပ္ပါ ။ အလုိလုိ Copier ကူးေနတာေလး ေတြ႔ရမွာပါ ။

Web Copier Download Link :

http://www.freedownloadscenter.com/Network_and_Internet/Offline_Browser_Tools/WebCopier.html

C#.Net နဲ႔ ပတ္သက္ေသာ အေၾကာင္းအရာမ်ားကုိ Facebook တြင္ Stringlive အမည္ျဖင္႔ Knowledge Sharing လုပ္ေပးထားပါတယ္ ။