How did I learn ?

လွန်ခဲ့တဲ့ ၂ ပတ်လောက်က Django အကြောင်းရေးဖြစ်ခဲ့သလို စာအုပ်လည်း ဖတ်ဖြစ်ခဲ့တယ်။ စာအုပ် ဖတ်တာကတော့ ထွေထွေထူးထူးရယ်တော့ မဟုတ်ပါဘူး။ iPad ထဲထည့် ရုံးသွားရုံးပြန်ဖတ်။ သောကြာနေ့ည ရောက်ရင် ပြန်စမ်းကြည့်။ တစ်ခါတစ်လေ ရုံးက စောရောက်ရင်တော့ လမ်းမှာ ဖတ်ထားတာ ပြန်စမ်းကြည့်ပေါ့။ စာအုပ် တစ်အုပ်လုံး ဖတ်တာက ၁ ပတ် လောက်ပဲ ကြာတယ်။ Django ကို မတတ်ပေမယ့် သိသွားတယ်။ Django ကို သိသွားပေမယ့် သဘောမကျဘူး။ ဘာလို့ သဘောမကျလည်းဆိုတော့ ကောင်းလွန်းလို့ပဲ။ အရမ်းပြည့်စုံလွန်းတယ်။ အဲဒီတော့ ကျွန်တော်တို့ အနေနဲ့ သူ့ rule တွေကို လိုက်ရတော့တယ်။ သူ့မှာ ပါတဲ့ Ready Made တွေကို သိချင်လာတယ်။ စာပိုဖတ်ရလာတယ်။ ကျွန်တော်က အဲဒါကို သဘောမကျဘူး။ ဒါကြောင့် symfony ထက် CodeIgniter ကို ရွေးခဲ့တာပဲ။ Django ကို သိသွားပေမယ့် ရေးမယ့် project မှာ မသုံးချင်တော့ဘူး။

ဒါနဲ့ Light Weight Python framework နောက်တစ်ခုဖြစ်တဲ့ Pyramid ကို လေ့လာဖြစ်တယ်။ Pyramid ကိုတော့ သဘောကျတယ်။ လွယ်သလို လွတ်လပ်တယ်။ သူက MVC pattern ကို အဓိက ထားပြီးတော့ ကြိုက်တဲ့ python library နဲ့ တွဲသုံးလို့ရတယ်။ ကြိုက်တဲ့ template engine ကို သုံးလို့ရလာတယ်။ အဲဒါကို သဘောကျတယ်။ နောက်ပြီး epub , pdf စာအုပ် free ပေးထားတယ်။ နောက်ပြီးတော့ sample tutorial တွေလည်း ပေးထားတဲ့အတွက် Django ထက်စာရင် လေ့လာလို့ လွယ်တယ်။ Pyramid ကို ၁ ပတ်လောက် ဖတ်ပြီး သကာလမှာတော့ Pyramid ပဲ သုံးတော့မယ်လို့ ဆုံးဖြတ်မိလိုက်တယ်။ Django ထက်ယှဉ်ရင် အများကြီးလွတ်လပ်တယ်။ ready made တွေ သိပ်မပါပေမယ့် ကျွန်တော့် အတွက် အဆင်ပြေတယ်။ Django ထက်စာရင် လေ့လာရလွယ်တယ်။

အဲဒါကို သုံးမယ်လို့ ဆုံးဖြတ်ပြီးကာမှ အောင်စည်သူကျော် က facebook မှာ nodejs နဲ့ ပတ်သက်ပြီး link မှာ tag လုပ်ပြီး ရေးလာတယ်။ မလုပ်တာ ကြာပြီ ဖြစ်တဲ့ node ကို ပြန်လှည့်ကြည့်ချင်စိတ်ပေါက်လာတယ်။ ဒါနဲ့ မထူးပါဘူး။ တစ်ရက်လောက်ပဲ အပျင်းပြေ ဖတ်လိုက်ပါမယ်လို့ လုပ်ပြီး လေ့လာလိုက်တာ ရပ်မရအောင်ပဲ ဆွဲဆောင်မှုရှိတယ်။ Node က python ထက် မြန်သလားမေးရင်တော့ ဟင်အင်း လို့ပဲ ဖြေရမှာပဲ။

for (i=0;i<1000;i++){ for(j=0;j<1000;j++) { } }

ဆိုတဲ့ loop ကို python မှာ 1 second မကြာခင်ပြီးနိုင်ပေမယ့် node မှာတော့ ၁ စက္ကန့်ကျော်ကြာတယ်။

Node က python ထက်စာရင် သိသိသာသာ မြန်ပါတယ်။

[javascript]
var sys = require(‘sys’)
var s = process.uptime();

var z = 0;
for (x=0; x < 10000; x++) {
for (y=0; y < 10000; y++) {
z += x * y
}
}

sys.puts(process.uptime() – s)
sys.puts(z)
[/javascript]

က node မှာ 3 စက္ကန့်သာ ကြာပေမယ့် python မှာတော့ 24 စက္ကန့် ကြာပါတယ်။ ( credit to Thant Thet )

node js မှာ ရှိတဲ့ module တွေနဲ့ impact တွေကတော့ ကြောက်စရာကောင်းလောက်အောင် တိုးတက်မြန်ဆန်လှတယ်။ Nodejs ဟာ Unix-like platform တွေပေါ်မှာ Google V8 JavaScript engine အတွက် event-driven I/O framework တစ်ခုပါ။ နောက်ပြီး javascript ကို သုံးပြီး server side တွေရေးလို့ရတယ်။ Database access တွေ လုပ်လို့ရတယ်။ တနည်းပြောရင် server side web app တစ်ခု ကောင်းကောင်းရေးလို့ရတယ်။ နောက်ပြီး Real Time app တွေ ရေးလို့ရတယ်။ javascript ဆိုတာက web developer တိုင်း သိတဲ့ language ပါ။ တော်တော်များများသိခဲ့တာက javascript ဆိုတာ client side အတွက် လို့ ဆိုတာပဲ သိကြတယ်။ အခုတော့ Nodejs နဲ့ server side ပါ ရေးလို့ရပြီ။ javascript သင်တဲ့အခါမှာ client side script ဆိုပြီး သင်လို့ မရတော့ဘူး။ Server Side မှာ Nodejs ကို အသုံးပြုပြီး ရေးလို့ရတယ်ဆိုပြီး ပြောင်းပြီး သင်ရတော့မယ်။ Nodejs က ကျွန်တော့် လေ့လာမှုကို ရပ်တန့် မရခဲ့ဘူး။ Nodejs ကနေ ဆက်ပြီးတော့ Redis , Mongod တွေပါ ဆက်ကာ လေ့လာဖြစ်သွားတယ်။ Redis , Mongod တွေ အကြောင်း ပြောရင် ပြီးတော့မှာ မဟုတ်တဲ့အတွက် Django, Pyramid , Nodejs တွေကို ဘယ်လို တွေ လေ့လာဖြစ်ခဲ့သလိုဆိုတာလေး အရင် ပြောပြရစေ။

ကျွန်တော် လေ့လာပုံအဆင့်ဆင့် ကတော့

Why : Why I want to develop it ?

အသစ်အဆန်း တစ်ခုကို လေ့လာချင်ပြီဆိုရင်တော့ မလေ့လာခင်မှာ အရင်ဆုံး ဘာ sample project တစ်ခု လုပ်ချင်တာလဲ။ လုပ်ရမလဲဆိုတာကို အရင်စဉ်းစားဖြစ်တယ်။ စဉ်းစားပြီးတဲ့အခါမှာတော့ System တစ်ခုလုံး develop မလုပ်ခင်မှာ စိတ်ကူးနဲ့ တစ်ဆင့်ခြင်းဆီ တည်ဆောက်ကြည့်တယ်။ အဲဒီအခါဘာတွေ လိုအပ်တယ်။ ဘာတွေ ထည့်သင့်သလဲဆိုတာကို မြင်လာရတယ်။

What : What technology should I use it ?

ကိုယ့် project အကြောင်း ကိုယ်တိုင် ကောင်းကောင်း သိပြီ။ မြင်ပြီ ဆိုမှပဲ project တစ်ခုကို စတင်ဖို့ လုပ်တယ်။ အဲဒီအခါမှာ ဘာ technology သုံးမလဲဆိုတာကို စဉ်းစားဖြစ်တယ်။ ကျွန်တော် လုပ်ချင်တဲ့ project က လက်ရှိ PHP , django , pyramid နဲ့ လုပ်လို့ ရသလို nodejs နဲ့လည်း လုပ်လို့ရတာပဲ။ Database ဆိုရင် SQL နဲ့က တော်တော်များများ လုပ်လို့ ရပါတယ်။ သို့ပေမယ့် Mongodb နဲ့ က ပိုသင့်တော်တယ်။ Redis ကို အသုံးပြုလည်း ဖြစ်ပေမယ့် Redis ထက်စာရင် Mongodb က ပိုသင့်တော်တယ်။ ဒါကြောင့် Mongodb ကို သုံးမယ်လို့ ဆုံးဖြတ်ပြီး web framework အတွက် PHP မဟုတ်တဲ့ future trend တစ်ခုကို အသုံးပြုဖို့ ဆုံးဖြတ်လိုက်တယ်။ ဒါကြောင့် Python ကို စလေ့လာဖို့ ဆုံးဖြတ်လိုက်တယ်။

Who : Who are using this technology ?

လက်ရှိမှာ ကိုယ်သုံးမယ်လို့ ဆုံးဖြတ်ထားတဲ့ technology က ဘယ်သူတွေ သုံးနေလဲ။ ဘယ်လောက်ထိ supporting ကောင်းလဲ။ community အားကောင်းလဲဆိုတာကို သေချာသိဖို့လိုတယ်။ ဒါကြောင့် Django ကို အခြား framework တွေ ထက် အရင်လေ့လာဖြစ်သွားတာပဲ။ Nodejs ကတော့ community အားကောင်းတယ်။ Impact က ကြောက်စရာ ကောင်းလောက်အောင် အားကောင်းလှတယ်။ နောင်တချိန်မှာ အောင်မြင်လာမယ့် language ဆိုတာ လူတိုင်း လက်ခံထားတယ်ဆိုလည်း မမှားပါဘူး။ ဒါကြောင့် pyramid ထက် ကိုယ်ပိုကျွမ်းကျင်တဲ့ javascript nodejs ကို သုံးပြီး ရေးမယ်လို့ ဆုံးဖြတ်လိုက်တာပဲ။ အခုအချိန်မှာ PHP အပါအဝင် ဘာရွေးမလဲဆိုရင် PHP ကိုပဲ ရွေးဖြစ်မှာပဲ။ သို့ပေမယ့် အသစ်လေ့လာမယ်လို့ ဆုံးဖြတ်ထားတာကြောင့် PHP မဟုတ်တဲ့ trend ထဲကပဲ ရွေးဖြစ်သွားတာပဲ။

nodejs impact on github

When : When should I use ?

လက်ရှိ အသုံးပြုမယ်ဆိုတဲ့ technology က ဘယ်လောက် အဆင်သင့်ဖြစ်ပြီလဲ။ အခုအချိန်မှာ သုံးသင့်လား။ နောင်တချိန်မှ သုံးသင့်လား။ api ပိုင်း သို့မဟုတ် system ပိုင်းမှာ သုံးသင့်လား စပြီးတော့ ဆုံးဖြတ်ရတော့တယ်။ background service တွေမှာ python နဲ့ သုံးပြီး front end ပိုင်းကို nodejs ကို သုံးမယ်လို့ ဆုံးဖြတ်လိုက်တယ်။ Nodejs က သုံးမယ်ဆိုရင် သုံးလို့ရလောက်အောင် stable ဖြစ်လာပြီ။ Google V9 ထွက်မယ်ဆိုရင်တော့ အကောင်းဆုံး အချိန်ဖြစ်လာလိမ့်မယ်။ Google V9 ထွက်ခဲ့ရင် သုံးဖို့ အဆင်သင့်ဖြစ်နေရင် အကောင်းဆုံးပဲလို့ ဆိုရမယ်။ နောက်ပြီးတော့ Nodejs ကို realtime , multithread တွေအတွက် အလွန်ပဲ အသုံးဝင်လှတယ်။ ဘယ်အချိန်မှာ ဘယ်လို သုံးရမလဲဆိုတာကို သိဖို့ကလည်း လိုအပ်လှတယ်။

Where : Where are the tutorials or examples ?

စလေ့လာတော့မယ်ဆိုရင် ebook မဖတ်ခင်မှာ tutorial တွေ example တွေကို အရင်ဖတ်တယ်။ tutorial တွေက ebook ဖတ်တာထက် ပိုပြီးတော့ ရင်းနှီးကျွမ်းဝင်စေတယ်။ tutorial တွေလည်း စမ်းပြီးပြီ နားလည်ပြီဆိုရင်တော့ မသိတာလေးတွေသိရအောင် ebook ရှာဖတ်ဖြစ်တယ်။ ebook နဲ့ tutorial ကွာတာက အဆင့်ဆင့် ဘယ်လို တည်ဆောက်ရသလဲ။ ဘာကြောင့် ဒီလို သုံးရလဲ။ ဘယ်လိုသုံးသင့်သလဲ စတဲ့ ဟာတွေက tutorial မှာ ကောင်းကောင်းမရနိုင်ဘူး။ ebook မှာ အဆင့်လိုက် အဆင့်လိုက် တက်လာအောင် ဖန်တီးပေးထားတယ်။ သေသေချာချာ နားလည် သဘောပေါက်ချင်ရင်တော့ စာအုပ် ကောင်းကောင်းရွေးဖတ်ဖို့ လိုတယ်။ စာအုပ်တိုင်း ကောင်းတာ မဟုတ်သလို စာအုပ်တိုင်းက ကိုယ်နဲ့ ကိုက်တာမဟုတ်ဘူး။ စာအုပ် မဖတ်ခင်မှာ review လေး ဖြစ်ဖြစ် အရင် ဖတ်ကြည့်သင့်တယ်။ ဒီ စာအုပ်က ဘယ် အဆင့်အတွက် ရည်ရွယ်ထားတာလဲ။ ဘာတွေ ပါလဲ။ ဖတ်ပြီးရင် ဘာတွေ သိသွားမလဲဆိုတာကို အရင်ဆုံး review လုပ်ပြီးမှ စာအုပ် စဖတ်ဖို့ ကြိုးစားဖြစ်တယ်။

Why : Why should I use it ?

စာအုပ် ဖတ်ပြီးပြီဆိုရင် ပြန်ပြန်တွေးတယ်။ ငါ ဒီ language ကို တကယ်လေ့လာချင်လား။ ဒီ language နဲ့ပဲ မဖြစ်မနေ ရေးမလားဆိုတာပဲ။ ရွေးချယ်ပိုင်ခွင့်ရှိရင် ရွေးချယ်အုံးမလား ဆိုပြီး စဉ်းစားမိတယ်။ ဒါနဲ့ပဲ Django ကနေ pyramid ကို လေ့လာဖြစ်သွားတာပဲ။ နောက်ဆုံး Nodejs ရောက်မှပဲ ဒီ အဆင့်မှာပဲ repeat တွေ ပြန်ပြန် ဖြစ်နေတာတွေ ရပ်သွားတော့တယ်။

Tool and Time

တစ်ယောက်နဲ့ တစ်ယောက် လေ့လာပုံခြင်း မတူညီကြပါဘူး။ ကျွန်တော် လွယ်လွယ်ကူကူ လေ့လာနိုင်တယ်ဆိုတာက Internet ကောင်းတယ်။ iPad ရှိတယ်။ သွားလေရာ စာဖတ်လို့ရတယ်။ အားလပ်ချိန်ရှိတယ်။ အိမ်ပြန်ရောက်တာနဲ့ ထမင်းစားပြီးတာနဲ့ ဖတ်ထားတာတွေ ပြန်လုပ်ဖြစ်တယ်။ အခုတော့ ထမင်းစားပြီးတာနဲ့ TV ရှေ့ပြေးပြီး xbox ဖွင့်နေပြီ။

Internet ကောင်းမွန်ခြင်းက လေ့လာမှုအတွက် အများကြီး အကျိုးဖြစ်စေတယ်။ တစ်ခုစမ်းရင် error တက်ရင် error ပေါ်မှာ မူတည်ပြီး google မှာရှာလိုက်။ fix လုပ်ကြည့်လိုက်။ နောက်ပြီး မသိတာတွေရှိရင် stackoverflow ဖြစ်ဖြစ် သက်ဆိုင်ရာ နေရာမှာ ဖြစ်ဖြစ်မေးလိုက် လို့ရတယ်။ လိုအပ်တာတွေကိုလဲ ချက်ခြင်း download ဆွဲပြီး သွင်းလိုက်လို့ရတယ်။ နောက်တချက်က Unix-like OS ဖြစ်တဲ့ Mac ကို သုံးနေတာပဲ။ Python , PHP , Django , Pyramid , Nodejs စတာတွေကို အခက်အခဲ မရှိ လွယ်လွယ်ကူကူ terminal ကနေ command လေး ရိုက်ပြီး သွင်းရုံပဲ။ လိုအပ်ရင် ကိုယ့်ဘာသာကိုယ် compile လုပ်ပြီး သွင်းရုံပဲ။ Web Development အနေနဲ့ Windows က Linux လောက် မကောင်းတာတော့ အမှန်ပဲ။ ASP.NET အတွက်သာ အဆင်ပြေကောင်းပြေလိမ့်မယ်။ ROR , Python စတာတွေအတွက် Linux လောက် လုပ်ရတာ မလွယ်ဘူး။ ဥပမာ။။ Nginx ကို Windows ပေါ်မှာ run ဖို့အတွက် မရဘူး မဟုတ်ပေမယ့် Linux လောက်တော့ documentation တွေ blog posts တွေ tutorial တွေ မများဘူး။ Nodejs ကလည်း windows ပေါ်မှာ ရပေမယ့် Linux လောက်တော့ မကောင်းဘူး။ Mac က Unix-like ဖြစ်နေတာဟာ web development အတွက် အရမ်းကို ကောင်းသွားတယ်ဆိုလည်း မမှားဘူး။ web development ဆိုတာထက် opensource အတွက် ဆို ပိုမှန်လိမ့်မယ်။

ရူးသွပ်ခြင်း

လေ့လာရမှာ မရူးသွပ်တဲ့အခါမှာ လေ့လာဖို့အတွက် အတားအဆီးတွေ ဖြစ်စေပါတယ်။ ဒါကြောင့် ရူးသွပ်လာအောင် sample project တစ်ခုကို ဖန်တီးခဲ့ရတာပါ။ ဒါမှသာ ဒါကို ဒီမှာ သုံးလို့ရမယ်။ သုံးလို့မရဘူး ဆိုတာကို စာဖတ်ရင်းနဲ့ တောက်လျှောက် စဉ်းစားတတ်လာမယ်။ code ချမရေးပဲနဲ့ တွေးတောတတ်လာမယ်။ ဘာကြောင့်သုံးရတယ်။ ဘာကြောင့် မသုံးသင့်ဘူးလဲဆိုတာကို ဆုံးဖြတ်တတ်လာမယ်။ တနည်းပြောရင် တစ်ခုတည်းပေါ်မှာ ရူးသွပ်သွားခြင်းပဲ။ ရူးသွပ်မှု မရှိတဲ့အခါမှာ လေ့လာခြင်းဟာ ကျောင်းစာကို အလွတ်ကျက်တာနဲ့ သိပ်ပြီး ကွာခြားမှု မရှိလှသလို ပျော်ဖို့ လည်း ကောင်းလာမှာ မဟုတ်ဘူး။

တစ်ယောက်နဲ့ တစ်ယောက်လေ့လာပုံခြင်း မတူညီကျသလို တွေးတော ပုံတွေလည်း မတူညီကြပါဘူး။ သို့ပေမယ့် ကျွန်တော် လေ့လာတဲ့ နည်းလမ်းကတော့ self study လုပ်နေတဲ့သူတွေအတွက် တစ်ဖက်တစ်လုံး အထောက်အကူ ဖြစ်ပါစေလို့ မျှော်လင့်ပါတယ်ဗျာ။

8 Comments

  1. m0rRis says:

    very well . that what i wanna hear

  2. ThantThet says:

    I thought nodejs will be faster since it uses V8 which run as asm.

    1. ThantThet says:

      Yes! V8 is way faster :)


      //test.js
      var sys = require('sys')
      var s = process.uptime();

      var z = 0;
      for (x=0; x < 1000; x++) { for (y=0; y < 1000; y++) { z += x * y } } sys.puts((process.uptime() - s) / 1000) sys.puts(z)


      #test.py
      import time

      s = time.clock()
      z = 0
      for x in xrange(1000):
      for y in xrange(1000):
      z += x * y

      print time.clock() - s
      print z

      $ ./node ~/Desktop/test.js
      0.03200055399537086
      249500250000

      $ python ~/Desktop/test.py
      0.251244
      249500250000

      1. saturngod says:

        oh! you right !!! you are a man …. My code is slower because I use two Date object. process.uptime() is more faster than Date.

  3. koko says:

    အစ်ကိုပြောတဲ့ node.js အကြောင်းလေးကို သိချင်လို့ပါ။
    javascript တော့ အခြေခံလေ့လာဖူးပါတရ်။
    node.js က command line တွေနဲ့ တွဲသုံးရတာလားဗျ။
    ဖြစ်နိုင်ရင် node.js စတင်အသုံးပြုပုံလေးကို ဥပမာ လေ့ကျင့်ခန်းလေး တခုလောက်နဲ့
    အစ်ကို အရင်ရှင်းပြခဲ့သလိုပဲ ရုပ်ရှင်ဖိုင်လေးနဲ့ ရှင်းပြပေးပါလားဗျာ။
    လေးစားလျှက်

    1. saturngod says:

      you can learn from this youtube video.

  4. Pingback: Redis | Saturngod

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.