YAML زین کی طرف 10 قدم

ہم سب جوابدہ سے محبت کرتے ہیں، لیکن جواب دینے والا YAML ہے۔ کنفیگریشن فائلوں کے لیے بہت سے فارمیٹس ہیں: اقدار کی فہرستیں، پیرامیٹر ویلیو کے جوڑے، INI فائلیں، YAML، JSON، XML اور بہت سی دوسری۔ تاہم، ان سب میں سے کئی وجوہات کی بنا پر، YAML کو اکثر خاص طور پر مشکل سمجھا جاتا ہے۔ خاص طور پر، درجہ بندی کی اقدار کے ساتھ کام کرنے کے لیے اس کی تازگی آمیز کم سے کم اور متاثر کن صلاحیتوں کے باوجود، YAML نحو اس کے ازگر کی طرح انڈینٹیشن کے لیے پریشان کن ہو سکتا ہے۔

YAML زین کی طرف 10 قدم

اگر YAML آپ کو پریشان کرتا ہے، تو آپ کر سکتے ہیں — اور آپ کو چاہیے! - اپنی مایوسی کو قابل قبول سطح تک کم کرنے اور YAML سے محبت کرنے کے لیے درج ذیل 10 اقدامات کریں۔ جیسا کہ اس فہرست کے مطابق ہے، ہمارے دس نکات کو شروع سے شمار کیا جائے گا، ہم اپنی مرضی سے مراقبہ اور روحانی مشقیں شامل کریں گے 😉

0. اپنا ایڈیٹر کام کریں۔

اس سے کوئی فرق نہیں پڑتا کہ آپ کے پاس کون سا ٹیکسٹ ایڈیٹر ہے، شاید YAML کے ساتھ کام کرنے کے لیے کم از کم ایک پلگ ان موجود ہے۔ اگر آپ کے پاس نہیں ہے تو اسے فوری طور پر تلاش کریں اور انسٹال کریں۔ تلاش اور ترتیب دینے میں جو وقت گزرا ہے وہ ہر بار YAML میں ترمیم کرنے کے مقابلے میں کئی بار ادا کرے گا۔

مثال کے طور پر ایڈیٹر ایٹم YAML کو بطور ڈیفالٹ سپورٹ کرتا ہے، لیکن GNU Emacs کے لیے آپ کو اضافی پیکجز انسٹال کرنے ہوں گے، مثال کے طور پر، یامل موڈ.

YAML زین کی طرف 10 قدم

YAML موڈ میں Emacs اور اسپیس ڈسپلے کرنا۔

اگر آپ کے پسندیدہ ایڈیٹر کے پاس YAML موڈ نہیں ہے، تو ترتیبات کے ساتھ کام کر کے کچھ مسائل حل کیے جا سکتے ہیں۔ مثال کے طور پر، معیاری GNOME ٹیکسٹ ایڈیٹر Gedit میں YAML موڈ نہیں ہے، لیکن بطور ڈیفالٹ یہ YAML نحو کو نمایاں کرتا ہے اور آپ کو انڈینٹیشن کے ساتھ کام کو ترتیب دینے کی اجازت دیتا ہے:

YAML زین کی طرف 10 قدم

گیڈٹ میں انڈینٹ سیٹ کرنا۔

ایک پلگ ان ڈرا اسپیس Gedit کے لیے، خالی جگہوں کو نقطوں کے طور پر دکھاتا ہے، انڈینٹیشن لیول کے ساتھ ابہام کو ختم کرتا ہے۔

دوسرے الفاظ میں، اپنے پسندیدہ ایڈیٹر کے بارے میں سیکھنے میں وقت گزاریں۔ معلوم کریں کہ اسے یا اس کی ترقیاتی برادری کو YAML کے ساتھ کام کرنے کے لیے کیا پیشکش کرنا ہے، اور ان خصوصیات کو استعمال کریں۔ آپ کو یقینی طور پر اس پر افسوس نہیں ہوگا۔

1. ایک لنٹر استعمال کریں۔

مثالی طور پر، پروگرامنگ لینگوئجز اور مارک اپ لینگویجز پیش گوئی کے قابل نحو کا استعمال کرتی ہیں۔ کمپیوٹر پیشن گوئی میں اچھے ہیں، یہی وجہ ہے کہ تصور lintera. اگر اس کے وجود کے 40 سالوں میں یہ آپ کے پاس سے گزر چکا ہے اور آپ اب بھی YAML لنٹر استعمال نہیں کرتے ہیں، تو اب وقت آگیا ہے کہ yamllint آزمائیں۔

انسٹال کریں۔ یاملنٹ آپ معیاری لینکس پیکیج مینیجر استعمال کر سکتے ہیں۔ مثال کے طور پر، میں ریڈ ٹوٹ انٹرپرائز لینکس 8 یا Fedora یہ اس طرح کیا جاتا ہے:

$ sudo dnf install yamllint

پھر آپ آسانی سے یاملنٹ چلاتے ہیں، اسے چیک کرنے کے لیے YAML فائل پاس کرتے ہیں۔ اگر آپ لنٹر میں غلطی کے ساتھ فائل پاس کرتے ہیں تو ایسا لگتا ہے:

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

بائیں طرف کے نمبر وقت نہیں ہیں، بلکہ غلطی کے نقاط ہیں: قطار اور کالم نمبر۔ غلطی کی تفصیل آپ کو کچھ نہیں بتا سکتی، لیکن آپ کو بخوبی معلوم ہے کہ یہ کہاں ہے۔ صرف کوڈ میں اس جگہ کو دیکھیں، اور غالباً سب کچھ واضح ہو جائے گا۔

جب yamllint کو کسی فائل میں کوئی خرابی نہیں ملتی ہے، تو اسکرین پر کچھ بھی پرنٹ نہیں ہوتا ہے۔ اگر اس طرح کی خاموشی آپ کو خوفزدہ کرتی ہے اور آپ کچھ اور فیڈ بیک چاہتے ہیں، تو آپ کنڈیشنل ایکو کمانڈ کے ساتھ لنٹر کو ڈبل ایمپرسینڈ (&&) کے ذریعے چلا سکتے ہیں، اس طرح:

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

POSIX میں، ایک ڈبل ایمپرسینڈ فائر کرتا ہے اگر اور صرف اس صورت میں جب پچھلی کمانڈ 0 لوٹاتی ہے۔ اور yamllint صرف پائی جانے والی غلطیوں کی تعداد واپس کرتا ہے، یہی وجہ ہے کہ یہ پوری مشروط تعمیر کام کرتی ہے۔

2. Python میں لکھیں، YAML میں نہیں۔

اگر YAML واقعی آپ کو پریشان کرتا ہے، تو اس میں لفظی طور پر نہ لکھیں۔ ایسا ہوتا ہے کہ YAML واحد فارمیٹ ہے جسے ایپلیکیشن سمجھتی ہے۔ لیکن اس معاملے میں بھی، YAML فائل بنانا ضروری نہیں ہے۔ آپ جو پسند کرتے ہیں اس پر لکھیں اور پھر تبدیل کریں۔ مثال کے طور پر، Python کے لیے ایک بہترین لائبریری ہے۔ پیامل اور دو تبادلوں کے طریقے: خود تبادلوں اور اسکرپٹ کے ذریعے تبدیلی۔

خود کو تبدیل کرنا

اس صورت میں، ڈیٹا فائل بھی ایک Python اسکرپٹ ہے جو YAML تیار کرتی ہے۔ یہ طریقہ چھوٹے ڈیٹا سیٹس کے لیے بہترین ہے۔ آپ JSON ڈیٹا کو Python متغیر میں لکھتے ہیں، اسے درآمدی ہدایت کے ساتھ پیش کرتے ہیں، اور فائل کے آخر میں آؤٹ پٹ کو لاگو کرنے کے لیے تین لائنیں شامل کرتے ہیں۔

#!/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 میں چلاتے ہیں اور 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 آپ کو خبردار کرے گا کہ یہ - سے شروع نہیں ہوتا ہے۔ ٹھیک ہے، اسے آسانی سے دستی طور پر درست کیا جا سکتا ہے یا ازگر اسکرپٹ میں تھوڑا سا ترمیم کیا جا سکتا ہے۔

اسکرپٹ کے ذریعے تبدیلی

اس صورت میں، ہم سب سے پہلے JSON میں لکھتے ہیں، اور پھر کنورٹر کو ایک علیحدہ Python اسکرپٹ کے طور پر چلاتے ہیں، جو YAML کو آؤٹ پٹ کے طور پر تیار کرتا ہے۔ پچھلے طریقہ کے مقابلے میں، یہ طریقہ بہتر پیمانہ ہے، کیونکہ تبدیلی ڈیٹا سے الگ ہے۔

پہلے، آئیے ایک 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"
			}
		  }
		}
	  }
	}

پھر ہم ایک سادہ کنورٹر اسکرپٹ بنائیں گے اور اسے json2yaml.py کے نام سے محفوظ کریں گے۔ یہ اسکرپٹ YAML اور JSON Python دونوں ماڈیولز درآمد کرتا ہے، اور صارف کی مخصوص 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

3. بہت زیادہ اور کثرت سے تجزیہ کریں۔

کبھی کبھی کسی مسئلے کو مختلف زاویے سے دیکھنا مفید ہوتا ہے۔ اگر آپ کو YAML میں اپنے ڈیٹا کے درمیان تعلقات کی نمائندگی کرنے میں دشواری ہو رہی ہے، تو آپ اسے عارضی طور پر کسی اور مانوس چیز میں تبدیل کر سکتے ہیں۔

مثال کے طور پر، اگر آپ لغت کی فہرستوں یا JSON کے ساتھ کام کرنے میں آسانی محسوس کرتے ہیں، تو آپ انٹرایکٹو Python شیل میں صرف دو کمانڈز کے ساتھ 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.'}

آپ کو اس موضوع پر بہت سی دوسری مثالیں مل سکتی ہیں۔ اس کے علاوہ، بہت سے آن لائن کنورٹرز اور مقامی تجزیہ کار دستیاب ہیں۔ لہذا جب آپ اس میں صرف ایک ناقابل فہم گڑبڑ دیکھیں تو ڈیٹا کو دوبارہ فارمیٹ کرنے میں ہچکچاہٹ محسوس نہ کریں۔

4. چشمی پڑھیں

لمبے وقفے کے بعد YAML میں واپس آنا، دورہ کرنا مفید ہے۔ yaml.org اور وضاحتیں (چشمی) کو دوبارہ پڑھیں۔ اگر آپ کو YAML کے ساتھ مشکلات ہیں، لیکن آپ تفصیلات تک نہیں پہنچ پائے ہیں، تو اس صورت حال کو درست کرنے کا وقت آگیا ہے۔ چشمی حیرت انگیز طور پر لکھنے میں آسان ہے، اور نحو کی ضروریات کو بڑی تعداد میں مثالوں کے ساتھ واضح کیا گیا ہے۔ گلیو 6.

5. چھدم تشکیلات

کتاب یا مضمون لکھتے وقت، یہ ہمیشہ مفید ہوتا ہے کہ پہلے ایک ابتدائی خاکہ تیار کیا جائے، کم از کم مندرجات کے جدول کی صورت میں۔ YAML کے ساتھ بھی ایسا ہی ہے۔ غالباً، آپ کو اندازہ ہو گا کہ YAML فائل میں کون سا ڈیٹا لکھنے کی ضرورت ہے، لیکن آپ واقعی یہ نہیں سمجھتے کہ اسے ایک دوسرے سے کیسے جوڑنا ہے۔ لہذا، YAML کو مجسمہ بنانے سے پہلے، ایک چھدم تشکیل کھینچیں۔

Pseudo-config pseudo-code سے ملتا جلتا ہے، جہاں آپ کو ساخت یا انڈینٹیشن، والدین اور بچوں کے تعلقات، وراثت اور گھونسلے کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ یہاں بھی ایسا ہی ہے: آپ ڈیٹا کی تکرار کھینچتے ہیں جیسے ہی وہ آپ کے دماغ میں پیدا ہوتے ہیں۔

YAML زین کی طرف 10 قدم

Pseudo-config لسٹنگ پروگرامرز (مارٹن اور تبیتھا) اور ان کی مہارتیں (پروگرامنگ زبانیں: Python، Perl، Pascal اور Lisp، Fortran، Erlang، بالترتیب)۔

کاغذ کے ٹکڑے پر سیوڈو کنفیگریشن بنانے کے بعد، احتیاط سے اس کا تجزیہ کریں اور، اگر سب کچھ ٹھیک ہے، تو اسے ایک درست YAML فائل کی شکل میں فارمیٹ کریں۔

6. ٹیبز بمقابلہ خالی جگہوں کا مخمصہ

آپ کو مخمصے کو حل کرنا پڑے گا۔ "ٹیبز یا خالی جگہیں؟". عالمی معنوں میں نہیں، بلکہ صرف آپ کی تنظیم کی سطح پر، یا کم از کم ایک پروجیکٹ۔ اس سے کوئی فرق نہیں پڑتا ہے کہ سیڈ اسکرپٹ کے ساتھ پوسٹ پروسیسنگ کا استعمال کیا جاتا ہے، پروگرامرز کی مشینوں پر ٹیکسٹ ایڈیٹرز کو ترتیب دینا، یا برخاستگی کے خطرے کے تحت لنٹر کی ہدایات پر سختی سے تعمیل کی عالمی سطح پر رسیدیں لینا، لیکن آپ کی ٹیم کے تمام ممبران جو ایک طریقہ یا دوسرا YAML سے متعلق ہے صرف خالی جگہوں کا استعمال کرنا چاہئے (جیسا کہ YAML تصریح کی ضرورت ہے)۔

کسی بھی عام ٹیکسٹ ایڈیٹر میں، آپ خودکار درست ٹیبز کو مخصوص جگہوں پر ترتیب دے سکتے ہیں، لہذا کلیدی پیروکاروں کی بغاوت ٹیب آپ کو ڈرنے کی ضرورت نہیں ہے۔

جیسا کہ ہر YAML نفرت کرنے والا اچھی طرح جانتا ہے، آپ اسکرین پر ٹیبز اور اسپیس کے درمیان فرق نہیں دیکھ سکتے ہیں۔ اور جب کوئی چیز نظر نہیں آتی ہے، تو یہ عام طور پر آخری چیز ہوتی ہے جسے لوگ یاد رکھتے ہیں، ان کے ذریعے چھانٹنے، جانچنے اور دیگر تمام ممکنہ مسائل کو ختم کرنے کے بعد۔ ٹیبلولیشن وکر یا خالی جگہوں کے بلاک کو تلاش کرنے میں صرف ایک گھنٹہ صرف چیختا ہے کہ آپ کو فوری طور پر ایک یا دوسرے کے استعمال کے لئے ایک پالیسی بنانے کی ضرورت ہے، اور پھر اس کی تعمیل کے لئے ایک مضبوط کنکریٹ چیک کو لاگو کرنے کی ضرورت ہے (مثال کے طور پر، کے ذریعے ایک لنٹر کے ذریعے زبردستی کرنے کے لیے گٹ ہک)۔

7. کم زیادہ ہے (یا زیادہ کم ہے)

کچھ لوگ YAML میں لکھنا پسند کرتے ہیں کیونکہ یہ ساخت پر زور دیتا ہے۔ ایک ہی وقت میں، وہ ڈیٹا کے بلاکس کو نمایاں کرنے کے لیے فعال طور پر انڈینٹیشن کا استعمال کرتے ہیں۔ یہ مارک اپ لینگویجز کی نقل کرنے کے لیے ایک قسم کا اسکام ہے جو واضح حد بندیوں کا استعمال کرتی ہے۔

یہاں سے اس طرح کے ڈھانچے کی ایک مثال ہے۔ جوابدہ دستاویزات:

# 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 دستاویز کے مالک ہیں اور اسے برقرار رکھنے کے ذمہ دار ہیں، تو پھر تم اور صرف تم انڈینٹیشن کو استعمال کرنے کے طریقے کی وضاحت کرنی چاہیے۔ اگر آپ بڑے پیڈنگ سے ناراض ہیں، تو اسے YAML تفصیلات کے مطابق کم سے کم رکھیں۔ مثال کے طور پر، جوابی دستاویزات سے اوپر کی فائل کو بغیر کسی نقصان کے اس طرح دوبارہ لکھا جا سکتا ہے:

---
- 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 میں سادہ اسکرپٹ میں تبدیل کیا جائے۔

YAML ایک عظیم چیز ہے جسے بہت سے لوگ اس کی کم سے کم اور سادگی کے لیے پسند کرتے ہیں، لیکن یہ آپ کے ہتھیاروں کے واحد آلے سے بہت دور ہے۔ تو کبھی کبھی آپ اس سے انکار کر سکتے ہیں۔ YAML کے لیے لائبریریوں کو پارس کرنا آسان ہے، لہذا اگر آپ منتقلی کے آسان اختیارات پیش کرتے ہیں، تو آپ کے صارفین اس ناکامی سے نسبتاً بے دردی سے بچ جائیں گے۔

اگر آپ YAML کے بغیر نہیں کر سکتے ہیں، تو یہ 10 تجاویز لیں اور YAML کی اپنی ناپسندیدگی کو ایک بار اور ہمیشہ کے لیے دور کریں!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں