Author Archives: CalmHill

WP-MathJax Plugins

Equation တွေရေးစရာရှိတာနဲ့ Web မှာ Equation တွေ Rendar လုပ်တာကိုပြန်လိုက်ရှာဖြစ်တယ် အရင်ကတော့ Image အဖြစ်နဲ့ Rasterize လုပ်ယူပြီးတော့ပုံနဲ့ပြတယ်။ Equation ကို Define ဘယ်လိုလုပ်မလဲက Standard မဟုတ်ပေမယ့် LaTeX ဟာအသုံးအများဆုံးပါ တစ်ြခား WordPressor တွေမှာ Standard အနေနဲ့သုံးတဲ့ Markup ရယ်လို့ သတ်သတ်မှတ်မှတ်မရှိဘူး။ Web မှာ Mathematics အတွက် MathML ကို Standard သတ်မှတ်ထားတာရှိတယ် ဒါပေမယ်လို့ အခုအချိန်အထိတော့ Render လုပ်ပေးတဲ့ Browser မရှိသေးပါဘူး။

အခုနောက်ပိုင်းမှာ Image အစား Text နဲ့ရအောင် Style ကိုလုပ်ယူကြတယ် အဲဒီအထဲမှာ MathJax ဟာ Stable အဖြစ်ဆုံးဖြစ်လာတယ်။ Engineering Journal တွေဖြစ်တဲ့ IEEE, Elsevier လိုတွေမှာ MathJax ကိုစပြီးတော့သုံးလာတယ်ဆိုတော့ အတော်လေးကို Stable ဖြစ်သွားတယ်လို့ ပြောလို့ရပါတယ်။ သုံးတာကလွယ်ပါတယ် MathJax CDN ကနေပြီးတော့ JavaScript File ကို ဆွဲထည့်ပြီး Configuration ကိုရွေးရုံပါပဲ အသေးစိတ် Configure လုပ်ချင်ရင်တော့ ကိုယ်တိုင်ပဲ Configuration File တွေကိုဖြည့်ရေးရတယ်။

Markup အနေနဲ့က LaTeX ရယ် MathML ရယ် နှစ်မျိုးစလုံးလက်ခံပါတယ်။ LaTeX ဆိုရင်တော့ Shortcode အနေနဲ့ Default Configuration အတွက်က $$ နှစ်ခုကြားမှာ ရေးရင်ရတယ် MathML ကတော့ ဘာမှမလိုပါဘူး ဒီအတိုင်းပဲရေးလိုက်ရင်ရပါတယ် Configuration မှာတော့ ဘာနဲ့ရေးမယ်ဆိုတာတော့ Define လုပ်ပေးထားရတယ်။ ကျန်တဲ့ Rendaring ကတော့ MathJax Javascript တွေကနေ လုပ်သွားတာဆိုတော့ တကယ်တော့ဘာမှမလုပ်ရပါဘူး။

LaTeX

$$J_\alpha(x)=\sum\limits_{m=0}^\infty\frac{(-1)^m}{m!\,\Gamma(m+\alpha+1)}{\left({\frac{x}{2}}\right)}^{2m+\alpha}$$

Equation
$$J_\alpha(x)=\sum\limits_{m=0}^\infty\frac{(-1)^m}{m!\,\Gamma(m+\alpha+1)}{\left({\frac{x}{2}}\right)}^{2m+\alpha}$$

အားနေတာနဲ့ WordPress Plugins တစ်ခုလုပ်ထားလိုက်တယ် သူများရေးထားတာ ၂ခု ၃ခုတွေ့တယ် ဒါပေမယ့် Config တွေကို ကိုယ်သုံးချင်သလိုမရလို့ ခက်ခဲတာလည်းမဟုတ်ဆိုပြီး ရေးထားလိုက်တယ်။ တကယ်ရည်ရွယ်တာက Plugins ထဲမှာ MathJax ရဲ့ Local Library ထားပြီးတော့ ကိုယ်ပိုင် Site ထဲကပဲ JavaScript တွေကို Loading လုပ်မယ်ဆိုပြီးတော့လုပ်တာ။ ရေးပြီးတော့စမ်းတော့လည်း အလုပ်လုပ်ပါတယ် ဒါပေမယ့် WordPress ကို New Plugin အတွက် Request လုပ်လိုက်တော့ နမူနာပေးလိုက်တဲ့ Plugin ကို Size နည်းနည်းကြီးနေတယ်တဲ့ Install လုပ်လို့ရပါ့မလားဆိုပြီး Reply ပြန်လာပေမယ့် Approve လုပ်ပေးလိုက်ပြီး Svn ကို Setup လုပ်ပေးလိုက်တယ်။

MathJax အတွက် Local ကအားလုံးပေါင်းကို 15MB ရှိတယ် တကယ်က 15MB ဆိုတာအခုခေတ်အတွက်က များတယ်တော့မဟုတ်ဘူး ဒါပေမယ့် Initial Commit လုပ်တဲ့အချိန်မှာ သတိထားလိုက်မိတာက File သေးသေးလေးတွေပဲ ၄ သောင်းလောက်ပါတယ် Commit ဟာ ဘယ်လိုမှလုပ်လို့မရဘူး File ပေါင်း ၄ ထောင်လောက်ရောက်လိုက် WordPress ဘက်က Connection ကိုဖြတ်ချလိုက်နဲ့ ၅ ရက်လောက် အပိုင်းပိုင်းခွဲတင်မှ အကုန်လုံးရောက်သွားတယ် Install စမ်းလုပ်ကြည့်တော့ Download က သိပ်မကြာပေမယ့် File အများကြီးကို Extract လုပ်တဲ့အချိန်မှာ PHP တွေက Memory Limited တွေဆိုတော့ Server အတော်များများမှာ Fail ဖြစ်ပါတယ်။

Plugin’s URL

http://wordpress.org/extend/plugins/wp-mathjax/

အဲဒါနဲ့ Install လုပ်လို့မရတဲ့ဟာလည်း အပေါ်မှာဒီအတိုင်းလည်း ထားလို့ကလည်းမဖြစ် စိတ်ရှည်လက်ရှည်တင်ပြီးမှ မရတော့လည်းစိတ်ကတို ဒါပေမယ့် မဖြစ်သေးပါဘူးဆိုပြီး လတ်တလောအနေနဲ့ Local MathJax ကိုဖြုတ်ပြီးတော့ CDN ကနေတဲ့ထည့်တာကိုထားလိုက်တယ် Configuration တွေက အသေးစိတ်ဆိုရင် Inline ရယ် Local Config ထည့်တာရယ် ကျန်နေသေးတယ် အဲဒါလည်းနောက်ထပ် Version မှပဲထည့်ရတော့မယ် Local အတွက်ကလည်း လက်မလျော့သေးပါဘူး သက်ဆိုင်ရာ Config တစ်ခုချင်းအလိုက် Archive လုပ်ထားပြီး Plugin ထဲကနေ Install လုပ်ချင်မှပဲ ဆွဲယူပြီးထည့်မယ်လို့တော့ စဉ်းစားထားတယ် နောက်မှပဲဖြည့်တော့မယ် Document တွေလည်း အသေအချာမရေးရသေးပါဘူး။ အသုံးတည့်တယ်ဆိုရင်တော့ စမ်းကြည့်လို့ရပါတယ် ဒါပေမယ့် Equation ဆိုတော့ လူအများစုကတော့ သိပ်အသုံးတည့်မယ်တော့ မဟုတ်လောက်ဘူး။

How to Build a Working Digital Computer

From: http://www.evilmadscientist.com/2013/paperclip/

How to Build a Working Digital Computer

Evil Mad Scientist ကနေ Edward Alcosser, James P. Phillips, Allen M.Wolk တိုရေးတဲ့ How to Build a Working Digital Computer ဆိုတဲ့ စာအုပ်တစ်အုပ် ရှာလို့တွေ့တယ်။ ဖတ်ကြည့်တာအတော်လေး စိတ်ဝင်စားဖို့ကောင်းပါတယ် Archive တွေထဲကရှာလို့တွေ့တော့ ခိုးတယ်လို့လည်းမဖြစ်တဲ့အတွက် စိတ်ဖြောင့်လက်ဖြောင့် ဖတ်လို့ရပါတယ်။ အတော်လေးတော့ ဟောင်းနေပါပြီ ၁၉၆၇ ခုနှစ်မှာ ပုံနှိပ်တယ်ဆိုတော့ ကွန်ပျူတာအတွက်တော့ အတော်ကိုစောသေးတဲ့ ကာလတစ်ခုလို့ပြောရမယ်။

Chapter အနေနဲ့ ၇ ခန်းခွဲထားတယ် Chapter 1 မှာ Digital Computer အကြောင်း Introduction ပါတယ်။ Chapter 2 မှာက Number System တွေအကြောင်း အသေအချာပါတယ် Encoding and Decoding, Encoder and Decoder တွေကို Paper Clips တွေနဲ့ Switch တွေလုပ်ရတာ အတော်လေး စိတ်ဝင်စားစရာ ကောင်းပါတယ်။ Chapter 3 မှာက Digital Logic တွေအကြောင်း Turth Table ကနေ De Morgan’s Law အထိပါတယ်။ Digital Logic တွေကို Switch On/Off တွေနဲ့ Example တွေကို ပိုပြီးတော့ သဘောကျတယ်။

Chapter 4 မှာက Arithmetic အကြောင်း Basic ALU တစ်ခုကို DPDT နဲ့ SPST switch တွေသုံးပြီးလုပ်ပြထားတယ်။ Chapter 5 က Storage အကြောင်း Magnetic core memory နဲ့ Drum Memory ကို လုပ်ပြထားတယ် စိတ်ဝင်စားရင် ကောင်းပါတယ် ဒါပေမယ့် ဘယ်လိုမှမရှိတော့တဲ့ Example တွေဖြစ်သွားတော့ သိပ်ပြီးတော့လည်း အသုံးမတည့်ဘူးပြောရင်လည်းရပါတယ်။ Chapter 6 ရဲ့ Control အခန်းကတော့ စိတ်ဝင်စားစရာကောင်းပါတယ် ဘယ်လောက်ပဲခေတ်မှီလာတယ်ပြောပြော Processor ရဲ့ Instruction တွေအခြေခံ အလုပ်လုပ်တဲ့ပုံက အတူတူပါပဲ။

Chapter 6 ပြီးရင် Computer တစ်လုံးရပြီဖြစ်တဲ့အတွက် Program စပြီးတော့ ရေးလို့ရပြီ Chapter 7 အတွက်က Control မှာသတ်မှတ်ထားတဲ့ Instruction တွေနဲ့ Arithmetic Processing တွေ Storage တွေကို Access လုပ်ပြတယ် High level language တွေရဲ့ခေတ်မဟုတ်သေးတော့ Programming Language တွေရဲ့ Concept တွေတော့မပါလာသေးဘူး Low Level Language အနေနဲ့ပဲ တိုက်ရိုက်ခိုင်းပါတယ်။ နမူနာပြထားတဲ့ Algorithm တွေဟာ စိတ်ဝင်စားစရာကောင်းပါတယ်။

တစ်ခါက The Elements of Computing Systems (Nand to Tetris) ဆိုတဲ့စာအုပ်အကြောင်း ရေးခဲ့ဖူးတယ် ပြန်ယှဉ်ကြည့်မယ်ဆိုရင် Nand to Tetris ဟာ How to Build a Working Digital Computer ကို ခေတ်မှီအောင် ဖြည့်စွက်ထားတယ်လို့ ယူဆလို့ရပါတယ်။ Nand to Tetris မှာ Operating System, Programming Language ဆိုပြီးတော့ ဖြည့်စွက်ပြီးတော့ပါလာတယ် Physical Hardware တည်ဆောက်ရတာ တကယ်တော့ မလွယ်ပါဘူး အဲဒီ့အတွက် Nand to Tetris မှာသုံးတဲ့ Simulator တွေက Concept ပဲလေ့လာဖို့အတွက်ဆို ပိုပြီးတော့ထိရောက်တယ်။ ဒါပေမယ့် Hardware Specic သမားအတွက်ဆိုရင်တော့ How to Build a Working Digital Computer ရဲ့ Paper Clip Circuit တွေဟာ တကယ်ပဲ စိတ်ဝင်စားဖို့ကောင်းပါတယ်။ ကျောင်းသားဘဝ လေ့လာနေတဲ့အချိန် အချိန်လည်းရှိတဲ့အရွယ်ဆို ဖတ်လို့ကောင်းတဲ့ စာအုပ်ပါပဲ။

Ebook
http://archive.org/details/howtobuildaworkingdigitalcomputer_jun67

Reference
http://www.evilmadscientist.com/2013/paperclip/

AWS EBS Snapshot

Blog လေးအရင်တစ်ပါတ်ထဲက နည်းနည်းပြဿနာတက်သွားတယ်။ တိုက်တိုက်ဆိုင်ဆိုင် အရင်တစ်ပါတ်ထဲက Server Upgrade လုပ်လိုက်မိပြီး Restart လုပ်ပြီးတဲ့နောက် Server ကပြန်မတက်လာတော့ဘူး။ Upgrade မှာတစ်ခုခုပြဿနာတက်တယ် ထင်လိုက်မိတယ် နောက်မှရှင်းမယ်ဆိုပြီး Server တစ်ခုထပ်ပြီးတော့လုပ် Database Backup ကို Restore လုပ်ပြီး IP ကိုပြောင်းထားလိုက်တော့ Blog ကတော့ ကြာကြာ Down မသွားလိုက်ဘူး။ Server အဟောင်းကို ပြန်စစ်မယ်ဆိုပြီး Stop လုပ်တဲ့အချိန်ကြမှ Server ရပ်လို့မရတော့ဘူး Force Stop လုပ်လည်းမရ အဲဒီတော့မှ တစ်ခုခုတော့မှားနေပြီဆိုတာ သိလိုက်တော့တယ်။ အဲဒါနဲ့ Amazon ကိုသွားပြော Amazon ကလူကလည်း Hardware တစ်ခုခုဖြစ်နေတယ် ကြည့်ပေးပါ့မယ်ဆိုပြီးပြောပြီး ခဏနေတော့ Server ပြန်ပြီးတော့အလုပ်လုပ်တယ်။

ခဏ Down သွားတဲ့အချိန်မှာ သတိထားလိုက်မိတာက Database Backup တစ်ခုပဲရှိရင် Server ကို Restore လုပ်ရတာ ထင်သလောက်တော့ မမြန်ပါဘူး Software Install ပြန်လုပ်ရတယ် Site ကိုပြန်တင်ရတယ် Theme တွေကလည်း Customize လုပ်ထားတော့ အဲဒါတွေလိုက်ပြင်ရတာလည်း အတော်လေးကြာပါတယ်။ အဲဒီတော့ Site တွေကိုပါ Backup လုပ်ထားမှပဲ အမြန်ဆုံးအနေနဲ့ Restore လုပ်လို့ရလိမ့်မယ် ဒါတောင်မှ Software Installation & Configuration တွေကအချိန်ပေးရဦးမှာပါ။ အလွယ်ဆုံးနည်းက EBS Volume ကို Snapshot လုပ်ထားတာရှိရင် Snapshot ကနေ Volume တစ်ခုအသစ်ပြန်လုပ်ပြီး Instance တစ်ခုပြန်လုပ်ပြီး Elastic IP ကိုပြောင်းလိုက်တာက အမြန်ဆုံးနည်းဖြစ်လိမ့်မယ် အချိန် ၁၀မိနစ် ၁၅မိနစ် အတွင်းမှာပြီးနိုင်သလို ဘာမှလည်းစဉ်းစားစရာမလိုဘူး။

ပြဿနာက AWS မှာ EBS Volume Snapshot က Automated လုပ်လို့မရသေးဘူး ကိုယ်ကလည်းအဲဒီအထဲက ဝင်ဖြစ်တာမဟုတ်တော့ စိ်တ်ကူးပေါက်တဲ့အချိန် ဝင်ဝင်ပြီတော့ Manual Snapshot လုပ်ဖို့ဆိုတာက တကယ်ကမလုပ်ဖြစ်သလောက်ပဲ အဲဒါနဲ့ Snapshot ကို Automated လုပ်ဖို့နည်းနည်းစဉ်းစားရတယ် တကယ်ကတော့ API တွေကရှိပြီးသားပါ ရေးမယ်ဆိုရင်တော့ ခက်ခက်ခဲခဲအလုပ်လည်းမဟုတ်ပါဘူး။ Server Down သွားပြီးနည်းနည်း အလုပ်ရှုပ်သွားတော့ ပျင်းနေလို့မဖြစ်ပါဘူးဆိုပြီး Python နဲ့ Boto ကိုသုံးပြီးတော့ Snapshot လုပ်ဖို့အတွက် Script တစ်ခုရေးပြီးတော့ Crontab နဲ့ တစ်ပါတ်တစ်ခါ Automate လုပ်ထားလိုက်တယ်။

Script

#!/usr/bin/env python
import boto.ec2
import collections
 
# Constants
aws_access_key = 'AWS Access Key'
aws_secret_key = 'AWS Secret Key'
#AWS Regions
# us-east-1 (N. Virginai)
# us-west-1 (Oregon)
# us-west-2 (N. California)
# eu-west-1 (Ireland)
# ap-southeast-1 (Singapore)
# ap-northeast-1 (Tokyo)
# ap-southeast-2 (Sydney)
# se-east-1 (Sao Paulo)
aws_region = 'ASW Region' 
aws_volume_id = 'vol-volumeid'
max_snapshot = 5
 
# Connect to AWS
con = boto.ec2.connect_to_region(aws_region, aws_access_key_id=aws_access_key, aws_secret_access_key=aws_secret_key)
 
# Create Snapshot
print 'Creating snapshot of volume:', aws_volume_id
new_snapshot = con.create_snapshot(aws_volume_id, 'Automated Snapshot')
print 'Started creating snapshot:', new_snapshot.id
 
# Get snapshot list
snapshot_raw = con.get_all_snapshots(filters={'volume-id': aws_volume_id})
 
# Un-ordered List
snapshot_list = {}
for snapshot in snapshot_raw:
	snapshot_list[snapshot.start_time]=snapshot.id
 
# Sort by Date
snapshots = collections.OrderedDict(sorted(snapshot_list.items()))
 
# Delete the oldest snapshot
if len(snapshots.keys())>max_snapshot:
	oldest_snapshot_id = snapshots[snapshots.keys()[0]]
	print 'Deleting snapshot:', oldest_snapshot_id
	con.delete_snapshot(oldest_snapshot_id)
	print 'Finish deleting snapshot'

Repository

https://github.com/yelinkyaw/aws-ebs-snapshot

EBS S3 Snapshot တွေက တကယ်တော့ Incremental ဆိုတော့ ပြန်ပြီးတော့ အဟောင်းတွေကို ဖျက်စရာမလိုပါဘူး ဒါပေမယ့် အများကြီးမထားချင်တော့ ၁ လစာလောက်တော့ ချန်ထားပြီးတော့ အရမ်းကြာသွားတာတွေကို ဖျက်လိုက်တယ်။ S3 Snapshot စျေးက 1GB ကို Singapore Region မှာဆိုရင် 0.095$ ဆိုတော့ အဲဒီလောက်ကပေးနိုင်ပါတယ် ကိုယ်သုံးနေတဲ့ Data Size ကအလွန်ဆုံး 2GB တောင်မပြည့်ဘူး Snapshot တစ်လစာချန်ထားလည်း တစ်လတစ်လလည်း Data Changes က ဘယ်လောက်ရှိနိုင်မလဲ အဲဒီတော့ Data Size ကသိပ်မကွာပါဘူး တစ်လကိုအလွန်ဆုံးပေးရ 0.5$ လောက်ပါပဲ။

တစ်စုံတစ်ရာ အမှားအယွင်းရှိခဲ့ရင် AWS Keys တွေဟာ အရေးကြီးပါတယ် ကိုယ်သုံးတဲ့ Amazon Account ရဲ့ Keys တွေဖြစ်နေရင် အကုန်လုပ်လို့ရသွားလိမ့်မယ် အဲဒီတော့ Amazon Account က Keys တွေကို မသုံးတာကောင်းတယ် အကောင်းဆုံးနည်းက AWS IAM ထဲကနေ Account တစ်ခု Create လုပ်ပြီး EBS Snapshot အတွက်ပဲ Permission ပဲပေးပြီးတော့ အဲဒီ Account ရဲ့ Keys တွေနဲ့လုပ်တာစိတ်ချရတယ်။ ဘလော့အတွက်ပဲ ရည်ရွယ်ပြီးရေးလိုက်တော့ Volume တစ်ခုအတွက်ပဲ Snapshot လုပ်လို့ရတယ် တစ်ခုထက်ပိုတဲ့ Volume တွေအတွက်ဆို နည်းနည်းပြင်ရေးရမယ် Script ထဲမှာပဲ Array နဲ့ပြင်ရေးလည်းရတယ် ဒါမှမဟုတ်အပြင်မှာ Config File တစ်ခုထားပြီးတော့ ဖတ်ရင်လည်းရတယ်။ နောက်တစ်ခုက Snapshot က Process လုပ်ချိန်ကြာပါတယ် ချက်ချင်းမပြီးတော့ ပြီးသွားတဲ့အချိန်မှာ SNS နဲ့ Notification တစ်ခုခုလုပ်ပေးနိင်ရင် အဆင်ပြေလိမ့်မယ် အားတဲ့အချိန်မှဖြည့်ရေးရမယ်။