tag:blogger.com,1999:blog-63130550949526337232024-03-06T14:54:38.435+08:00virtual IntelligenceUnknownnoreply@blogger.comBlogger23125tag:blogger.com,1999:blog-6313055094952633723.post-83844079763322240272008-10-01T13:07:00.010+08:002008-10-01T13:20:02.552+08:00<span class="Apple-style-span" style="color: rgb(0, 153, 0);">for … in Statement</span><br /><br />ဒီ for.. in ကို javascript array ရဲ ့ element တစ္ခုခ်င္းစီကို ပတ္ခ်င္တဲ့ အခါမွာ သံုးပါတယ္။<br /><br />ဥပမာ<br /><br /><pre><span class="Apple-style-span" style="color: rgb(0, 0, 153);"><html><br /><body><br /><script type="text/javascript"><br /><br />var x;<br />var mygreeting= new Array();<br /><br />mygreeting[0] = "Hello";<br />mygreeting[1] = "World";<br />mygreeting[2] = "Greeting by Akela.";<br /><br />for (x in mygreeting)<br />{<br />alert(mygreeting[x]);<br />}<br /><br /></script><br /></body><br /></html></span></pre><div><br /></div>အထက္ပါ ကုဒ္ေလးကို ခ်ခိုင္းတဲ့ အခါ ေအာက္ပါပံုအတိုင္း ၿမင္ရပါလိမ့္မယ္။<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjjEefmDuaVKPKe0_31H3wZe9Fxcd8nr-tCwCyg59ZvI5DD_gekrBVOWeg1YtYr_a5lL9iBod0I3sAtxLyXVSD5O8_Zt7LEqNUThQRtgK3pvqtbtjvGiEaNqesv56OHqxM08RdX00hMPEf/s1600-h/forin.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjjEefmDuaVKPKe0_31H3wZe9Fxcd8nr-tCwCyg59ZvI5DD_gekrBVOWeg1YtYr_a5lL9iBod0I3sAtxLyXVSD5O8_Zt7LEqNUThQRtgK3pvqtbtjvGiEaNqesv56OHqxM08RdX00hMPEf/s400/forin.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5252049714689823586" /></a><br /><br /><br />အာေကလာ<div><br /></div><div>၂၇ စက္တင္ဘာ ၂၀၀၇<br /><br /></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-29914126651516787532008-09-18T21:39:00.015+08:002008-10-01T00:55:09.858+08:00Array တစ္ခု တည္ေဆာက္ၿခင္းJavascript Array Object<br /><br />Array တစ္ခုဆိုတာ variable တစ္ခုၿဖစ္ၿပီး တန္ဖိုးေတြ အမ်ားၾကီး သိမ္းဆည္းထားလို ့ ရပါတယ္။ javascript ရဲ ့ array ဟာ တၿခား programming ဘာသာရပ္ေတြ က array ေတြ လိုပါပဲ။<br />ေအာက္ပါအခ်က္မ်ားကို javascript မွာ array ကိုသံုးတဲ့ အခါ သိမွတ္ထားသင့္ပါတယ္။<div><br />၁။ ။ တန္းဖိုးေတြဟာ array တစ္ခုထဲကို သိမ္းဆည္းေတာ့မယ္ဆိုရင္ array နာမည္နဲ ့ ေနရာကို ေဖာ္ၿပၿပီး သိမ္းဆည္းႏုိင္ပါတယ္။ ဥပမာ -<span class="Apple-style-span" style="color: rgb(51, 51, 255);"> myFirstArray[2] = “Hello JS Array”;<br /><br /></span><div><br />၂။ ။ သိမ္းထားတဲ့ တန္းဖိုးေတြကို ၿပန္ၿပီးထုတ္ယူ သံုးစြဲၿခင္တဲ့ အခါမွာလည္း array နာမည္နဲ ့ ေနရာကို ေဖာ္ၿပၿပီး ၿပန္ထုတ္ႏိုင္ပါတယ္။ ဥပမာ - <span class="Apple-style-span" style="color: rgb(51, 51, 255);">var varlue = myFirstArray[2];</span> (ဒါဆို ခုနက Hello JS Array ဆိုတဲ့ တန္ဖိုးကို ၿပန္ရပါမယ္။)<br /><br />ေအာက္ပါ နည္းလမ္းနဲ ့ Array တစ္ခုကို တည္ေဆာက္လုိ ့ရပါတယ္။<br /><br /><br /><pre><span class="Apple-style-span" style="color: rgb(51, 51, 255);"> Var myFirstArray = new Array(3);</span><br /></pre><br />ဒါဆိုရင္ ကၽြန္ေတာ္တို႔ရဲ႕ <span style="color: rgb(51, 51, 255);">myFirstArray</span> ရဲ႕ <span style="color: rgb(51, 51, 255);">length property</span> ဟာ ၃ ျဖစ္သြားပါပီ။<br /><span style="color: rgb(51, 51, 255);">myFirstArray</span> ကို <span style="color: rgb(51, 51, 255);">value</span> ေတြထပ္ျဖည့္ရေအာင္.....<br /><pre><br /><span style="color: rgb(51, 51, 255);">myFirstArray[0] = "This is first Item";</span> //<span style="color: rgb(51, 51, 255);"> Javascript</span> ရဲ႕ <span style="color: rgb(51, 51, 255);">Array</span> က <span style="color: rgb(51, 51, 255);">index <span style="color: rgb(255, 0, 0);">0</span></span> ကေနစတာပါ<br /><span style="color: rgb(51, 51, 255);">myFirstArray[1] = new Object();</span><br /><span style="color: rgb(51, 51, 255);">myFirstArray[2] = new Date();</span></pre><br /><br />ေနာက္တစ္မ်ိဳးစမ္းၾကည့္ရေအာင္<br /><pre><br /><span style="color: rgb(51, 51, 255);">var myFirstArray = new Array();</span><br /><span style="color: rgb(51, 51, 255);">myFirstArray.push("This is first Item");</span><br /><span style="color: rgb(51, 51, 255);">myFirstArray.push(new Object());</span><br /><span style="color: rgb(51, 51, 255);">myFirstArray.push(new Date());</span></pre><br /><br /><span style="color: rgb(51, 51, 255);">Array</span> ရဲ႕ <span style="color: rgb(51, 51, 255);">push method</span> ကိုသံုးရင္ <span style="color: rgb(51, 51, 255);">Array object</span> က <span style="color: rgb(51, 51, 255);">Array</span> ရဲ႕ <span style="color: rgb(51, 51, 255);">length</span> ကို <span style="color: rgb(51, 51, 255);">auto increment</span> လုပ္ေပးသြားပါတယ္။<br />အခုအခ်ိန္ <span style="color: rgb(51, 51, 255);">myFirstArray.pop()</span> ဆိုပီး <span style="color: rgb(51, 51, 255);">Array object</span> ရဲ႕ <span style="color: rgb(51, 51, 255);">pop method</span> ကိုေခၚလုိက္ရင္ <span style="color: rgb(51, 51, 255);">myFirstArray</span> ရဲ႕ <span style="color: rgb(51, 51, 255);">length </span>က ၁ ေလ်ာ့သြားပါပီ။<br />အဲဒီလိုပဲ myFirstArray ရဲ႕ အႀကီးဆံုး index က value (ဥပမာ ထဲက အတိုင္းဆိုရင္ new Date()) ကပ်က္သြားပါတယ္။<br /><span style="color: rgb(51, 51, 255);">var lastVar = myFirstArray.pop()</span> ဆိုရင္ <span style="color: rgb(51, 51, 255);">myFirstArray </span>ရဲ႕ ေနာက္ဆံုး <span style="color: rgb(51, 51, 255);">index </span>က <span style="color: rgb(51, 51, 255);">value </span>က <span style="color: rgb(51, 51, 255);">lastVar </span>ဆိုတဲ့ <span style="color: rgb(51, 51, 255);">variable </span>ထဲကိုေရာက္သြားပါမယ္။<br /><span style="color: rgb(51, 51, 255);">myFirstArray</span> ထဲကလည္း ပ်က္သြားပါပီ။ <span style="color: rgb(51, 51, 255);">myFirstArray </span>ရဲ႕ <span style="color: rgb(51, 51, 255);">length property</span> ကလည္း 2 ျဖစ္သြားပါမယ္။<br /><span style="color: rgb(51, 51, 255);">(myFirstArray.length)</span><br /><br /><span class="Apple-style-span" style="color: rgb(51, 51, 255);"></span><span class="Apple-style-span" style="color: rgb(51, 51, 255);"><br /></span><br />အာေကလာ၊ အဇူရီ<br />၁၄ စက္တင္ဘာ ၂၀၀၈<br /><br /></div></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-6313055094952633723.post-82867077583840456312008-09-18T21:39:00.009+08:002008-09-18T22:02:34.717+08:00Fundamental concept of WCF (Microsoft Window Communication Foundation )<div><span class="Apple-style-span" style="color: rgb(204, 0, 0); ">(ဒီပိုစ္ကို ၁၈ စက္တင္ဘာ ၂၀၀၇ အမွတ္တရ ဂုဏ္ၿပဳ ေရးပါသည္။)</span><br /></div><div><span class="Apple-style-span" style="color: rgb(204, 0, 0);"><br /></span></div>အခုေနာက္ပုိင္း business solution အတြက္ software ေတြ ကိုေရးတဲ့အခါမွာ stand alone application ေတြ ေတာ္ေတာ္ရွားပါးသြားပါၿပီ။ distributed application ေတြပဲ ေရးလာၾကပါတယ္။ Microsoft ကလည္း .net framework 2.0 နဲ ့ ေနာက္ပိုင္းေတြမွာ ဒီအတြက္ အထူးတလည္ ၿပင္ဆင္ေပးခဲ့ပါတယ္။ စစခ်င္း .net remotnig ေနာက္ပိုင္းေတာ့ Window Communication Foundation (WCF) ဆိုၿပီးလုပ္လာပါတယ္။ အခုကၽြန္ေတာ္ ေရးမွာက WCF ရဲ ့အေၿခခံပါပဲ။ Fundamental Concepts ေတြပါ။ High-level View ပါပဲ။ ဒါေပမယ့္ ဒါေတြ သိထားမွ ဘယ္လို အလုပ္လုပ္လည္း ဆိုတာသိႏိုင္မွာၿဖစ္တယ္။ ဆက္ေလ့လာလို ့လြယ္ကူေစမွာၿဖစ္တဲ့ အတြက္ေၾကာင့္ပါ။ ၾကည့္ၾကစို ့ရဲ ့။<br /><br /><span class="Apple-style-span" style="font-weight: bold;"><span class="Apple-style-span" style="color: rgb(0, 153, 0);">Windows Communication Foundation (WCF)</span></span><br /><br /><span class="Apple-style-span" style="font-weight: bold;">(၁) High-level Overview<br />(၁.၁) Messaging and Endpoints</span><br /><br />WCF ဆိုတာ runtime တစ္ခု၊ ေနာက္ၿပီး services နဲ ့ clients ေတြၾကား messages ေတြ ပို ့တဲ့ စနစ္ (system) ေတြဖန္တီးဖို ့့ APIs ေတြစုစည္းထားတဲ့ ေနရာတစ္ခုပါ။ အဲဒါကို သံုးၿပီးေတာ့ တစ္ခုနဲ ့တစ္ခု ဆက္သြယ္လို ့ရတဲ့ application ေတြကို တည္ေဆာက္ယူလို ့ရပါတယ္။ အဲဒီ applications ေတြဟာ ကြန္ၿပဳတာတစ္လံုးထဲမွာလည္း ၿဖစ္ခ်င္ၿဖစ္မယ္၊ ဒါမွမဟုတ္ တၿခားတေနရာ၊ တၿခားႏိုင္ငံ၊ တၿခားကုမဏီတစ္ခု က ကြန္ၿပဳတာတစ္လံုးေပၚ မွာလည္းၿဖစ္ခ်င္ၿဖစ္မယ္။ ဒါေပမယ့္ WCF က services ေတြ၊ APIs ေတြ သံုးၿပီး ဆက္သြယ္လုပ္ရတယ္။ အတူတူ လုပ္ေဆာင္လို ့ရတယ္။<br /><br />WCF ဟာ Messaging ေပၚမွာ အေၿခခံထားတဲ့ ေမာ္ဒယ္တစ္ခုပါပဲ။ အဲဒီထဲမွာ clients လို ့ေခၚတဲ့ ဆက္သြယ္မွဳ ့ (communication) ကို စမဲ့ application ေတြ၊ ေနာက္ services လို ့ေခၚတဲ့ clients ေတြ ဆက္သြယ္လာမွာကို ေစာင့္ဆိုင္းေနၿပီး တုန္ၿပန္ေပးမဲ့ application ေတြပါပါတယ္။ သတိၿပဳရမွာက application တစ္ခုတည္းက လည္း client ေရာ service ပါၿဖစ္ႏိုင္တယ္ဆိုတာပါပဲ။<br /><br />Message ေတြဟာ endpoints ေတြၾကားမွာ ေပးပို ့ခံရပါတယ္။ endpoints ဆိုတာ message ေတြပို ့တဲ့ ေနရာ (send) ဒါမွမဟုတ္ လက္ခံတဲ့ေနရာ (receive) ပါ။ အဲဒီ endpoints ေတြကပဲ message ပို ့တဲ့၊ လက္ခံတဲ့ အခါမွာ လိုအပ္မဲ့ Information ေတြအားလံုးကို သတ္မွတ္ၿပဒါန္းေပးပါတယ္။ service တခုက တစ္ခု ဒါမွမဟုတ္ တစ္ခုထက္ပိုတဲ့ endpoints ေတြကို တည္ေဆာက္ေေပးထားတက္ပါတယ္။ client ေတြကေတာ့ services ေတြတည္ေဆာက္ေပးထားတဲ့ endpoint တစ္ခုခုနဲ့ ကိုက္ညီတဲ့ endpoint တစ္ခုကို တည္ေဆာက္ရပါတယ္။<br /><br />Service တစ္ခုဟာ message ေတြကို ဘယ္လို ပို ့ရတယ္၊ ဘယ္လို ပံုစံရိွရမယ္၊ ဘယ္ကို ပို ့ရမယ္ဆိုတာေတြ၊ အၿခားလိုအပ္တဲ့ အရာေတြ အားလံုးကို metadata (data about data) အေနနဲ ့ေဖၚၿပထားတယ္။ အဲဒီအခါ client က အဲဒီ metadata ေတြ သံုးၿပီး သင့္ေတာ္တဲ့ WCF client နဲ ့ Communication stack ေတြကို တည္ေဆာက္ပါတယ္။<br /><br />(WCF client, Communication stack ေတြ ဘာလဲဆိုတာ နားမလည္ရင္လည္းဆက္ဖတ္ပါ ေအာက္မွာ အကုန္ၿပန္ပါပါတယ္။)<br /><br /><span class="Apple-style-span" style="font-weight: bold;">(၁.၂) Communication Protocols</span><br /><br />WCF ရဲ ့အဓိကအခ်က္က ေနရာမေရြး (ေနရာမ်ိဳးစံုက client ေတြက) service ေတြကို ဆက္သြယ္ႏိုင္တာဆိုေတာ့၊ network လိုလာပါတယ္။ အဲဒီ network ေပၚမွာ သံုးမဲ့ protocols ေတြဟာလည္း လိုအပ္လာပါတယ္။ ဒါေၾကာင့္<br />Communication stacks ေတြရဲ ့ လိုအပ္ခ်က္ တစ္ခုကေတာ့ transport protocol ေတြပါပဲ။ Messages ေတြကို ကၽြန္ေတာ္တို ့က intranets, Internet ေပၚကေန HTTP, TCP လို common transport protocol ေတြ သံုးၿပီး ေေနရာမ်ိဳးစံုကေန ေပးပို ့ ဆက္သြယ္ႏိုင္ပါတယ္။ ေနာက္ထပ္ transport ေတြကေတာ့ Microsoft Message Queuing (MSMQ) တုိ ့၊ Peer Networking mesh တို ့ပါပဲ။ တၿခား transport mechanisms ေတြကိုလည္း WCF ရဲ ့ ပါၿပီးသား (build-in) extension points ေတြသံုးၿပီး ထပ္ထည့္ႏိုင္ပါတယ္။<br /><br /><span class="Apple-style-span" style="font-weight: bold;">(၁.၃) Message Patterns</span><br /><br />WCF မွာ အမ်ိုးမ်ိဳးေသာ message patterns ေတြကို သံုးႏိုင္ပါတယ္။ request-reply၊ one-way၊ duplex communication စသည္ၿဖင့္အသံုးၿပဳႏိုင္ပါတယ္။ ကြဲၿပားတဲ့ transports ေတြက ကြဲၿပားတဲ့ message patterns ေတြကို သံုးပါတယ္။ WCF APIs နဲ ့ runtime ေတြက message ေတြရဲ ့လံုၿခံဳမွဳကိုလည္းလုပ္ေပးပါတယ္။<br /><br /><span class="Apple-style-span" style="font-weight: bold;">(၂) WCF Terms</span><br /><br />(၁) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">message</span><br />Message ဆိုတာ data ေတြပါ၀င္ဖြဲ ့စည္းထားတဲ့ အစုတခု။ သူမွာ body ၊ header စတာေတြအပါအ၀င္ တၿခားအစိတ္အပိုင္း ေတြလည္းပါ၀င္တယ္။<br /><br />(၂) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">service</span><br />Service ဆိုတာကေတာ့ endpoint တစ္ခု ဒါမွမဟုတ္ တစ္ခုထက္ပိုၿပီး တည္ေဆာက္ေပး ထားတဲ့ ေနရာပါပဲ။ အဲဒီ endpoint တစ္ခုစီဟာ service operation တခု ဒါမွမဟုတ္ တစ္ခုထက္ပို ၿပီးရိွတက္တယ္။<br /><br />(၃) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">endpoint</span><br /> Endpoint ဆိုတာ message ေတြ ပို ့ရမဲ့၊ လက္ခံတဲ့ ေနရာတခုပါပဲ။ တခ်ိဳ ့ endpoint ေတြ<br />ကလက္ခံတဲ့ ဒါမွမဟုတ္ ပို ့တဲ့ အလုပ္တမ်ိဳးကိုပဲလုပ္ၿပီး ၊တခ်ိုဳ ့ကေတာ့ ႏွစ္မ်ိဳး လံုးကိုလုပ္ပါတယ္။ endpoint ေတြူက message ေတြ ပို ့ဖို ့အတြက္ လိပ္စာ (address) တစ္ခု ထုတ္ေပးတားတယ္။ ေနာက္ ဘယ္လိုနည္းနဲ ့ဆက္သြယ္လို ့ရတယ္ (communication mechanism) ဆိုတဲ့ အေၾကာင္းအရာ သတ္မွတ္ခ်က္ေတြ (specification) ကိုလည္း ထုပ္ေပးထားတယ္္။ ေနာက္ဆံုး ဘယ္လို message ေတြပို ့လို ့ ရတယ္ဆိုတာေတြပါ ေဖာ္ၿပေပးထားပါတယ္။ WCF service တစ္ခုဆိုတာဟာ endpoint ေတြ စုစည္းထားတဲ့ ေနရာတစ္ခုပါပဲ။ (is a world as a collection of service.)<br /><br />(၄) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">address</span><br />Address တခုဟာ message ေတြကို ဘယ္မွာလက္ခံမယ္ဆိုတဲ့ ေနရာတခုကို ေၿပာၿပေပးပါတယ္။ သူကို Uniform Resource Identifier (URI) အေနနဲ ့သတ္မွတ္ေလ့ရိွတယ္။ ဒါေၾကာင့္ endpoint address ေတြဟာ ထပ္တူမရိွတဲ့ address (Unique Address) ေတြပါ။<br /><br />(၅) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">binding</span><br />endpoint တခုဟာ ၿပင္ပ နဲ ့ဘယ္လို ဆက္သြယ္လုပ္ေဆာင္မလဲဆိုတာကို binding ကသတ္မွတ္ေပးပါတယ္။ Communication Infrastructure ၿဖစ္လာဖို ့အတြက္ binding element ေတြလို ့ေခၚဆိုတဲ့ components အစုေလးေတြ တခုေပၚတခု (stack on top of the other) တည္ေဆာက္ထားတယ္။ အႏိွမ့္ဆံုးအေနနဲ ့ binding က ဘယ္လို transports ေတြသံုးမယ္( HTTP , TCP/IP) ၊ ဘယ္လုိ encoding ေတြသံုးမယ္ (text or binary) စတာေတြကို သတ္မွတ္ေပးပါတယ္။ security နဲ ့ဆိုင္တဲ့ ကိစၥေတြ၊ endpoint ကသံုးမယ့္ message pattern ေတြကိုလည္း သတ္မွတ္ေပးပါတယ္။<br /><br />(၆) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">binding element</span><br />Binding element တခုဟာ binding လုပ္ခ်င္းကိစၥရဲ ့အစိတ္အပိုင္းတခုကို ကိုယ္စားၿပဳပါတယ္။ transport တခု၊ encoding တခု စသည္အားၿဖင့္။ ဒါမွမဟုတ္ communication stack ေပၚမွာ ရိွတဲ့ ဘယ္ component မဆို binding element ေတြပါပဲ။<br /><br />(၇) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">behaviors</span><br />Behavior ဆိုတာ client တခု၊ operation တခု၊ ဒါမွမဟုတ္ endpoint တခု၊ service တခု ကို run-time မွာ ဘယ္လို လုပ္သလဲဆိုတာကို ထိန္းတဲ့ component တခုပါပဲ။ behavior ေတြကို သူတို ့ရဲ ့ scope ေပၚမူတည္ၿပီး အဖြဲ ့ေလးေတြ ဖြဲ ့ထားပါတယ္။ common behaviors လို ့ဆိုရင္ endpoint အားလံုးနဲ ့ဆိုင္ပါတယ္။ globally ေပါ့။ service behavior ဆိုရင္ service နဲ ့ ဆက္ႏြယ္ေနတဲ့ကိစၥ ေတြနဲ ့ဆိုင္ပါတယ္။ endpoint behavior လို ့ဆိုရင္ endpoint နဲ ့ဆက္ႏြယ္ေနတဲ့ အသံုးၿပဳမွဳ ေတြနဲ ့ ဆိုင္ပါတယ္။ operation-level behaviors ဆိုရင္ေတာ့ operation တစ္ခုခ်င္းစီနဲ ့ သက္ဆိုင္ပါတယ္။ ဥပမာ- endpoint behaviors ဆိုပါစို ့။ သူက endpoint နဲ ့ပဲဆိုင္တဲ့ အရာေတြကို ၿပဥာန္းေပးပါတယ္။ security credential ကိုဘယ္မွ သြားရွာရမလဲဆိုတာမ်ိဳးေပါ့။<br /><br />(၈) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">configuration နဲ ့ coding</span><br />Application တခုကို ထိန္းခ်ဳပ္တဲ့ ကိစၥမွာ coding ကေနတဆင့္ ၊ ဒါမွမဟုတ္ configuration file ကေနတဆင့္ ၊ (၀ါ) ႏွစ္ခုလံုး ကို သံုးၿပီး လုပ္ႏိုင္ပါတယ္။ configuration ကေန လုပ္တာက programmer (developer) မဟုတ္တဲ့ သူေတြကိုပါ client (၀ါ) service မွာ လိုတဲ့ အရာေတြကို coding ေရးၿပီးေပ့မယ့္ ၿပဳၿပင္ခြင့္၊ ထိန္းခ်ဳပ္ခြင့့္ ေပးတဲ့ အားသာခ်က္ရိွပါတယ္။ အဲဒီလုိလုပ္တဲ့ ကိစၥမွာ program coding ကို ၿပန္ၿပီး recompile လုပ္စရာမလိုပဲ သံုးလို ့ရပါတယ္။ coding ကေတာ့ programmer (developer) ေတြကို client (၀ါ) service ေတြ အေပၚမွာ တိက်တင္းက်ပ္တဲ့ ထိန္းခ်ဳပ္မွဳေတြ လုပ္ဖို ့ ခြင့္ၿပဳပါတယ္။ configuration ဖိုင္ကေန စီစဥ္ထိန္းခ်ဳပ္ထားတဲ့ ဘယ္အရာကိုမဆို လိုအပ္တယ္ဆိုရင္ coding ကေန ေၿပာင္းလဲ ႏိုင္ပါတယ္။<br /><br />(၉) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">service operation</span><br />Service operation တခုက service တခု လုပ္ေဆာင္မဲ့ ကိစၥတခု (operation) ကို service code ေတြကတဆင့္ သတ္မွတ္ထားတဲ့ ဟာကို ေၿပာတာပါ။ ဒီ service တခုကလုပ္ေဆာင္ေပးမဲ့ အရာေတြကို WCF Client ေတြဆီ method ေတြအေနနဲ ့ ထုတ္ေပးထားတယ္။ အဲဒီ method ေတြက တန္ဖိုး တခုကို ၿပန္ရင္ ၿပန္မယ္။ သူဆီကို arguments ေတြ လက္ခံရင္ လက္ခံမယ္။ ဒါမွမဟုတ္ ဘာတန္ဖိုးမွ မၿပန္တာ၊ ဘာ argument မွ လက္မခံတာ။ ဒီလိုလည္းၿဖစ္ႏိုင္ပါတယ္။<br /><br />(၁၀) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">service contract</span><br />Service contract ဆိုတာကေတာ့ ခုနက service operation ေတြကို စုစည္းေပးထားတဲ့ အစုတစ္ခုပါပဲ။ Contract တခုကို အမ်ိဳးမ်ိဳးေသာ အဆင့္ေတြ သတ္မွတ္လို ့ရတယ္။ ဥပမာ- namespace အဆင့္မွာ သတ္မွတ္တဲ့ contract။ အမ်ားဆံုးလုပ္ေလ့ရိွတာကေတာ့ ကိုယ္ၾကိဳက္တဲ့ program ဘာသာရပ္ (C#, VB, J#) နဲ ့ interface တခုေဆာက္ၿပီး အဲဒီမွာ ServiceContractAttribute ဆိုတဲ့ attribute ကို ေၾကညာေပးလိုက္တာပဲ။ တကယ္ အလုပ္လုပ္မဲ့ service code ေတြက အဲဒီ interface ကို အေမြဆက္ခံ (inherit) လိုက္တာပါပဲ။<br /><br />(၁၁) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">operation contract</span><br />operation contract ဆိုတာကေတာ့ operation တစ္ခုဆီကို ပို ့ေပးရမယ့္ parameters ေတြ၊ ဒါမွမဟုတ္ အဲဒီ operation ကေန ၿပန္မဲ့ အမ်ိဳးအစားေတြ ကို သတ္မွတ္ေပးပါတယ္။ ကၽြန္ေတာ္တို ့ service contract နဲ ့ တည္ေဆာက္ထားတဲ့ (အေပၚကအဆင့္) interface တစ္ခုမွာ operation contract ကို OperationContractAttribute ဆိုတဲ့ attribute ေလးကို method ရဲ ့ အေပၚမွာ ထည့္ေပးလိုက္ရံုနဲ ့ တည္ေဆာက္ႏိုင္ပါတယ္။ အဲဒါဆို အဲဒီ method ေလး (WCF အေနနဲ ့ဆို operation ေလးဟာ) ဟာ operation contract နဲ ့ ၿဖစ္သြားပါၿပီ။<br /><br />(၁၂) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">message contract</span><br />message contract ဆိုတာက ကၽြန္ေတာ္တို ့အသံုးၿပဳမဲ့ မက္ေဆ့ (message) ရဲ ့ ပံုစံ (format) ပါပဲ။ ဥပမာ - မက္ေဆ့ (message) ေတြဟာ headers ထဲမွာ ရိွရမလား။ ဒါမွမဟုတ္ body ထဲမွာပဲ ရိွရမလား။ မက္ေဆ့ ေတြအတြက္ ဘယ္လို လံုၿခံဳေရး နည္းလမ္း (security) ေတြ အသံုးၿပဳမလဲ စတာေတြကို သတ္မွတ္ေပးတဲ့ contract ပါ။<br /><br />(၁၃) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">fault contract</span><br />fault contract ေတြဟာ service တစ္ခုမွာ အမွား (error) ေတြၿဖစ္လာတဲ့ အခါ ေခၚတဲ့သူဆီ၊ service ကို သံုးတဲ့သူဆီကို အဲဒီ အမွား ေတြ ပို ့ေဆာင္ေပးႏိုင္ေအာင္လို ့ service operation နဲ ့ ေပါင္းစပ္ထားႏုိင္ပါတယ္။ Operation တစ္ခုမွာ အမွား ေတြ မရိွတာလည္းၿဖစ္ႏိုင္သလို ့ အမ်ားၾကီးရိွေနတာလည္း ၿဖစ္နိုင္ပါတယ္။ ဒီ အမွားေတြ ကို SOAP (Simple Object Application Protocols) ရဲ ့ အမွားေတြၿဖစ္ၿပီး programming မွာေတာ့ Exception ေတြ အေနနဲ ့ ကိုင္တြယ္ပါတယ္။<br /><br />(၁၄) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">data contract</span><br />Service တစ္ခုက အသံုးၿပဳမဲ့ ေဒတာ အမ်ိဳးအစား (data types) ေတြကို ေဒတာ၂ (metadata – data about data) ေတြမွာ ေၾကညာေပးရပါတယ္။ ဒါမွ service ကို အသံုးၿပဳမဲ့ အရာေတြက ဆက္သြယ္အသံုး ၿပဳႏိုင္မွာၿဖစ္တယ္။ အဲဒီ လို ေဒတာ အမ်ိဳးအစားေတြကို ေဖာ္ၿပေပးတာကို data contract လို ့ေခၚပါတယ္။ အဲဒီ ေဒတာအမ်ိဳးအစားေတြကို မက္ေဆ့ ရဲ ့ အစိတ္အပိုင္းတစ္ခုအေနနဲ ့ ထည့္ေပးႏိုင္ပါတယ။္ ဥပမာ - parameter အေနနဲ ့ ဒါမွမဟုတ္ return type အေနနဲ ့။ တကယ္လို ့ service က ရိုးရွင္းတဲ့ ေဒတာ အမ်ိဳးအစား (int, string,lone စသည္) ကို ပဲ အသံုးၿပဳမယ္ဆိုရင္ေတာ့ data contract ကို အထူးတလည္ ေၾကညာေပးစရာမလိုပါဘူး။<br /><br />(၁၅) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">hosting </span><br />Service တစ္ခုဟာ process တစ္ခုေပၚမွာ လုပ္ေဆာင္ရပါတယ္။ အခံ process မရိွပဲ မရပါဘူး။ host တစ္ခုဆိုတာ application တစ္ခုၿဖစ္ၿပီး သူက service ရဲ ့ သက္တမ္း (lifetime) ကို သတ္မွတ္ ၿပဥာန္းေပးပါတယ္။ Service ေတြဟာ ကိုယ့္ကိုယ္ အခံ (host) လုပ္ထားတာလဲ ၿဖစ္ႏိုင္ပါတယ္။ ဒါမွမဟုတ္ အၿခား process တစ္ခုကို အခံ (host) လုပ္တာလည္းၿဖစ္ႏိုင္ပါတယ္။<br /><br />(၁၆) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">self-hosted service </span><br />Self-hosted service ဆိုတာ developer တစ္ေယာက္က တည္ေဆာက္ထားတဲ့ process တစ္ခု ထဲမွာ လုပ္ေဆာင္ (run) ေနတဲ့ service ကို ေခၚတာၿဖစ္တယ္။ developer က အဲဒီ service ရဲ ့ သက္တမ္းကို ထိန္းခ်ဳပ္ထားတယ္၊ service ရဲ ့ properties ေတြကို ကိုင္တြယ္တယ္၊ service ကို ဖြင့္တယ္ ( service ဆီ ကို client က အ၀င္ message လာတာကိုေစာင့္ၿခင္း) ၊ ၿပီးေတာ့ service ကို ပိတ္တယ္။<br /><br />(၁၇) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">hosting process</span><br />Hosting process ဆိုတာကေတာ့ application တစ္ခုၿဖစ္ၿပီး သူရဲ ့ ရည္ရြယ္ခ်က္က service တစ္ခုအတြက္ အခံ (host) လုပ္ေပးဖို ့ပါပဲ။ ဘာေတြပါလည္းဆိုေတာ့ - Internet Information Service (IIS), Window Activation Service (WAS), Windows Services ေတြပါပဲ။ ဒီနည္းလမ္းမွာ အခံ (host) ေတြက service ရဲ ့သက္တမ္းကို ထိန္းခ်ဳပ္ပါတယ္။ ဥပမာ - IIS ကိုသံုးၿပီး service assemblyနဲ ့ configuration file ပါတဲ့ virtual directory တစ္ခု တည္ေဆာက္ႏိုင္တယ္။ ၿပီးေတာ့ message ေတြ ေရာက္လာတဲ့ အခါ၊ IIS က service ကို စတင္ၿပီး သူရဲ ့ သက္တမ္းကို ထိန္းခ်ဳပ္ပါတယ္။<br /><br />(၁၈) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">instancing</span><br />Service တစ္ခုမွာ instancing model တစ္ခုရိွပါတယ္။ instancing model ၃မ်ိဳးရိွတယ္။ single - ဒီမွာ single CLR (Common Language Runtime) object တစ္ခုကပဲ client အားလံုးကို လက္ခံ လုပ္ေဆာင္ေပးပါတယ္။ per call – ဒီမွာ CLR object အသစ္တစ္ခုကို client တစ္ခုဆီကို လက္ခံလုပ္ေဆာင္ဖို ့ အတြက္ ဖန္တီးေပးပါတယ္။ per session - ဒီမွာေတာ့ CLR object အစု တစ္စု ကို သီၿခား session တစ္ခုစီ အတြက္ ဖန္တီးေပးပါတယ္။ ဘယ္ ပံုစံကို သံုးမလဲဆိုတာကေတာ့ service ရဲ ့ အမ်ိဳးအစား အသံုးၿပဳမဲ့အေနအထားေပၚမူတည္ပါတယ္။<br /><br />(၁၉) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">client application</span><br />Client application တစ္ခုဟာ program တစ္ခုၿဖစ္ၿပီး သူက မက္ေဆ့ (message) ေတြကို endpoints တစ္ခုကေန တစ္ခုကို ပို ့ေပး လက္ခံ ေပးတာကို လုပ္တယ္။ ဒီ client application ေတြဟာ WCF client instance တစ္ခုကို တည္္ေဆာက္ၿပီး WCF client method ကို ေခၚၿပီး အသံုးၿပဳတဲ့ အခါမွာ စတင္ၿဖစ္တည္ပါတယ္။ အေရးၾကီးတာ တစ္ခုကို သတိၿပဳရမွာက application တစ္ခုတည္းကပဲ client ေရာ service ေရာ ၿဖစ္ႏိုင္တယ္ဆုိတာပါ။<br /><br />(၂၀) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">WCF client</span><br />WCF client ဆိုတာ service operation ေတြကို methods ေတြအၿဖစ္ တင္ၿပေပးတဲ့ client-application တစ္ခုပါပဲ။ ဘယ္ application ေတြမဆို service ကို အခံ (host) လုပ္ေပးတဲ့ ဟာ အပါအ၀င္ WCF client ေတြကို အခံ (host) အၿဖစ္လုပ္္ေပးႏိုင္ပါတယ္။ ဒါေၾကာင့္ service တစ္ခုဟာ အၿခား service တစ္ခုရဲ ့ WCF Client ေတြပါရိွႏိုင္ပါတယ္။<br />WCF client ကို ServiceModel Metadata Utility Tool (Svcutil.exe) ကို သံုးၿပီး အလိုအေလၽႊွ်ာက္ ထုတ္ယူႏိုင္ပါတယ္။<br />.<br />(၂၁) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">metadata</span><br />Service တစ္ခုရဲ ့ metadata ေတြက အဲဒီ service ရဲ ့ အခ်က္အလက္ေတြကို ေဖာ္ၿပေပးပါတယ္။ အဲဒီ အခ်က္အလက္ေတြကို သံုးၿပီးမွာ အၿပင္က client ေတြက service ကို ဆက္သြယ္လုပ္ေဆာင္ႏိုင္မွာ ၿဖစ္တယ္။ အဲဒီ metadata ကိုေတြကို ရယူအသံုးၿပဳၿပီး serviceModel Metadata Utility Tool (svcutil.exe) က WCF client ေတြနဲ ့ လိုအပ္တဲ့ configuration file ေတြကို service နဲ ့ ဆက္သြယ္လုပ္ကိုင္ဖို ့ ထုတ္ေပးႏိုင္တာၿဖစ္တယ္။ service တစ္ခုအတြက္ metadata က ထုတ္ေပးတဲ့ ေဒတာက XML Schema documents ရယ္၊ WSDL document တို ့ ၿဖစ္တယ္။<br /><br />(၂၂) <span class="Apple-style-span" style="color: rgb(51, 51, 255);">Security</span><br />WCF ရဲ ့ Secuity ဆိုတာ confidentiality ရိွၿခင္း၊ (မက္ေဆ့ ေတြကို ပံုဖ်တ္ (encryption) လုပ္ၿခင္း)၊ integrity ရိွၿခင္း၊ (မက္ေဆ့ေတြ ပ်က္ဆီးတာမ်ိဳးကို နားလည္ၿခင္း)၊ authentication (serviers နဲ ့ clients တို ့မွာ ၀င္ႏိုင္ခြင့္ ရိွၿခင္း)၊ authorization (အရင္းအၿမစ္ (resource) ေတြကို သံုးခြင့္ ရိွၿခင္း) စတာေတြကို ေၿပာတာၿဖစ္တယ္။ ဒီ လို လုပ္ေဆာင္ခ်က္ေတြကို လက္ရိွ ရိွၿပီးသား လံုးၿခံဳေရး (security) ေတြၿဖစ္တဲ့ TLS ၊ HTTP (HTTPS)၊ တို ့ကေနလုပ္ေဆာင္ႏိုင္သလို၊ အသစ္ၿဖစ္တဲ့ WS-* ရဲ ့ လံဳၿခံဳးေရး စံညြန္းသတ္မွတ္ခ်က္ (security specification) ကေနလည္းလုပ္ေဆာင္ႏိုင္ပါတယ္။<br /><br /><span class="Apple-style-span" style="color: rgb(51, 51, 255);">WS-*</span><br /><br />ဒါကေတာ့ Web Service (WS) ရဲ ့ စံညြန္းသတ္မွတ္ခ်က္ေတြကို ညြန္းပါတယ္။ WS-Security WS-ReliableMessaging စသည္ၿဖင့္ WCF မွာ သံုးရမဲ့ သတ္မွတ္ခ်က္ေတြပါ။<br /><br />ဒါေလးကေတာ့ မိတ္ဆက္ သေဘာပါပဲ။<br />အခ်ိ္န္ရရင္ ဆက္ၿပီးေရးပါမယ္။<br />ဆက္ၿပီး ေလ့လာႏိုင္ၾကပါေစဗ်ာ။<br /><br /><span class="Apple-style-span" style="color: rgb(0, 153, 0);">ရည္ညြန္း။ ။ MSDN<br /><br />အာေကလာ<br />၁၈ စက္တင္ဘာ ၂၀၀၈</span><br /><br /><span class="Apple-style-span" style="color: rgb(204, 0, 0);"><br /></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-74516689534265588832008-09-13T23:19:00.014+08:002008-09-19T21:33:22.481+08:00Javascript <b>toLocaleString()</b> Method<div><br /><span class="Apple-style-span" style="color: rgb(51, 51, 255);">အဓိပၸါယ္ဖြင့္ဆိုခ်က္</span></div><div><span class="Apple-style-span" style="color: rgb(51, 51, 255);"><br /></span></div><div>toLocaleString method ေလးက Date object တခုကို လက္ရိွ စက္ရဲ ့ အခ်ိန္ ေပၚမူတည္ၿပီး String အၿဖစ္ ၿပန္ေပးပါတယ္။</div><div><br /></div><div><span class="Apple-style-span" style="color: rgb(51, 51, 255);">အသံုးၿပဳပံု</span></div><div><br />ေအာက္က နမူနာမွာ (စက္ထဲမွာရိွေနတဲ့) လက္ရိွ ဒီေန ့အခ်ိန္ကို stirng အၿဖစ္ ၿပန္ထုတ္ရိုက္ၿပပါလိမ္မယ္။</div><div><br /></div><div><pre><br /><span class="Apple-style-span" style="color: rgb(0, 0, 153);"><script type="text/javascript"><br /><span class="Apple-tab-span" style="white-space:pre"> </span>var todayDateObj = new Date();<span class="Apple-style-span" style="color: rgb(0, 102, 0);">// var dobDateObj = new Date('Feb 23, 1983');</span><br /><span class="Apple-tab-span" style="white-space:pre"> </span>var todayDateStr = todayDateObj.toLocaleString();<span class="Apple-style-span" style="color: rgb(0, 102, 0);">// var dobStr = dobDateObj.toLocaleString();</span><br /><span class="Apple-tab-span" style="white-space:pre"> </span>document.write(todayDateStr);<span class="Apple-style-span" style="color: rgb(0, 102, 0);">//document.write(dobStr);</span><br /><span class="Apple-tab-span" style="white-space:pre"> </span>alert(todayDateStr);<span class="Apple-style-span" style="color: rgb(0, 102, 0);">//alert(dobStr);</span><br /></script></span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 153);"></pre></span></div><div style="text-align: center;"><br /></div><div></div><div>ေအာက္မွာ ၿပထားသလိုမ်ိဳး (သံုးေနတဲ့ စက္ရဲ ့ ပံုစံခ်ပံု (setting) ေပၚမူတည္ပါတယ္။) ဘေရာက္ဇာ ကေနၾကည့္ရင္ ၿမင္ရပါလိမ့္မယ္။</div><div><br /></div><div><br /></div><div><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuXE7CFyT2_aM-uANroTk5XRBf160eVQOseC_kk5hUfRogu09CDaW2JJ4C05wD-xffTkyGj4bySYSh0Uy9BsPcQEDecRJPdUIdzj44R9jkLccYuXE-5SjlxW-fCyZI5-7Y6u9Qeifaewmk/s400/toLocaleString_js.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" border="0" alt="" id="BLOGGER_PHOTO_ID_5245531260335029970" /></div><div><br /></div><div><br /><br /><span class="Apple-style-span" style="color: rgb(0, 153, 0);">ရည္ညြန္း။</span><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="color: rgb(0, 153, 0);"> <span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="color: rgb(0, 0, 0);"> </span></span></span></span><span class="Apple-style-span" style="color: rgb(0, 153, 0);">။ w3school</span></div><div><br /></div><div>အာေကလာ။</div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-12568842497166930122008-08-27T12:08:00.007+08:002008-09-19T21:45:35.248+08:00<span style="color: rgb(0, 153, 0);">XML Schemas</span><br /><span style="color: rgb(0, 153, 0);">(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - </span><span style="color: rgb(0, 153, 0);">အပိုင္း ( ၅ )</span><span style="color: rgb(0, 153, 0);"><br /><br /><span style="color: rgb(255, 102, 0);">အပိုင္း ( ၁ ) ၊ </span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);">( ၂ ) </span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);">၊ (၄) ႏွင့္ ( ၅) ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။<br /><br /></span></span><strong><simpletype><br /><br /></simpletype></strong>Content model ေတြဖန္တီးဖို ့အတြက္ <simpleType> element ကိုအသံုးၿပဳပါတယ္။ ဒါေပမယ့္ အဲဒီ content model ေတြဟာ simple content ၿဖစ္ေနဆဲပါပဲ။ simple content ဆိုတာ data ပဲပါၿပီး child elements ဒါမွမဟုတ္ mixed contents ေတြ မပါတဲ့ ဟာပါ။ simple content ၿဖစ္ေနဆဲေပမယ့္ <simpleType> က ၿပဳလြယ္ၿပင္လြယ္၊ ေၿပာင္းလဲလြယ္တဲ့ အဆင့္တစ္ခုကို ၿဖစ္ေစပါတယ္။ (a level of flexibility) လက္ရိွ ရိွေနတဲ့ ေဒတာ အမ်ိဳးအစား ေတြမွာ ကန္ ့သတ္ခ်က္ေတြ ၿပဳလုပ္ႏိုင္တာမ်ိဳးေပါ့။<br /><br />ဘာေၾကာင့္ အဲဒီ ကန္ ့သတ္ခ်က္ေတြက အသံုး၀င္ရတာလဲလို ့ ေမးခဲ့ရင္ ဒါေလးကို ေတြးၾကည့္ၾကမယ္။ ကၽြန္ေတာ္တို ့ပစၥည္း တစ္ခုအတြက္ ကုန္စရင္း (inventory) ကို element တစ္ခုေၾကညာၾကမယ္။ ဒီေတာ့ <span style="color: rgb(51, 51, 255);"><inventory></span> ဆိုတဲ့ element ေလးကို ကၽြန္ေတာ္တုိ ့ ဖန္တီးမယ္ေပါ့။ ဒါေပမယ့္ ကၽြန္ေတာ္တို ့ ၾကိဳသိေနတယ္။ ဒီ ပစၥည္း ဟာ အခု ၂၀၀ ထက္ပိုၿပီး သိုေလွာင္ရံုထဲမွာမရိွႏိုင္ဘူးဆိုပါစို ့။ လံုး၀မရိွတာက်ေတာ့ ၿဖစ္ႏိုင္တယ္။ ဒီလို ကန္ ့သတ္ခ်က္ေလးေတြ ပါလာၿပီဆိုရင္၊ ေနာက္ၿပီး ဒီလုိ ဟာေလးေတြက မၾကာခဏ သံုးရေတာ့မယ္၊ ထပ္ခါထပ္ခါသံုးရေတာ့မယ္ဆိုရင္ ကၽြန္ေတာ္တို ့ဟာ <span style="color: rgb(51, 51, 255);"><simpleType> </span>ကို သံုးၿပီး XML သဒၵါ (Schema) ကုိေၾကညာသင့္ၿပီေပါ့။ ေအာက္မွာၾကည့္မယ္။<br /><br /><pre><span style="color: rgb(0, 0, 153);"><xs:element name="inventory"></span><br /><span style="color: rgb(0, 0, 153);"><xs:simpleType></span><br /><span style="color: rgb(0, 0, 153);"><xs:restriction base="xs:integer"></span><br /><span style="color: rgb(0, 0, 153);"> <xs:minInclusive value="0"/></span><br /><span style="color: rgb(0, 0, 153);"> <xs:maxInclusive value="200"/></span><br /><span style="color: rgb(0, 0, 153);"></xs:restriction></span><br /><span style="color: rgb(0, 0, 153);"></xs:simpleType></span><br /><span style="color: rgb(0, 0, 153);"></xs:element></span></pre><br /><br />အဲဒီ ေၾကညာခ်က္ေလးက <inventory> လို ့ေခၚတဲ့ element တစ္ခုကို ၿဖစ္ေစတယ္။ သူမွာ တန္ဖိုး (value) က 0 ကေန ၂၀၀ အထိအၿမင့္ဆံုးပါႏိုင္ပါတယ္။<br />(တခု သတိၿပဳပါ။ ကၽြန္ေတာ္တို ့သံုးတဲ့ ေဒတာအမ်ိဳးအစားဟာ XML မွာ ရိွၿပီးသား ေဒတာအမ်ိုးအစား ဆိုတာပါပဲ။ interger အမ်ိဳးအစားေပါ့။ ဒါကို ကၽြန္ေတာ္တို ့က restriction ဆိုတာနဲ ့ကန္ ့သတ္ရံုပဲ ကန္ ့ သတ္လိုက္တာပါ။)<br /><br />ဒီလိုေၾကညာခဲ့တဲ့ အတြက္ တကယ္လို ့ XML Document ဖိုင္ထဲမွာ ဒီလို တက္(tag) ကေလးေတြပါလာရင္ အိုေကၿပီး<br /><pre><span style="color: rgb(51, 51, 255);"><inventory>190</inventory></span><br /><span style="color: rgb(51, 51, 255);"><inventory>0</inventory></span><br /><span style="color: rgb(51, 51, 255);"><inventory>49</inventory></span></pre><br /><br />ဒီလိုေလးေတြေတာ့ ပါလို ့မရဘူးေပါ့။<br /><pre><span style="color: rgb(51, 51, 255);"><inventory>201</inventory></span><br /><span style="color: rgb(51, 51, 255);"><inventory>250</inventory></span></pre><br /><br /><simpleType> element ကို ေၾကညာတဲ့ အခါေတြမွာ restriction ရယ္၊ list ရယ္၊ union ရယ္ပဲ ပါလို ့ ရပါတယ္။<br /><br />ထပ္သိထားရမွာက <simpleType> element မွာ id နဲ ့ name ဆိုတဲ့ စြမ္းရည္ၿပစကားလံုး (attributes) ေလးေတြပါလို ့ရတယ္။ ဒီလို simple type တစ္ခုကို name သတ္မွတ္ေပးလို ့ရတဲ့ အတြက္ အက်ိဳးေက်းဇူးကေတာ့ ကၽြန္ေတာ္တို ့ဟာ အၿခား element ေတြေၾကညာတဲ့ အခါမွာ အဲဒီ type ကို အဲဒီ name ကိုအသံုးၿပဳ ၿပီး ၿပန္ေခၚသံုးလို ့ ရၿခင္းပါပဲ။ ထပ္ခါထပ္ခါ အသံုးၿပဳႏိုင္ၿခင္း ( reusable) ၿဖစ္တာေပါ့။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:simpleType name="currency"></span><br /><span style="color: rgb(51, 51, 255);"><xs:restriction base="xs:decimal"></span><br /><span style="color: rgb(51, 51, 255);"><xs:fractionDigits value="2"/></span><br /><span style="color: rgb(51, 51, 255);"></xs:restriction></span><br /><span style="color: rgb(51, 51, 255);"></xs:simpleType></span><br /><br /><span style="color: rgb(51, 51, 255);"><xs:element name="price" type="currency"/></span></pre><br /><br />အေပၚက နမူနာမွာ ကၽြန္ေတာ္တို ့ဟာ price လို ့ေခၚတဲ့ element တခုရိွတယ္။ အဲဒီ price ဟာ decimal အမ်ိဳးအစားၿဖစ္ၿပီး ေတာ့ ဒသမဂဏန္း ၂ လံုးပဲ ပါလို ့ရမယ္။<br /><br />ဒီေတာ့ ကၽြန္ေတာ္တို ့ဟာ decimal ကို base ေဒတာအမ်ိဳးအစားအေနနဲ ့ယူလိုက္ၿပီး သူ ရဲ ့ဒသမဂဏန္းကို xs:fractionDigits တက္(tag)က တန္းဖိုး 2 ဆိုၿပီး ေၿပာင္းလိုက္တယ္။ တကယ္ decimal ေဒတာအမ်ိဳးအစားဟာ ဒသမ ၂ လံုးပဲ ပါတာမဟုတ္ဘူး။ ဒါေၾကာင့္ ကၽြန္ေတာ္တုိ ့က ဒီလို ေၿပာင္းၿပီးေတာ့ မွ ကၽြန္ေတာ္တို ့ေၿပာင္းထားတဲ့ အမ်ိုးအစား (type) ကို currency လို ့ simpleType ရဲ ့ name မွာ ေၾကညာလိုက္တယ္။ ဒသမဂဏန္း ၂ လံုးနဲ ့ဟာကို currency လို ့ နာမည္ေပးလိုက္တယ္ေပါ့ဗ်ာ။<br /><br />ၿပီးေတာ့ XML Document ထဲမွာ အဲဒီ နာမည္ကို ယူၿပီး ဒီလို သံုးလိုက္လို ့ရပါၿပီ။<br /><br /><pre><span style="color: rgb(0, 0, 153);"><xs:element name="price" type="currency"/></span></pre><br /><br />တကယ္လို ့ အၿခား element တခု ၊ ဥပမာ- totalAmount ဆိုတဲ့ element ကလည္း price လိုပဲ ဒသမဂဏန္း ၂ လံုးဆိုရင္-<br /><br /><pre><span style="color: rgb(0, 0, 153);"><xs:element name=”totalAmount” type="currency"/></span></pre><br /><br />paymentAmount ကလည္း ဒသမ ၂ လံုးပဲ ဆိုပါစို ့။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:element name=”paymentAmount” type="currency"/></span></pre><br /><br />ဆိုၿပီး သံုးလိုရပါတယ္။ ေတြ ့လား။ currency ဆိုတဲ့ ေဒတာအမ်ိဳးအစားကို ပဲ ေခၚသံုးထားတယ္။ တခါတည္း simpletype အေနနဲ ့ ေၾကညာၿပီး ထပ္ေၾကညာစရာမလို ေတာ့ဘူး။ မဟုတ္ရင္ element အသစ္တစ္ခု ဖန္တီးတိုင္း ဒသမ ၂ လံုးဆိုတာကို ေၾကညာေနရမွာ။ အခု မလိုေတာ့ဘူး။ currency ဆိုတဲ့ name ကို ေခၚသံုးရံုပဲ။ ဒါကို ထပ္ခါထပ္ခါ အသံုးၿပဳႏိုင္ၿခင္း ( reusable) ၿဖစ္တယ္လို ့ေခၚတယ္။ ဘယ္ element ကမဆို သူတို ့ရဲ ့ ေဒတာအမ်ိုးအစား (data type ) အတြက္ သင့္ေလွ်ာ္တယ္ဆိုရင္ တၿခား XML ရဲ ့ ရိွၿပီးသားေဒတာ (build in datatype – eg: Int, Decimal , etc..) ေတြလိုပဲ ေခၚသံုးႏိုင္တယ္။<br /><br />(သတိၿပဳရန္- type=”currency” ဆိုတာ XML Build-in DataType( XML မွာ အလိုအေလွ်ာက္ပါၿပီးသား ေဒတာအမ်ိုးအစား) မဟုတ္ဘူး။ ကၽြန္ေတာ္တို ့ အေပၚမွာ <span style="color: rgb(51, 51, 255);"><simpleType></span> ဆိုၿပီးေက်ညာခဲ့လို ့သံုးလို ရတာ။ သူဟာ ေဒတာ အမ်ိဳးအစားတစ္ခုလို ့ၿဖစ္သြားပါတယ္။ အဲဒါကို အဓိကေၿပာခ်င္တာပါပဲ။)<br /><br />ဒါဟာ XML သဒၵါ (schema) ရဲ ့ အလြန္ေကာင္းတဲ့ အားသာခ်က္တစ္ခုပါပဲ။<br /><br /><span style="color: rgb(51, 51, 255);"><simpletype></span> မွာ ကၽြန္ေတာ္တို ့ <span style="color: rgb(51, 51, 255);"><list> <restriction> < union></span> ေတြကိုသံုးလို ့ ရတယ္လို ့ ေၿပာခဲ့ပါတယ္။<br />အေပၚမွာ <span style="color: rgb(51, 51, 255);"><restriction></span> ကို သံုးၿပသြားခဲ့ပါတယ္။ အခု <span style="color: rgb(51, 51, 255);"><list> </span>ကိုသံုးၿပီး ဘယ္လို ့ အားသားခ်က္ေတြရိွလဲ၊ ဘယ္လိုကိစၥေတြကို လုပ္လို ့ရလဲ ဆိုတာၾကည့္ရေအာင္။<br /><br />List<br /><br />List က တန္ဖိုးတစ္ခုတည္းထက္ တန္ဖိုးအမ်ားၾကီးကိုလက္ခံႏိုင္တဲ့ ကိုယ္ပိုင္ ေဒတာ အမ်ိဳးအစားတစ္ခုကို ဖန္တီးတာကို ေၾကညာခ်င္တဲ့အခါမွာ သံုးလို ့ရပါတယ္။ ဥပမာ - ကၽြန္ေတာ္တို ့က color <color> ဆိုတဲ့ element ေလးတစ္ခုကို တည္ေဆာက္မယ္ဆိုပါစို ့။ အဲဒီ <color> ေလးဟာ မွာ အနီ (red) ၊ အ၀ါ (yellow) ၊ အၿပာ (blue) ၊ အစိမ္း (green) စသည္ၿဖင့္ ပါမယ္ေပါ့။ အဲဒီအခါ ကၽြန္ေတာ္တို ့က XML သဒၵါ (XML schema) မွာ ဒီလုိေၾကညာေပးလို ့ရတာေပါ့။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:element name=”color” type=”xs:string”></xs:element></span></pre><br /><br />ဒါေပမယ့္ ဒီလိုေၾကညာရင္ ကၽြန္ေတာ္တို ့ရဲ ့ <color> မွာ တန္ဖိုး (value) တစ္ခုပဲပါလို ့ရမယ္။ ဒီလိုမ်ိဳး -<br /><pre><span style="color: rgb(51, 51, 255);"><color>red</color></span> (ဒါက အနီ)<br /><span style="color: rgb(51, 51, 255);"><color>green</color></span> (ဒါက အ၀ါ အဲလို တစ္ခုမွာ တန္ဖိုး တခုပဲပါလို ့ရမယ္)</pre><br /><br />တကယ္လို ့ ကၽြန္ေတာ္တို ့က <span style="color: rgb(51, 51, 255);"><color> </span>မွာ တန္ဖိုးေတြ တစ္ခုထက္မက ပါေစခ်င္တယ္ဆိုပါစို <span style="color: rgb(51, 51, 255);">့။<list></span> ကို သံုးၿပီးလုပ္လို ့ ရၿပီေပါ့။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:element name=”color”></span><br /><span style="color: rgb(51, 51, 255);"> <xs:simpleType></span><br /><span style="color: rgb(51, 51, 255);"> <xs:list itemType=”xs:string”></span><br /><span style="color: rgb(51, 51, 255);"> <xs:restriction></span><br /><span style="color: rgb(51, 51, 255);"> <xs:minLength value=”1”/></span><br /><span style="color: rgb(51, 51, 255);"> <xs:maxLength value=”5”/></span><br /><span style="color: rgb(51, 51, 255);"> </xs:restriction></span><br /><span style="color: rgb(51, 51, 255);"> </xs:list></span><br /><span style="color: rgb(51, 51, 255);"></xs:simpleType></span><br /><span style="color: rgb(51, 51, 255);"></xs:element></span></pre><br /><br />ဒီ XML Schema မွာ <span style="color: rgb(51, 51, 255);"><simpleType></span> ထဲမွာ <list> ကိုထည့္ၿပီး ေၾကညာထားပါတယ္။ အဲဒီ <span style="color: rgb(51, 51, 255);"><list></span> မွာ itemType ဆိုတဲ့ စြမ္းရည္ၿပ စကားလံုး (attribute) တစ္ခုလည္းသံုးထားတယ္။ သူက ဘာကိုေၿပာတာလည္းဆိုေတာ့ ဒီ list ထဲမွာ ပါမဲ့ ေဒတာအမ်ိဳးအစားကို ေၿပာၿပတယ္။ ဒီမွာဆို<span style="color: rgb(153, 102, 51);"> xs:string</span> ၊ (စာအစဥ္အတန္း) ေဒတာအမ်ိဳးအစားေပါ့။ ဟုတ္တယ္ေလ။ ပါမဲ့ တန္ဖိုးက Red, Blue, Green စသည္ဆိုေတာ့ string အမ်ိဳးအစား ေဒတာေပါ့။ ၿပီးေတာ့ ကၽြန္ေတာ္တုိ ့ အေပၚက သံုးဖူးတဲ့ <span style="color: rgb(51, 51, 255);"><restriction></span> ကို ၿပန္သံုးတယ္။ ဒီေနရာမွာေတာ့ ကၽြန္ေတာ္တို ့က <span style="color: rgb(51, 51, 255);"><minLength> </span>နဲ ့ <span style="color: rgb(51, 51, 255);"><maxLength></span> တက္(ဂ္) ေလးကို သံုးထားတယ္။ အဲဒီ တက္(ဂ္)ေလး ၂ ခုက ဘာကိုေၿပာလည္းဆိုေတာ့ <color> element ထဲမွာ ပါမဲ့ တန္းဖိုး အေရအတြက္။ အခု <span style="color: rgb(51, 51, 255);"><list></span> ကိုသံုးလိုက္ေတာ့ <span style="color: rgb(51, 51, 255);"><color></span> ထဲမွာ တန္ဖိုးက တစ္ခုတည္းမဟုတ္ေတာ့ဘူးေလ။ တခုထက္မက ပိုၿပီးပါလာနိုင္ၿပီ မဟုတ္လား။ ဒီေတာ့ ကၽြန္ေတာ္တို ့က min နဲ ့ max ကိုသံုးၿပီး အႏွိမ့္ဆံုး ဘယ္ႏွစ္ခု၊ အၿမင့္ဆံုး ဘယ္ႏွခု ပါခြင့္ရိွႏိုင္သလဲဆိုတာကို သတ္မွတ္ေပးလိုက္တယ္။ ဒီမွာဆို အႏွိမ့္ဆံုး ၁ ခု၊ အၿမင့္ဆံုး ၅ ခုပါခြင့္ ရိွတယ္ေပါ့။<br /><br />သတိ။ <span style="color: rgb(51, 51, 255);"><minLength> နဲ ့ <maxLenght></span>တို ့က string (စာအစဥ္အတန္း) တစ္ခုလံုးရဲ ့ အရွည္ကို ေၿပာတာမဟုတ္ပါ။ <list> ရဲ ့ အရွည္ (list ထဲမွာ ဘယ္ႏွခုပါလည္းဆိုတာ) ကိုေၿပာတာပါ။<br /><br />ဒီေတာ့ ၾကည့္ၾကမယ္။<br /><br /><span style="color: rgb(0, 0, 153);"><color>Red Blue Green</color></span> ဒါဆို အားလံုးအိုေကေပါ့။ Red, Blue, Green ဆိုမွ List က ၃ ခုပဲရိွေသးတာပဲ။ ဟုတ္။<br /><br /><span style="color: rgb(0, 0, 153);"><color>Red Blue Green Black Orange Purple Brown</color> </span>ဒီလိုေတာ့ မရဘူးေပါ့။ ဘာလို ့ လည္းဆိုေတာ့ အၿမင့္ ဆံုး ရိွရမယ့္ အရွည္ ထက္ ပိုမ်ားေနတယ္ေလ။ အၿမင့္ဆံုးအရွည္က ၅ ၊ အခုက ၇ ခု၇ိွေနတယ္။<br /><br /><span style="color: rgb(51, 51, 255);"><color></color></span> ဒီလိုလည္းမရဘူး။ အနည္းဆံုး တန္းဖိုး ၁ ခုပါရမယ္လို ့သတ္မွတ္ထားခဲ့တယ္။ မွတ္မိတယ္ထင္ပါတယ္။<br /><br /><span style="color: rgb(51, 51, 255);"><list></span> က ကၽြန္ေတာ္တို ့ element ထဲမွာ တန္ဖိုးတစ္ခုထက္ပိုၿပီး ထည့္ေပးခ်င္တဲ့ အခါ၊ အဲလို element ကို schema (သဒၵါ) မွာ ေၾကညာရတဲ့ အခါမ်ိဳး အသံုးက်ပါတယ္။<br /><br /><span style="color: rgb(0, 153, 0);">ဆက္ရန္။</span><br /><br />ထပ္ေရးေနပါတယ္ဗ်ာ..။ :D<br /><br /><span style="color: rgb(0, 153, 0);">အာေကလာ (akela)</span><br /><br /><span style="color: rgb(0, 153, 0);">Aug 27, 2008 12.02 pm</span></color></color>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-31586898386273266972007-12-10T21:05:00.000+08:002007-12-10T22:01:29.792+08:00<div style="text-align: justify;"><span style="color: rgb(0, 153, 0);">XML Schemas</span><br /><span style="color: rgb(0, 153, 0);">(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - </span><span style="color: rgb(0, 153, 0);">အပိုင္း ( ၄ )</span><span style="color: rgb(0, 153, 0);"><br /><br /><span style="color: rgb(255, 102, 0);">အပိုင္း ( ၁ ) ၊ </span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);">( ၂ ) </span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);">ႏွင့္ ( ၃) ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။<br /><br /></span></span><strong style="color: rgb(0, 0, 153);">Content Models</strong><br /><br />တခါတေလမွာ Empty element ေတြဟာ အေရးပါအရာေရာက္ေပမယ့္ မ်ားေသာအားၿဖင့္ တန္ဖိုး (value) ရိွတဲ့ element ေတြပဲမ်ားပါတယ္။ element တစ္ခုဟာ ရိုးစင္းတဲ့ content အမ်ိဳးအစားေတြရိွတယ္။ number တို ့ string တို ့လိုမ်ိဳးေပါ့။ ဒါမွမဟုတ္ စာေတြတၿခား element ေတြ ေရွာေထြးေနတာမိ်ဳးလည္း ၿဖစ္တက္တယ္။<br /><br /><span style="color: rgb(0, 102, 0);">element တစ္ခုဟာ သူ ့ေအာက္မွာ အၿခား element မရိွဘဲ တန္ဖိုး (value) ပဲရိွတယ္ဆိုရင္ သူကို ရိုးရွင္းတဲ့ content (simple content) လို ့ေခၚတယ္။</span><span style="color: rgb(0, 0, 153);">တကယ္လို ့ element တစ္ခုဟာ သူကိုယ္တိုင္က parent element ၿဖစ္ၿပီး သူ ့ေအာက္မွာ child element ေတြရိွတယ္ဆိုရင္ သူ ့ကို element content လို ့ေခၚတယ္။ </span><span style="color: rgb(153, 0, 0);">ေနာက္ဆံုး တစ္ခုအေနနဲ ့ စာေတြေရာ ၊ child element ေတြေရာ ေရာေထြးၿပီးရိွေနတယ္ဆိုရင္ သူကို mixed content လို ့ေခၚတယ္။</span> ဒါက ဘယ္အေၿခအေနမွာ ဘယ္လို သံုးႏွန္းတာလည္းဆိုတာကို ေၿပာတာပါ။<br /><br />element တစ္ခုကို တည္ေဆာက္တဲ့ အခါ အရိုးရွင္းဆံုးနည္းကေတာ့ <span style="color: rgb(204, 51, 204);">built in data type (XML မွာ အလိုအ ေလွ်ာက္ပါၿပီးသား data အမ်ိဳးအစား) </span>ကို သံုးတာၿဖစ္ပါတယ္။အဲဒီထဲမွာ string, decimal, date, Boolean, နဲ ့ time တို ့ပါ၀င္ၾကပါတယ္။ data အမ်ိဳးအစားက လည္း built in၊ content ကလည္း ရိုးရွင္းတဲ့ ေဒတာ (simple data) ဆိုရင္ stand alone element declaration ကို သံုးလို ့ရပါတယ္။ ဥပမာ -<br /><br /><span style="color: rgb(0, 0, 153);"><xs:element name="quantity" type="xs:interger"/></span><br /><br />ဒီ ေၾကညာခ်က္ေလးက <quantity> ဆိုတဲ့ element တစ္ခုကို အသံုးၿပဳႏိုင္ေအာင္လုပ္ေပးပါလိမ္မယ္။ ေဒတာ အမ်ိဳးအစားကေတာ့ interger ေပါ့။<br /><br /><span style="color: rgb(0, 0, 153);"><quantity>5</quantity></span><br /><br />ေဒတာအမ်ိဳးအစာ <span style="color: rgb(204, 51, 204);">decimal ၊ temperature element </span>အတြက္ဆိုရင္<br /><br /><span style="color: rgb(0, 0, 102);"><xs:element name="temperature" type="xs:decimal"/></span><br /><br />XML ဖိုင္ထဲမွာေတာ့ ဒီလိုသံုးလို ့ရေရာေပါ့။<br /><br /><span style="color: rgb(0, 0, 153);"><temperature>9.89</temperature></span><br /><br />ေဒတာအမ်ိဳးအစာ <span style="color: rgb(204, 51, 204);">date၊ holiday element</span> အတြက္ဆိုရင္<br /><br /><span style="color: rgb(0, 0, 153);"><xs:element name="holiday" type="xs:date"/></span><br /><br />XML ဖိုင္ထဲမွာေတာ့ ဒီလိုသံုးလို ့ရေရာေပါ့။<br /><br /><span style="color: rgb(0, 0, 153);"><holiday>2007-12-13</holiday></span><br /><br />date ေဒတာအမ်ိဳးအစားက <span style="color: rgb(204, 51, 204);">YYYY-MM-DD(ႏွစ္၊ လ၊ ရက္) </span>ကို သတ္မွတ္ေပးပါတယ္။<br /><br />ေဒတာအမ်ိဳးအစာ <span style="color: rgb(204, 51, 204);">boolean ၊ attendenct element</span> အတြက္ဆိုရင္<br /><br /><span style="color: rgb(0, 0, 153);"> <xs:element name="attendenct" type="xs:boolean"/></span><br /><br />XML ဖိုင္ထဲမွာေတာ့ ဒီလိုသံုးလို ့ရေရာေပါ့။<br /><br /><span style="color: rgb(0, 0, 153);"> <attendenct>true</attendenct></span><br /><br />ေဒတာအမ်ိဳးအစာ <span style="color: rgb(204, 51, 204);">string ၊ title element</span> အတြက္ဆိုရင္<br /><br /><span style="color: rgb(0, 0, 153);"> <xs:element name="title" type="xs:string"/></span><br /><br />XML ဖိုင္ထဲမွာေတာ့ ဒီလိုသံုးလို ့ရေရာေပါ့။<br /><br /><span style="color: rgb(0, 0, 153);"> <title>XML Schema Introduction</title></span><br /><br />အဲဒီလို ေပါ့။ ဟုတ္လား။<br />ပံုစံ ထုတ္ၾကည့္ရင္ ဒီလို ေၿပာလို ့ရမယ္။<br /><br /><span style="color: rgb(51, 51, 153);"> <xs:element name="element" type="xs:data_type"/></span><br /><br />element ေတြကို ဒီလို ေၾကညာတာဟာ simple content (အထဲမွာ data ပဲပါၿပီး ဘာမွမပါတာ) ေတြအတြက္ဆို အလုပ္လုပ္ပါ တယ္။ ဒါေပမယ့္ တကယ္လက္ေတြ မွာေတာ့ အဲဒီလို ့ string, date , decimal , boolean ေဒတာေလးေတြ ပဲ ပါတာ မဟုတ္ဗ်။ ပိုၿပီးေတာ့ ရွုပ္ေထြးတယ္။ ဒါေၾကာင့္ content model ဆိုၿပီးၿဖစ္လာရတယ္။ ေအာက္ကေတာ့ အဲဒီအေၾကာင္းပါပဲ။<br /><br /><strong><simpleType></strong><br /><br /><span style="color: rgb(0, 0, 153);">ဆက္ရန္။(ေနာက္ေန ့မွ ဒီပိုစ္မွာပဲ ဆက္ေရးပါမယ္)။</span><br /><br /><span style="color: rgb(0, 153, 0);">အာေကလာ(akela)</span><br /><span style="color: rgb(0, 153, 0);">Dec 10, 2007 09:53 pm</span><br /><br /><br /><br /><br /><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-10971945903932966572007-12-05T23:49:00.000+08:002007-12-06T01:26:43.304+08:00temp Explaination<a style="color: rgb(0, 0, 153);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibV7nDHrRS1_T5uDK1JY-huuSo4RCuRZx47oqa2cDQ8aYSGD_owGy_gM5GfybCFKveaMW7wnODfJ67QYBaz63tJ_bh4RvqB34yu247rWRXg518ow_ypuBorJI-iHSs8nBU-wNlD1wZTpQr/s1600-h/scan0001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibV7nDHrRS1_T5uDK1JY-huuSo4RCuRZx47oqa2cDQ8aYSGD_owGy_gM5GfybCFKveaMW7wnODfJ67QYBaz63tJ_bh4RvqB34yu247rWRXg518ow_ypuBorJI-iHSs8nBU-wNlD1wZTpQr/s320/scan0001.jpg" alt="" id="BLOGGER_PHOTO_ID_5140532575724084194" border="0" /></a><br /><span style="color: rgb(0, 0, 153);"><br /><br />namespace testingWebLinks</span><br /><span style="color: rgb(0, 0, 153);">{</span><br /><span style="color: rgb(0, 0, 153);"> class Program</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> static void Main(string[] args)</span><br /><span style="color: rgb(0, 0, 153);"> { </span><br /><span style="color: rgb(0, 0, 153);"> string line;</span><br /><br /><span style="color: rgb(0, 0, 153);"> Dictionary</span><span style="color: rgb(0, 0, 153);"><string,string> dictionaryOutLinks = new Dictionary<string,string>();</span><br /><span style="color: rgb(255, 0, 0);">သူက page တစ္ခုစီမွာ out links ဘယ္ႏွခုရိွလည္း ကို သိမ္းမွာ။</span><br /><span style="color: rgb(0, 0, 153);"> Dictionary<string,string> dictionaryInLinks = new Dictionary<string,string>();</span><br /><span style="color: rgb(255, 0, 0);">သူက page တစ္ခုစီမွာ in links ဘယ္ႏွခုရိွလည္း ကို သိမ္းမွာ။</span><br /><span style="color: rgb(0, 0, 153);"> Dictionary<string,string> dictionaryOutPages = new Dictionary<string,string>();</span><br /><span style="color: rgb(255, 0, 0);">သူက page တစ္ခုစီမွာ ဘယ္ out page ေတြဆီိကို ထြက္သြားတာလည္းကို သိမ္းမွာ။</span><br /><span style="color: rgb(0, 0, 153);"> Dictionary<string,string> dictionaryInPages = new Dictionary<string,string>();</span><br /><span style="color: rgb(255, 0, 0);">သူက page တစ္ခုစီမွာ ဘယ္ in page ေတြက ၀င္လာတာလည္းကို သိမ္းမွာ။</span><br /><br /><span style="color: rgb(0, 0, 153);"> dictionaryInLinks.Clear();</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryOutLinks.Clear();</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryInPages.Clear();</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryOutPages.Clear();</span><br /><span style="color: rgb(255, 0, 0);">ဒါကေတာ့ စစခ်င္း clear လုပ္တာပါ။ အေရးမၾကီးပါ။</span><br /><br /><span style="color: rgb(0, 0, 153);"> // Read the file and display it line by line.</span><br /><span style="color: rgb(0, 0, 153);"> String visitedString = "Visited:";</span><br /><span style="color: rgb(255, 0, 0);"> သူက ငါတို ့ဖတ္မဲ့ link က visited link ဟုတ္လား မဟုတ္လားကို စစ္ဖို ့။</span><br /><span style="color: rgb(0, 0, 153);"> String curVisitStr = String.Empty;</span><br /><span style="color: rgb(255, 0, 0);">သူကေတာ့ လက္ရိွ visited link ကို သိမ္းထားဖို ့ (program အရ လိုေနလို ့ပါ။ေလာဂ်စ္အရ အေရးမၾကီး)။</span><br /><br /><span style="color: rgb(0, 0, 153);"> Int32 inCounter = 0; </span><span style="color: rgb(255, 0, 0);">in links စုစု ေပါင္း</span><br /><span style="color: rgb(0, 0, 153);"> Int32 outCounter = 0; </span><span style="color: rgb(255, 0, 0);">out link စုစုးေပါင္း</span><br /><span style="color: rgb(0, 0, 153);"> Boolean isInVisited = false; </span><span style="color: rgb(255, 0, 0);">သူက မလို ပါဘူး။</span><br /><br /><span style="color: rgb(0, 0, 153);"> System.IO.StreamReader file = new System.IO.StreamReader("C:\\Documents and Settings\\nhyan\\Desktop\\weblinks.txt");</span><br /><span style="color: rgb(255, 0, 0);">ငါတို ့.. web log file ကို ဖတ္လိုက္တာ။</span><br /><span style="color: rgb(0, 0, 153);"> try</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> while ((line = file.ReadLine()) != null) </span><span style="color: rgb(255, 0, 0);">တစ္ေၾကာင္းခ်င္းloop ပတ္တယ္။</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> if (line.StartsWith(visitedString))</span><span style="color: rgb(255, 0, 0);">ဖတ္လိုက္တဲ့ link က visited နဲ ့ စတာလားကို စစ္</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> if (outCounter != 0) </span><span style="color: rgb(255, 0, 0);">ပထမဆံုး visited link လား ေနာက္မွ ေတြ ့တဲ့ visited link လားစစ္</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryOutLinks[curVisitStr.Trim()] = outCounter.ToString();</span><br /><span style="color: rgb(0, 0, 153);"> outCounter = 0; isInVisited = false;</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryOutLinks.Add(line.Trim(), outCounter.ToString());<br /><span style="color: rgb(0, 153, 0);">dictionaryOutPages.Add(line.Trim(), String.Empty);</span><br /></span><span style="color: rgb(255, 0, 0);">ပထမဆံုး visited link ကို သိမ္းတယ္။သူရဲ ့ counter က ေလာေလာဆယ္ 0 ေပါ့။</span><br /><span style="color: rgb(0, 0, 153);"> curVisitStr = line.Trim();</span><br /><span style="color: rgb(255, 0, 0);">curVisitStr ထဲကို လက္ရိွ link ကို ထည့္တယ္။</span><br /><span style="color: rgb(0, 0, 153);"> isInVisited = true; </span><span style="color: rgb(255, 0, 0);">ဒါကမလို </span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"> else </span><span style="color: rgb(255, 0, 0);">ဖတ္လိုက္တဲ့ link က visited နဲ ့ စတာမဟုတ္ဘူးဆိုရင္</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> if (isInVisited == true)</span><span style="color: rgb(255, 0, 0);">ဒါလည္း မလို</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> if (!dictionaryInLinks.ContainsKey(line.Trim()))</span><br /><span style="color: rgb(255, 0, 0);">In links dictionary ထည္းမွာ လက္ရိွ link ဟာ ရိွပီးလား ကို စစ္( မ၇ိွေသးဘူးဆိုရင္)</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> inCounter++;</span><span style="color: rgb(0, 0, 153);"> <span style="color: rgb(255, 0, 0);">in coutner ကို ၁ တိုး</span></span><br /><span style="color: rgb(0, 0, 153);"> dictionaryInLinks.Add(line.Trim(), inCounter.ToString()); </span><br /><span style="color: rgb(255, 0, 0);">In links dictionary ကို လက္ရိွ Link က key၊ in counter က value အၿဖစ္ သိမ္း</span><br /><span style="color: rgb(0, 0, 153);"> outCounter++;</span><br /><span style="color: rgb(255, 0, 0);">out counter ကိုလည္း ၁ တိုး.. ဒါက တစ္ေၾကာင္းဖတ္တိုင္း တိုးရမွာေလ ။ အခုက out link ကို ဖတ္ေနတာ</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryInPages.Add(line.Trim(), curVisitStr);</span><br /><span style="color: rgb(255, 0, 0);">in page dictionary ကို လည္း လက္၇ွိဖတ္ေနတဲ့ link ရယ္၊ အေပၚက visited link ၇ယ္ကို key value အၿဖစ္သိမ္း</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"> else</span><br /><span style="color: rgb(255, 0, 0);">In links dictionary ထည္းမွာ လက္ရိွ link ဟာ ရိွပီးလား ကို စစ္( ရိွတယ္ဆိုရင္) ရိွပီးသားကို update လုပ္ရမယ္ေလ အသစ္ထည့္လို ့မရေတာ့ဘူး</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> String tempValue = String.Empty;</span><br /><span style="color: rgb(0, 0, 153);"> String tempString = String.Empty;</span><br /><br /><span style="color: rgb(255, 0, 0);"> // in link dictionar ကို key လက္၇ိွ link ေပးပီ ေတာ့ value ကို ထုတ္ယူ</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryInLinks.TryGetValue(line.Trim(), out tempValue);</span><br /><span style="color: rgb(0, 0, 153);"> inCounter = Convert.ToInt32(tempValue);</span><br /><span style="color: rgb(0, 0, 153);"> inCounter++;</span><br /><span style="color: rgb(255, 0, 0);">အဲဒီ value ကို ၁ တိုး</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryInLinks[line.Trim()] = inCounter.ToString();</span><br /><span style="color: rgb(255, 0, 0);">ၿပန္ပီးေတာ့ ထည့္</span><br /><br /><span style="color: rgb(0, 0, 153);"> //dictionaryInLinks.Remove(line);</span><br /><span style="color: rgb(0, 0, 153);"> //dictionaryInLinks.Add(line, inCounter);</span><br /> <br /><span style="color: rgb(255, 0, 0);"> //တဆက္တည္း in page ပါ update လုပ္သြား</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryInPages.TryGetValue(line.Trim(), out tempValue);</span><br /><span style="color: rgb(255, 0, 0);">လက္ရိွ link ကို key အၿဖစ္ ေပးပီးေတာ့ထုတ္ယူ</span><br /><span style="color: rgb(0, 0, 153);"> tempString = tempValue.Trim() + "::" + curVisitStr.Trim();</span><br /><span style="color: rgb(255, 0, 0);">value ကို update လုပ္</span><br /><span style="color: rgb(0, 0, 153);"> dictionaryInPages[line.Trim()] = tempString;</span><br /><span style="color: rgb(255, 0, 0);">ၿပန္ထည့္</span><br /> <br /><span style="color: rgb(0, 0, 153);"> outCounter++;</span><br /><span style="color: rgb(255, 0, 0);">ဒါကေတာ့ out counter ကို ၁ တိုးရမယ္ေလ။</span><br /><span style="color: rgb(0, 0, 153);"> }<br /><span style="color: rgb(0, 153, 0);">String tempOutValue = String.Empty;</span><br /><span style="color: rgb(0, 153, 0);"> dictionaryOutPages.TryGetValue(curVisitStr.Trim(), out tempOutValue);</span><br /><span style="color: rgb(0, 153, 0);"> tempOutValue = tempOutValue + "::" + line.Trim();</span><br /><span style="color: rgb(0, 153, 0);"> dictionaryInLinks[curVisitStr.Trim()] = tempOutValue;</span><br /></span><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><br /><span style="color: rgb(255, 0, 0);">ဒီေအာက္ပိုင္းက.. dictionary ထည္းမွာ သိမ္းထားတာေတြကို txtဖိုင္မွာ ၿပန္၇ိုက္ထုတ္တာ။</span><br /><span style="color: rgb(0, 0, 153);"> Int32 i = 0;</span><br /><span style="color: rgb(0, 0, 153);"> TextWriter twOutLink = new StreamWriter("C:\\Documents and Settings\\nhyan\\Desktop\\outLinks.txt");</span><br /><span style="color: rgb(0, 0, 153);"> foreach (KeyValuePair</span><string, style="color: rgb(0, 0, 153);"> kvp in dictionaryOutLinks)<br /> {<br /> if (i == 0)<br /> {<br /> // write a line of text to the file<br /> twOutLink.Write("OUT LINKS");<br /> twOutLink.WriteLine("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t PAGES");<br /><br /> i = 1;<br /> }<br /><br /> twOutLink.WriteLine("{0} \t\t\t\t {1}",<br /> kvp.Key, kvp.Value);<br /> }<br /> // close the stream<br /> twOutLink.Close();<br /><br /> Int32 j = 0;<br /><br /> TextWriter twInLink = new StreamWriter("C:\\Documents and Settings\\nhyan\\Desktop\\inLinks.txt");<br /> foreach (KeyValuePair<string,> kvp in dictionaryInLinks)<br /> {<br /> if (j == 0)<br /> {<br /> // write a line of text to the file<br /> twInLink.Write("OUT LINKS");<br /> twInLink.WriteLine("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t PAGES");<br /><br /> j = 1;<br /> }<br /><br /> twInLink.WriteLine("{0} \t\t\t\t {1}",<br /> kvp.Key, kvp.Value);<br /> }<br /> // close the stream<br /> twInLink.Close();<br /> }<br /> catch (KeyNotFoundException exp)<br /> {<br /> Console.Write(exp.ToString());<br /> } <br /><br /> // Suspend the screen.<br /> Console.ReadLine();<br /> }<br />}<br />}</string,></string,>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-46626786341215301752007-12-04T19:58:00.003+08:002008-09-19T22:06:00.831+08:00<div style="text-align: justify;"><span style="color: rgb(0, 153, 0);">XML Schemas</span><br /><span style="color: rgb(0, 153, 0);">(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - </span><span style="color: rgb(0, 153, 0);">အပိုင္း ( 3 )</span><span style="color: rgb(0, 153, 0);"><br /><br /><span style="color: rgb(255, 102, 0);">အပိုင္း ( ၁ ) ႏွင့္ ( ၂ ) ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။<br /><br /></span></span><span style="color: rgb(204, 102, 0);"><strong>id</strong></span><br />ဒီ id စြမ္းရည္ၿပစကားလံုး (attribute) ေလးက ကၽြန္ေတာ္တို ့ကို ဘာလုပ္ခြင့္ ၿပဳလဲဆိုေတာ့၊ element တစ္ခုအတြက္ ID (Identity) ကို ေၾကညာခြင့္ၿပဳပါတယ္။ ဒီ id ရဲ ့ တန္ဖိုး (value) ဟာ element ရဲ ့ <span style="color: rgb(204, 51, 204);">Unique Key (ထပ္တူမရိွေသာ တန္ဖိုး) </span>အၿဖစ္ လုပ္ေဆာင္ေပးပါတယ္။<br /><br /><span style="color: rgb(204, 102, 0);"><strong>maxOccurs</strong></span><br />ဒီ maxOccurs က XML Document ထဲမွာ Element တစ္ခုဟာ ဘယ္ႏွစ္ၾကိမ္ ပါ၀င္ခြင့္ ရိွတယ္ဆိုတာကို သတ္မွတ္ေပးပါတယ္။ ဥမပါ schemas မွာ ဒီလို ေၾကညာထားမယ္ဆိုပါစို ့-<br /><br /><pre><span style="color: rgb(0, 0, 153);"><element name="part" maxOccurs="3"/></span></pre><br /><br />ဒါဆို XML Document ထဲမွာ part element ေလးဟာ အမ်ားဆံုး 3 ၾကိမ္ ပါလို ့ရပါတယ္။ (ေအာက္မွာၾကည့္ပါ)။<br /><br /><pre><span style="color: rgb(0, 0, 153);"><car></span><br /><span style="color: rgb(0, 0, 153);"><part>wheel</part></span><br /><span style="color: rgb(0, 0, 153);"><part>body</part></span><br /><span style="color: rgb(0, 0, 153);"><part>roof</part></span><br /><span style="color: rgb(0, 0, 153);"></car></span></pre><br /><br />မရိွသံုးတန္ဖိုး(default value) အေနနဲ ့ maxOccurs ရဲ ့တန္ဖိုးဟာ 1 ၿဖစ္ပါတယ္။ အႏွတ္ကိန္းမဟုတ္တဲ့ တန္ဖိုးမ်ားကို လက္ခံပါတယ္။ အဲလို ဂဏန္း (interger) ေတြမဟုတ္ပဲ "<span style="color: rgb(204, 102, 0);">unbounded</span>" လို ့ တန္ဖိုးသတ္မွတ္ခဲ့ ရင္ element တစ္ခုဟာ ၾကိဳက္သေလာက္ ပါႏိုင္တယ္လို ့အဓၶိပါယ္ရိွပါတယ္။<br /><br /><span style="color: rgb(204, 102, 0);"><strong>minOccurs</strong></span><br /><br />သူကေတာ့ maxOccurs နဲ ့ေၿပာင္းၿပန္ပါ။ XML Document ထဲမွာ element တစ္ခုဟာ အနည္းဆံုး ဘယ္ႏွယ္ ၾကိမ္ပါ၀င္ႏိုင္လဲဆိုတာကို သတ္မွတ္ေပးပါလိမ့္မယ္။ မရိွသံုးတန္ဖိုး (default value ) က 1 ပါ။<br /><br />တကယ္လို ့ feature ဆုိတဲ့ element ေလးကို ေၾကညာခ်င္တယ္ဗ်ာ။ အ၀တ္အထည္ အတြက္ေပါ့။ အဲဒီမွာ အနည္းဆံုးအေနနဲ ့ feature ၂ ခု၊ အမ်ားဆံုးအေနနဲ ့ feature ၆ ခုကို ပဲ ရိွေစခ်င္တယ္ဆိုပါစို ့။ ဒါဆို-<br /><br /><pre><span style="color: rgb(0, 0, 153);"><element name="feature" minOccurs="2" maxOccurs="6"></span></pre><br /><br /><span style="color: rgb(204, 0, 0);">(ကၽြန္ေတာ္တို ့ Database နဲ ့တြဲသံုးတဲ့ အခါ၊ Database မွာ attribute(colum) ရဲ ့ value က allow null (တန္ဖိုး မထည့္လည္း ရတဲ့ column) ဆိုရင္၊ XML တြဲၿပီးအလုပ္လုပ္တဲ့ အခါ၊ minOccurs ကို 0 တန္ဖိုး ေပးလိုက္ ဒါဆုိ အဲဒီ element (tag) ကမပါလည္း ရသြားၿပီး။ ဟုတ္။)</span><br /><br /><span style="color: rgb(204, 102, 0);"><strong>nillable</strong></span><br />ဒီဟာေလးကေတာ့ boolean တန္ဖိုး ၿဖစ္တဲ့ true နဲ ့ false တစ္ခုခုကို လက္ခံပါတယ္။ သူက ဘာကိုေၿပာသလဲ ဆိုေတာ့ element တစ္ခုဟာ ဘာမွမပါတာ(nillable)ကို လက္ခံလားမခံလားဆိုတာကိုပဲ။ လက္ခံတယ္ (true) ရင္ element တစ္ခုဟာ EMPTY element ၿဖစ္ႏိုင္ပါတယ္။<br /><br /><pre><span style="color: rgb(0, 0, 153);"><part></part> (၀ါ) <part/> (empty element)</span></pre><br /><br /><span style="color: rgb(204, 102, 0);"><strong>ref</strong></span><br /><br />သူကေတာ့ နည္းနည္း ရွဳပ္သလို ရိွတယ္။<br /><br />ref စြမ္းရည္ၿပစကားလံုး (attribute) ေလးဟာ global ေၾကညာထားတဲ့ elemnt တစ္ခုကို ၿပန္ၿပီး ေတာ့ သံုးခ်င္တဲ့ အခါမွာ အသံုးၿပဳပါတယ္။ ဥမပါ ၾကည့္ရေအာင္ -<br /><br /><pre><span style="color: rgb(0, 0, 153);"><xs:schema></span><br /><span style="color: rgb(255, 0, 0);"><xs:element name="full_name" type="xs:string"/></span><br /><span style="color: rgb(0, 0, 153);"><xs:element naem="supervisor"></span><br /><span style="color: rgb(0, 0, 153);"><xs:complexType></span><br /><span style="color: rgb(0, 153, 0);"><xs:element ref="full_name"/></span><br /><span style="color: rgb(0, 0, 153);"></xs:complexType></span><br /><span style="color: rgb(0, 0, 153);"></xs:element></span><br /><span style="color: rgb(0, 0, 153);"><xs:element name="employee"></span><br /><span style="color: rgb(0, 0, 153);"><xs:complexType></span><br /><span style="color: rgb(0, 153, 0);"><xs:element ref="full_name"/></span><br /><span style="color: rgb(0, 0, 153);"></xs:complexType></span><br /><span style="color: rgb(0, 0, 153);"></xs:element></span><br /><span style="color: rgb(0, 0, 153);"></xs:schema></span></pre><br /><br />ဒီ ဥပမာေလးမွာ full_name element ေလးတစ္ခုကိုေၾကညာထားပါတယ္။ ပီးေတာ့ ref attribute ကို သံုးၿပီး ေတာ့ supervisor နဲ ့ employee element တို ့မွာ ၿပန္ညြန္းထားပါတယ္။ ဒီေနရာမွာဘာ ကအေရးၾကီးလဲဆို full_name ကို global scope မွာ ေၾကညာရတာပါပဲ။ ref ကို သံုးခ်င္ရင္၊ အသံုးခံရမယ့္ element ဟာ global ၿဖစ္ေစ၊ သံုးမယ့္ element နဲ ့ level တစ္ခုတည္းမွာၿဖစ္ေစရိွရပါမယ္။ အေပၚဥပမာဆိုရင္၊ full_name elemnt ဟာ <span style="color: rgb(204, 0, 0);">(အနီေရာင္)</span> ၿပန္ၿပီး reference လုပ္မဲ့ ဟာႏွစ္ခု <span style="color: rgb(0, 102, 0);">(အစိမ္းေရာင္)</span> တို ့ရဲ ့ အၿပင္ global scope မွာရိွ ေနတယ္။ ဟုတ္။ ေနာက္သတိၿပဳရမွာတစ္ခ်က္က ref ကို global ေၾကညာမယ့္ element မွာ မသံုးဘူးဆိုတာပါပဲ။ (အေပၚဥပမာဆိုရင္၊ full_name မွာ ref မသံုးထားပါ)<br /><br />ဒါေၾကာင့္ သေဘားတရားအရ ေအာက္ပါဥပမာမ်ိဳး ကို လုပ္လို ့မရပါဘူး။<br /><br /><pre><span style="color: rgb(0, 0, 153);"><xs:element></span><br /><span style="color: rgb(0, 0, 153);"><xs:element name="full_name" type="xs:string"/></span><br /><span style="color: rgb(0, 0, 153);"><xs:element ref="full_name" type="xs:string"/></span><br /><span style="color: rgb(0, 0, 153);"><xs:schema></span></pre><br /><br />သေဘာေပါက္တယ္ဟုတ္ :D ။<br /><br />ေလာေလာဆယ္ေတာ့... .<br /><span style="color: rgb(0, 0, 153);">ဆက္ရန္။ (အားေသးဘူးဗ်ာ)။<br /></span><br /><span style="color: rgb(0, 102, 0);">အာေကလာ(akela)</span><br /><span style="color: rgb(0, 102, 0);">Dec 04 , 2007 9:23 pm<br /><br /></span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-75919112752871007412007-11-28T23:34:00.002+08:002008-09-19T22:10:16.751+08:00<span style="color: rgb(0, 153, 0);">XML Schemas</span><br /><span style="color: rgb(0, 153, 0);">(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - </span><span style="color: rgb(0, 153, 0);">အပိုင္း ( ၂ )</span><span style="color: rgb(0, 153, 0);"><br /><br /><span style="color: rgb(255, 102, 0);">အပိုင္း ( ၁ ) ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။<br /><br /><pre><span style="color: rgb(0, 0, 0);"><span style="color: rgb(51, 51, 255);">Valid <element> Attribute</span></pre><br /><br /></span></span></span><div style="text-align: justify;"><div style="text-align: justify;"><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">XML Schema မွာ element တစ္ခုကိုေၾကညာမယ္ဆိုရင္ </span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"><element> ဆိုတဲ့ tag ကို အသံုးၿပဳရပါတယ္။ ဒီ တက္(ဂ္)ေလးကဘယ္ element ရဲ ့ အစမွာဆိုပါပါတယ္။ ဒီ </span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"><element> tag ေလးမွာ attribute လို ့ေခၚတဲ့ ဒီတက္ေလးဟာ နာမည္ဘယ္လိုေခၚေၾကာင္း၊ ဘာေဒတာအမ်ိဳးအစားၿဖစ္ေၾကာင္း၊ စသည္ၿဖင့္ ေၿပာၿပ ေပးမယ့္ <span style="color: rgb(204, 51, 204);">စြမ္းရည္ၿပစကားလံုး (attribute)</span> ေလးေတြရိွပါတယ္။ (ေအာက္မွာၾကည့္ပါ)<br /><br /><pre><span style="color: rgb(51, 51, 255);"> - default</span><br /><span style="color: rgb(51, 51, 255);"> - fixed</span><br /><span style="color: rgb(51, 51, 255);"> - id</span><br /><span style="color: rgb(51, 51, 255);"> - maxOccurs</span><br /><span style="color: rgb(51, 51, 255);"> - minOccurs</span><br /><span style="color: rgb(51, 51, 255);"> - name</span><br /><span style="color: rgb(51, 51, 255);"> - nillable</span><br /><span style="color: rgb(51, 51, 255);"> - ref</span><br /><span style="color: rgb(51, 51, 255);"> - substitutionGroup</span><br /><span style="color: rgb(51, 51, 255);"> - type</span></pre><br /><br />ဟုတ္ပီလား။ ကၽြန္ေတာ္တို ့ တစ္ခုခ်င္းစီကို ၾကည့္ၾကရေအာင္။ ဒါမွ element ကိုေၾကညာတဲ့အခါ ဘယ္လိုတည္ေဆာက္လို ့ ရတယ္ဆိုတဲ့ structure ကို သိသြားမယ္။<br /><br /><span style="color: rgb(204, 102, 0);"><strong>name</strong></span><br />ဒီ name ဆိုတဲ့ <span style="color: rgb(0, 0, 0);">စြမ္းရည္ၿပ စကားလံုး (attribute)</span> ေလးက XML document ဖိုင္တစ္ခုထဲ မွာရိွတဲ့ element တစ္ခုရဲ ့ နာမည္ကို သတ္မွတ္ေပးပါတယ္။ ဥပမာ - XML Schema မွာ ဒီလို ေရးထားတယ္ဆိုပါဆို ့။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:element name="address"/></span></pre><br /><br />ဒါဘာကိုေၿပာတာလည္းဆိုရင္ ဒီ Schema ကို သံုးမယ့္ XML document ထဲမွာသံုးႏိုင္တဲ့ <address> ဆိုတဲ့ tag ကို ေၾကညာလိုက္တာပါပဲ။ ဒီလို name ကိုတန္ဖိုး သတ္မွတ္ေပးတဲ့ အခါ (ဒီေနရာမွာ address ေပါ့) letter နဲ ့စရပါမယ္။ XML ဆိုတဲ့ စလံုးနဲ ့ ဒါမွမဟုတ္ သူနဲ ့ေပါင္းစပ္ထားတဲ့ စာလံုးနဲ ့ စလို ့မရပါဘူး။ ":" ကို namespace အတြက္ အသံုးၿပဳပီး၊ "_" ကို ေတာ့ သံုးႏိုင္ပါတယ္။<br />ိုု<br /><span style="color: rgb(204, 102, 0);"><strong>defualt</strong></span><br />ဒါေလးက string အမ်ိဳးအစား တန္ဖိုးတစ္ခုကို ကၽြန္ေတာ္တို ့့element ရဲ ့ <span style="color: rgb(204, 51, 204);">မရိွသံုးတန္ဖိုး (default value) </span> အၿဖစ္ထည့္ေပးပါတယ္။ ဒါေၾကာင့္ တကယ္လို ့ copyright element တစ္ခုကို ဒီလိုေရးခဲ့မယ္ဆိုရင္ -<br /><br /><pre><span style="color: rgb(51, 51, 255);"><element name="copyright" default="Copyright 2008"/></span></pre><br /><br />ဒါဆိုရင္ <copyright> လို ့ေခၚတဲ့ element တစ္ခုကို ဖန္တီးပီးေတာ့ အဲဒီ element မွာဘာ<span style="color: rgb(0, 0, 0);">တန္ဖိုး (value)</span> မွ မထည့္ခဲ့ရင္ <span style="color: rgb(0, 0, 0);">မရိွသံုးတန္ဖိုး (default value)</span> အေနနဲ ့ Copyright 2008 ကိုယူသြားမွာၿဖစ္ပါတယ္။ ဥပမာ -<br /></span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"><br /><pre><span style="color: rgb(51, 51, 255);"><copyright></span></span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"><span style="color: rgb(51, 51, 255);"></copyright> </span></pre><br /><br />ဒီလိုၿဖစ္ေနခဲ့ရင္ တန္းဖိုးမရိွေတာ့ </span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">Copyright 2008 သူရဲ ့<span style="color: rgb(0, 0, 0);">တန္ဖိုး(value) </span>အေနနဲ ့ယူသြားမွာၿဖစ္တယ္။ဒါ</span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">နဲ ့ အတူတူပါပဲ။</span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">္<br /></span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"><br /><br /><pre><span style="color: rgb(51, 51, 255);"><copyright>Copyright 2008</copyright> </span></pre><br /><br />တကယ္လို ့ တန္းဖိုးရိွခဲ့တယ္ဆိုရင္ေတာ့ အဲဒီတန္ဖိုးကိုပဲယူပါတယ္။ <span style="color: rgb(0, 0, 0);">မရိွသံုးတန္ဖိုး (default value)</span> ကို မသံုးပါဘူး။<br /><br /></span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">XML document file ကို ေရးတဲ့ သူက အဲဒီ element ကို တန္ဖိုး ထည့္ေပးေပးမေပးေပး မစဥ္းစားဘူး။</span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"> element တစ္ခုက တန္ဖိုး(value) တစ္ခုရိွကိုရိွရမယ္။ အဲဒီလို အခ်ိန္မ်ိဳးမွာ </span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">ဒီ default ေလးဟာ အလြန္အသံုးက်ပါတယ္။<br /><br /><span style="color: rgb(204, 102, 0);"><strong>fixed</strong></span><br />ဒီဟာကေတာ့ string အမ်ိဳးအစား တန္ဖိုးတစ္ခုကို element ရဲ ့ တန္ဖိုးအၿဖစ္သတ္မွတ္ေပးလိုက္ပါတယ္။ သေဘာက XML Schema ဖိုင္မွာ ဒီလို ေၾကညာခဲ့မယ္ဆိုရင္ -<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:element name="info" fixed="For Information No 001"/></span></pre><br /><br />ဟုတ္ပီ။ ဒါဆိုရင္ XML Document ဖိုင္ထဲမွာ <info> ဆိုတဲ့ tag ရိွမယ္ေပါ့။ အဲဒီ tag ေလးဟာ </span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">For Information No 001 ဆိုတဲ့ တန္ဖိုး(value) ပါကိုပါရမယ္။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><info>For Information No 001</info></span></pre><br /><br />XML Document ဖိုင္ကို ေရးတဲ့ သူကို တန္ဖိုး(value) မေၿပာင္း ေစခ်င္ဘူးဆိုရင္ </span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">ဒီ fixed စြမ္းရည္ၿပစကားလံုး (attribute) ကို </span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);">သံုးပါတယ္။ Schema မွာ ေၾကညာထားတဲ့ တန္ဖိုး (<span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">ဒီေနရာမွာ</span> </span></span></span></span><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"><span style="color: rgb(255, 0, 0);">Information No 001</span>) ကို သံုးကိုသံုးရပါတယ္။ XML Document ဖိုင္ကေန ေၿပာင္းလို ့မရပါဘူး။</span></span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(255, 102, 0);"><span style="color: rgb(0, 0, 0);"><br /></span></span></span><span style="color: rgb(0, 0, 153);">ဆက္ရန္။<br /></span><br /><span style="color: rgb(0, 102, 0);">အာေကလာ(akela)</span><br /><span style="color: rgb(0, 102, 0);">Nov 28 , 2007 1:00 am</span><br /></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-1738165904685371052007-10-23T19:48:00.002+08:002008-09-19T21:58:15.751+08:00<span style="color: rgb(0, 153, 0);">XML Schemas</span><br /><span style="color: rgb(0, 153, 0);">(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - </span><span style="color: rgb(0, 153, 0);">အပိုင္း ( ၁ )</span><br /><br /><div style="text-align: justify;">Document Type Definition (DTD) ဟာ တခ်ိဳ ့ စြမ္းေဆာင္ခ်က္ေတြကို ရယူေပးဖို ့အတြက္ အကန္ ့အသက္ရိွေပမယ့္ XML ရဲ ့သဒၵါ (Schema) ကို ေဖာ္ၿပဖို ့ အတြက္ တကယ္ကို ေကာင္မြန္တဲ့ နည္းလမ္းတစ္ခုပါပဲ။ DTD ဟာ အေမြဆက္ခံၿခင္း (inheritance)၊ နယ္နိမိတ္သတ္မွတ္္ၿခင္း (scoping) တုိ ့ကို ခြင့္မၿပဳပါ ဘူး။ ဒါအၿပင္ ေဒတာ အမ်ိဳးအစားသတ္မွတ္ၿခင္း (datatyping) ကိုလည္း DTD နဲ ့လုပ္လို ့မရပါ။ DTD က ခြင့္မၿပဳေပမယ့္ ဒီ ကိစၥေတြဟာ XML ဒီဇိုင္းအတြက္ အသံုး၀င္တဲ့ အရာေတြပါ။ ဒါေၾကာင္း XML Schema မွာေတာ့ ဒါေတြကို လုပ္ေဆာင္ႏိုင္ေအာင္ ထည့္သြင္း တည္ေဆာက္္ခဲ့ပါတယ္။<br /></div><br /><div style="text-align: justify;">XML Schemas ဆိုတာ သူတို ့ကိုယ္ႏိွက္က well-formed XML ေတြပါပဲ။ ဒါဟာ XML Schemas ရဲ ့ အေတာ္ကို ၾကီးမားတဲ့ အားသာခ်က္တစ္ခုပါပဲ။<br />ရိုးရွင္းတဲ့ XML Schema တစ္ခုကို ၾကည့္ရေအာင္။<br /></div><br /><pre><span style="color: rgb(51, 51, 255);"><?xml version=”1.0” encoding=”utf-8” ?></span><br /><span style="color: rgb(51, 51, 255);"><xs:schema xmlns:xs = “http://www.w3.org/201/XMLSchema”></span><br /><span style="color: rgb(51, 51, 255);"><xs:element name=”Occupation” type=”xs:string”/></span><br /><span style="color: rgb(51, 51, 255);"></xs:schema></span></pre><br /><br /><div style="text-align: justify;">ဒါဟာ အလြန္ရိုးရွင္းတဲ့ schema တစ္ခုပါပဲ။ ဒီ schema က Occupation ဆိုတဲ့ element တစ္ခုကို သတ္မွတ္ေပးပါတယ္။ အဲဒီ element ရဲ ့ ေဒတာ အမ်ိဳးအစားက string ပါ။<br /></div><br /><br /><pre><span style="color: rgb(51, 51, 255);"><?xml version=”1.0” encoding=”utf-8” ?></span></pre><br /><br /><div style="text-align: justify;">ပိုၿပီး အေသးစိတ္ၾကည့္ရေအာင္။ ဒါက XML ေၾကညာတာပါပဲ။ ဒီဟာေလးဟာ ဘယ္ XML ဖိုင္ တိုင္းရဲ ့ အစမွာမဆို ပါေလ့ရိွပါတယ္။ သူက အသံုးၿပဳမယ့္ application ကို XML ဖိုင္ၿဖစ္ေၾကာင္း 1.0 XML Recommendation ေပၚမွာ အေၿခၿပဳထားေၾကာင္း၊ UTF-8 character encoding ကို သံုးထားေၾကာင္း စသည္တိုကို သိေစပါတယ္။ (XML schema ဟာ XML ပဲဆိုတာကို မေမ့ပါနဲ ့ဦး။) ဒီလို တူတဲ့ အတြက္ parser တစ္ခုတည္းကို XML document ကိုေရာ schema အတြက္ကိုေရာ အသံုးၿပဳႏိုင္ပါတယ္။<br /><br /><div style="text-align: justify;">ထပ္ၾကည့္မယ္ဆိုရင္ ဒီလို ေတြ ့ပါလိမ့္မယ္။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:schema xmlns:<span style="color: rgb(255, 0, 0);">xs</span>="http://www.w3.org/2001/XMLSchema"></span></pre><br /></div></div><div style="text-align: justify;"><br />ဒီအေၾကာင္းေလးက xs (<span style="color: rgb(255, 0, 0);">အနီေရာင္ႏွင့္ၿပထားသည္။</span>) ဆိုတဲ့ Namespace ကို သတ္မွတ္ေပးပါတယ္။ ဒီမွာသံုးထားတဲ့ xs ဆိုတာ <span style="color: rgb(51, 51, 255);">http://www.w3.org/2001/XMLSchema</span> ရဲ ့ xs ပါတဲ့ ။<br /><br />ဒါကလဲ အေရးၾကီးပါတယ္။ သူက ေနာက္ပိုင္းကၽြန္ေတာ္တို ေၿပာဆိုေဆြးရမယ့္ နယ္နိမိတ္သတ္မွတ္္ၿခင္း (scoping) နဲ ့ ဗားရွင္းသတ္မွတ္ၿခင္း (versioning) တိုကို ၿဖစ္ေစပါတယ္။<br /><br /><pre><span style="color: rgb(51, 51, 255);"><xs:element name="programmer" type="xs:string"/></span></pre><br /><br />ဒါကေတာ့ ကၽြန္ေတာ္တို ့ရဲ ့ Schema ကုိသံုးၿပီး element တစ္ခုကို ေၾကညာလိုက္တာပါပဲ။<br />ဒီေနရာက xs:element ဆိုတာမွာ xs က အေပၚက ကၽြန္ေတာ္တို ့ေၾကညာခဲ့တဲ Namespace ကိုယူသံုးလိုက္တာပါ။ သူက programmer ဆိုတဲ့ element တစ္ခုကို ေၾကညာေၾကာင္း၊ အဲဒီ element ရဲ ့ ေဒတာအမ်ိဳးအစား က string ၿဖစ္ေၾကာင္းတို ့ကို ေၿပာၿပပါတယ္။ ဒီေနရာမွာ type ကေလးက XML Schema မွာ အေရးၾကီးတဲ့ attribute ေလးပါပဲ။ သူက ေဒတာအမ်ိဳးအစားသတ္မွတ္ၿခင္း (datatyping) ကို လုပ္ေပးတယ္ေလ။<br /></div><br /><span style="color: rgb(0, 0, 153);">ဆက္ရန္။<br /><br /><span style="color: rgb(0, 153, 0);">ရည္ညြန္း။ ။ Using XML by David Gulbransen, et al.</span><br /></span><br /><span style="color: rgb(0, 102, 0);">အာေကလာ(akela)</span><br /><span style="color: rgb(0, 102, 0);">Oct 23 , 2007 7:51 pm<br /><br /><br /></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-49234856427398061522007-08-21T12:52:00.002+08:002008-09-19T21:17:16.835+08:00<span style="color: rgb(0, 153, 0);">Scope in JavaScript (part 4)</span><br /><span style="color: rgb(0, 153, 0);">(JavaScript ????????? ????????? ????????) - ??????? ?</span><br /><span style="color: rgb(255, 102, 0);"><br />(??????? ? ? ? ????? ? ??? ????????????????????????)</span><br /><span style="color: rgb(0, 0, 153);"><br />.bind() ???????? ? ???</span><br /><br /><div style="text-align: justify;">????????????? apply() ? call() ??? ? ?? ? ???????????????????????????? ?????????? .bind() ?????????? ????????? ????? ?????????? function ?? ? ??????(reference) ???? ???? (return) ????????????????????????????? ?????????????? ???????????? ??? ???????????????? ??????? ????????????? ?????????????????<br /></div><br /><span style="color: rgb(0, 0, 153);"><span class="Apple-style-span" style="color: rgb(0, 0, 0); white-space: pre-wrap; font-family:-webkit-monospace;font-size:11px;"><br /><div><pre><span style="color: rgb(0, 0, 153);"><script type="text/javascript"></span><br /><span style="color: rgb(0, 0, 153);">var _president = {</span><br /><span style="color: rgb(0, 0, 153);"> _answer: "I am the president"</span><br /><span style="color: rgb(0, 0, 153);">};</span><br /><span style="color: rgb(0, 0, 153);">var _secaretary = {</span><br /><span style="color: rgb(0, 0, 153);"> _answer: "I am the secaretary of president"</span><br /><span style="color: rgb(0, 0, 153);">};</span><br /><br /><span style="color: rgb(0, 0, 153);">function aboutMe(greetingWord) {</span><br /><span style="color: rgb(0, 0, 153);"> return greetingWord + " " +this._answer;</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><br /><span style="color: rgb(0, 0, 153);">Function.prototype.bind = function(obj) {</span><br /><span style="color: rgb(0, 0, 153);"> var method = this,</span><br /><span style="color: rgb(0, 0, 153);"> temp = function() {</span><br /><span style="color: rgb(0, 0, 153);"> return method.apply(obj, arguments);</span><br /><span style="color: rgb(0, 0, 153);"> };</span><br /><br /><span style="color: rgb(0, 0, 153);"> return temp;</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><span style="color: rgb(0, 0, 153);">var whatTheysays;</span><br /><br /><span style="color: rgb(0, 0, 153);">whatTheysays = aboutMe.bind (_president, ["Hello My Country,"]); // "Hello My Country, I am the president"</span><br /><span style="color: rgb(0, 0, 153);">alert(whatTheysays);</span><br /><br /><span style="color: rgb(0, 0, 153);">whatTheysays = aboutMe.bind (_secretary, ["Hello My Officer,"]); // "Hello My Officer, I am the secretary of president"</span><br /><span style="color: rgb(0, 0, 153);">alert(whatTheysays);</span><br /><span style="color: rgb(0, 0, 153);"></script></span></pre><br /><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:-webkit-monospace;font-size:11px;"></span></div></span><div><span class="Apple-style-span" style=" white-space: pre-wrap;font-family:-webkit-monospace;font-size:11px;"><br /></span><div style="text-align: justify;">???????????? ? bind() ??? Function object ?? ? prototype propety ??? ???????? ?????????????? ???? ???????????? ? ?????????? ? ?????? (method) ??????? ??? ?????????????????????? aboutMe.bind(_president) ????????? ?????? Javascript ? bind() ??????????? execution context ???????? ???????????? ???????? this ??? ???? aboutMe ??? ??????????????? ????? ??? prarmeter ??????? obj ??? _president ?????????????????? ??????????????? :D?<br /></div><br /><div style="text-align: justify;">???? ????? ? ???????? method ??? ?????? ??????????? method ????? this ??? ???????? ???????? ???? this ? aboutMe() ??? ????? ???????? ?????????? function ??? ?????????????????? ???????????????????? method ??? scope chain ??????? ???? ???????????? ????????? this ??? ??????? ? ???????? ??????? function ???? ??? ????????? ????????? this ? ???? ????? ???????? (local context) ?????????????? aboutMe() ??????????????? ??????? function ?? ????????? ???????? ??????????????<br /></div><br /><div style="text-align: justify;">??????????????????? ?? ????????? temp ? closure (????????????????????? ????????????????) ????? bind() ??? ??????? ? ???? (return ) ?????????? aboutMe ??? _president object ???????? ?????????????????? ?????? ????????? ????? execution context ??? ??????????? ? ??????? ???????????? ???????????????????<br /></div><br /><div style="text-align: justify;">??? ???????????? ? event handler ????? ????????????? ??????????????????? :D ? ????? ???????? ????? event handler ??? ????? ????????????????<br /></div><br /><span style="color: rgb(0, 0, 153);"><span class="Apple-style-span" style="color: rgb(0, 0, 0); white-space: pre-wrap; font-family:-webkit-monospace;font-size:11px;"></span></span></div><div><pre><br /><span style="color: rgb(0, 0, 153);"><script type="text/javascript"></span><br /><br /><span style="color: rgb(0, 0, 153);">var the_button;</span><br /><span style="color: rgb(0, 0, 153);">function aboutMe(answer) </span><br /><span style="color: rgb(0, 0, 153);">{</span><br /><span style="color: rgb(0, 0, 153);">this._answer = answer;</span><br /><span style="color: rgb(0, 0, 153);">this.tell = function() {</span><br /><span style="color: rgb(0, 0, 153);">alert(this._answer);</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><span style="color: rgb(0, 0, 153);"> Function.prototype.bind = function(obj) {</span><br /><span style="color: rgb(0, 0, 153);"> //alert(this + 'this in bind');</span><br /><span style="color: rgb(0, 0, 153);"> //alert(arguments[0].the_answer);</span><br /><span style="color: rgb(0, 0, 153);"> var method = this,</span><br /><span style="color: rgb(0, 0, 153);"> temp = function() { </span><br /><span style="color: rgb(0, 0, 153);"> return method.apply(obj, arguments);</span><br /><span style="color: rgb(0, 0, 153);"> }; </span><br /><br /><span style="color: rgb(0, 0, 153);"> return temp;</span><br /><span style="color: rgb(0, 0, 153);"> } </span><br /><br /><span style="color: rgb(0, 0, 153);"> function addhandler()</span><br /><span style="color: rgb(0, 0, 153);"> { </span><br /><span style="color: rgb(0, 0, 153);">var _president = new aboutMe(“I am the president.”),</span><br /><span style="color: rgb(0, 0, 153);">var the_button = document.getElementById('thebutton'); </span><br /><span style="color: rgb(0, 0, 153);">the_button.onclick = _ president.tell();</span><br /><span style="color: rgb(0, 0, 153);"> //alert(this + ' this in addhandler');</span><br /><span style="color: rgb(0, 0, 153);"> the_button.onclick = _president.tell.bind(_president);</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><span style="color: rgb(0, 0, 153);"></script></span><br /><br /><span style="color: rgb(0, 0, 153);">……</span><br /><span style="color: rgb(0, 0, 153);">……</span><br /><br /><span style="color: rgb(0, 0, 153);"><BODY onload="javascript:addhandler();" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?"></span><br /><span style="color: rgb(0, 0, 153);"><button ID="theButton">Click Me</button></span><br /><span style="color: rgb(0, 0, 153);"></BODY></span><br /><span style="color: rgb(0, 0, 153);"></HTML></span></pre><br /><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:-webkit-monospace;font-size:11px;"></span><br /><div style="text-align: justify;">??? html ??? body ?? ? onload ??? addhandler() ??? ???? ?????????????????????????<br /></div><br />????? ?????????????????????????.?<br /><br /><span style="color: rgb(204, 102, 0);">?????????????????? ????????</span><br /><br /><br /><span style="color: rgb(0, 153, 0);">??????(akela)</span><br /><span style="color: rgb(0, 153, 0);">Augest21, 2007 12:11 pm</span></div></span>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-6313055094952633723.post-60959861785674431242007-08-18T23:26:00.001+08:002008-09-19T21:19:36.424+08:00<span style="color: rgb(0, 153, 0);">Scope in JavaScript (part 3)</span><br /><span style="color: rgb(0, 153, 0);">(JavaScript မွာရိွေသာ နယ္နိမိတ္ သေဘာတရား) - အပိုင္း ၃</span><br /><br /><span style="color: rgb(255, 102, 0);">(အပိုင္း ၁ နဲ ့ ၂ ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။)</span><br /><br /><span style="color: rgb(51, 51, 255);">Context မ်ားကို .apply() နဲ ့ .call() မတ္သတ္(method) မ်ားသံုးၿပီး ကိုင္တြယ္ၿခင္း</span><br /><br /><div style="text-align: justify;">တကယ္ေတာ့ ကၽြန္ေတာ္တို ့လို ခ်င္ခဲ့တာဟာ object ရဲ ့ မတ္သတ္(method) ကို events(အဗင့္) လိုမ်ိဳး၊ setTimeout() လို မ်ိဳး ကိုကိုင္တြယ္ဖို ့ သံုးတဲ့အခါက်ရင္ အဲဒီ method(မတ္သတ္)ကို သူရဲ ့ native context(မူလ ကြန္းတက္) ထဲမွာပဲ အလုပ္လုပ္(run) ေစခ်င္တာပါ။ လူသိနည္းတယ္လို ့ ဆိုႏိုင္တဲ့ မတ္သတ္ ၂ ခုရိွပါတယ္။ apply() နဲ ့ call() ပါ။ ဒီ မတ္သတ္ႏွစ္ခုကို သံုးၿခင္းအားၿဖင့္ ကၽြန္ေတာ္ တို ့ ဟာ this ရဲ ့ default value အေပၚကို လႊမ္းၿပီး(override) ေရးႏိုင္ပါတယ္။<br /></div><pre><br /><span style="color: rgb(0, 0, 153);"><script type="text/javascript"></span><br /><span style="color: rgb(0, 0, 153);">var _president = {</span><br /><span style="color: rgb(0, 0, 153);">_answer: "I am the president"</span><br /><span style="color: rgb(0, 0, 153);">};</span><br /><span style="color: rgb(0, 0, 153);">var _secretary = {</span><br /><span style="color: rgb(0, 0, 153);">_answer: "I am the secretary of president"</span><br /><span style="color: rgb(0, 0, 153);">};</span><br /><span style="color: rgb(0, 0, 153);"> function aboutMe(greetingWord)<br />{</span><br /><span style="color: rgb(0, 0, 153);">return greetingWord + " " +this._answer;</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><span style="color: rgb(0, 0, 153);">var whatTheysays;</span><br /><span style="color: rgb(0, 0, 153);">whatTheysays = aboutMe.call(_president, "Hello My Country,"); </span><br /><span style="color: rgb(0, 0, 153);">alert(whatTheysays);</span><br /><span style="color: rgb(0, 0, 153);">whatTheysays = aboutMe.call(_secretary, "Hello My Officer,"); </span><br /><span style="color: rgb(0, 0, 153);">alert(whatTheysays);</span><br /><span style="color: rgb(0, 0, 153);"></script></span></pre><br /><br />ဘယ္လိုလဲ :D ။ အလုပ္လုပ္တယ္ဟုတ္။ :P။<br /><br /><div style="text-align: justify;">ဒီဥပမာေလးမွာဆိုရင္ ကၽြန္ေတာ္တို ့ president object ရယ္ secretary object ရယ္ဆိုၿပီး object ႏွစ္ခု ဖန္တီးလိုက္ပါတယ္။ သူတို တစ္ခုစီမွာ _answer ဆိုတဲ့ property ကို နာမည္ (name) အတူတူေပးလိုက္ပါတယ္။ ၿပီးေတာ့ aboutMe() ဆိုတဲ့ function တစ္ခုကိုဖန္တီး လုိက္ပါတယ္။အဲဒီ function က parameter တစ္ခုကိုလက္ခံပါတယ္။ greetingWord ပါ။ အဲဒီ function ထဲမွာ greetingWord ရယ္၊ သူဘယ္သူလဲဆိုတာကိုေၿပာတဲ့ စာအစဥ္အတန္း(string) (this._answre) ရယ္ကိုေပါင္းၿပီးၿပပါတယ္။ သတိထားမိလား.. this က call() ကပိုလိုက္တဲ့ object ေပၚမူတည္ၿပီးေၿပာင္းလဲသြားပါတယ္။ president ဆိုရင္ this.answer ဟာ _president ရဲ ့ _answer ၿဖစ္သြားၿပီး၊ _secretary ဆိုရင္ _secretary ရဲ ့ _answer ၿဖစ္သြားပါတယ္။ ဟုတ္။ ဒါဘာေၾကာင့္လဲ ဆိုေတာ့ call() မတ္သတ္(method) ေၾကာင့္ၿဖစ္ပါတယ္။ ပံုမွန္သာ aboutMe() ကို ေခၚတယ္ဆိုရင္ အားလံုးဟာ undified ပါပဲ။ ဘာလို ့ ဆိုေတာ့ global object ၿဖစ္တဲ့ window မွာ _answer ဆိုတဲ့ property မရိွပါဘူး။ ( ကၽြန္ေတာ္တို ့ က window object မွာ ကိုယ္ဖသာ ဒီ _answer ကို မဖန္တီးထားဘူးခဲ့ရင္ မရိွဘူးလုိ ့ ေၿပာတာပါ။) ဒီ call() မတ္သတ္ေလးက ကၽြန္ေတာ္တို ့လိုခ်င္ေနတာနဲ ့ အားလံုးကြက္တိပဲမဟုတ္လား။ :D ။<br /></div><br /><div style="text-align: justify;">apply() က call() နဲ ့တူူတူပါပဲ။ အားလံုး တပံုစံပဲ အလုပ္လုပ္ပါတယ္။ တစ္ခုပဲကြဲတယ္။ဘာလဲဆိုေတာ့ apply() က arguments (parameters) ေတြကို array အေနနဲ ့လက္ခံပါတယ္။ ဒီ apply() မတ္သတ္က function တစ္ခုဟာ parameters ေတြကို ဘယ္ႏွစ္ခုလက္ ခံမယ္ဆိုတာကို ေသခ်ာမသိတဲ့ အခါမ်ိဳးမွာ အလြန္အသံုး၀င္ပါတယ္။<br /></div><br /><pre><span style="color: rgb(0, 0, 153);"><script type="text/javascript"></span><br /><span style="color: rgb(0, 0, 153);">.........</span><br /><span style="color: rgb(0, 0, 153);">.........</span><br /><span style="color: rgb(0, 0, 153);">whatTheysays = aboutMe.apply (_president, ["Hello My Country,"]); </span><br /><span style="color: rgb(0, 0, 153);">alert(whatTheysays);</span><br /><br /><span style="color: rgb(0, 0, 153);">whatTheysays = aboutMe.apply (_secretary, ["Hello My Officer,"]); </span><br /><span style="color: rgb(0, 0, 153);">alert(whatTheysays);</span><br /><span style="color: rgb(0, 0, 153);"></script></span></pre><br /><br /><div style="text-align: justify;">apply() နဲ ့ call() တိုဟာ သူဟာနဲ ့သူ အလြန္ အသံုး၀င္ပါတယ္။ ဒါေပမယ္ ဒီ ႏွစ္ခုဟာ တကယ္ေတာ့ ကၽြန္ေတာ္တို ့လိုခ်င္တာရဲ ့ လမ္းတ ၀တ္မွာပဲရိွေနပါေသးတယ္။ event handler အေနနဲ ့သံုးမယ္ဆိုရင္ေလ။ ဒီကုဒ္ေလးေတြကို ၾကည့္လိုက္ပါဦး။<br /></div><br /><pre><span style="color: rgb(0, 0, 153);">function addhandler() </span><br /><span style="color: rgb(0, 0, 153);">{</span><br /><span style="color: rgb(0, 0, 153);">var _president = new aboutMe(“I am the president.”),</span><br /><span style="color: rgb(0, 0, 153);">var the_button = document.getElementById('thebutton'); </span><br /><span style="color: rgb(0, 0, 153);">the_button.onclick = _ president.tell.call(_president);</span><br /><span style="color: rgb(0, 0, 153);"> }</span></pre><br /><br /><div style="text-align: justify;">စမ္းၾကည့္ၿပီးၿပီ ဟုတ္။ ၿပသာနာက call() ေရာ apply() က ခ်က္ၿခင္း အလုပ္လုပ္(execute) လုပ္တာပါပဲ။ event handler အေနလုပ္တဲ့ အခါ event ကို ရိုတ္ထုတ္ (fire) လိုက္တဲ့ အခ်ိန္မွ မတ္သတ္(method) ကို အလုပ္လုပ္(Run) တာမဟုတ္ပဲ ခ်က္ၿခင္းအလုပ္လုပ္ တာက ၿပသာနာပါ။ ဒီအတြက္ ေနာက္ထပ္လူ သိနည္းတဲ့ function တစ္ခုရိွေနပါတယ္။ အလြန္အသံုး၀င္တဲ့ function ပါ။<br /></div><br /><span style="color: rgb(51, 51, 255);">ဆက္ရန္။</span><br /><br /><span style="color: rgb(0, 153, 0);">အာေကလာ(akela)</span><br /><span style="color: rgb(0, 153, 0);">Augest 18, 2007 11:21 pm</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-45995616657682908172007-08-18T09:22:00.001+08:002008-09-19T21:20:57.609+08:00<span style="color: rgb(0, 153, 0);">Scope in JavaScript (part 2)</span><br /><span style="color: rgb(0, 153, 0);">(JavaScript မွာရိွေသာ နယ္နိမိတ္ သေဘာတရား) - အပိုင္း ၂</span> <p class="MsoNormal"><br /><span style="color: rgb(255, 102, 0);">(အပိုင္း ၁ ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။)</span><br /></p><p class="MsoNormal"> </p><span lang="EN-US" style="font-family:Zawgyi-One;">တကယ္လို ့ event handler က Inline ဖန္တီးထားတယ္ဆိုရင္၊ this က အားလံုးနဲ ့ဆိုင္တဲ ့ window object ကို ညြန္းပါတယ္။<br /><br /></span><p class="MsoNormal"><pre><span style="color: rgb(0, 0, 153);"><script type="text/javascript"></span><br /><span style="color: rgb(0, 0, 153);"> function click_handler()</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> alert(this); // alerts the window object</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"></script></span><br /><span style="color: rgb(0, 0, 153);">….. </span><br /><span style="color: rgb(0, 0, 153);"><button id='thebutton' onclick='click_handler()'>Click me!</button></span></pre></p><p class="MsoNormal"><br /></p><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">တကယ္လို ့ မ်ား event handler ကုိ javaScript ကေနတဆင့္ ဖန္တီးထားတယ္ဆိုရင္၊ this က event ကို ရိုက္ထုတ္လိုက္တဲ ့ DOM (Document Object Model) ကို ညြန္းပါလိမ့္မယ္။</span></p><p class="MsoNormal"><br /></p><pre><span style="color: rgb(0, 0, 153);"><script type="text/javascript"></span><br /><span style="color: rgb(0, 0, 153);"> function click_handler()</span><br /><span style="color: rgb(0, 0, 153);"> {</span><br /><span style="color: rgb(0, 0, 153);"> alert(this); // alerts the button DOM node</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"> function addhandler() {</span><br /><span style="color: rgb(0, 0, 153);"> document.getElementById('thebutton').onclick = click_handler;</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);"> window.onload = addhandler;</span><br /><span style="color: rgb(0, 0, 153);"></script></span><br /><span style="color: rgb(0, 0, 153);">...</span><br /><span style="color: rgb(0, 0, 153);"><button id='thebutton'>Click me!</button></span></pre><br /><br /><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">scope က ဘယ္လို ့ ရွဳပ္ေထြးတာလဲ..<o:p></o:p></span></p> <p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ကဲ၊ ကၽြန္ေတာ္တို ့ ေနာက္ဆံုး ဥပမာေလးကို ပဲ ထပ္ၿပီးၿပင္ၾကမယ္။ button ကို ႏိွပ္လိုက္တဲ့အခါတုိင္း click_handler ကို အလုပ္လုပ္ခိုင္း မဲ့ အစား<span style=""> </span>aboutMe<span style=""> </span>ဆိုတဲ့ method ကို ေမးခြန္းေမးပါမယ္။ ကုဒ္ေတြက ရိုးရွင္းပါတယ္။ ေအာက္မွာၾကည့္ပါ။<o:p></o:p></span></p><br /><br /><pre><span style="color: rgb(0, 0, 153);"><script type = “text/javascript”></span><br /><span style="color: rgb(0, 0, 153);">function aboutMe(answer) </span><br /><span style="color: rgb(0, 0, 153);">{</span><br /><span style="color: rgb(0, 0, 153);">this._answer = answer;</span><br /><span style="color: rgb(0, 0, 153);">this.tell = function() {</span><br /><span style="color: rgb(0, 0, 153);">alert(this._answer);</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><span style="color: rgb(0, 0, 153);">}</span><br /><span style="color: rgb(0, 0, 153);">function addhandler() </span><br /><span style="color: rgb(0, 0, 153);">{</span><br /><span style="color: rgb(0, 0, 153);">var _president = new aboutMe(“I am the president.”),</span><br /><span style="color: rgb(0, 0, 153);">var the_button = document.getElementById('thebutton'); </span><br /><span style="color: rgb(0, 0, 153);">the_button.onclick = _ president.tell();</span><br /><span style="color: rgb(0, 0, 153);"> }</span><br /><span style="color: rgb(0, 0, 153);">window.onload = addhandler;</span><br /><span style="color: rgb(0, 0, 153);"></script></span></pre><br /><br /><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဟုတ္တယ္ဟုတ္ :D။ ရွင္းရွင္းေလးပဲမလား။ ဘာမ်ားရွဳပ္လို ့လဲဗ်ာ။<span style=""> </span>button ကို ႏိွပ္လိုက္တဲ့အခါ _president.tell() ကို အလုပ္လုပ္ေစပါတယ္။ ဒီေတာ့ I am the president ဆိုတဲ့ စာအစဥ္အတန္း(string) ကို ရိုက္ထုတ္ၿပမယ္ေလ။ ဟုတ္.. ဘာမွမရွဳပ္ဘူး။ ဒါေပမယ့္ web browser က တကယ္တမ္းဘာရိုက္ထုတ္ၿပလဲ။ စမ္းၾကည့္ေစခ်င္ပါသည္။<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">စမ္းၿပီးၿပီ..ဟုတ္။ :) ၾကည့္... ဘာမ်ားအမွားလုပ္ခဲ့ပါလိမ့္။ :|</span></p><p class="MsoNormal"> </p><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ၿပသာနာကေတာ့..။ ကၽြန္ေတာ္တို ့ tell() ကို button ရဲ ့ onclick event ကို ကိုင္တြယ္ဖို ့ </span><span lang="EN-US" style="font-family:Zawgyi-One;">reference အၿဖစ္</span><span lang="EN-US" style="font-family:Zawgyi-One;">ပို ့ ေပးခဲ ့ ပါတယ္။ (the_button.onclick = _president.tell();)။ အဲဒီအခါ tell() ဟာ ( event handler အၿဖစ္ အလုပ္လုပ္ေနတဲ့ အတြက္)<span style=""> </span>မတူကြဲၿပားတဲ့ execution context တစ္ခုထဲမွာ အလုပ္လုပ္(Run) ပါတယ္။ လြယ္လြယ္ ေၿပာရရင္ေတာ့ tell() ထဲမွာရိွတဲ့<span style=""> </span>this keyword က event ကို ရိုက္ထုတ္လိုက္တဲ့ DOM (Document Object Model) (ဒီေနရာမွာေတာ့ button ေပါ့) ကို ညြန္းပါတယ္။ သူဟာ aboutMe ရဲ ့ object မဟုတ္ေတာ့ပါဘူး။ DOM Element ၿဖစ္တဲ့ button မွာ _answer ဆိုတဲ့ property မရိွပါဘူး။ ဒါေၾကာင့္ browser က “I am the president” အစား underfined ကို ရိုတ္ထုတ္ၿပပါတယ္။</span></p><p class="MsoNormal"> </p><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီလို ၿဖစ္ရပ္မ်ိဳးက ကၽြန္ေတာ္တို ့ program ေတြမွာ မေမ်ာ္လင့္ ပဲၿဖစ္တက္ပါတယ္။ ေနာက္ၿပီး အမွားကို ရွာဖို ့ တခါတေလ မွာ အေတာ္ခက္ခဲ ပါတယ္။ ဥပမာ - ကၽြန္ေတာ္တုိ ဖန္တီးထားတဲ့ object (ဒီေနရာမွာ aboutMe ေပါ့) ရဲ ့ property နာမည္ (name) က<span style=""> </span>event ကို ရိုတ္ထုတ္လိုက္တဲ့ DOM ရဲ ့<span style=""> </span>property နာမည္ (name) နဲ ့ သြားတူေနခဲ့မယ္ဆိုရင္ လြယ္လြယ္ အေၿဖရွာဖို ့ မၿဖစ္ႏိုင္ေတာ့ပါဘူး။</span></p><p class="MsoNormal"><span style="color: rgb(51, 51, 255);"> ဆက္ရန္။</span><br /></p> <p style="color: rgb(204, 102, 0);" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 204, 0);">အာေကလာ(akela)</span><br /><span style="color: rgb(51, 204, 0);">August 17,2007 3:40 pm</span></span><br /></p><p style="color: rgb(204, 102, 0);" class="MsoNormal">မွတ္ခ်က္။ ။ပိုစ္တစ္ခုနဲ ့တစ္ခုၾကား အခ်ိန္ကြာဟလြန္းေနပါတယ္။ ေနာက္ဆို မကြာေအာင္ေရးသြားပါမယ္။<br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-38770921639027204572007-08-04T01:15:00.002+08:002008-09-19T21:25:35.695+08:00<span style="color: rgb(0, 153, 0);">Scope in JavaScript (part 1)</span><br /><span style="color: rgb(0, 153, 0);">(JavaScript မွာရိွေသာ နယ္နိမိတ္ သေဘာတရား) - အပိုင္း ၁</span><br /><br /><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">Scope ဆိုတာ JavaScript programming ဘာသာရပ္မွာမွာ အေၿခခံက်တဲ့ အၿမင္ (aspects) တစ္ခုပဲၿဖစ္ပါတယ္။ တစ္ခါတေလ ရွဳပ္ေထြးတဲ့ ပရိုဂရမ္ေတြကို ေရးတဲ့အခါ ဒုကၡအေရာက္ဆံုး အရာလည္းၿဖစ္ႏိုင္ပါတယ္။<o:p></o:p></span></p><div style="text-align: justify;"> </div><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">JavaScript ပရိုဂရမ္တစ္ပုဒ္ရဲ ့ဘယ္အစိတ္အပိုင္းမဆိုဟာ Execution Context တစ္ခု ဒါမွမဟုတ္ အၿခား Execution Context တစ္ခုထဲ မွာ လုပ္ကိုင္ရပါတယ္။ Execution Context ေတြကို ကၽြန္ေတာ္တို ့ ကုဒ္ေတြပါ၀င္တဲ့ အိမ္နီးနားခ်င္းေတြလို ့ ယူဆႏိုင္ပါတယ္။ ကုဒ္တစ္ေၾကာင္း တိုင္းဟာ သူဘယ္ကေနလာတယ္။ သူ ့ရဲ ့အိမ္နီးနားခ်င္းေတြက ဘယ္သူေတြပါ။ဒါေတြကို ေၿပာၿပပါလိမ့္မယ္။ ဒီ Execution Context ေတြဟာ အေရးၾကီးပါတယ္။သူတုိ ့ကို ပြင္ေန ့တဲ ့၊ ဖြင့္ ထားတဲ့ အပိုင္း အခြဲငယ္ေလးေတြလို ့ယူဆတာထက္၊ အစည္းအတား ရိွတဲ့ ဆက္ သြယ္မွဳ ့နယ္ပယ္ေလးေတြ (gated communities) လို ့ယူဆရင္ပိုေကာင္းမယ္လို ့ ထင္ပါတယ္။<o:p></o:p></span></p><div style="text-align: justify;"> </div><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီအစည္းအတား နယ္ပယ္ေတြကို ကၽြန္ေတာ္တို ့က scope လို ့ ေၿပာဆိုၾကတယ္။<span style=""> </span>သူတို ့ဟာ ဒီ Execution Context တစ္ခုစီရဲ ့ ဥပေဒသ သေဘာသဘာ၀ (Ruls and Laws) ေတြ ရဲ ့သက္ေရာက္မွဳ ့ကို သတ္မွတ္ေပးမွာၿဖစ္လို ့ အေရးၾကီပါတယ္။ ဒါကို Execution Context ရဲ<span style=""> </span>့ Scope Change လုိ ့ေခၚ ပါတယ္။ Execution Context တစ္ခုထဲမွာ ရိွတဲ့ ကုဒ္ေတြဟာ အဲဒီ Execution Context ရဲ ့ Scope Change မွာ ပါ၀င္တဲ့ စာရင္း (list) အတိုင္းပဲ Variable ေတြကို အသံုးၿပဳလို ့ရပါတယ္။<o:p></o:p></span></p><div style="text-align: justify;"> </div><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">method တစ္ခု ကို အလုပ္လုပ္ခိုင္း(Evaluate) ၿပီဆိုရင္ Execution context အသစ္တစ္ခုကို<span style=""> </span>ဖန္တီးတည္ေဆာက္ပါတယ္။ ၿပီးေတာ့ သူရဲ ့ scope ကို အဲဒီ method ကိုေက်ညာထားတဲ့ ေနရာမွာရိွတဲ့ scope chain ထဲမွာ သြားၿပီးေပါင္းပါတယ္။ Execution Context တစ္ခုရဲ<span style=""> </span>့scope ကိုၾကည့္တဲ့အခါ အတြင္းမွ အၿပင္ကို (locally then globally)တဆင့္ၿခင္းတက္ၿပီးၾကည့္ပါတယ္။ ဒါကဘာကိုေၿပာတာလဲဆိုေတာ့ အတြင္း (local) က အၿပင္(global ) ထက္ပိုၿပီးဦးစားေပးခံရပါတယ္။ ဥပမာ - နာမည္တူေနတဲ့ variable ႏွစ္ခု၊ တစ္ခုု က အတြင္း (local) ၊ အၿခားတစ္ ခုကအၿပင္ (Global) ဆိုၿဖစ္ခဲ့တယ္ဆိုပါေတ့ာ။ ဘယ္ variable ကို ယူမလဲဆိုရင္<span style=""> </span>local variable ကို ပဲ ယူပါတယ္။<o:p></o:p></span></p><div style="text-align: justify;"> </div><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">this?<span style=""> </span>ဘာလဲ this ဆိုတာ။<o:p></o:p></span></p><div style="text-align: justify;"> </div><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">Execution context တိုင္းက scope chain ကို ဖန္တီးတည္ေဆာက္ရံုုမက this ဆိုတဲ့ keyword ေလးတစ္ခုလည္းရိွပါေသးတယ္။ ပံုမွန္အား ၿဖင့္ဆိုရင္ေတာ့၊ ဒီ this ေလးက<span style=""> </span>identity function ေလးပါ။ အိမ္နီးခ်င္း context ေတြကို သူ တို့ ကိုသူတို ့ဘယ္လို ၿပန္ၿပီး ညြန္လို ့ရႏိုင္မလဲ ဆိုတာ က္ုိလည္း ေၿပာၿပပါတယ္။ ဒါေပမယ့္. ကၽြန္ေတာ္တို ့ဟာ ဒီအခ်က္ေပၚမွာ အၿမဲတမ္း မွီတည္ ေနလို ့ မရပါ ဘူး။ အၿခားအိမ္နီးခ်င္း context ေတြထဲကို ဘယ္လို ေရာက္သြားတာလဲအေပၚမူတည္ၿပီး this ရဲ ့အဓိပါယ္က လံုး၀ကြဲၿပားသြားပါတယ္။ အၿခားအိမ္နီးခ်င္း context ေတြထဲ ဘယ္လို ေရာက္သလဲဆိုတာဟာ this ေလးက လက္ရိွ ဘာကို ညြန္းေနလဲလို ့ဆိုလိုတာပါ။</span></p><div style="text-align: justify;"> </div><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">Object-oriented programming မွာ လက္ရိွ ရိွေနတဲ့ လုပ္ကိုင္ေနတဲ့ object ကို ၿပန္လည္ညြန္းၿပီးသံုး ႏိုင္ဖို ့အတြက္ နည္းလမ္းလို ပါတယ္။ this က ဒီလို အပ္ခ်က္ကို ၿဖည့္စည္းေပးပါတယ္။ object ေတြကို သူတို ့ကို သူတို ့ၿပန္ညြန္းဖို ့နဲ ့၊ သူတို ပိုင္ဆိုင္တဲ့ properties ေတြ၊ methods ေတြကို ၿပန္သံုးဖို ့ this က လုပ္ေပးပါတယ္။ ေအာက္ပါ အခ်က္ ၄ ခ်က္က စဥ္းစားဖိုေကာင္းပါတယ္။<o:p></o:p></span></p> <p class="MsoNormal"> </p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 51, 255);">၁။</span><span style="color: rgb(51, 51, 255);"> </span><span style="color: rgb(51, 51, 255);">Calling an Object’s Method (Object တစ္ခုရဲ ့ method ကို ေခၚၿခင္း)</span><br /><br /><pre><span style=""><span style="color: rgb(51, 0, 153);"><script type = “ text/javascript”></span><br /><span style="color: rgb(51, 0, 153);"> var _phoLay = {</span><br /><span style="color: rgb(51, 0, 153);">_answer: “I’m Pho </span></span><span style="color: rgb(51, 0, 153);font-family:Zawgyi-One;" lang="EN-US"><span style=""><span lang="EN-US" style="font-family:Zawgyi-One;">Tay</span></span></span><span lang="EN-US" style="font-family:Zawgyi-One;"><span style=""><span style="color: rgb(51, 0, 153);">.”,</span><br /><span style="color: rgb(51, 0, 153);"> tell:function() {</span><br /><span style="color: rgb(51, 0, 153);"> return this._answer;</span><br /><span style="color: rgb(51, 0, 153);"> }</span><br /><span style="color: rgb(51, 0, 153);"> };</span><br /><span style="color: rgb(51, 0, 153);"> var _whoAmI = _phoLay.tell ();</span><br /><span style="color: rgb(51, 0, 153);"></script></span></span></span></pre><br /><br /></span></p><div style="text-align: justify;"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style=""><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီကုဒ္ေလးေတြဟာ <span style="color: rgb(153, 0, 0);">_whoAmI</span> ဆိုတဲ့ <span style="color: rgb(102, 0, 0);">object </span>တစ္ခုကို ဖန္တီးပါတယ္။ ၿပီးေတာ့ သူရဲ ့ property ၿဖစ္တဲ့ _answer ဆိုတဲ ့variable ထဲကို “I’m Pho Tay.”</span><span lang="EN-US"> </span><span lang="EN-US" style="font-family:Zawgyi-One;">ဆိုတဲ့ စာအစဥ္အတန္း (String) တစ္ခု ထည္ပါတယ္။ေနာက္ tell ဆိုတဲ့ method တစ္ခုကိုေၾကညာပါတယ္။ ဒီ method ကို အလုပ္လုပ္ခိုင္းတဲအခါ JavaScript က execution context<span style=""> </span>တစ္ခု တည္ေဆာက္ပါတယ္။ this ကိုေတာ့ ေနာက္ဆံုးး <span style=""> </span>“.” (dot) ရဲ ့ ေရွမွာ ရိွတဲ့ ဘယ္ object ကိုမဆို ညြန္းခုိင္းပါတယ္။ ဒီမွာ ေတာ့ _whoAmI ေပါ့။ (_whoAmI.tell() ေလ။) tell() ဆိုတဲ့ method ေလးထဲ မွာေတာ့ this က ေနတဆင့္ သူပိုင္တဲ့<span style=""> </span>property ကိုၾကည္ပါတယ္။ ၿပီးေတာ့ အဲဒီ property ၊ this._answer ထဲက တန္ဖိုးကို return ၿပန္ပါတယ္။ (</span><span lang="EN-US" style="font-family:Zawgyi-One;">I’m Pho </span><span lang="EN-US" style="font-family:Zawgyi-One;"><span style=""><span lang="EN-US" style="font-family:Zawgyi-One;">Tay</span></span></span><span lang="EN-US" style="font-family:Zawgyi-One;">.</span><span lang="EN-US" style="font-family:Zawgyi-One;">)။</span></p><p class="MsoNormal"> </p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 102, 255);">၂။</span><span style="color: rgb(51, 102, 255);"> </span><span style="color: rgb(51, 102, 255);">Constructor (Constructor ကို ေခၚၿခင္း)</span></span></p><p class="MsoNormal"><br /><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span></p><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">အေပၚကလို ပါပဲ။ new ဆိုတဲ့ keyword ကို သံုးၿပီး function တစ္ခုကို constructor အၿဖစ္သံုးတဲ့ အခါ၊ this ကို ဖန္တီးခံရတဲ့ object ကို ညြန္းတဲ့ အရာအေနနဲ ့ သံုးႏိုင္ပါတယ္။</span></p><p class="MsoNormal"><br /><span lang="EN-US" style="font-family:Zawgyi-One;"> <o:p></o:p></span></p></span></span></div><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style=""><pre><span style="color: rgb(51, 0, 153);"><</span></span></span><span lang="EN-US" style="font-family:Zawgyi-One;"><span style=""><span style="color: rgb(51, 0, 153);">script type = “text/javascript”></span><br /><span style="color: rgb(51, 0, 153);"> function aboutMe(answer) { </span><br /><span style="color: rgb(51, 0, 153);"> this._answer = answer;</span><br /><span style="color: rgb(51, 0, 153);"> this.tell = function() {</span><br /><span style="color: rgb(51, 0, 153);"> return this._answer;</span><br /><span style="color: rgb(51, 0, 153);"> }</span><br /><span style="color: rgb(51, 0, 153);"> }</span><br /><span style="color: rgb(51, 0, 153);"> var _phoLay = new aboutMe(“I’m pho lay.”);</span><br /><span style="color: rgb(51, 0, 153);"> var _whoAmI = _phoLay.tell();</span><br /><span style="color: rgb(51, 0, 153);"></script></span></span></span></pre></p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style=""><span style="color: rgb(51, 0, 153);"><br /></span></span></span></p><p class="MsoNormal"> </p><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီကုဒ္မွာ ေတာ့ phoLay object ကုုိ ကိုယ္တုိင္တိုက္ရိုက္ိ explicitly ဖန္တီးမယ့္အစား ၊ aboutMe ဆိုတဲ့ function တစ္ခုကို ေရးလိုက္ပါတယ္။ ၿပီးမွ phoLay ကို aboutMe<span style=""> </span>ရဲ ့ instance<span style=""> </span>အၿဖစ္ new keyword ကေနတဆင့္ ရယူပါတယ္။ new aboutMe() ဆိုတဲ့ method ေလးကို အလုပ္လုပ္(execute)လုပ္ခိုင္းတဲ့အခါ ၊ ေနာက္ကြယ္မွာ လံုး၀ကြဲၿပာၿခားနားတဲ့ object တစ္ခုကို ဖန္တီးတည္ေဆာက္ပါ တယ္။ aboutMe() ကိုေခၚတဲ့အခါ ၊ this ကို အဲဒီ ဖန္တီးထားတဲ့ object ကို ညြန္းေစပါတယ္။ this က တၿခား variable ေတြလို scope chain ကေန ရယူတာမဟုတ္ပါ။ ဒါေပမယ္ သူက context by context ေပၚမူတည္ၿပီး ညြန္းတာေၿပာင္းလည္းပါတယ္။ context တစ္ခုကေန တစ္ခုကိုေၿပာင္းရင္ reset လုပ္ခံရပါတယ္။<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 102, 255);">၃။</span><span style="color: rgb(51, 102, 255);"> </span><span style="color: rgb(51, 102, 255);">Function Call (Function ေခၚၿခင္း)</span></span></p><p class="MsoNormal"><br /><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span></p> <p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">တကယ္လို ့ ပံုမွန္ေရးသလို ပဲေပါ။ ေန ့စဥ္ေရးေလ့ရိွတဲ့ function လိုမ်ိဳး ရွဳပ္ေထြးတဲ့ object ေတြမပါခဲ့ဘူးဆိုရင္ this က ဘာကိုဆိုလိုသလဲ။</span></p><p style="text-align: justify;" class="MsoNormal"><br /></p><pre><span style="color: rgb(51, 0, 153);"><script type = “text/javascript”></span><br /><span style="color: rgb(51, 0, 153);"> function testing_this() {</span><br /><span style="color: rgb(51, 0, 153);"> return this;</span><br /><span style="color: rgb(51, 0, 153);"> }</span><br /><span style="color: rgb(51, 0, 153);"> var whatIsThis = testing_this(); </span><br /><span style="color: rgb(51, 0, 153);"></script><br /><br /></span></pre><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီမွာ this က ဘာကိုညြန္းပါသလဲ။ new keyword ကိုသံုးၿပီး context တစ္ခုလည္းမလုပ္ထားဘူး။ သူဘာကိုညြန္းပါသလဲ။ ဒီေနရာမွာ this ဟာ Global အက်ဆံုးအရာကို ညြန္းပါတယ္။ ဥပမာ - web page ေတြမွာဆိုရင္ global အက်ဆံုးက window object ပါ။ this က window object ကို ညြန္းပါလိမ့္မယ္။<o:p></o:p></span></p> <p style="color: rgb(51, 102, 255);" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">၄။<span style=""> </span>Event Handler (Event မ်ားကို ကိုင္တြယ္ၿခင္း)</span></p><p style="color: rgb(51, 102, 255);" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><br /></span></p><p class="MsoNormal"> </p><p style="text-align: justify;" class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">နည္းနည္းပိုၿပီးရွဳပ္ေထြးတဲ့ function calling ေတြမွာ၊ ဥပမာ- onclick event ကို ကိုင္တြယ္ဖို ့ function တစ္ခုသံုးမယ္ဆိုပါစို ့။ event ၿဖစ္ပြားတဲ့ အခါ this ကဘာ ကို ညြန္းမလဲ။ ဒီအတြက္ ရိုးရွင္းတဲ့အေၿဖတစ္ခုကို မေပးႏိုင္ခဲ့ၾကပါဘူး။<o:p></o:p></span></p><span style="color: rgb(51, 51, 255);"> ဆက္ရန္။</span><br /><br /><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 204, 0);">အာေကလာ(akela)</span><br /><span style="color: rgb(51, 204, 0);">August 4,2007 1:50 am</span></span></p><p class="MsoNormal"><span style="color: rgb(153, 102, 51);">မွတ္ခ်က္။ ။ဖတ္မိေသာ article တစ္ခုကို ၾကိဳက္မိ၍ တက္နိုင္သမွ် ၿမန္မာလို ၿပန္လည္ေရးသားထာပါတယ္။</span><br /><span style="color: rgb(153, 102, 51);"> ေပ်ာ္ရြင္ခ်မ္းေၿမ ့ၾကပါေစ။</span><br /><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span></p><br /><p class="MsoNormal"><br /><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span></p>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-6313055094952633723.post-59720995867381271582007-08-01T21:45:00.000+08:002007-08-19T02:24:42.014+08:00<span style="font-weight: bold;">ေရးသူ - သန္ ့ေဇာ္မင္း</span><br />ေန ့စြဲ - july 31,2007<br />----------------------------------<a href="http://paing411.blogspot.com/2007/07/variable-declaration-variable.html"><span style="font-size:130%;"><span style="font-weight: bold;"><br /></span></span></a> <p style="color: rgb(51, 204, 0);"><span style="font-size:130%;"><span style="font-weight: bold;">C++ Programming Language (အပိုင္း - ၂)</span></span></p><p><b style="color: rgb(51, 51, 255);">Variable Declaration</b><br /></p><div style="text-align: justify;">ဒီတေခါက္ ကၽြန္ေတာ္တို႔ variable declaration အေၾကာင္းစလိုက္ရေအာင္။ variable declaration ဆိုတာက ကၽြန္ေတာ္တို႔ေရးတဲ႔ programမွာ အသံုးျပဳမယ္႔ variable ေတြကို ၾကိဳတင္ေၾကျငာတာ ျဖစ္ပါတယ္။ ကၽြန္ေတာ္တို႔ program အလုပ္လုပ္ေနခ်ိန္မွာ user (ကၽြန္ေတာ္တို႔ programကို အသံုးျပဳသူ) ေတြဆီကေန တန္ဖိုးတခုခုကို လက္ခံေတာ့မယ္ဆိုရင္၊ လက္ခံရရွိမယ့္ dataေတြကို သိမ္းထားမယ္႔ေနရာတခုကို ၾကိဳျပီး ေၾကျငာေပးထားရပါတယ္။ ဒါကို variable declaration လုပ္တယ္လို႔ ေခၚပါတယ္။ variable တခုကို ေၾကျငာလုိက္ျပီဆိုရင္ programကို အသံုးျပဳေနတဲ႔ computerရဲ့ memoryေပၚမွာ အဲဒီ variableအတြက္ ေနရာတခုကို createလုပ္ေပးပါတယ္။ အဲဒီေနရာမွာ ကၽြန္ေတာ္တို႔က dataေတြကို အခ်ိန္အတိုင္းအတာ တခုအထိ သိမ္းထားလို႔ရပါတယ္။ variable တခုကို ေၾကျငာေတာ့မယ္ဆိုရင္ အပိုင္း၂-ပိုင္း သိဖို႔လိုအပ္ပါတယ္။ variable ရဲ့ နံမယ္နဲ႔ သိမ္းခ်င္တဲ႔ dataရဲ့ အမ်ိဳးအစားတို႔ ျဖစ္ပါတယ္။ ဥပမာအားျဖင့္ variableမွာ numberကို သိမ္းခ်င္တယ္၊ စာသားကို သိမ္းခ်င္တယ္၊ စသည္ျဖင့္ ေျပာေပးရပါတယ္။ C & C++ မွာ သံုးလို႔ရတဲ့ data type ေတြက ေအာက္ပါအတိုင္းျဖစ္ပါတယ္။<br /><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5sf1bRPSU4iqL_hhJJfYkT3S4e4nrLxnq9wkmwpNHYzRiM7B4LzoJAC793C8feOkYG3tNJojh8tihmUPKmOakW3FnKDEjWchFkNuQ0FvpwKO4Fy4w_Zsq5eQaOfF2mhiT4OQKRxrI2QDi/s320/datatype.jpg" alt="" id="BLOGGER_PHOTO_ID_5093532619177760306" border="0" />Variable တခုကို ေၾကျငာတဲ႔ ပံုစံကေတာ့ ဒီလိုျဖစ္ပါတယ္။<br /><br /><a href="http://paing411.blogspot.com/2007/07/variable-declaration-variable.html">ဆက္ဖတ္ရန္...</a><br /><a href="http://paing411.blogspot.com/2007/07/variable-declaration-variable.html">C++ Programming အပိုင္း ၂</a><br /><br /><span style="color: rgb(51, 204, 0);"><span style="color: rgb(153, 0, 0);">မွတ္ခ်က္။ ။ ကိုသန္ ့ေဇာ္မင္း ရဲ ့ဘေလာမွာ </span></span><span style="color: rgb(51, 204, 0);"><span style="color: rgb(153, 0, 0);">july 31, 2007 6:05pm က </span></span><span style="color: rgb(51, 204, 0);"><span style="color: rgb(153, 0, 0);">သူကိုယ္တိုင္ေရးထားတာကို ခြင့္ေတာင္းၿပီး ၿပန္လည္ ေဖၚၿပထား ၿခင္းၿဖစ္ပါတယ္။ ကိုသန္ ့ေဇာ္မင္းကို ေက်းဇူးတင္ပါတယ္။</span></span><br /></div><span style="color: rgb(51, 204, 0);"><span style="color: rgb(153, 0, 0);">loiyoes</span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-35729005305908755982007-07-31T20:32:00.000+08:002007-08-19T02:25:03.924+08:00<span style="color: rgb(0, 153, 0);">Mobile Device Troubleshooting 2</span><br /><span style="color: rgb(0, 153, 0);">Unable to Debug/Traces in .net IDE with Mobile Device 5.0</span><br /><br />တခါတေလမွာ သံုးေနတဲ့ <span style="color: rgb(153, 0, 0);">mobile device နဲ ့ .net IDE တို ့ဟာ Breakpoint ေထာက္ ၿပီး Debugging လုပ္လို ့မရတဲ့အေၿခအေနကို </span>ၾကံဳေတြ ့ရတက္ပါတယ္။ ဒါဟာ mobile developer တစ္ေယာက္အတြက္ေတာ့ ငရဲ ခန္းပါပဲ။ အရင္ကမွ Debugging လုပ္ရတာ ခက္ရတဲ့ အထဲ လုပ္လို ့မရဘူးဆိုရင္ သြားၿပီပဲ။ ဒီပိုစ္မွာ ၿဖစ္ႏိုင္ေခ်ရိွတဲ့ ၿပသာနာေတြထဲက တစ္ခုကို ေဖာ္ၿပလိုက္ပါတယ္။<br /><br />ခင္းဗ်ားတို ့ရဲ ့ moblie version ကို ၿပန္စစ္ပါ။ compact framework version ဘယ္ေလာက္ ကို တင္ထားသလဲဆိုတာ ကို ၿပန္စစ္ပါ။ တကယ္လို ့ခင္ဗ်ားတို ့ရဲ ့ mobile device က compact framework version 2 တင္ထားတယ္ဆိုရင္ ခင္ဗ်ားတို ့ရဲ ့ PC ကိုလည္း version အတူတူတင္ဖို ့လို အပ္ပါတယ္။ compact framework 2.0 service pack 1 ကို ၿမင့္ (upgrade) လုပ္ထားတယ္ဆိုရင္လည္း PC ကို လည္းလုပ္ေပးရပါမယ္။ ဒီလို မွ မဟုတ္ရင္ ေတာ့ Visual Studio 2005 က version အေဟာင္းၾကီးကိုပဲသံုးေနၿပီး Debug လုပ္လို ့မရ ၿဖစ္ေနပါလိမ့္မယ္။<br /><br />mobile device အတိုင္း PC ကို compact framework version အတူတူ ထည့္ ထားလိုက္ ရင္ အားလံုးအဆင္ေၿပပါလိမ့္မယ္။<br /><br />ဒါကေတာ့ compact framework 2.0 service pack 1 download လင့္ခ ေလးပါ။<br /><br /><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7befd787-9b5e-40c6-8d10-d3a43e5856b2&DisplayLang=en">Compact Framework 2.0 Service pack 1 Download</a><br /><br /><span style="color: rgb(0, 153, 0);">အာေကလာ (akela)</span><br /><span style="color: rgb(0, 153, 0);">july 31, 2007 8:19 pm</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-21936310299228499072007-07-28T11:34:00.000+08:002007-08-01T21:58:08.127+08:00<span style="font-weight: bold;">ေရးသူ - သန္ ့ေဇာ္မင္း</span><br />ေန ့စြဲ - july 26,2007<br />--------------------------------<br /><br /><span style="color: rgb(51, 204, 0);font-size:130%;" ><span style="font-weight: bold;">C++ Programming Language (အပိုင္း - ၁)</span></span><br /><div align="justify"><br /><b style="color: rgb(51, 51, 255);">Programming language</b><br />Programming language ဆိုသည္မွာ ကြန္ပ်ဴတာကို ခိုင္းေစေသာ ဘာသာစကား ျဖစ္ပါသည္။ ကြန္ပ်ဴတာကိုခိုင္းေစသည္ ဆိုရာ၀ယ္ monitor ေရွ႕ တြင္ထိုင္ microsoft word, excel စသည့္ application ၁ခုခုကိုဖြင့္ keyboard ကိုတေဖ်ာင္းေဖ်ာင္းရိုက္၍ စာမ်ားေပၚလာေအာင္ ျပဳလုပ္နိုင္ျခင္းကို မဆိုလိုေပ။ ထိုသူမ်ားကို ကြန္ပ်ဴတာအသံုးျပဳသူ (user)မ်ားဟုေခၚေပသည္။ ထိုသူမ်ား အသံုးျပဳနိုင္ေအာင္ application မ်ားေရးသားျခင္း (ျပဳလုပ္ေပးျခင္း) ကိုသာ ဆိုလိုေပသည္။ ထိုသို႔ျပဳလုပ္သူမ်ားကို program ေရးသားသူ (programmer) မ်ားဟု ေခၚေပသည္။<br /><br />အဂၤလိပ္လူမ်ိဳး တေယာက္နွင့္ ဆက္သြယ္ေျပာဆိုလိုလွ်င္ အဂၤလိပ္စာ၊ အဂၤလိ္ပ္စကား တက္ရန္လိုေပမည္။ ထို႔အတူ ကြန္ပ်ဴတာကို ဆက္သြယ္ခိုင္းေစရန္ ကြန္ပ်ဴတာနားလည္ေသာ ဘာသာစကားကို တက္ေျမာက္ရန္လိုေပသည္။ ဤနည္းအားျဖင့္ programming language မ်ားကို တီတြင္ေရးသားလာၾကသည္။ Assembly, C, Java, VB, .NET စသည္ျဖင့္ programming language မ်ားစြာရွိပါသည္။ အစကနဦး အသံုးျပဳခဲ႔ၾကေသာ language မ်ားမွာ ကြန္ပ်ဴတာကို တိုက္ရိုက္ခိုင္းေစနိုင္ရန္ ေရးသားရေသာေၾကာင့္ ေရးသားသူ လူသားတို႔အတြက္ နားလည္ရန္ခက္ခဲေလ့ရွိသည္။ ထို႔ေၾကာင့္ ေနာက္ပိုင္းတြင္ program ေရးသားသူမ်ားအတြက္ အဆင္ေျပေစရန္ ပိုမိုလြယ္ကူ၊ ပိုမိုေကာင္းမြန္ေသာ language မ်ားကို တီထြင္ဖန္တီး လာၾကသည္။ (ေနာင္တခ်ိန္တြင္ ကြန္ပ်ဴတာကို ပါးစပ္ျဖင့္ အမိန္႔ေပး ခိုင္းေစနိုင္လာေပလိမ့္မည္။)<br /><br /></div><span style="color: rgb(51, 204, 0);"><a href="http://paing411.blogspot.com/2007/07/c-programming-language.html">ဆက္ဖက္ရန္......<br />C++ Programming အပိုင္း ၁</a><br /><br /><span style="color: rgb(153, 0, 0);">မွတ္ခ်က္။ ။ ကိုသန္ ့ေဇာ္မင္း ရဲ ့ဘေလာမွာ </span></span><span style="color: rgb(51, 204, 0);"><span style="color: rgb(153, 0, 0);">july 26, 2007 8:41pm က </span></span><span style="color: rgb(51, 204, 0);"><span style="color: rgb(153, 0, 0);">သူကိုယ္တိုင္ေရးထားတာကို ခြင့္ေတာင္းၿပီး ၿပန္လည္ ေဖၚၿပထား ၿခင္းၿဖစ္ပါတယ္။ ကိုသန္ ့ေဇာ္မင္းကို ေက်းဇူးတင္ပါတယ္။<br />loiyoes</span><br /></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-72582250283773500522007-07-26T14:14:00.000+08:002007-07-27T00:14:09.214+08:00<strong><span style="color: rgb(0, 153, 0);">Mobile Device Troubleshooting 1</span><br /><span style="color: rgb(0, 153, 0);">SQL Query Analyzer.</span></strong><br /><br />ဒီေန ့အလုပ္လုပ္ရင္းၾကံဳလိုက္ရတဲ့ ၿပသာနာတခုပါ။ ပရိုဂရမ္ အလုပ္လုပ္ ေနတဲ့ mobile device က SQL Query Analyzer ကအလုပ္မလုပ္ေတာ့ဘူး။ နည္းစနစ္ဆိုင္ရာ ဗိသုကာ( Programm Architect) ကို ေမးၾကည့္ေတာ့ တခ်ိဳ ့ dlls ေတြကိုသြင္း ရမယ္လို ့ေၿပာတယ္။ သူေၿပာတဲ့ dlls ေတြက-<br /><br /><span style="color: rgb(204, 51, 204);"> ၁. sqlce30.dev.ENU.ppc.wce5.armv4i.CAB (*)</span><br /><span style="color: rgb(204, 51, 204);"> ၂. sqlce30.ppc.wce5.armv4i.CAB (**)</span><br /><br />တို ့ပါဘဲ။ mobile device ထဲမွာက SQL Query Analyzer က ရိွကို မရိွေတာ့တာ။ ဒါနဲ ့ sqlce30.dev.ENU.ppc.wce5.armv4i.CAB ကို သြင္းၾကည့္လိုက္တယ္။ SQL Query Analyzer ကို ၿမင္လာရတယ္။ OK ၿပီဆိုၿပီး Database ဖိုင္ (.sdf) ကို ဖြင့္ၾကည့္တဲ့အခါ အမွား ေတြတက္လာပါတယ္။ အမွားသတိေပးခ်က္( Error Message) ကေတာ့ -<br /><br /><span style="color: rgb(255, 0, 0);"> Failed to initialize the provider. Please make sure that SQL Server</span><br /><span style="color: rgb(255, 0, 0);"> Mobile Edition is properly installed</span><br /><br />ပါတဲံ။နည္းစနစ္ဆိုင္ရာဗိသုကာ (program Architect) ကလည္း ဘာေၾကာင့္လည္းဆိုတာမသိဘူး။ ဒါနဲ ့ ဆက္လက္ရွာေဖြမိတယ္။ ဒီလို နဲ ့ေတြ ့ပါတယ္။<br /><br /><span style="color: rgb(204, 51, 204);"> qlce30.repl.ppc.wce5.armv4i.CAB (***)</span><br /><br />ကို သြင္း (install) ပါတဲ့။ ဒီ .CAB ဖိုင္ကို သြင္းၿပီးသြားတဲ့အခါမွာေတာ့ အားလံုး အဆင္ ေၿပသြားပါတယ္။<br /><br />ဒီဖိုင္ အားလံုးဟာ<br /><br /><span style="color: rgb(153, 0, 0);"> C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0\wce500\armv4I<br /><br /></span>ေအာက္မွာ ရိွပါတယ္။<br /><br /><span style="color: rgb(51, 0, 153);">။ ။ Mobile မွာ ဒီ ကဘ္(.CAB)ေတြကို ဘယ္လုိ သြင္းရမွန္းမသိသူေတြအတြက္ပါ။</span><br /><span style="color: rgb(51, 0, 153);">Mobile မွာ သြင္း(install) ရတာလြယ္ပါတယ္။ သြင္းခ်င္တဲ့ ဖိုင္ေတြကို Mobile ရဲ ့ Explore Root ေအာက္တဲ့တဲ့မွာ သြားထားပါ။ Mobile Explore ကို ဖြင့္ခ်င္တယ္ဆိုရင္ ပံုမွန္ ကြန္ၿပဳတာရဲ ့ Explore ကေနလည္းသြားလို ့ရသလို ၊ Microsoft ActiveSync သံုးရင္းလည္း သူ Icon ကို ၾကြက္ရဲ ့ညာကို ႏွိပ္ ၿပီး Explore ဆိုရင္လည္းရပါတယ္။ ခုန</span><span style="color: rgb(51, 0, 153);">က (.CAB) ဖိုင္ေတြကို Root ေအာက္မွာဘဲ Copy/Paste လုပ္ခ်ပါ။<br />ၿပီးရင္ Mobile ထဲကေန ၿပီး ခုနက ဖိုင္ေတြကို သြား ၿပီး Run ပါ။ ေအာင္ေအာင္ၿမင္ၿမင္ သြင္း(install) လို ့ရတယ္ ဆိုရင္ Successfully insatlled ဆိုတာေပၚလာပါမယ္။ ။</span><br /><br />ေပ်ာ္ရြင္ၿငိမ္းခ်မ္းၾကပါေစ။<br /><br /><span style="color: rgb(0, 153, 0);">အာေကလာ (Akela)</span><br /><span style="color: rgb(0, 153, 0);">July 26, 2007 2:05 pm</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-44386436844448270412007-07-22T21:41:00.000+08:002007-07-26T16:14:17.810+08:00<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzbRlkISSUzcPdS2AhOt-X9YBv0Ye-TpVd2DLDrI73BF-i5OLnmqmdCxB27qbPHMRcvJGE1Soq51FTNSK1xkDO9vXeSsvOqZP2pDXl4ild9_47iYGf1e6kEGevW48ws9cKu6Sl2YbRWnw5/s1600-h/reg21july07_1.jpg"> </a> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(0, 153, 0);">Regular Expression (စကာလံုးအစုပံုစံ)</span><o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">စကားလံုးအစုပံုစံ မိတ္ဆက္<br />(Introduction of Regular Expression)<o:p><br /></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">:. ၁.၁<br />စကားလံုးအစုပံုစံ (Regular Expression) တစ္ခုဆိုတာ (ကြန္ၿပဴတာေလာက အသံုးအႏွဳန္းအားၿဖင့္္) string အမ်ိဳးအစားမ်ိဳး ၿဖစ္ပါတယ္။ သတ္မွတ္ထားတဲ့ ပံုစံ စည္းမ်ဥ္းစည္းကမ္းမ်ားအတိုင္း စကာလံုး (character) ေတြကို ရွာေဖြဖို ့၊ စကားလံုးအစု (a set of characters)တစ္ခုနဲ ့ အၿခား စကားလံုးအစု တို ့ကို တိုင္ဆိုင္ စစ္ေဆးခ်င္တဲ့ အခါမ်ိဳး၊ အဲဒီလို အခါေေတြမွာ သံုးေလ့ရိွပါတယ္။<o:p><br /></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">တကိုယ္ေရသံုးကြန္ၿပဳတာေတြကို သံုးဖူးတဲ့သူေတြ ဆိုရင္ပဲ ဒီ စကာလံုးအစုပံုစံ (Regular Expression) ကို သံုးဖူးၾကမွာပါ။ စကားလံုးအစုပံုစံကိုသံုးေနတယ္လို ့ သိခ်င္မွေတာ့ သိပါမယ္။ ဥပမာ- ဖိုင္ေတြကို ရွာေဖြခ်င္တဲ့အခါမ်ိဳးေတြမွာေပါ့။ ဖိုင္နာမည္ data နဲ ့ စတဲ့ ဖိုင္အားလံုးကို ရွာခ်င္တယ္ဆိုပါေတာ့။<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">စက္ထဲမွာ က -<br />၁. <span style=""> </span>data.doc ၊<br />၂. <span style=""> </span>data1.doc ၊<br />၃.<span style=""> </span>data2.doc ၊<br />၄.<span style=""> </span>dataTXT.txt ၊<br />၅.<span style=""> </span>dataEXE.exe ၊<br />၆.<span style=""> </span>dataB.bat<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဆိုၿပီးရိွမယ္လို ့ယူဆၾကမယ္။ ဒါဆို ရွာေဖြတဲအခါ data*.doc ဆိုးၿပီးရိုက္ ထည့္လိုက္။ ၿပီးလို ့ search ဆိုတဲ့ button ေလးကို ႏိွပ္လုိက္ရင္ ခုနက အေပၚဆံုးဖိုင္ ၃ ဖိုင္ကို ကြန္ၿပဳတာ စီမံခန္ ့ခြဲေရးစႏွစ္ (Operating System - OS) က ရွာေပးပါလိမ္မယ္။ တကယ္လို ့ data?.* လို ့ရိုက္ထည့္ခဲ့မယ္ဆိုရင္ေတာ့ ၂ ၊ ၃<span style=""> </span>နဲ ့ ၆ တိုကို ရွာေပးပါ လိမ့္မယ္။ data*.* ဆိုရင္ေတာ့ ၆ ဖိုင္လံုးေပါ့။<o:p><br /></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">wildcard characters ေတြလို ့ေခၚခဲ့ ၾကတယ္။ ရိုးရိုးရွင္းရွင္းေတြေပါ့။ အခုေၿပာမယ့္ စကားလံုးအစုပံုစံ မွာက ဒီထက္အမ်ားၾကီး က်ယ္ၿပန္ ့ပါတယ္။ အနည္းငယ္လည္း ခတ္မယ္။ wildcard characters ေတြက အေတာ္အသံုးက်ေပ့မယ္လို ့ အကန္ ့့အသတ္ ရိွတယ္။ သူတို ့ေတြဟာ စကားလံုးပံုအစုပံုစံ (Regular Expression) ရဲ ့ သေဘာတရား ကို မိတ္ဆက္ေပးခဲ့ပါတယ္။</span></p><p class="MsoNormal"> </p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">:. ၁.၂<br />စကားလံုးအစုပံုစံရဲ ့ မူလဇစ္ၿမစ္ဟာ သီ၀ရီသေဘာတရားဆိုင္ရာကြန္ၿပဳတာသိပံၸ (theoretical computer science) ရဲ ့ အစိတ္အပိုင္းေတြၿဖစ္ၾကတဲ့ automata theory နဲ ့ formal language theory တို ့ပဲၿဖစ္ၾကပါတယ္။ စကားလံုးအစုပံုစံ ကို formal language theory နဲ ့ ေဖာ္ၿပေရးသားရပါတယ္။ (ေလ့လာလိုသူမ်ား ဆက္ၿပီးေလ့လာၾကပါ။ ဒီေၾကာင္း ေတြက ဒီပိုစ္နဲ ့မဆိုင္ပါ။)<o:p><br /></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">:. ၁.၃<br />စကားလံုးအစုပံုစံ (Regular Expression) ကိုသံုးၿခင္းအားၿဖင့္<o:p><br /></o:p></span></p> <p class="MsoNormal" style="margin-left: 54pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span lang="EN-US" style="font-family:Zawgyi-One;">အခ်က္အလက္ မွန္ကန္ေၾကာင္း စစ္ေဆးၿခင္းမ်ား (Data Validation & Verification) <o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဥပမာ<span style=""> </span>- ၀င္ေရာက္လာတဲ့ တယ္လီဖုန္းနံပါတ္ က ကိုယ္လိုခ်င္တဲ့ စံပံုစံ (pattern) ဟုတ္မဟုတ္စစ္ေဆးၿခင္း ၊ လိုခ်င္တဲ့ ပံုစံက ၉၀a-၃၄-၅d-၃ ဆိုပါေတာ့၊ အဲဒီပံုစံမဟုတ္ပဲ ၉၀3၅၅-၅%၇၅၄ ဆိုရင္္ စံပံုစံ (pattern) အားၿဖင့္ မွားတယ္။<o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 36pt;"><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p> </o:p></span></p> <p class="MsoNormal" style="margin-left: 54pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span lang="EN-US" style="font-family:Zawgyi-One;">စာမ်ား အစားထိုးၿခင္း (Replace Text)<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဥပမာ<span style=""> </span>- I love you very much. No matter what you are, I love you. ေပါ့။ဒီလို စာေတြ စာရြက္ေပါင္း မ်ားစြာရိွမယ္ဗ်ာ။ ဒါကို (ႏွစ္အနည္းငယ္ၾကာလာတဲ့အခါ) love အစား hate နဲ ့အစားထုိးခ်င္တယ္ ဆိုပါေတာ့။အဲဒီလို အခ်ိန္မွာ သိပ္အသံုးက်တယ္။<o:p><br /></o:p></span></p> <p class="MsoNormal" style="margin-left: 54pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="">-<span style=""> </span></span></span><!--[endif]--><span lang="EN-US" style="font-family:Zawgyi-One;">စာအစဥ္အတန္း (String) တစ္ခုထဲကေန ကိုယ္လို ခ်င္တဲ့ အစိတ္အပိုင္း ေလးတစ္ခုကိုပဲ ထုတ္ယူၿခင္း <span style=""> </span>(Extract text)<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဥပမာ - အေပၚက စာထဲကပဲ love ဆိုု တဲ့ စာလံုးကိုပဲ ထုတ္ယူခ်င္တဲ့အခါမ်ိဳး။<br />စသည္တုိ ့ေတြမွာ အလြန္ အသံုး၀င္ပါတယ္။<o:p><br /></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">စာအစဥ္အတန္း (String) ေတြကို ကိုင္တြယ္တဲ့ေန ရာမွာ နာမည္မၾကီးတဲ့ javascript လို <span style=""> </span>ပရိုဂရမ္ ဘာသာရပ္ေတြမွာ စကားလံုးအစုပံုစံ (Regular Expression) က အသံုးက်<span style=""> </span>ၾကပါတယ္။<o:p><br /></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 102, 255);">ဆတ္ရန္။</span></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ရည္ညြန္း။ ။ MSDN, </span>Wikipedia - the free encyclopedia</p> <p style="color: rgb(51, 204, 0);" class="MsoNormal">အာေကလာ (Akela)<br /></p> <p class="MsoNormal"><span style="color: rgb(51, 204, 0);font-family:Zawgyi-One;" lang="EN-US">july 21, 2007 2:42 am</span><br /></p><span style="color: rgb(51, 102, 255);">မွတ္ခ်က္။ ။ ပိုစ္ေတြကို ကၽြန္ေတာ္ စာလံုးမ်ားကို တက္ႏိုင္သေလာက္ ၿမန္မာမွဳၿပဳထာပါတယ္။ ပညာရွင္မဟုတ္တဲ့ အတြက္ စာလံုးေတြက ေထာက္ေနပါတယ္။ ကၽြန္ေတာ္ကိုယ္တိုင္ ေရးေနရင္းနဲ ့ ခဏခဏရယ္ၿဖစ္ပါတယ္။ ဒါေပ့မယ္ေပါ့ေလ တက္ႏိုင္သမွ်ေတာ့ ၾကိဳးစားၿပီးၿမန္မာ လို ပဲေရးပါမယ္။ အခုအစၿပဳမိရင္ ေနာင္က်ေတာ့ဒီထက္ေကာင္းတဲ့ အဓိပၸါယ္ၿပည့္စံုတဲ့ ၿမန္မာစာလံုးေတြ ထြက္လာႏိုင္တယ္လို ့ေမွ်ာ္လင့္ပါတယ္။</span><br /><p class="MsoNormal"><br /></p><p class="MsoNormal"><br /><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p> </o:p></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-76593715661288959262007-07-21T22:02:00.000+08:002007-07-28T11:29:16.297+08:00<span style="color: rgb(0, 153, 0);">စကားလံုးအစုပံုစံ ၀ါက်</span><br /><span style="color: rgb(0, 153, 0);font-family:Zawgyi-One;" lang="EN-US">(Regular Expression Syntax)</span><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">:. ၂.၁<br />စကားလံုးအစုပံုစံ (Regular Expression) ဆိုတာ စာကားလံုးမ်ားကိုသံုးထားတဲ့ ပံုစံ (pattern of Text) ၿဖစ္တဲ့အတြက္ သူ ့မွာ သာမန္ စကားလံုးမ်ား (ordinary characters - a မွ z အထိ) ၊ အထူး စကားလံုးမ်ား (special characters or metacharacters) ေတြပါ၀င္ပါတယ္။<o:p></o:p></span></p> <p class="MsoNormal" style="margin-right: 9pt;"> </p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ေအာက္ပါ ဇယားကြက္မွာ အထူး စကားလံုးမ်ား (metacharacters**) နဲ ့ သူတို ရဲ ့ ၿပဳမွဳ ႏိုင္တဲ့စြမ္းရည္ (behavior) တိုကို ေဖာ္ၿပထားပါတယ္။<o:p></o:p></span></p> <p class="MsoNormal" style="margin-right: 9pt;"><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p> </o:p></span></p> <table class="MsoNormalTable" style="border: medium none ; margin-left: 5.4pt; border-collapse: collapse; width: 546px; height: 2075px;" border="1" cellpadding="0" cellspacing="0"> <tbody><tr style="height: 441pt;"> <td style="border: medium none ; padding: 0cm 5.4pt; width: 405pt; height: 441pt;" valign="top" width="540"> <table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse; width: 633px; height: 2113px;" border="1" cellpadding="0" cellspacing="0"> <tbody><tr style="height: 31.9pt;"> <td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 93.35pt; height: 31.9pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(153, 0, 0);">စကားလံုးမ်ား (Characters)</span><o:p></o:p></span></p> </td> <td style="border-style: solid solid solid none; padding: 0cm 5.4pt; width: 306pt; height: 31.9pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(153, 0, 0);">အဓိပါယ္ဖြင့္ဆိုခ်က္(Description)</span><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span style=";font-family:Zawgyi-One;color:red;" lang="EN-US"><o:p> </o:p></span></p> <br /></td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span style=";font-family:Zawgyi-One;color:red;" lang="EN-US"><o:p> </o:p></span></p> <br /></td> </tr> <tr style="height: 34.7pt;"> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt; height: 34.7pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">\<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt; height: 34.7pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူေနာက္က စာလံုးကို special characters ၊ သို ့ literal အၿဖစ္ ၿပဳမွဳေပးပါတယ္။ ဥပမာ -ပံုမွန္ဆိုရင္<span style=""> </span>‘n’ က စာလံုး “n” နဲ ့ တိုက္စစ္ (Match) ပါတယ္။ ဒါေပမယ္ ‘\n’ ၿဖစ္သြားရင္ေတာ့ ေနာက္ အသစ္တလိုင္း (newline character) ၿဖစ္သြားပါတယ္။<span style=""> </span><span style="color: rgb(204, 51, 204);">‘\\’</span> က <span style="color: rgb(204, 51, 204);">“\” </span>နဲ ့တိုက္ၿပီး ၊<span style=""> </span><span style="color: rgb(204, 51, 204);">“\(”</span> က <span style="color: rgb(204, 51, 204);">“(” </span>နဲ ့တိုက္စစ္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style="height: 44.7pt;"> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt; height: 44.7pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">^<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt; height: 44.7pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">၀င္လာတဲ့ စာအစဥ္အတန္း (Input string )ရဲ ့ ပထမဆံုး ေနရာ (position at the beginning) ကို တိုက္စစ္္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">$<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">၀င္လာတဲ့ စာအစဥ္အတန္း (Input string )ရဲ ့ ေနာက္ဆံုး ေနရာ (position at the end) ကို တိုက္စစ္္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">*<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူရဲ ့ေရွမွာ ရိွေနတဲ့ စာလံုး(character) <span style=""> </span>သို ့မဟုတ္ စာလံုးအစုငယ္ (subexpression) ေတြကို 0 or more အၾကိမ္အေရအတြက္ တိုက္ပါတယ္။ ဥပမာ - <span style="color: rgb(204, 51, 204);">“zo*”</span> က <span style="color: rgb(204, 51, 204);">“z” and “zoo” </span>ကို တိုက္ပါတယ္။ * က {0,} နဲ ့ အတူတူပဲ ၿဖစ္ပါတယ္။ သေဘာက o က လံုး၀မပါရင္လည္းၿဖစ္တယ္။ တစ္လံုးထက္ပိုပါရင္လည္း ၿဖစ္တယ္။ <o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">+<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူရဲ ့ေရွမွာ ရိွေနတဲ့ စာလံုး(character) သို ့ စာလံုးအစုငယ္ (subexpression) ေတြကို one or more အၾကိမ္အေရအတြက္ တိုက္ပါတယ္။ ဥပမာ - <span style="color: rgb(204, 51, 204);">“zo+”</span> က <span style="color: rgb(204, 51, 204);">“zo”</span> and <span style="color: rgb(204, 51, 204);">“zoo”</span> ကို တိုက္ပါတယ္။ ဒါေပမယ့္ “z” ကို မတိုက္ပါဘူး။ + က {1,} နဲ ့ အတူတူပဲၿဖစ္ပါတယ္။ သေဘာက o က အနည္းဆံုး ၁လံုးပါရတယ္။ တစ္လံုးထက္ပိုပါရင္လည္း ၿဖစ္တယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">?<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူရဲ ့ေရွမွာ ရိွေနတဲ့ စာလံုး(character) သို ့ စာလံုးအစုငယ္ (sub expression) ေတြကို 0 or 1 အၾကိမ္အေရအတြက္ တိုက္ပါတယ္။ ဥပမာ - <span style="color: rgb(204, 51, 204);">“do(es)?”</span> က <span style="color: rgb(204, 51, 204);">“do” and “does” </span>ကို တိုက္ပါတယ္။ ? က {0,1} နဲ ့အတူတူပဲၿဖစ္ပါတယ္။ သေဘာက o က လံုး၀မပါရင္လည္းၿဖစ္တယ္။ တစ္လံုးတည္းပါရင္လည္း ၿဖစ္တယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">{n}<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီမွာ n က အႏုတ္ကိန္းမဟုတ္ရပါ။ n ၾကိမ္အေရအတြက္ အတိ အက် တိုက္ပါတယ္။ ဥပမာ - ‘o{2,}’ လို ့ဆိုရင္ <span style="color: rgb(204, 51, 204);">“Bob” </span>ထဲမွာ ရိွ တဲ့ o နဲ ့မတိုက္ပါဘူး။ ဒါေပမယ့္ <span style="color: rgb(204, 51, 204);">“food”</span> ထဲမွာရိွတဲ့ o ႏွစ္လံုးနဲ ့ ေတာ့ တိုက္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">{n,}<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီမွာ n က အႏုတ္ကိန္းမဟုတ္ရပါ။ အနိမ့္ဆံုး n ၾကိမ္ အေရ အတြက္္နဲ ့ တိုက္ပါတယ္။ ဥပမာ - ‘o{2}’ လို ့ဆိုရင္ <span style="color: rgb(204, 51, 204);">“Bob”</span> ထဲမွာ ရိွ တဲ့ o နဲ ့မတိုက္ပါဘူး။ ဒါေပမယ့္ <span style="color: rgb(204, 51, 204);">“fooooood” </span>မွာရိွတဲ့ o အားလံုးနဲ ့ ေတာ့တိုက္ပါတယ္။ ‘o{1,}’<span style=""> </span>က အထက္မွာ ေဖၚၿပခဲ့တဲ့ ‘o+’ နဲ ့အတူတူပဲၿဖစ္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">{n,m}<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီမွာ n နဲ ့ m က အႏုတ္ကိန္းမဟုတ္ရပါ။ n က m ထက္ ငယ္ရင္ငယ္ ၊ မငယ္ရင္ ညီရပါမယ္ (n <= m)။ အနိမ့္ဆံုး n ၾကိမ္ ၊ အၿမင့္ဆံုး m ၾကိမ္ အေရအတြက္ နဲ ့့ တိုက္ပါတယ္။ ဥပမာ - <span style="color: rgb(204, 51, 204);">‘o{1,3}' </span>ဟာ <span style="color: rgb(204, 51, 204);">“fooooood”</span> မွာရိွတဲ့ ပထမ o သံုးလံုးနဲ ့ တိုက္ပါတယ္။ <span style="color: rgb(204, 51, 204);">‘o{0,1}’ </span><span style=""> </span>က အထက္မွာ ေဖၚၿပခဲ့တဲ့ ‘o?’ နဲ ့<span style=""> </span>အတူတူပဲၿဖစ္ပါတယ္။ <span style="color: rgb(204, 51, 204);">“o{1,}”</span> က အထက္မွာေဖၚၿပခဲ့တဲ့ <span style="color: rgb(204, 51, 204);">‘o+’</span> နဲ ့ တူၿပီး ၊ <span style="color: rgb(204, 51, 204);">“o{၀,}” </span>ကေတာ့့<span style="color: rgb(204, 51, 204);"> ‘o*’ </span>နဲ ့ အတူတူပဲၿဖစ္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">?<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">ဒီ <span style="color: rgb(204, 51, 204);">? က</span><span style="color: rgb(204, 51, 204);"> </span><span style="color: rgb(204, 51, 204);">(*,+,?,{n},{n,},{n,m}) </span>တို ရဲ ့ ေနာက္မွာ ခ်က္ခ်င္း ရိွေနတယ္ဆိုရင္ အဲဒီပံုစံကို non-greedy pattern လုိ ့ေခၚပါ တယ္။ non-greedy pattern ဆိုတာ တုိက္စစ္တဲ့အခါ နည္းႏိုင္ သမွ်နည္းေအာင္တုိက္စစ္ပါတယ္။ ပံုမွန္ ပံုစံ(pattern) က မ်ား ႏိုင္သမွ်မ်ားေအာင္တုိက္စစ္ပါတယ္။<span style=""> </span>ဥပမာ - <span style="color: rgb(204, 51, 204);">“oooo”</span> ဆို တဲ့ စာအစဥ္ အတန္း (string) မွာ ၊ <span style="color: rgb(204, 51, 204);">‘o+?’</span> က <span style="color: rgb(204, 51, 204);">‘o’</span> တစ္လံုးတည္းနဲ ့ တိုက္စစ္ၿပီး ၊ ? မပါ တဲ့ <span style="color: rgb(204, 51, 204);">‘o+’ </span>က <span style="color: rgb(204, 51, 204);">‘o’ </span>အားလံုးနဲ ့တိုက္စစ္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">.<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(204, 51, 204);">“\n” </span>(newline character) ကလြဲရင္ ‘.’ (dot) ကေလးဟာ စကာလံုးအားလံုးနဲ ့ တိုက္စစ္ပါတယ္။ “\n” ကိုပါ တိုက္စစ္ခ်င္ တယ္ဆိုရင္ေတာ<span style="color: rgb(204, 51, 204);">့ ‘[\s\S]’</span><span style="color: rgb(204, 51, 204);"> </span>ဆိုတဲ့ ပံုစ(pattern) ံကို သံုးႏိုင္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">x|y<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူက ‘ x ’ ဒါမွမဟုတ္ ‘ y ’ ကိုတိုက္စစ္ပါတယ္။ ဥပမာ- <span style="color: rgb(204, 51, 204);">“z|food”</span><span style=""> </span>ဟာ “z” ဒါမွမဟုတ္ <span style="color: rgb(204, 51, 204);">“food”</span> နဲ ့ တိုက္ပါတယ္။ <span style="color: rgb(204, 51, 204);">“(z|f)ood”</span> က်ေတာ့ <span style="color: rgb(204, 51, 204);">“zood” </span>ဒါမွမဟုတ္<span style="color: rgb(204, 51, 204);"> “food”</span> နဲ ့တိုက္ စစ္ပါတယ္။ <span style="color: rgb(204, 51, 204);">“|”</span> ဒီစာလံုးေလးက or (တစ္ခုမဟုတ္တစ္ခု) ဆိုတဲ့ အဓိပါယ္ရိွပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">[xyz]<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူကေတာ့ စကားလံုးအစုပါပဲ။ ေဒါင့္ကြင္း([]) ထဲမွာ ရိွတဲ့ ဘယ္စကားလံုးနဲ ့ မဆို တိုက္စစ္ပါတယ္။ ဥပမာ- [abc] က <o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(204, 51, 204);">“plain”</span> ထဲက<span style="color: rgb(204, 51, 204);"> “ a ” </span>နဲ ့တိုက္စစ္ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">[^xyz]<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူကေတာ့ စကားလံုးအစုပါပဲ။ ေဒါင့္ကြင္း([]) ထဲမွာ ရိွတဲ့ စကားလံုးမ်ား နဲ ့မတူတဲ့ အၿခားစကားလံုးမ်ားကို တိုက္စစ္ ပါတယ္။ ဥပမာ- [^abc] က “plain” ထဲက <span style="color: rgb(204, 51, 204);">“ p ” ၊ “ l ” ၊ “ i ” ၊ “</span> <span style="color: rgb(204, 51, 204);">n ”</span> တိုက္စစ္ပါတယ္။ ^ က မဟုတ္ (not)<span style=""> </span>ဆိုတဲ့ အဓိပါယ္ရိွ ပါတယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">[a-z]<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူကေတာ့ စကားလံုး အတိုင္းအတာ (range of characters) တစ္ခုပါပဲ။ဥပမာ - [a-m] ဟာ a<span style=""> </span>နဲ ့ m<span style=""> </span>ၾကားမွာရိွတဲ့ မည္သည့္ စကားလံုးကို မဆို တိုက္စစ္ပါ တယ္။<o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 93.35pt;" valign="top" width="124"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">[^a-z]<o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 306pt;" valign="top" width="408"> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">သူကေတာ့ စကားလံုး အတိုင္းအတာ (range of characters) တစ္ခုပါပဲ။ဥပမာ - [^a-m] ဟာ a<span style=""> </span>နဲ ့ m<span style=""> </span>ၾကားမွာရိွတဲ့ စကားလံုးမ်ားမွ လြဲ ၿပီး မည္သည့္စကားလံုးနဲ ့မဆို တိုက္စစ္ပါ တယ္။^ က မဟုတ္ (not)<span style=""> </span>ဆိုတဲ့ အဓိပါယ္ရိွ ပါတယ္။<o:p></o:p></span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><o:p></o:p></span></p> </td> </tr> </tbody></table> <span style="color: rgb(51, 102, 255);">ဆက္ရန္။<br /><br /></span><span lang="EN-US" style="font-family:Zawgyi-One;">ရည္ညြန္း။ ။ MSDN, </span>Wikipedia - the free encyclopedia, Google<br /><br /><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;">့့့<span style="color: rgb(51, 204, 0);">အာေကလာ(Akela)</span></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 204, 0);">july 22, 2007 2:42 am</span></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 204, 0);">july 26,2007 00:02 am (midinght) (modified)<br /></span></span></p><p class="MsoNormal"><span style="color: rgb(51, 102, 255);">မွတ္ခ်က္။ ။ ပိုစ္ေတြမွာ ကၽြန္ေတာ္ စာလံုးမ်ားကို တက္ႏိုင္သေလာက္ ၿမန္မာမွဳၿပဳထာပါတယ္။ ပညာရွင္မဟုတ္တဲ့ အတြက္ စာလံုးေတြက ေထာက္ေနပါတယ္။ ကၽြန္ေတာ္ကိုယ္တိုင္ ေရးေနရင္းနဲ ့ ခဏခဏရယ္ၿဖစ္ပါတယ္။ ဒါေပ့မယ္ေပါ့ေလ တက္ႏိုင္သမွ်ေတာ့ ၾကိဳးစားၿပီးၿမန္မာ လို ပဲေရးပါမယ္။ အခုအစၿပဳမိရင္ ေနာင္က်ေတာ့ဒီထက္ေကာင္းတဲ့ အဓိပၸါယ္ၿပည့္စံုတဲ့ ၿမန္မာစာလံုးေတြ ထြက္လာႏိုင္တယ္လို ့ေမွ်ာ္လင့္ပါတယ္။</span><br /><span lang="EN-US" style="font-family:Zawgyi-One;"><span style="color: rgb(51, 204, 0);"></span><o:p></o:p></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-87319296379705305072007-06-29T02:17:00.000+08:002007-11-29T02:18:12.946+08:00Download ရႏိုင္ေသာ ေနရာမ်ား:)Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-25493402923020537262007-06-29T02:15:00.002+08:002008-09-13T23:46:14.651+08:00ကၽြန္ေတာ္၊ ကၽြန္မ တို ့သည္..ဒီဘေလာေလးကို virtual intellignece လို ့ နာမည္ေပးခဲ့တယ္။ ဒီမွာ ေရးသားထားတာေတြဟာ ကၽြန္ေတာ္တို ့ ကိုယ္ပိုင္တီထြင္မူ ့ေတြထက္ အၿခားသူမ်ားရဲ ့ လုပ္ၿပီးသား အေၾကာင္းအရာေတြကို ကၽြန္ေတာ္တုိ ့ နားလည္သမွ် ၿပန္လည္ေရးသားၿခင္း၊ဘာသာၿပန္ေပးၿခင္းပါပဲ။ ၿမန္မာဘာသာရပ္အေနနဲ ့ ရိွေစခ်င္တဲ့ ေစတနာလည္း အဓိကအေၾကာင္းအေနနဲ ့ပါပါတယ္။ တေန ့တခ်ိန္ ကၽြန္ေတာ္တို ့ ကိုယ္ပိုင္ တီထြင္ႏိုင္ခဲ့မယ္ဆိုရင္ေတာ့လည္း ေကာင္းတာေပါ့။မလုပ္ႏိုင္ေသးေတာ့ လုပ္ႏိုင္တာကို လုပ္ပါတယ္။<div><br /></div><div>အာေကလာ</div><div><br /></div><div>၁၃ စက္တင္ဘာ ၂၀၀၈</div><div><br /></div><div>-----------------------------------------------------------</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6313055094952633723.post-67864717133354129092007-06-01T02:10:00.002+08:002008-11-16T12:03:43.088+08:00Best Links<strong><span style="color: rgb(204, 102, 0);">နည္းပညာသတင္း မ်ား</span></strong><br /><br /><strong><span style="color: rgb(204, 102, 0);">ကြန္ၿပဳတာႏွင့္ဆိုင္ေသာ သြားသင့္ေသာေနရာမ်ား</span></strong><br /><a href="http://www.webteacher.com/javascript">www.webteacher.com/javascript/ </a><br />( JavaScript Tutorial for the Total Non-Programmer )<br /><a href="http://www.w3schools.com">www.w3schools.com</a><br /><a href="http://www.php.net/">http://www.php.net</a><br />( PHP: Hypertext Preprocessor )<br /><a href="http://dynamicajax.com/">www.DynamicAJAX.com</a><br />( Dynamic AJAX Suggest Tutorial )<br /><br /><strong><span style="color: rgb(204, 102, 0);">e-book ဆိုဒ္မ်ား</span></strong><br /><a href="http://www.pdfchm.com/">http://www.pdfchm.com/</a><br /><a href="http://freebookspot.net/">http://freebookspot.net/</a><br /><br /><br /><strong><span style="color: rgb(204, 102, 0);">download ဆိုဒ္မ်ား</span></strong>Unknownnoreply@blogger.com0