Oakword Dictionary
January 22, 2020
(၂၀၂၀) သြဂုတ်လ ၁၉ ရက်ကစပြီးရင် oakword.tech ဒိုမိန်းက သုံးလို့ရတော့မှာမဟုတ်ပါဘူး။ တစ်လ (၅)ဒေါ်လာ ပေးရတဲ့ droplet ခနဲ့၊ တစ်နှစ်စာပြည့်သွားတဲ့ ဒိုမိန်းကြေးကို ဆက်မပေးချင်တော့တာကြောင့်ပါ။ ပြီးတော့ ကိုယ်လေ့လာချင်တဲ့ အပိုင်းတွေကိုလည်း လေ့လာပြီးသွားပြီလို့ ထင်တဲ့အတွက် droplet ကိုလည်း destroy လိုက်ပါပြီ။ source code ကတော့ github မှာ ဆက်ရှိနေပါမယ်။
အရင်နှစ် နိုဝင်ဘာ လဝက် လောက်မှာ ထင်တယ်၊ DigitalOcean ကိုစစမ်းသုံး ဖြစ်တယ်။ သူဘယ်လို အလုပ်လုပ်တယ်ဆိုတာတွေ သိပြီးတာတော့ ကြာပြီ။ သူများ ဘလော့ တွေဖတ်ရင်လည်း သူ့ကောင်းကြောင်းတွေ အမြဲတမ်း တွေ့ရတာဆိုတော့ ရင်းနှီးနေတာတော့ ကြာပြီ။ မှတ်မှတ်ရရ လွန်ခဲ့တဲ့ နှစ်နစ်လောက်က nodeJS စလုပ်တော့ hosting တွေလိုက်ရှာရင်း တွေ့ဖူးတယ်။ ဒါပေမယ့် ပိုက်ဆံပေးရတယ် ဆိုတော့ လက်ရှောင်ပြီး free ရတဲ့ heroku ပဲသုံးဖြစ်တယ်။ ပြီးတော့ payment က JCB ပေးလို့ရတယ်ဆိုတာကို မသိတာလည်းပါတယ်။ ကိုယ့်မှာ credit card မရှိတော့ မရဘူးထင်ပြီး စိတ်မဝင်စားတော့ပဲ ထားလိုက်တော့တာ။ တလောကမှ ပြန်ကြည့်ရင်း JCB ရတာသွားတွေ့တော့ account ဖွင့်ဖြစ်သွားတာ။
ကိုယ်က နဂိုကတည်းက linux သုံးတာဆိုတော့ droplet တွေစမ်းကြည့်ဖို့ အခက်အခဲတော့ မရှိဘူး။ ဒါပေမယ့် account ဖွင့်ပြီးတော့လည်း သုံးစရာက မရှိဘူးလေ။ လုပ်လက်စ ပရောဂျက် ဆိုတာလည်း မရှိတော့ တစ်ခုခုစလုပ်ဖို့ ကောင်းမယ်ဆိုပြီး စဉ်းစားမိတယ်။ ကိုယ်လောလောဆယ် လေ့လာချင်ပေမယ့် မလေ့လာဖြစ်သေးတဲ့ stack တွေအားလုံး ထည့်သုံးလို့ရမယ့် ပရောဂျက်တစ်ခု စသင့်တယ်လို့ ထင်တယ်။ အဲ့တော့ ကိုယ်စမ်းလုပ်ကြည့်ချင်တဲ့ ဟာတွေကို ချရေးကြည့်ဖြစ်တယ်။
- Linux Web Server
- NGINX
- MongoDB
- Fastify
- Redis
- Svelte
နောက်ဆုံးတော့ Dictionary Web Application တစ်ခုရေးမယ်ဆိုပြီး စဉ်းစားမိသွားတယ်။ ကို Saturngod ရဲ့ Ornagai v3 က ဒေတာတွေကို MongoDB ထဲကို import လုပ်မယ်။ ပြီးရင် fastify ကိုသုံးပြီး API နဲ့ Backend ကို ရေးမယ်။ API အတွက် server side caching ကို Redis နဲ့လုပ်မယ်။ ပြီးရင်တော့ ဒိုမိန်းတစ်ခုဝယ်ပြီး ချိတ်ထားလိုက်ရင် အဆင်ပြေပြီ ဆိုပြီး စဉ်းစားမိသွားတာ ဆိုပါတော့။ အဲ့လိုနဲ့ပဲ Oakword Dictionary ဆိုပြီးလုပ်ဖြစ်သွားတာ။
ကိုယ်က ပုံမှန် static sites တွေပဲရေးခဲ့ဖူးတာ ဆိုတော့ nodeJS နဲ့ server side ပရောဂျက် တစ်ခုလောက် ရေးပြီး deploy လုပ်ကြည့်ချင်စိတ်တော့ ရှိတယ်။ နဂိုတုန်းကတော့ Express နဲ့ဖြစ်ဖြစ်၊ Adonis နဲ့ဖြစ်ဖြစ်ရေးမယ်လို့ စိတ်ကူးထားပေမယ့် ပုံမှန် API အတွက် code base ငယ်ငယ်လေးပဲဆိုတော့ တခြား factor တွေထက် performance ကိုပိုပြီး ဦးစားပေးစဉ်းစားသင့်တယ်လို့ ထင်တဲ့အတွက် အမြန်ဆုံးဆိုတဲ့ Framework တွေကို ရွေးကြည့်ဖြစ်တယ်။ Polka နဲ့ Fastify ထဲက တစ်ခုခုကို ရွေးရမယ်ဆိုတော့ community manintained လည်းဖြစ်၊ Lightweight လည်းပိုဖြစ်တဲ့Polka ကို သဘောကျပေမယ့် Redis နဲ့ Integration အတွက်ဆိုရင် ပိုပြီး သက်တမ်းရင့်တဲ့ Fastify ကပိုအဆင်ပြေမယ်လို့ ထင်တဲ့အတွက် Fastify ကိုပဲ ရွေးဖြစ်တယ်။
API ရေးနေရင်းနဲ့ တစ်ခုစဉ်းစားမိတာက အခုလောလောဆယ်မှာ English to Myanmar ရော Myanmar to English ရော အဘိဓာန် ဒေတာတွေကို Public API လုပ်ထားတာမျိုး မရှိသေးဘူးလို့ (ကျွန်တော် မသိတာလည်း ဖြစ်နိုင်ပါတယ်)။ အဲ့တော့ လုပ်လက်စနဲ့ Public API Source တစ်ခု အဖြစ်ပါလုပ်မယ်ဆိုပြီး ဆုံးဖြတ်ခဲ့ပါတယ်။Access-Control-Allow-Origin ကို * အဖြစ်ပြောင်းထားတာကလွဲရင် ဘာမှလည်း လုပ်စရာပိုသွားတာ မဟုတ်ဘူးလေ။ အဲ့လိုနဲ့ပဲ Backend ရေးပြီးသွားတယ်ပဲဆိုပါတော့။ ပြဿနာကတော့ ကိုယ့်စက်ထဲမှာ MongoDB နဲ့ Redis က ရပ်ရပ်သွားပြီး ပြန်စလို့မရဘဲ စက်ကို restart ချချပစ်ရတာမျိုးတော့ရှိတယ်။ ဒါပေမယ့် droplet ထဲမှာ သုံးတော့ ဘာပြဿနာမှ မဖြစ်ဘူး။ ubuntu အချင်းချင်းပဲကို တစ်ခါတစ်ခါ ဘာဖြစ်မှန်းမသိဘူး။ ဗားရှင်းကွာတာပဲထင်ပါရဲ့။ droplet က 18 နဲ့ ကိုယ့်စက်က LTS မဟုတ်သေးတဲ့ 19.04 လေ။
FrontEnd ပိုင်းကိုလည်း နဂိုစဉ်းစားထားတဲ့အတိုင်း svelte နဲ့ပဲရေးဖြစ်တယ်။ တစ်ခါမှ မရေးဘူးတာဖြစ်တဲ့အတွက် learn လုပ်ရင်းရေးရမှာဆိုတော့ နည်းနည်းကြာမယ်ထင်ပေမယ့် ရေးကြည့်တော့မှ တစ်ခြားစီပဲ။ ရေးရတဲ့ပုံစံက vue နဲ့ တော်တော်လေး ဆင်တာကိုတွေ့ရတယ်။ Documentation ကလည်း vue နည်းပါး ကောင်းပါတယ်။ မြန်မြန်ဆန်ဆန်ပဲ ရေးပြီးသွားတယ်။ ကိုယ်က ပုံမှန် React ရေးနေတဲ့သူဖြစ်တဲ့အတွက် Tooling ကတော့ သိပ်အားမရဘူး။ React မှာဆို project configuration မှာရော၊ autocomplete၊ auto-import၊ linting၊ prettier စသဖြင့် တော်တော်လည်း ပြည့်စုံတဲ့ ခံစားချက်မျိုးကို ဘယ် frontend framework မှာမှ မရဘူး။ ဒါကတော့ personal preference နဲ့လည်း ဆိုင်ကောင်းဆိုင်နိုင် ပါလိမ့်မယ်။ ကျွန်တော်ကိုယ်တိုင်လည်း competetive programming ပြိုင်ပွဲတစ်ခုမှာ autocomplete တွေ၊ autosuggestion တွေမပါတဲ့ code editor တွေက ပိုပြီး စိတ်ရှုပ်ရသက်သာတယ်ဆိုတာကို ကိုယ်တွေ့ ကြုံဖူးပါတယ်။ သို့ပေငြား React တို့ Flutter တို့လို UI code တွေရေးတဲ့နေရာမှာတော့ autocomplete တွေ၊ autosuggestion တွေက တော်တော်လေး အကျိုးပြုတာလည်း ကိုယ်တွေ့ပါပဲ။
ဒေတာ တွေကိုတော့ robomongo သုံးပြီး import လုပ်ပါတယ်။ မှတ်မှတ်ရရ ဒေတာတွေကို import လုပ်ပြီးတော့ secure ပိုဖြစ်အောင်ဆိုပြီး ufw ကို ကိုယ့် IP ကလွဲလို့ အကုန် deny လုပ်လိုက်ပါတယ်။ အဲ့ဒီမှာ ပြဿနာ စတာပါပဲ။ ufw ကို မည်ကဲ့သို့လုပ်လိုက်သည်မသိ ssh အတွက်ပါ deny လုပ်မိသွားပါတယ်။ droplet ကို ဘယ်ကနေမှ access လုပ်လို့မရတော့ပါဘူး။
ကံကောင်းချင်တော့ digitalocean က website ကနေ access လုပ်ဖို့ console တစ်ခုပေးထားပါတယ်။ အဲ့ console ကနေမှ ufw ကို ssh allow လုပ်ရတယ်။ အကုန်လုံးပြင်ဆင်ပြီးသွားပြီ ဆိုတော့မှ NGINX ကို setup လုပ်ရပါတယ်။ DigitalOcean community tutorials တွေအကူအညီနဲ့ အချိန်သိပ်မယူလိုက်ရပါဘူး။ SSL အတွက်ကတော့ free ရတဲ့ certbot ပဲသုံးလိုက်တယ်။
နောက်ဆုံးမှ Backend ရော Frontend ပါ server နှစ်ခုလုံးကို PM2 နဲ့ run ထားလိုက်တယ်။ အခု oakword.tech မှာ တိုက်ရိုက် စမ်းသပ် အသုံးပြုလို့ရပါပြီ။ source code ကိုတော့ github မှာ တင်ပေးထားပါတယ်။ API ကိုလည်း အင်္ဂလိပ်လိုရော၊ မြန်မာလိုပါ သုံးလို့ရပါတယ်။
curl https://api.oakword.tech/word/google
curl https://api.oakword.tech/word/ကြောင်
မြန်မာလို ခေါ်ရင်တော့ document ရှိသလောက် ပြည့်ပြည့်စုံစုံ မထွက်လာသေးတာမျိုးတော့ရှိတယ်။ side project အနေနဲ့လုပ်တာဖြစ်တဲ့အတွက် အရမ်းတော့ အာရုံထားမလုပ်ဖြစ်ဘူး။ နောက်ပိုင်းတော့ အချိန်ရရင် တဖြည်းဖြည်းပြင်သွားဖို့တော့ရှိပါတယ်။