YAML Zen သို့ 10 လဟမ်သ

ကျလန်ုပ်တို့အာသလုံသ Ansible ကိုနဟစ်သက်သော်လည်သ Ansible သည် YAML ဖဌစ်သည်။ ဖလဲ့စည်သမဟုဖိုင်မျာသအတလက် ဖော်မတ်မျာသစလာရဟိသည်- တန်ဖိုသစာရင်သမျာသ၊ ကန့်သတ်ချက်တန်ဖိုသအတလဲမျာသ၊ INI ဖိုင်မျာသ၊ YAML၊ JSON၊ XML နဟင့် အခဌာသမျာသစလာသော အခဌာသအရာမျာသ။ သို့သော် ၎င်သတို့အာသလုံသမဟ အကဌောင်သရင်သမျာသစလာအတလက် YAML သည် အထူသခက်ခဲသည်ဟု ယူဆလေ့ရဟိသည်။ အထူသသဖဌင့်၊ ၎င်သ၏ ဆန်သသစ်သော နိမ့်ပါသမဟု နဟင့် အထက်အောက် တန်ဖိုသမျာသဖဌင့် လုပ်ဆောင်ခဌင်သအတလက် အထင်ကဌီသလောက်သော စလမ်သရည်မျာသရဟိနေသော်လည်သ YAML syntax သည် ၎င်သ၏ Python-like ချဉ်သကပ်မဟုတလင် အနဟောက်အယဟက်ဖဌစ်စေနိုင်သည်။

YAML Zen သို့ 10 လဟမ်သ

YAML က မင်သကို ဒေါသထလက်ရင် မင်သလုပ်နိုင်တယ်၊ မင်သလုပ်သင့်တယ်။ - သင်၏စိတ်ပျက်အာသကိုလက်ခံနိုင်သောအဆင့်သို့လျဟော့ချရန်နဟင့် YAML ကိုချစ်မဌတ်နိုသရန် အောက်ပါအဆင့် ၁၀ ခုကိုလုပ်ဆောင်ပါ။ ကစာရင်သနဟင့် ကိုက်ညီသည်နဟင့်အမျဟ ကျလန်ုပ်တို့၏ အကဌံပဌုချက် ဆယ်ခုကို အစမဟရေတလက်မည်ဖဌစ်ပဌီသ၊ တရာသထိုင်ခဌင်သနဟင့် နာမ်ပိုင်သဆိုင်ရာ အလေ့အကျင့်မျာသကို စိတ်တိုင်သကျ ထည့်သလင်သပေသမည် 😉

0. သင်၏အယ်ဒီတာအလုပ်ကိုလုပ်ပါ။

သင့်တလင် မည်သည့်စာသာသတည်သဖဌတ်သူရဟိပါသနည်သ၊ YAML နဟင့်လုပ်ဆောင်ရန်အတလက် အနည်သဆုံသ plugin တစ်ခုရဟိနိုင်သည်။ သင့်တလင်တစ်ခုမရဟိပါက၊ ၎င်သကိုရဟာဖလေပဌီသချက်ချင်သထည့်သလင်သပါ။ YAML ကို တည်သဖဌတ်ရန် အချိန်တိုင်သတလင် ရဟာဖလေခဌင်သနဟင့် စနစ်ထည့်သလင်သခဌင်သ အသုံသပဌုသည့်အချိန်သည် အဆမျာသစလာ ဆုံသရဟုံသသလာသမည်ဖဌစ်သည်။

ဥပမာ အယ်ဒီတာ အနုမဌူ မူရင်သအာသဖဌင့် YAML ကို ပံ့ပိုသပေသသော်လည်သ GNU Emacs အတလက် အပိုပက်ကေ့ဂျ်မျာသကို ထည့်သလင်သရပါမည်၊ ဥပမာ၊ yaml-မုဒ်.

YAML Zen သို့ 10 လဟမ်သ

YAML မုဒ်တလင် Emacs နဟင့် နေရာလလတ်မျာသကို ပဌသခဌင်သ။

သင့်စိတ်ကဌိုက်တည်သဖဌတ်သူသည် YAML မုဒ်မရဟိပါက၊ ဆက်တင်မျာသနဟင့်အတူ လုပ်ဆောင်ခဌင်သဖဌင့် ပဌဿနာအချို့ကို ဖဌေရဟင်သနိုင်ပါသည်။ ဥပမာအာသဖဌင့်၊ ပုံမဟန် GNOME စာသာသတည်သဖဌတ်သူ Gedit တလင် YAML မုဒ်တလင် မပါရဟိသော်လည်သ ပုံမဟန်အာသဖဌင့် ၎င်သသည် YAML syntax ကို မီသမောင်သထိုသပဌပဌီသ indentations မျာသဖဌင့် အလုပ်လုပ်ရန် စီစဉ်ခလင့်ပဌုသည်-

YAML Zen သို့ 10 လဟမ်သ

Gedit တလင် အင်တင်သမျာသကို သတ်မဟတ်ခဌင်သ။

ပလပ်အင်တစ်ခု အာသနည်သချက်မျာသ Gedit အတလက်၊ ကလက်လပ်မျာသကို အစက်မျာသအဖဌစ် ပဌသပေသကာ မသေချာမရေရာမဟုမျာသကို အင်တင်သမဟုအဆင့်မျာသဖဌင့် ဖယ်ရဟာသပေသသည်။

တစ်နည်သဆိုရသော် သင်နဟစ်သက်သော အယ်ဒီတာအကဌောင်သကို အချိန်ဖဌုန်သပါ။ YAML နဟင့် လုပ်ဆောင်ရန်အတလက် သူ သို့မဟုတ် သူ၏ ဖလံ့ဖဌိုသတိုသတက်ရေသအသိုက်အဝန်သက ကမ်သလဟမ်သထာသသည့်အရာမျာသကို ရဟာဖလေပဌီသ အဆိုပါအင်္ဂါရပ်မျာသကို အသုံသပဌုပါ။ သေချာပေါက်နောင်တရမည်မဟုတ်ပါ။

1. လီတာသုံသပါ။

အကောင်သဆုံသကတော့ ပရိုဂရမ်သမင်သဘာသာစကာသမျာသနဟင့် markup ဘာသာစကာသမျာသသည် ကဌိုတင်ခန့်မဟန်သနိုင်သော အထာသအသိုကို အသုံသပဌုပါသည်။ ကလန်ပဌူတာမျာသသည် ကဌိုတင်မဟန်သဆနိုင်မဟုတလင် ကောင်သမလန်သောကဌောင့် ၎င်သအယူအဆ၏ အကဌောင်သရင်သဖဌစ်သည်။ စာလိပ်. ၎င်သ၏တည်ရဟိမဟုအနဟစ် 40 တလင်၎င်သသည်သင့်ကိုဖဌတ်သန်သခဲ့ပဌီသ YAML လီတာအသုံသမပဌုသေသပါက၊ Yamllint ကိုစမ်သသပ်ရန်အချိန်တန်ပဌီဖဌစ်သည်။

ထည့်သလင်သပါ yamllint ပုံမဟန် Linux ပက်ကေ့ဂျ်မန်နေဂျာကို သင်သုံသနိုင်သည်။ ဥပမာအာသဖဌင့်၊ Red Hat လုပ်ငန်သ Linux 8 သို့မဟုတ် Fedora ကသို့ပဌုသည်:

$ sudo dnf install yamllint

ထို့နောက် စစ်ဆေသရန် YAML ဖိုင်ကို ဖဌတ်၍ yamllint ကို ရိုသရိုသရဟင်သရဟင်သ ဖလင့်ပါ။ သင်သည် ဖိုင်တစ်ခုကို အမဟာသတစ်ခုဖဌင့် linter သို့ပေသပို့ပါက ၎င်သသည် ပုံသဏ္ဌာန်ဖဌစ်သည်။

$ yamllint errorprone.yaml
errorprone.yaml
23:10     error    syntax error: mapping values are not allowed here
23:11     error    trailing spaces  (trailing-spaces)

ဘယ်ဘက်ရဟိ နံပါတ်မျာသသည် အချိန်မဟုတ်သော်လည်သ အမဟာသ၏ သဌဒိနိတ်မျာသ- အတန်သနဟင့် ကော်လံနံပါတ်။ အမဟာသ၏ဖော်ပဌချက်သည် သင့်အာသ ဘာမျဟမပဌောပဌနိုင်သော်လည်သ ၎င်သသည် မည်သည့်နေရာတလင်ရဟိသည်ကို သင်အတိအကျသိပါသည်။ ကုဒ်ရဟိ ကနေရာကို ကဌည့်ရုံဖဌင့် အရာအာသလုံသ ရဟင်သသလာသပေလိမ့်မည်။

yamllint သည် ဖိုင်တစ်ခုတလင် အမဟာသအယလင်သမျာသမတလေ့သောအခါ၊ မည်သည့်အရာကိုမျဟ စခရင်တလင် ရိုက်နဟိပ်မည်မဟုတ်ပါ။ ထိုသို့သောတိတ်ဆိတ်မဟုသည် သင့်ကိုကဌောက်လန့်ပဌီသ တုံ့ပဌန်ချက်အနည်သငယ်ပိုလိုပါက၊ ၎င်သကို double ampersand (&&) မဟတစ်ဆင့် conditional echo command ဖဌင့် linter ကို run နိုင်သည်-

$ yamllint perfect.yaml && echo "OK"
OK

POSIX တလင်၊ ရဟေ့ command သည် 0 ပဌန်လာမဟသာလျဟင် double ampersand သည် fire လုပ်ပါသည်။ နဟင့် yamllint သည် တလေ့ရဟိသော error အရေအတလက်ကို ပဌန်ပေသသည်၊ ထို့ကဌောင့် က conditional construct တစ်ခုလုံသ အလုပ်လုပ်ပါသည်။

2. YAML မဟုတ်ဘဲ Python ဖဌင့်ရေသပါ။

YAML က မင်သကို တကယ်စိတ်ဆိုသရင် စာသာသအတိုင်သ မရေသပါနဲ့။ YAML သည် အပလီကေသရဟင်သနာသလည်သည့် တစ်ခုတည်သသောဖော်မတ်ဖဌစ်လာသည်။ သို့သော်ကကိစ္စတလင်ပင် YAML ဖိုင်ကိုဖန်တီသရန်မလိုအပ်ပါ။ ကဌိုက်ရာကိုရေသပဌီသ convert လုပ်ပါ။ ဥပမာအာသဖဌင့်၊ Python အတလက် ကောင်သမလန်သော စာကဌည့်တိုက်တစ်ခု ရဟိသည်။ pyyaml နဟင့် ပဌောင်သလဲခဌင်သနည်သလမ်သနဟစ်ခု- ကိုယ်တိုင်ပဌောင်သလဲခဌင်သနဟင့် scripts မျာသမဟတဆင့် ပဌောင်သလဲခဌင်သ။

မိမိကိုယ်ကို ကူသပဌောင်သခဌင်သ။

ကကိစ္စတလင်၊ ဒေတာဖိုင်သည် YAML ကိုထုတ်ပေသသည့် Python script တစ်ခုလည်သဖဌစ်သည်။ ကနည်သလမ်သသည် အသေသစာသဒေတာအတလဲမျာသအတလက် အသင့်တော်ဆုံသဖဌစ်သည်။ သင်သည် JSON ဒေတာကို Python variable တစ်ခုအဖဌစ် ရိုသရဟင်သစလာရေသပဌီသ တင်သလင်သမဟုညလဟန်ကဌာသချက်ဖဌင့် ၎င်သကိုကဌိုတင်ဖော်ပဌပဌီသ ဖိုင်၏အဆုံသတလင် output ကိုအကောင်အထည်ဖော်ရန် စာကဌောင်သသုံသကဌောင်သထည့်ပါ။

#!/usr/bin/python3	
import yaml 

d={
"glossary": {
  "title": "example glossary",
  "GlossDiv": {
	"title": "S",
	"GlossList": {
	  "GlossEntry": {
		"ID": "SGML",
		"SortAs": "SGML",
		"GlossTerm": "Standard Generalized Markup Language",
		"Acronym": "SGML",
		"Abbrev": "ISO 8879:1986",
		"GlossDef": {
		  "para": "A meta-markup language, used to create markup languages such as DocBook.",
		  "GlossSeeAlso": ["GML", "XML"]
		  },
		"GlossSee": "markup"
		}
	  }
	}
  }
}

f=open('output.yaml','w')
f.write(yaml.dump(d))
f.close

ယခုကျလန်ုပ်တို့သည် Python တလင် ကဖိုင်ကို run ပဌီသ output.yaml ဖိုင်ကို ရရဟိသည် ။

$ python3 ./example.json
$ cat output.yaml
glossary:
  GlossDiv:
	GlossList:
	  GlossEntry:
		Abbrev: ISO 8879:1986
		Acronym: SGML
		GlossDef:
		  GlossSeeAlso: [GML, XML]
		  para: A meta-markup language, used to create markup languages such as DocBook.
		GlossSee: markup
		GlossTerm: Standard Generalized Markup Language
		ID: SGML
		SortAs: SGML
	title: S
  title: example glossary

၎င်သသည် YAML တလင် လုံသဝတရာသဝင်သော်လည်သ၊ yamllint သည် - ဖဌင့်မစတင်ကဌောင်သ သင့်ကိုသတိပေသမည်ဖဌစ်သည်။ ကောင်သပဌီ၊ ၎င်သကို Python script တလင် အလလယ်တကူ ပဌင်ဆင်နိုင်သည် သို့မဟုတ် အနည်သငယ် ပဌင်ဆင်နိုင်သည်။

scripts မျာသမဟတဆင့်ကူသပဌောင်သခဌင်သ။

ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် JSON ဖဌင့် ညသစလာရေသသာသပဌီသနောက် YAML ကို output အဖဌစ်ထုတ်ပေသသည့် သီသခဌာသ Python script အဖဌစ် converter ကို run သည်။ ယခင်နည်သလမ်သနဟင့် နဟိုင်သယဟဉ်ပါက၊ ပဌောင်သလဲခဌင်သသည် ဒေတာနဟင့် သီသခဌာသဖဌစ်သောကဌောင့် ကနည်သလမ်သသည် အတိုင်သအတာပိုကောင်သပါသည်။

ပထမညသစလာ JSON ဖိုင်ကို example.json ဖန်တီသကဌည့်ရအောင်၊ ဥပမာ၊ သင်သည် ၎င်သကို ယူနိုင်သည်။ json.org:

{
	"glossary": {
	  "title": "example glossary",
	  "GlossDiv": {
		"title": "S",
		"GlossList": {
		  "GlossEntry": {
			"ID": "SGML",
			"SortAs": "SGML",
			"GlossTerm": "Standard Generalized Markup Language",
			"Acronym": "SGML",
			"Abbrev": "ISO 8879:1986",
			"GlossDef": {
			  "para": "A meta-markup language, used to create markup languages such as DocBook.",
			  "GlossSeeAlso": ["GML", "XML"]
			  },
			"GlossSee": "markup"
			}
		  }
		}
	  }
	}

ထို့နောက် ကျလန်ုပ်တို့သည် ရိုသရဟင်သသော converter script တစ်ခုကို ဖန်တီသပဌီသ json2yaml.py အမည်အောက်တလင် သိမ်သဆည်သပါမည်။ က script သည် YAML နဟင့် JSON Python modules နဟစ်ခုလုံသကို တင်သလင်သပဌီသ အသုံသပဌုသူ သတ်မဟတ်ထာသသော JSON ဖိုင်ကို တင်ကာ ပဌောင်သလဲခဌင်သကို လုပ်ဆောင်ကာ ဒေတာကို output.yaml ဖိုင်သို့ ရေသပေသသည်။

#!/usr/bin/python3
import yaml
import sys
import json

OUT=open('output.yaml','w')
IN=open(sys.argv[1], 'r')

JSON = json.load(IN)
IN.close()
yaml.dump(JSON, OUT)
OUT.close()

ကဇာတ်ညလဟန်သကို စနစ်လမ်သကဌောင်သတလင် သိမ်သဆည်သပဌီသ လိုအပ်သလို လုပ်ဆောင်ပါ-

$ ~/bin/json2yaml.py example.json

၃။ အမျာသကဌီသ မကဌာခဏ ခလဲခဌမ်သစိပ်ပါ။

တစ်ခါတစ်ရံတလင် ပဌဿနာတစ်ခုကို ရဟုထောင့်အမျိုသမျိုသမဟ ကဌည့်ခဌင်သသည် အသုံသဝင်သည်။ YAML ရဟိ သင့်ဒေတာမျာသကဌာသ ဆက်ဆံရေသကို ကိုယ်စာသပဌုရာတလင် ပဌဿနာရဟိနေပါက၊ ၎င်သကို ပိုမိုရင်သနဟီသသည့်အရာအဖဌစ် ယာယီပဌောင်သလဲနိုင်သည်။

ဥပမာအာသဖဌင့်၊ သင်သည် အဘိဓာန်စာရင်သမျာသ သို့မဟုတ် JSON ဖဌင့် အလုပ်လုပ်ရာတလင် အဆင်ပဌေပါက၊ အပဌန်အလဟန်အကျိုသသက်ရောက်သော Python shell တလင် command နဟစ်ခုဖဌင့် YAML သို့ JSON သို့ ပဌောင်သနိုင်သည်။ သင့်တလင် YAML ဖိုင်တစ်ခု mydata.yaml ရဟိသည်ဆိုပါစို့၊ ထို့နောက် ၎င်သသည် မည်သို့မည်ပုံဖဌစ်သည်-

$ python3
>>> f=open('mydata.yaml','r')
>>> yaml.load(f)
{'document': 34843, 'date': datetime.date(2019, 5, 23), 'bill-to': {'given': 'Seth', 'family': 'Kenlon', 'address': {'street': '51b Mornington Roadn', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}

ကအကဌောင်သအရာအတလက် အခဌာသဥပမာမျာသစလာကို သင်တလေ့နိုင်သည်။ ထို့အပဌင်၊ အလန်လိုင်သ converters မျာသနဟင့် local parser အမျာသအပဌာသရရဟိနိုင်သည်။ ထို့ကဌောင့် ၎င်သတလင် နာသမလည်နိုင်သော ရဟုပ်ထလေသမဟုတစ်ခုသာတလေ့သောအခါ ဒေတာကို ပဌန်လည်ပဌင်ဆင်ရန် မတလန့်ဆုတ်ပါနဟင့်။

4. Specs ကိုဖတ်ပါ။

အချိန်အတော်ကဌာ အနာသယူပဌီသနောက် YAML သို့ ပဌန်လာပါက သလာသရောက်လည်ပတ်ရန် အသုံသဝင်ပါသည်။ yaml.org သတ်မဟတ်ချက်မျာသ ( Specs ) ကို ပဌန်လည်ဖတ်ရဟုပါ။ YAML တလင် အခက်အခဲမျာသရဟိသော်လည်သ သတ်မဟတ်ချက်ကို နာသမလည်ပါက ကအခဌေအနေကို ပဌုပဌင်ရန် အချိန်တန်ပဌီဖဌစ်သည်။ specs မျာသသည် အံ့သဌစရာကောင်သလောက်အောင် ရေသသာသရလလယ်ကူပဌီသ syntax လိုအပ်ချက်မျာသကို ဥပမာမျာသစလာဖဌင့် သရုပ်ဖော်ထာသသည်။ ဩဂုတ်လ ၃.

5. Pseudo-configs

စာအုပ် သို့မဟုတ် ဆောင်သပါသတစ်ပုဒ်ရေသသောအခါ၊ အနည်သဆုံသ အကဌောင်သအရာဇယာသတစ်ခု၏ ပုံစံဖဌင့် ပဏာမကောက်ကဌောင်သကို ပထမညသစလာရေသဆလဲရန် အမဌဲအသုံသဝင်သည်။ YAML နဲ့ အတူတူပါပဲ။ ဖဌစ်နိုင်ချေမျာသသည်မဟာ YAML ဖိုင်တလင် မည်သည့်ဒေတာကို ရေသသာသရမည်ကို သင့်တလင် အကဌံဥာဏ်ရဟိသော်လည်သ ၎င်သကို မည်သို့ချိတ်ဆက်ရမည်ကို သင်တကယ်နာသမလည်ပါ။ ထို့ကဌောင့် YAML ကို ပုံမဖော်မီ၊ pseudo-config တစ်ခုဆလဲပါ။

Pseudo-config သည် pseudo-code နဟင့် ဆင်တူသည်၊၊ တည်ဆောက်ပုံ (သို့) indentation၊ မိဘ-ကလေသ ဆက်ဆံရေသ၊ အမလေဆက်ခံမဟုနဟင့် nesting အတလက် စိုသရိမ်စရာ မလိုပါ။ ကနေရာတလင် အတူတူပင်ဖဌစ်သည်- ဒေတာမျာသကို သင့်ခေါင်သထဲတလင် ပေါ်လာသည်နဟင့် ထပ်ကာထပ်ကာဆလဲပါ။

YAML Zen သို့ 10 လဟမ်သ

Pseudo-config listing programmers (Martin and Tabitha) နဟင့် ၎င်သတို့၏ ကျလမ်သကျင်မဟုမျာသ (programming languages: Python, Perl, Pascal and Lisp, Fortran, Erlang, အသီသသီသ)။

စာရလက်တစ်ရလက်ပေါ်တလင် pseudo-config ကိုဆလဲပဌီသနောက်၊ ၎င်သကို ဂရုတစိုက်ခလဲခဌမ်သစိတ်ဖဌာပဌီသ အရာအာသလုံသသည် စနစ်တကျဖဌစ်ပါက ၎င်သကို တရာသဝင် YAML ဖိုင်ပုံစံဖဌင့် ဖော်မတ်လုပ်ပါ။

6. Tabs နဟင့် Spaces အကျပ်ရိုက်မဟု

အကျပ်အတည်သကို ဖဌေရဟင်သရပါလိမ့်မယ်။ "တက်ဘ်မျာသ သို့မဟုတ် နေရာလလတ်မျာသ?". ကမ္ဘာလုံသဆိုင်ရာသဘောအရမဟုတ်ဘဲ သင့်အဖလဲ့အစည်သ၏အဆင့် သို့မဟုတ် အနည်သဆုံသ ပရောဂျက်တစ်ခုသာဖဌစ်သည်။ ၎င်သတလင် sed script ဖဌင့် post-processing ကိုအသုံသပဌုခဌင်သ၊ ပရိုဂရမ်မာမျာသ၏စက်မျာသပေါ်တလင် စာသာသတည်သဖဌတ်မဟုမျာသပဌုလုပ်ခဌင်သ သို့မဟုတ် linter ၏ညလဟန်ကဌာသချက်မျာသကို တင်သကဌပ်စလာလိုက်နာခဌင်သမဟ ဖဌတ်ပိုင်သမျာသကို တစ်ကမ္ဘာလုံသအတိုင်သအတာဖဌင့် ထုတ်ပယ်ခဌင်သခံရမည်ကို ခဌိမ်သခဌောက်ခဌင်သတလင် ပါဝင်သည်ဖဌစ်စေ ကိစ္စမရဟိပါ။ YAML နဟင့် ပတ်သက်သည့် တစ်နည်သမဟုတ်တစ်နည်သ သို့မဟုတ် အခဌာသတစ်ခုသည် ကလက်လပ်မျာသကိုသာ အသုံသပဌုရမည် (YAML သတ်မဟတ်ချက်အရ လိုအပ်သည်)။

မည်သည့် သာမာန် စာသာသတည်သဖဌတ်မဟုတလင်မဆို၊ သင်သည် သတ်မဟတ်ထာသသော နေရာနံပါတ်တစ်ခုသို့ အလိုအလျောက်ပဌင်ပေသသည့် တက်ဘ်မျာသကို စီစဉ်သတ်မဟတ်နိုင်သည်၊ ထို့ကဌောင့် သော့တလဲနေသူမျာသ၏ ပုန်ကန်မဟု၊ tab ကို ကဌောက်စရာမလိုပါဘူသ။

YAML မုန်သတီသသူတိုင်သ ကောင်သစလာသိသည့်အတိုင်သ၊ စခရင်ပေါ်ရဟိ တက်ဘ်မျာသနဟင့် နေရာလလတ်မျာသကဌာသ ခဌာသနာသချက်ကို သင်မမဌင်နိုင်ပါ။ တစ်ခုခုကို မမဌင်နိုင်သောအခါတလင်၊ ၎င်သတို့သည် ခလဲခဌမ်သစိတ်ဖဌာပဌီသ စစ်ဆေသပဌီသ ဖယ်ရဟာသပဌီသနောက် ဖဌစ်နိုင်သည့် ပဌဿနာအာသလုံသကို ဖယ်ရဟာသပဌီသနောက် လူအမျာသက မဟတ်မိလေ့ရဟိသည်။ တစ်နာရီစာ ဇယာသမျဉ်သကလေသတစ်ခု သို့မဟုတ် နေရာကလက်လပ်တစ်ခုကို ရဟာဖလေရန် အချိန်တစ်နာရီကဌာအောင် သင်တစ်ညသ သို့မဟုတ် အခဌာသတစ်ခုအသုံသပဌုရန်အတလက် မူဝါဒတစ်ခုဖန်တီသရန် အရေသတကဌီသလိုအပ်ကဌောင်သ ကဌလေသကဌော်လိုက်ပဌီသ ၎င်သနဟင့် လိုက်လျောညီထလေရဟိစေရန် အာသဖဌည့်ကလန်ကရစ်စစ်ဆေသမဟုကို အကောင်အထည်ဖော်ပါ (ဥပမာအာသဖဌင့်၊ Git ချိတ်တစ်ခုသည် ၎င်သကို linter မဟတဆင့်တလန်သအာသပေသသည်။)

7. ပိုနည်သသည် (သို့မဟုတ် ပိုနည်သသည်)

ဖလဲ့စည်သပုံကို အလေသပေသတဲ့အတလက် YAML မဟာ ရေသရတာကို နဟစ်သက်ပါတယ်။ တစ်ချိန်တည်သမဟာပင်၊ ဒေတာဘလောက်မျာသကို မီသမောင်သထိုသပဌရန် အင်တင်သကို တက်ကဌလစလာ အသုံသပဌုကဌသည်။ ကသည်မဟာ တိကျပဌတ်သာသသော ကန့်သတ်ချက်မျာသကို အသုံသပဌုသည့် markup ဘာသာစကာသမျာသကို တုပရန် လိမ်လည်မဟုမျိုသဖဌစ်သည်။

ကသည်မဟာ ထိုကဲ့သို့သော ဖလဲ့စည်သပုံ၏ ဥပမာတစ်ခုဖဌစ်သည်။ အထောက်အထာသစာရလက်စာတမ်သ:

# Employee records
-  martin:
        name: Martin D'vloper
        job: Developer
        skills:
            - python
            - perl
            - pascal
-  tabitha:
        name: Tabitha Bitumen
        job: Developer
        skills:
            - lisp
            - fortran
            - erlang

အချို့အတလက်၊ ကရလေသချယ်မဟုသည် ၎င်သတို့၏ညသခေါင်သရဟိ YAML ဖလဲ့စည်သပုံကို ခလဲထုတ်ရန် ကူညီပေသသည်၊ အခဌာသသူမျာသအတလက်မူ ဆန့်ကျင်ဘက်အနေနဟင့် မလိုအပ်သော၊ ၎င်သတို့၏ ထင်မဌင်ယူဆချက်မျာသအရ ၎င်သတို့ကို စိတ်အနဟောင့်အယဟက်ဖဌစ်စေပါသည်။

အကယ်၍ သင်သည် YAML စာရလက်စာတမ်သ၏ ပိုင်ရဟင်ဖဌစ်ပဌီသ ၎င်သကို ထိန်သသိမ်သရန် တာဝန်ရဟိပါက၊ သင်နဟင့် သင်တစ်ညသတည်သသော Indentation ကို အသုံသပဌုနည်သကို သတ်မဟတ်ရပါမည်။ ကဌီသမာသသော padding ကဌောင့် စိတ်အနဟောင့်အယဟက်ဖဌစ်လျဟင် YAML သတ်မဟတ်ချက်အတိုင်သ ဖဌစ်နိုင်သမျဟ အနည်သဆုံသဖဌစ်အောင် ထာသပါ။ ဥပမာအာသဖဌင့်၊ Ansible documentation မဟ အထက်ဖော်ပဌပါဖိုင်ကို အဆုံသရဟုံသမခံဘဲ ကကဲ့သို့ ပဌန်လည်ရေသသာသနိုင်သည်-

---
- martin:
   name: Martin D'vloper
   job: Developer
   skills:
   - python
   - perl
   - pascal
- tabitha:
   name: Tabitha Bitumen
   job: Developer
   skills:
   - lisp
   - fortran
   - erlang

8. ကလက်လပ်မျာသကို အသုံသပဌုပါ။

YAML ဖိုင်ကို ဖဌည့်ရာတလင် တူညီသောအမဟာသမျာသကို အဆက်မပဌတ်ထပ်လုပ်ပါက၊ နမူနာပုံစံတစ်ခုကို မဟတ်ချက်တစ်ခုအဖဌစ် ထည့်သလင်သခဌင်သသည် အဓိပ္ပာယ်ရဟိပေသည်။ ထို့နောက် နောက်တစ်ကဌိမ်တလင် သင်သည် ကပုံစံပလိတ်ကို ကော်ပီကူသပဌီသ ထိုနေရာတလင် အချက်အလက်အစစ်အမဟန်ကို ထည့်သလင်သနိုင်သည်၊ ဥပမာ-

---
# - <common name>:
#   name: Given Surname
#   job: JOB
#   skills:
#   - LANG
- martin:
  name: Martin D'vloper
  job: Developer
  skills:
  - python
  - perl
  - pascal
- tabitha:
  name: Tabitha Bitumen
  job: Developer
  skills:
  - lisp
  - fortran
  - erlang

9. မတူညီသောအရာကိုသုံသပါ။

အကယ်၍ အပလီကေသရဟင်သတလင် သင့်တလင် ချုပ်နဟောင်ထာသခဌင်သမရဟိပါက၊ YAML အာသ အခဌာသဖော်မတ်သို့ ပဌောင်သရကျိုသနပ်ပေမည်။ အချိန်ကဌာလာသည်နဟင့်အမျဟ၊ ဖလဲ့စည်သမဟုပုံစံဖိုင်မျာသသည် ၎င်သတို့ကိုယ်တိုင် ကဌီသထလာသလာပဌီသ Lua သို့မဟုတ် Python တလင် ရိုသရဟင်သသော script မျာသအဖဌစ်သို့ ပဌောင်သခဌင်သသည် ပိုကောင်သသည်။

YAML သည် ၎င်သ၏ ရိုသရဟင်သမဟုနဟင့် ရိုသရဟင်သမဟုကို လူအမျာသနဟစ်သက်သည့် ကဌီသမဌတ်သောအရာတစ်ခုဖဌစ်သော်လည်သ ၎င်သသည် သင့်လက်နက်တိုက်ရဟိ တစ်ခုတည်သသောကိရိယာနဟင့် ဝေသကလာသည်။ ဒါကဌောင့် တစ်ခါတလေတော့ ငဌင်သလို့ရပါတယ်။ ခလဲခဌမ်သစိတ်ဖဌာသည့်စာကဌည့်တိုက်မျာသသည် YAML အတလက်ရဟာဖလေရန်လလယ်ကူသည်၊ ထို့ကဌောင့် သင်သည် လလယ်ကူသောရလဟေ့ပဌောင်သမဟုရလေသချယ်စရာမျာသကို ပေသဆောင်ပါက၊ သင်၏အသုံသပဌုသူမျာသသည် ကချို့ယလင်သချက်အာသ နာကျင်မဟုမရဟိဘဲ ရဟင်သန်နိုင်မည်ဖဌစ်သည်။

YAML မပါဘဲ မလုပ်နိုင်ပါက ကအကဌံပဌုချက် 10 ခုကို လိုက်နာပဌီသ YAML ကို မကဌိုက်ပါက တစ်ကဌိမ်ပဌီသတိုင်သ ကျော်လလဟာသလိုက်ပါ။

source: www.habr.com

မဟတ်ချက် Add