ہم سب جوابدہ سے محبت کرتے ہیں، لیکن جواب دینے والا YAML ہے۔ کنفیگریشن فائلوں کے لیے بہت سے فارمیٹس ہیں: اقدار کی فہرستیں، پیرامیٹر ویلیو کے جوڑے، INI فائلیں، YAML، JSON، XML اور بہت سی دوسری۔ تاہم، ان سب میں سے کئی وجوہات کی بنا پر، YAML کو اکثر خاص طور پر مشکل سمجھا جاتا ہے۔ خاص طور پر، درجہ بندی کی اقدار کے ساتھ کام کرنے کے لیے اس کی تازگی آمیز کم سے کم اور متاثر کن صلاحیتوں کے باوجود، YAML نحو اس کے ازگر کی طرح انڈینٹیشن کے لیے پریشان کن ہو سکتا ہے۔
اگر YAML آپ کو پریشان کرتا ہے، تو آپ کر سکتے ہیں — اور آپ کو چاہیے! - اپنی مایوسی کو قابل قبول سطح تک کم کرنے اور YAML سے محبت کرنے کے لیے درج ذیل 10 اقدامات کریں۔ جیسا کہ اس فہرست کے مطابق ہے، ہمارے دس نکات کو شروع سے شمار کیا جائے گا، ہم اپنی مرضی سے مراقبہ اور روحانی مشقیں شامل کریں گے 😉
0. اپنا ایڈیٹر کام کریں۔
اس سے کوئی فرق نہیں پڑتا کہ آپ کے پاس کون سا ٹیکسٹ ایڈیٹر ہے، شاید YAML کے ساتھ کام کرنے کے لیے کم از کم ایک پلگ ان موجود ہے۔ اگر آپ کے پاس نہیں ہے تو اسے فوری طور پر تلاش کریں اور انسٹال کریں۔ تلاش اور ترتیب دینے میں جو وقت گزرا ہے وہ ہر بار YAML میں ترمیم کرنے کے مقابلے میں کئی بار ادا کرے گا۔
مثال کے طور پر ایڈیٹر
YAML موڈ میں Emacs اور اسپیس ڈسپلے کرنا۔
اگر آپ کے پسندیدہ ایڈیٹر کے پاس YAML موڈ نہیں ہے، تو ترتیبات کے ساتھ کام کر کے کچھ مسائل حل کیے جا سکتے ہیں۔ مثال کے طور پر، معیاری GNOME ٹیکسٹ ایڈیٹر Gedit میں YAML موڈ نہیں ہے، لیکن بطور ڈیفالٹ یہ YAML نحو کو نمایاں کرتا ہے اور آپ کو انڈینٹیشن کے ساتھ کام کو ترتیب دینے کی اجازت دیتا ہے:
گیڈٹ میں انڈینٹ سیٹ کرنا۔
ایک پلگ ان
دوسرے الفاظ میں، اپنے پسندیدہ ایڈیٹر کے بارے میں سیکھنے میں وقت گزاریں۔ معلوم کریں کہ اسے یا اس کی ترقیاتی برادری کو YAML کے ساتھ کام کرنے کے لیے کیا پیشکش کرنا ہے، اور ان خصوصیات کو استعمال کریں۔ آپ کو یقینی طور پر اس پر افسوس نہیں ہوگا۔
1. ایک لنٹر استعمال کریں۔
مثالی طور پر، پروگرامنگ لینگوئجز اور مارک اپ لینگویجز پیش گوئی کے قابل نحو کا استعمال کرتی ہیں۔ کمپیوٹر پیشن گوئی میں اچھے ہیں، یہی وجہ ہے کہ تصور
انسٹال کریں۔
$ 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 بنائیں، مثال کے طور پر، آپ اسے لے سکتے ہیں۔
{
"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 میں واپس آنا، دورہ کرنا مفید ہے۔
5. چھدم تشکیلات
کتاب یا مضمون لکھتے وقت، یہ ہمیشہ مفید ہوتا ہے کہ پہلے ایک ابتدائی خاکہ تیار کیا جائے، کم از کم مندرجات کے جدول کی صورت میں۔ YAML کے ساتھ بھی ایسا ہی ہے۔ غالباً، آپ کو اندازہ ہو گا کہ YAML فائل میں کون سا ڈیٹا لکھنے کی ضرورت ہے، لیکن آپ واقعی یہ نہیں سمجھتے کہ اسے ایک دوسرے سے کیسے جوڑنا ہے۔ لہذا، YAML کو مجسمہ بنانے سے پہلے، ایک چھدم تشکیل کھینچیں۔
Pseudo-config pseudo-code سے ملتا جلتا ہے، جہاں آپ کو ساخت یا انڈینٹیشن، والدین اور بچوں کے تعلقات، وراثت اور گھونسلے کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ یہاں بھی ایسا ہی ہے: آپ ڈیٹا کی تکرار کھینچتے ہیں جیسے ہی وہ آپ کے دماغ میں پیدا ہوتے ہیں۔
Pseudo-config لسٹنگ پروگرامرز (مارٹن اور تبیتھا) اور ان کی مہارتیں (پروگرامنگ زبانیں: Python، Perl، Pascal اور Lisp، Fortran، Erlang، بالترتیب)۔
کاغذ کے ٹکڑے پر سیوڈو کنفیگریشن بنانے کے بعد، احتیاط سے اس کا تجزیہ کریں اور، اگر سب کچھ ٹھیک ہے، تو اسے ایک درست YAML فائل کی شکل میں فارمیٹ کریں۔
6. ٹیبز بمقابلہ خالی جگہوں کا مخمصہ
آپ کو مخمصے کو حل کرنا پڑے گا۔
کسی بھی عام ٹیکسٹ ایڈیٹر میں، آپ خودکار درست ٹیبز کو مخصوص جگہوں پر ترتیب دے سکتے ہیں، لہذا کلیدی پیروکاروں کی بغاوت ٹیب آپ کو ڈرنے کی ضرورت نہیں ہے۔
جیسا کہ ہر 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