Sunday, February 26, 2012

Updating Site Map Menu

ပြီးခဲ့တဲ့ စနေနေ့တွင် ယခင်ရေးသားခဲ့သော Site Map Menu ကို ပြုပြင်ရေးသားခဲ့ပါသည်။ အရင်ကတည်းက အကော်ဒီယံပုံစံဒါမှမဟုတ် Tree ပုံစံကို ရေးသားရန် ရည်ရွယ်ထားခဲ့ပါသည်။ ဒါနဲ့ ဒီအလုပ်ပိတ်ရက်မှာ ဟိုရှာဒီရှာလုပ်ပါသည်။ jquery ui ကို သွားတွေ့ပါသည်။ ကျွှန်တော်လိုချင်သည့် ပုံစံ အတိအကျကိုရှိပါသည်။

နမှုနာ ကုဒ်ကို ကြည့်မိသည်။ ကျွှန်တော်ယခင်ရေးထားသည်ကို အနည်းငယ်ပြုပြင်ပြီး အသုံးပြုလျှင်ရပြီ ဆိုသည်ကို သိရပါသည်။ ခေါင်းစဉ်ကို လင့်ခ်ပုံစံပြောင်း၊ အားလုံးကို Div ထဲထည့်ပြီးတော့ အခုသုံးနေတဲ့ ul Tag ကို Div တစ်ခုထဲထည့်လိုက်ရုံသာပင်။

ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်သည်။
var dateRef;

function loadtoc(a) {
 var catagories = a.feed.category;

 // Sort Catagories
 catagories.sort(function (x, y) {
  x = x.term.toLowerCase();
  y = y.term.toLowerCase();
  return ((x == y) ? 0 : ((x > y) ? 1 : -1 ));
 });

 $("<div id='accordion' style='font-size:85.5%;'>");
 for (var i=0; i<catagories.length; i++) {
  $("<h3><a href='#'>" + catagories[i].term + "</a></h3>");
  var c = 0;
  var list = new Array();
  var dateList = new Array();

  for (var j=0; j < a.feed.entry.length; j++) {
   if(isInCat(catagories[i].term, a.feed.entry[j].category)) {
    list[c ++] = a.feed.entry[j];
   }

   if (i==0) {
    dateList[j] = a.feed.entry[j].published.$t;
   }
  }
  
  // set refdate
  if(i == 0) {
   dateList.sort();
   dateList.reverse();
   dateRef = dateList[10];
  }
  writeList(list);
 }
 $("</div>");
}

function isInCat(cat, cats) {
 for (var i=0; i<cats.length; i++) {
  if(cat == cats[i].term) {
   return true;
  }
 }
 return false;
}

function writeList(list) {
 
 list.sort(function(x, y) {
  return ((x.published.$t == y.published.$t) ? 0 : ((x.published.$t > y.published.$t) ? 1 : -1 ));
 });
 
 $("<div><ol>");
 for(var i=0; i<list.length; i++) {
  writePostLink(list[i]);
 }
 $("</ol></div>");
}

function writePostLink(p) {
 var isNew = p.published.$t > dateRef;
 var href;
 for (var i = 0; i < p.link.length; i++) {
  if (p.link[i].rel == "alternate") {
   href = p.link[i].href;
   break
  }
 }

 var title = p.title.$t;
 $("<li><a href='" + href + "'/>" + title + "</a>");
 if (isNew) {
  $(' - <strong><em><span style="color: rgb(255, 0, 0);">New !!</span> </em></strong></li>');
 }
}

function $(s) {
 document.write(s);
}
အသုံးပြုပုံမှာ အောက်ပါအတိုင်းဖြစ်၏။
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://dl.dropbox.com/u/13831873/blogger/js/sidebar.js">  
</script>   
<script src="http://[အသုံးပြုသူ၏ ဒိုမိန်း].blogspot.com/feeds/posts/default?redirect=false&max-results=9999&alt=json-in-script&callback=loadtoc">  
</script>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script>
  $(document).ready(function() {
    $("#accordion").accordion({ autoHeight: false });
  });
</script>
အထက်ပါ ကုဒ်များကိုကူးယူ၍၊ အသုံးပြုသူဒိုမိန်းနေရာတွင် သင့်၏ ဘလောဂ်ဒိုမိန်းကို ဖြည့်စွက်ကာ၊ သင်၏ blogger blog ၏ Gadget တွင် ဖြည့်စွက်ရေးသားလိုက်ပါက အသုံးပြုနိုင်မည် ဖြစ်ပါသည်။ နမှုနာကို မြန်မာဂျာဗားယူဇာတွင် စမ်းသပ်ကြည့်ရှုနိုင်ပါသည်။ မာတိကာ ဂတ်ဂျက်သည် ဤနမှုနာကို အသုံးပြု၍ ရေးသားထားခြင်း ဖြစ်ပါသည်။

Saturday, February 25, 2012

JDK7 ၏ new type checker

Google Applet Engine Java ကို မသုံးတာကြာပြီ။ အကြောင်းမှာ အလကားနေ SDK ဗားရှင်းအပ် လုပ်နေတာကတကြောင်း၊ ကြောင်တောင်တောင်နိုင်တာက တစ်ကြောင်း၊ GWT ကို လက်မခံချင်တာက တစ်ကြောင်း။ ဒီလိုနဲ့ Easy Servlet အကြောင်းရေးပြီးကတည်းက GAE ကို မသုံးဖြစ်တော့ပါ။

အသုံးများတာက အစဉ်ပြေတဲ့ Cloudbees ပဲဖြစ်ပါတယ်။ ဒါပေမယ့် ဒီနေ့ GAE နဲ့ပတ်သက်ပြီး FB မှာရှိတဲ့ Myanmar Java User Group ထဲမှာ မေးခွန်းတစ်ခု တက်လာပါတယ်။ မသုံးတာကြာပြီဖြစ်တဲ့ GAE ကို ဖွင့်တော့၊ ဗားရှင်းအသစ် သုံးလို့ရပါတယ်တဲ့။ အဲ့ဒါနဲ့ နောက်ဆုံးဖြစ်တဲ့ 1.6.2.1 ကို ဒေါင်လုဒ်လုပ်ပြီး၊ အင်စတော။ ပြီးတော့ တစ်ခါတည်း JDK 1.7.0.3 ထွက်နေတာနဲ့ ဒေါင်းလုဒ်လုပ်ပြီး အင်စတော။

လက်ရှိရှိပြီးသား servlet-tutorials ကို Run ကြည့်ပါတယ်။ အဲရာပေါ်လာပါတယ်။
警告: Error starting handlers
java.lang.VerifyError: Expecting a stackmap frame at branch target 29 in method com.episode5.AccessLogFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V at offset 15
 at java.lang.Class.getDeclaredConstructors0(Native Method)
 at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
 at java.lang.Class.getConstructor0(Class.java:2714)
 at java.lang.Class.newInstance0(Class.java:343)
 at java.lang.Class.newInstance(Class.java:325)
 at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
 at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:92)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
 at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
 at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
 at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
 at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
 at org.mortbay.jetty.Server.doStart(Server.java:224)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:191)
 at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
 at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
 at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
 at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
 at com.google.appengine.tools.development.DevAppServerMain.(DevAppServerMain.java:113)
 at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)

အရင်ရေးတုန်းက ဘယ်အိုင်ပီကနေ လာပြီး Access လုပ်လဲဆိုတာကို Proxy ကို ခံထားရင်တောင် သိနိုင်သလား မသိနိုင်သလား စမ်းချင်တုန်းက ဖြည့်ထားတဲ့ Filter နေရာမှာ အဲရာတက်နေပါတယ်။ အဲ့ဒါနဲ့ java.lang.VerifyError နာမည်နဲ့ ရှာကြည့်ပါတယ်။ Java 7 အရောက်မှာ အတော်လေးကို တက်နေပုံရပါတယ်။ စိတ်မချရရင် JVM ကနေ throw လုပ်တတ်ပါတယ် ဆိုပဲ။ ဒါနဲ့ web.xml မှာ အဲ့ဒီ Filter ကို comment out လုပ်ပြီး၊ Run ကြည့်တော့ရပါတယ်။ ဒါပေမယ့် session အခန်းကို သုံးကြည့်တော့ Error တက်ပြန်ရော။

ဒါနဲ့ JDK 7 မှာစအသုံးပြုတဲ့ new type checker ကို အသုံးမပြုပါဘူးလို့ JVM Option မှာ -XX:-UseSplitVerifier လို့ သွားဖြည့်လိုက်ပါတယ်။ အဲ့ဒီတော့မှ အလုပ်လုပ်ပါတော့တယ်။


နောက်ရက်တွေမှပဲ Myanmar Java User မှာ JVM Option တွေအကြောင်းကို ရေးသားပါဦးမည်။

ကိုးကား
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

Saturday, February 18, 2012

Site Map for Blogger

ဒီနေ့ JavaScript ဖြင့် Myanmar Java User မှာသုံးဖို့ အတွက် Blogger သုံး မာတိကာတစ်ခု ရေးသားခဲ့ပါတယ်။ ကျွှန်တော်ရေးနေတဲ့ Myanmar Java User က ပိုစ်တွေဟာ ခေါင်းစဉ်တစ်ခုတည်းသာ အသုံးပြု၍ ရေးသားထားပါသဖြင့် ဤတစ်ခေါက်တွင် ခေါင်းစဉ်တစ်ခုကိုသာသုံးတဲ့ Plugin တစ်ခုကို ရေးသားခဲ့ခြင်းဖြစ်ပါတယ်။

Blogger ဟာ Atom API ကို ပံ့ပိုးထားပါသဖြင့် feed တွေကို json အနေဖြင့်ရယူနိုင်ပါတယ်။
<script src="http://[your-domain]/feeds/posts/default?redirect=false&max-results=9999&alt=json-in-script&callback=loadtoc">  
</script>
အထက်ပါအတိုင်း [your-domain] နေရာမှာ သင့်ဘလောဂ်၏ ဒိုမိန်းကို ဖြည့်စွက်ပြီး၊ နောက်ဆုံး callback မှာ ခေါ်ယူ အသုံးပြုလိုတဲ့ ဖန်ရှင်ကို ရေးရုံပါပဲ။ ကျွှန်တော်ဒီနေရာမှာတော့ အကော်ဒီယံ မယ်နျူးပုံစံကို ရေးလိုပါသဖြင့် ဖန်ရှင်အမည်ကို loadtoc ဆိုပြီးရေးထားလိုက်တယ်။ လောလောဆယ်တော့ ပိုစ်တွေလည်းနည်းသေးတော့ ဒီအတိုင်း အရင်ဖြန့်ပေါ်အောင်ပဲ အရင်လုပ်ပါဦးမယ်။ ပိုစ်တွေအတော်များလာတော့မှ အကော်ဒီယံကို CSS နဲ့ပဲရေးမလား၊ js နဲ့ ကိုယ့်ဟာကိုယ်ရေးမလား၊ ဒါမှမဟုတ် jquery လို အခြား လိုင်ဘရီကို သုံးပြီးရေးရင်ကောင်းမလား စဉ်းစားရပါဦးမယ်။

ဒီနေရာမှာရေးမှာက အောက်ပါအတိုင်းဖြစ်ပါတယ်။

  1. ရလာတဲ့ ဒေတာထဲကနေ Category တွေကို ရှာပြီး Sort လုပ်ပါတယ်။
  2. အဲ့ဒီ Category တစ်ခုချင်းရဲ့ အောက်မှာရေသားထားတဲ့ ပိုစ်တွေကို လစ်ထဲကို ထည့်ပါတယ်။
  3. အဲ့ဒီ လစ်တစ်ခုချင်းကို ပိုစ်လုပ်တဲ့နေ့နဲ့ Sort လုပ်ပါတယ်။
  4. အဲ့ဒီနောက်မှာ ပိုစ်တစ်ခုချင်းကို အဲ့ဒီ Category ရဲ့အောက်မှာ လင့်ခ်ကို ရေးသားစေပါတယ်။
  5. အဲ့ဒီလိုရေးသားတဲ့အခါမှာ အဲ့ဒီပိုစ်ဟာ နောက်ဆုံး ၁၀ခုအတွင်းမှာပါရင် New !! ဆိုပြီး ရေးသားစေပါတယ်။
တကယ်တမ်း ချရေးကြည့်တဲ့အရာကတော့ အောက်ကလိုဖြစ်ပါတယ်။
var dateRef;

function loadtoc(a) {
 var catagories = a.feed.category;

 // Sort Catagories
 catagories.sort(function (x, y) {
   return ((x.term == y.term) ? 0 : ((x.term > y.term) ? 1 : -1 ));
 });

 for (var i=0; i<catagories.length; i++) {
  $("<strong>" + catagories[i].term + "</strong>");
  var c = 0;
  var list = new Array();
  var dateList = new Array();

  for (var j=0; j < a.feed.entry.length; j++) {
   if(isInCat(catagories[i].term, a.feed.entry[j].category)) {
    list[c ++] = a.feed.entry[j];
   }

   if (i==0) {
    dateList[j] = a.feed.entry[j].published.$t;
   }
  }
  
  // set refdate
  if(i == 0) {
   dateList.sort();
   dateList.reverse();
   dateRef = dateList[10];
  }
  writeList(list);
 }
}

function isInCat(cat, cats) {
 for (var i=0; i<cats.length; i++) {
  if(cat == cats[i].term) {
   return true;
  }
 }
 return false;
}

function writeList(list) {
 
 list.sort(function(x, y) {
  return ((x.published.$t == y.published.$t) ? 0 : ((x.published.$t > y.published.$t) ? 1 : -1 ));
 });
 
 $("<ol>");
 for(var i=0; i<list.length; i++) {
  writePostLink(list[i]);
 }
 $("</ol>");
}

function writePostLink(p) {
 var isNew = p.published.$t > dateRef;
 var href;
 for (var i = 0; i < p.link.length; i++) {
  if (p.link[i].rel == "alternate") {
   href = p.link[i].href;
   break
  }
 }

 var title = p.title.$t;
 $("<li><a href='" + href + "'/>" + title + "</a>");
 if (isNew) {
  $(' - <strong><em><span style="color: rgb(255, 0, 0);">New !!</span> </em></strong></li>');
 }
}

function $(s) {
 document.write(s);
}
ဒီ js ကို Dropbox အပေါ်တင်ထားပြီး၊ addGadget ကနေပြီး HTML/JavaScriptကိုရွေးပြီး၊ အထက်ပါ js ဖိုင်များကို ခေါ်သွင်းလိုက်တာနဲ့ အလုပ်လုပ်မှာဖြစ်ပါတယ်။
<script src="http://dl.dropbox.com/u/13831873/blogger/js/sidebar.js">  
</script>   
<script src="http://myanmar-java-user.blogspot.com/feeds/posts/default?redirect=false&max-results=9999&alt=json-in-script&callback=loadtoc">  
</script>
ရေးသားထားသည်ကို Myanmar Java User တွင် လက်တွေ့ကြည့်နိုင်ပါတယ်။ myanmar-java-user နေရာမှာတော့ သင်၏ ဘလောဂ်အမည်ကို ရေးသားလိုက်မယ်ဆိုရင် အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။

Monday, February 6, 2012

Virtual PC 2007 & Open Suse

Virtual PC 2007 ကို သုံးချင်နေတာကြာပါပြီ။ အကြောင်းကြောင်းကြောင့် မစမိသေးခဲ့။ ပြီးခဲ့တဲ့ စနေနေ့တုန်းက ဒေါင်းလုဒ်လုပ်ပြီး၊ Windows XP ကို စမ်းကြည့်သည်။ မဆိုးပါ၊ အလုပ်လုပ်သွားပါသည်။ ကျွှန်တော် အရင်သုံးနေတဲ့ အိမ်က ဆာဗာ ကြွသွားတာကြာပြီ။ လက်တော့မလျှော့သေးဘူး။ ရအောင်ပြင်ဖို့ စဉ်းစားနေတုန်း။ Bios ကတော့တက်ပါပြီ။ ဒါပေမယ့် CD ကို ကောင်းကောင်းမဖတ်နိုင်ဘူးဖြစ်နေတယ်။ Memory လည်း လဲထားပြီးပြီ။ Hard Disk လည်း 1TB တောင်ထည့်ထားတာ။ မဖြစ်မနေ အသက်သွင်းရပါမည်။ ဒါပေမယ့် မအားသေး။ ဒီကြားထဲအရားပြေသုံးရအောင် Linux ကို Pendrive ကို သုံးမလား၊ Virtual PC ကို သုံးမလား စဉ်းစားနေခဲ့ပါသည်။


ဒီနေ့ Virtual PC မှာ Open Suse Live CD ကို စမ်းသုံးကြည့်သည်။ လှပလိုက်သည့်အမျိုး။ Open Suse ကို အမျိုးမျိုး ကလိရပါဦးမည်။ ဒီနေ့တော့ ဒီလောက်ပင်။ နောက်ရက်များမှ Myanmar Java User တွင် Lunux သုံး၍ Java ရေးနည်းကို ရေးရပါဦးမည်။ ဒီနေ့တော့ အိပ်တော့မည်။

Friday, February 3, 2012

ကျွှန်တော်နှင့် ကိန်းဂဏာန်းများ

မျက်စေ့ကို မှိတ်ကြည့်ပါသည်
တတ်ထားသောနားကြပ်မှ သီချင်းသံများက စီးဆင်းနေစဲ

ဘာရယ်မဟုတ် ခန္ဓာကိုယ်ကို ရပ်ကြည့်လိုက်တော့
ညာဘက်လက်က မောက်စ်အပေါ်မှာ
ဘယ်ဘက်လက်က asdf
သြော် ဘာရယ်မဟုတ်
ဒါငါ့ရဲ့ အသင့်အနေအထား ပါလား

ခြောက်ခြောက်ခြောက်
နာရီလက်တံရဲ့ အသံ
အားလုံးရပ်နေတဲ့ကြားက စီးဆင်းနေလေရဲ့

ငါ
ဘာကြောင့်
ကိန်းဂဏာန်းတွေကြားက
မလွတ်မြောက်ရတာလည်း

အိုင်းစတိုင်းရဲ့
အလင်းဟာ အမြန်ဆုံးပဲဆိုတဲ့
သီဟိုရီဟာလည်း မှားနေပြီ
ဘာလို့လဲဆိုတော့
ဟိုတလောက အလင်းထက်မြန်တဲ့ အရာကို
တွေ့ရှိခဲ့ပြီလို့ သတင်းထဲမှာတွေ့ခဲ့ရတယ်

ဒါဆိုရင်
နှိုင်းယှဉ် သီအိုရီဟာလည်း
အသုံးဝင်တော့မှာမဟုတ်ဘူး

သူ့ထက်ငါပိုပြီး
ငါ့ထက်သူဆိုပြီး

နှိုင်းချင်တိုင်းလည်း နှိုင်းလို့ရမှာမဟုတ်တော့ဘူး
ဘာလို့လဲဆိုတော့ သုညနဲ့ တစ်ဆိုတာ
တစ်ကယ်မှမရှိတာကို

Wednesday, February 1, 2012

Access denied

ဒီနေ့ ဖြစ်ပုံကတော့ အတော်လေးကို စိတ်ပျက်စရာကောင်းပါသည်။ ကိုယ့်ဟာနဲ့ကိုယ် ပြောတာပါ။ အလုပ်က Integration Test ပြီးလို့ Connection Test ကို ရောက်ပြီဖြစ်သည်။ အသုံးပြုသူများကလည်း အစမ်းသုံးကြည့်နေတယ်ပေါ့။

ဒီအဆင့်ရောက်လျှင် ကျွှန်တော့်အတွက်ကတော့ စိတ်ဝင်စားစရာမကောင်းတော့ပါ။ ဘာမှမရှိသေးတဲ့ နေရာကနေ ဘယ်လိုလုပ်မယ်ဆိုတာကို စဉ်းစားရတာ၊ ပြီးတော့ အသေသတ်ဆုံးနဲ့၊ လှပတဲ့ ကုဒ်များကို တနေ့ထက်တနေ့ ရေးနိုင်ဖို့ စဉ်းစားပြီး ရေးနေရတာ၊ ဖြေမရှင်းနိုင်တဲ့ ပြဿနာတွေကို အပတ်တကုက်နဲ့ ကြိုးစားလမ်းရှာရတာ၊ အဲ့ဒီ အစိတ်အပိုင်းတွေကို အနှစ်အသက်ဆုံးဖြစ်ပါသည်။

စာလုံးလေးကနည်းနည်း စောင်းနေလို့ပြင်ပေးပါဦး၊ အလုပ်မရှိကြောင်ရေးချိုးသည့်အလုပ်များကို သိက်စိတ်မဝင်စားပါ။ မြန်မြန် ပရိုဂျက်အသစ်တစ်ခုကို ရောက်ပါစေလို့ စိတ်ထဲကသာ ဆုတောင်းနေမိပါတော့သည်။ ဒါပေမယ့် ဒီတစ်ခေါက်က Simulation ကို ရေးမိသည့်အတွက် Release လုပ်သည့်အထိ ဒီပရိုဂျက်ကနေ ခွာနိုင်ဖို့လမ်းမမြင်ပါ။

ဒီနေ့ ယူဇာတွေရဲ့ Help Desk အဖွဲ့ကသုံးနေတဲ့ Environment မှာ Data တွေကို အသစ်ပြန်ဖြည့်ပေးဖို့ ဖြစ်လာပါသည်။ System Test များသုံးနေတဲ့ ကုမ္ပဏီတစ်ခုရဲ့ အချက်အလက်တွေကို Export လုပ်ပြီး၊ ကုမ္ပဏီကုဒ်ပြောင်းပြီး၊ Help Desk Environment မှာသွား ထည့်ပေးရုံပင်။ အရင်ဆို Teraterm နဲ့ Remote Access လုပ်ပြီး vi ကို သုံးကာ Shell Script ကို ရေးပြီး လိုအပ်တဲ့ ဒေတာတွေကို ပြောင်းရွှေ့နေကျ။

ဒီနေ့ကပြင်းတာနဲ့ Excels က VB ကို သုံးပြီး၊ အလိုအလျှောက် Script ကို ရေးပေးတဲ့ ပရိုဂရမ်ကို ရေးပြီး အသုံးပြုရန် စဉ်းစားခဲ့ပါသည်။ Excels မှာ အသုံးပြုမယ့် Table နဲ့ ကုမ္ပဏီကုဒ်ကို ဇယားရေးထားပါက Export လုပ်မည့် Shell Script ရော ပြင်မည့်အရာရော၊ Import လုပ်မည့် Script ပါ ရေးပေးမည့် VB Macro တစ်ခုပါ။

ရေးကြည့်သည်။ လိုချင်တဲ့ Script ကို ရေးပေးနိုင်ပါသည်။ ဒါနဲ့ အဲ့ဒီ Script ကို Linux Server ကို FFFTP နဲ့ ပို့ပြီး Run ကြည့်ပါသည်။ Access Denied! User ID ကော Password ပါ မှန်ပါသည်။ ဘာကြောင့်လည်း။ အဲ့ဒီ User ID နဲ့ Password ကို ပြန်ပြီး Login လုပ်ကြည့်သည်။ ရပါသည်။ နည်းနည်း စားသွားသည်။ ဘာလဲဟ။

၁နာရီလောက် အမျိုးမျိုးလုပ်ရင်း အချိန်ကုန်သွားပါသည်။ မြန်မြန်ပြီးမယ့်ဟာကို ဒုက္ခပဲပေါ့။ ဘယ်နားမှာမှားလဲဆိုတာကို ပြန်စစ်ရအောင် အဲ့ဒီ Script ကို ပြန်ဖွင့်ကြည့်ပါသည်။ Local ကိုလည်းမပြန်ချင်တာနဲ့ vi နဲ့ ဖွင့်ကြည့်ပါသည်။ Enter Code တွေက။ CR/LF ဖြစ်နေပါသည်။ အသုံးပြုနေတာက LINUX ဖြစ်တဲ့အတွက် LF မဖြစ်၍မရပါ။ အဲ့ဒီအတွက် mysql ရဲ့ -p password ၏ နောက်ဆုံးစာလုံးတွင် CR ကတစ်စိတ်တပိုင်းပါဝင်ပြီး Password မှားနေသည်ဟု ပြောနေခြင်း ဖြစ်သည်။

LINUX သုံး ပရိုဂရမ်ကို Windows မှာသုံးတဲ့အခါ Encoding ကို သတိထားစေလိုပါသည်။ သတိမမှု ဂူမမြင်တဲ့။ မြန်မာရှေးလူကြီးများ တယ်တော်သကိုး။