Hatua 10 hadi YAML Zen

Sote tunapenda Ansible, lakini Ansible ni YAML. Kuna fomati nyingi za faili za usanidi: orodha za maadili, jozi za thamani ya parameta, faili za INI, YAML, JSON, XML na zingine nyingi. Walakini, kwa sababu kadhaa kati ya zote, YAML mara nyingi huchukuliwa kuwa ngumu sana. Hasa, licha ya uchangamfu wake wa kuburudisha na uwezo wa kuvutia wa kufanya kazi na maadili ya tabaka, sintaksia ya YAML inaweza kuudhisha mbinu yake ya ujongezaji kama chatu.

Hatua 10 hadi YAML Zen

Ikiwa YAML inakukasirisha, unawezaβ€”na unapaswa! - chukua hatua 10 zifuatazo ili kupunguza kufadhaika kwako hadi kiwango kinachokubalika na kupenda YAML. Kama inavyofaa orodha hii, vidokezo vyetu kumi vitahesabiwa kuanzia mwanzo, tutaongeza kutafakari na mazoea ya kiroho kwa mapenzi πŸ˜‰

0. Fanya mhariri wako afanye kazi

Haijalishi una kihariri cha maandishi, labda kuna angalau programu-jalizi moja ya kufanya kazi na YAML. Ikiwa huna, itafute na uisakinishe mara moja. Muda unaotumika kutafuta na kusanidi utalipa mara nyingi kila unapohitaji kuhariri YAML.

Kwa mfano, mhariri Atom inasaidia YAML kwa chaguo-msingi, lakini kwa GNU Emacs itabidi usakinishe vifurushi vya ziada, kwa mfano, hali ya yaml.

Hatua 10 hadi YAML Zen

Emacs katika hali ya YAML na nafasi za kuonyesha.

Ikiwa kihariri chako unachokipenda hakina modi ya YAML, basi baadhi ya matatizo yanaweza kutatuliwa kwa kufanya kazi na mipangilio. Kwa mfano, kihariri maandishi cha kawaida cha GNOME Gedit haina modi ya YAML, lakini kwa chaguo-msingi inaangazia sintaksia ya YAML na hukuruhusu kusanidi kazi na ujongezaji:

Hatua 10 hadi YAML Zen

Kuweka indents katika Gedit.

Programu-jalizi nafasi za kuteka kwa Gedit, huonyesha nafasi kama nukta, ikiondoa utata kwa viwango vya ujongezaji.

Kwa maneno mengine, tumia muda kujifunza kuhusu kihariri chako unachokipenda. Jua kile ambacho yeye au jumuiya yake ya maendeleo inaweza kutoa kwa kufanya kazi na YAML, na utumie vipengele hivyo. Hakika hautajuta.

1. Tumia linter

Kwa kweli, lugha za programu na lugha za alama hutumia syntax inayoweza kutabirika. Kompyuta ni nzuri katika kutabirika, ndiyo maana dhana ya litera. Ikiwa katika miaka 40 ya kuwepo kwake imekupita na bado hutumii linter ya YAML, basi ni wakati wa kujaribu yamllint.

Ili kufunga yamllint Unaweza kutumia kidhibiti cha kawaida cha kifurushi cha Linux. Kwa mfano, katika Red Hat Enterprise Linux 8 au Fedora imefanywa kama hii:

$ sudo dnf install yamllint

Kisha unaendesha tu yamllint, ukiipitisha faili ya YAML ili kuangalia. Hivi ndivyo inavyoonekana ikiwa utapitisha faili iliyo na kosa kwa linter:

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

Nambari zilizo upande wa kushoto sio wakati, lakini viwianishi vya kosa: safu na nambari ya safu. Maelezo ya kosa hayawezi kukuambia chochote, lakini unajua ni wapi hasa. Angalia tu mahali hapa kwenye nambari, na uwezekano mkubwa kila kitu kitakuwa wazi.

Wakati yamllint haipati makosa katika faili, hakuna chochote kinachochapishwa kwenye skrini. Ikiwa ukimya kama huo unakuogopesha na unataka maoni zaidi, basi unaweza kuendesha linter na amri ya echo ya masharti kupitia ampersand mbili (&&), kama hii:

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

Katika POSIX, ampersand maradufu huwaka ikiwa na ikiwa tu amri iliyotangulia itarejesha 0. Na yamllint hurejesha tu idadi ya makosa yaliyopatikana, ndiyo maana muundo huu wote wa masharti hufanya kazi.

2. Andika kwa Python, sio YAML

Ikiwa YAML inakukasirisha sana, usiandike ndani yake, kihalisi. Hutokea kwamba YAML ndio umbizo pekee ambalo programu inaelewa. Lakini hata katika kesi hii, si lazima kuunda faili ya YAML. Andika juu ya kile unachopenda na kisha ubadilishe. Kwa mfano, kuna maktaba kubwa ya Python pyyaml na mbinu mbili za uongofu: kujigeuza na uongofu kupitia hati.

Uongofu wa kibinafsi

Katika kesi hii, faili ya data pia ni hati ya Python ambayo hutoa YAML. Njia hii inafaa zaidi kwa seti ndogo za data. Unaandika tu data ya JSON kuwa tofauti ya Python, hutanguliza na maagizo ya kuagiza, na mwisho wa faili ongeza mistari mitatu kutekeleza matokeo.

#!/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

Sasa tunaendesha faili hii kwenye Python na kupata faili ya 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

Hii ni YAML halali kabisa, lakini yamllint itakuonya kuwa haianzi na -. Kweli, hii inaweza kusahihishwa kwa urahisi kwa mikono au kurekebishwa kidogo kwenye hati ya Python.

Uongofu kupitia hati

Katika kesi hii, tunaandika kwanza katika JSON, na kisha kuendesha kibadilishaji kama hati tofauti ya Python, ambayo hutoa YAML kama pato. Ikilinganishwa na njia ya awali, njia hii ni mizani bora, kwani uongofu ni tofauti na data.

Kwanza, hebu tuunde faili ya JSON example.json, kwa mfano, unaweza kuichukua kutoka 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"
			}
		  }
		}
	  }
	}

Kisha tutaunda hati rahisi ya kubadilisha fedha na kuihifadhi chini ya jina json2yaml.py. Hati hii huleta moduli zote za YAML na JSON Python, na hupakia faili ya JSON iliyobainishwa na mtumiaji, hugeuza, na huandika data kwenye faili ya 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()

Hifadhi hati hii kwenye njia ya mfumo na uiendeshe inavyohitajika:

$ ~/bin/json2yaml.py example.json

3. Changanua sana na mara nyingi

Wakati mwingine ni muhimu kuangalia tatizo kutoka pembe tofauti. Ikiwa unatatizika kuwakilisha uhusiano kati ya data yako katika YAML, unaweza kuibadilisha kwa muda kuwa kitu kinachojulikana zaidi.

Kwa mfano, ikiwa unastarehesha kufanya kazi na orodha za kamusi au JSON, unaweza kubadilisha YAML hadi JSON kwa amri mbili tu kwenye ganda shirikishi la Python. Wacha tuseme una faili ya YAML mydata.yaml, basi hii ndio ingeonekana kama:

$ 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.'}

Unaweza kupata mifano mingine mingi juu ya mada hii. Kwa kuongeza, kuna vigeuzi vingi vya mtandaoni na vichanganuzi vya ndani vinavyopatikana. Kwa hivyo usisite kurekebisha data wakati unaona tu mchanganyiko usioeleweka ndani yake.

4. Soma vipimo

Kurudi kwa YAML baada ya mapumziko marefu, ni muhimu kutembelea yaml.org na usome tena vipimo (vigezo). Ikiwa una matatizo na YAML, lakini hujafikia vipimo, basi ni wakati wa kurekebisha hali hii. Vipimo ni rahisi kuandika kwa kushangaza, na mahitaji ya sintaksia yanaonyeshwa kwa idadi kubwa ya mifano katika Sura ya 6.

5. Mipangilio ya uwongo

Wakati wa kuandika kitabu au makala, ni muhimu kila mara kwanza kuchora muhtasari wa awali, angalau katika mfumo wa jedwali la yaliyomo. Ni sawa na YAML. Uwezekano mkubwa zaidi, una wazo la data gani inahitaji kuandikwa kwenye faili ya YAML, lakini huelewi jinsi ya kuiunganisha. Kwa hivyo, kabla ya kuchonga YAML, chora usanidi wa uwongo.

Usanidi wa uwongo ni sawa na msimbo wa uwongo, ambapo huna haja ya kuwa na wasiwasi kuhusu muundo au ujongezaji, mahusiano ya mzazi na mtoto, urithi na kuota. Ni sawa hapa: unachora marudio ya data inapotokea kichwani mwako.

Hatua 10 hadi YAML Zen

Watengenezaji programu wa uorodheshaji wa Pseudo-config (Martin na Tabitha) na ujuzi wao (lugha za programu: Python, Perl, Pascal na Lisp, Fortran, Erlang, mtawalia).

Baada ya kuchora usanidi wa uwongo kwenye kipande cha karatasi, ichanganue kwa uangalifu na, ikiwa kila kitu kiko sawa, ipange katika mfumo wa faili halali ya YAML.

6. Tabo dhidi ya Dilemma ya Nafasi

Itabidi kutatua mtanziko "vichupo au nafasi?". Sio kwa maana ya kimataifa, lakini tu katika kiwango cha shirika lako, au angalau mradi. Haijalishi ikiwa hii inahusisha kutumia usindikaji baada ya hati ya sed, kusanidi wahariri wa maandishi kwenye mashine za watengeneza programu, au kuchukua risiti za utiifu mkali wa maagizo ya linter chini ya tishio la kufukuzwa kazi, lakini washiriki wote wa timu yako ambao njia moja au nyingine inayohusiana na YAML lazima itumie nafasi pekee (kama inavyotakiwa na maelezo ya YAML).

Katika kihariri chochote cha kawaida cha maandishi, unaweza kusanidi vichupo vya kusahihisha kiotomatiki kwa idadi maalum ya nafasi, ili uasi wa wafuasi muhimu. Tab huna haja ya kuogopa.

Kama vile kila adui wa YAML anajua vyema, huwezi kuona tofauti kati ya vichupo na nafasi kwenye skrini. Na wakati kitu hakionekani, kwa kawaida ni jambo la mwisho ambalo watu hukumbuka, baada ya kupanga, kuangalia na kuondoa matatizo mengine yote yanayowezekana. Saa ya muda inayotumika kutafuta safu ya uwekaji jedwali au kizuizi cha nafasi hupiga kelele kwamba unahitaji haraka kuunda sera ya matumizi ya moja au nyingine, na kisha utekeleze ukaguzi wa madhubuti ulioimarishwa wa kufuata (kwa mfano, kupitia ndoano ya Git ili kuilazimisha kupitia linter).

7. Chini ni zaidi (au zaidi ni kidogo)

Baadhi ya watu hupenda kuandika katika YAML kwa sababu inasisitiza muundo. Wakati huo huo, wao hutumia indentation kikamilifu ili kuonyesha vitalu vya data. Huu ni aina ya ulaghai wa kuiga lugha za alama zinazotumia viambatanisho dhahiri.

Hapa kuna mfano wa muundo kama huo kutoka Nyaraka zinazofaa:

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

Kwa wengine, chaguo hili huwasaidia kutatua muundo wa YAML katika vichwa vyao; kwa wengine, kinyume chake, huwakasirisha na mengi yasiyo ya lazima, kwa maoni yao, indents.

Lakini ikiwa wewe ni mmiliki wa hati ya YAML na unawajibika kuitunza, basi wewe na wewe tu lazima ifafanue jinsi ya kutumia ujongezaji. Ikiwa umekerwa na pedi kubwa, ihifadhi kwa kiwango cha chini iwezekanavyo kulingana na vipimo vya YAML. Kwa mfano, faili iliyo hapo juu kutoka kwa hati Zinazoweza kuandikwa tena kama hii bila hasara yoyote:

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

8. Tumia nafasi zilizo wazi

Ukirudia makosa yale yale kila mara unapojaza faili ya YAML, ni jambo la busara kuingiza kiolezo ndani yake kama maoni. Kisha wakati ujao unaweza kunakili kiolezo hiki na kuingiza data halisi hapo, kwa mfano:

---
# - <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. Tumia kitu tofauti

Ikiwa programu haina kizuizi kwako, basi inaweza kufaa kubadilisha YAML hadi umbizo tofauti. Baada ya muda, faili za usanidi zinaweza kujikuza na kisha ni bora kuzibadilisha kuwa hati rahisi katika Lua au Python.

YAML ni kitu kizuri ambacho watu wengi hupenda kwa uchache na urahisi wake, lakini ni mbali na zana pekee kwenye arsenal yako. Kwa hivyo wakati mwingine unaweza kukataa. Maktaba za uchanganuzi ni rahisi kupata za YAML, kwa hivyo ikiwa utatoa chaguo rahisi za uhamiaji, watumiaji wako watastahimili kushindwa huku bila maumivu.

Ikiwa huwezi kufanya bila YAML, basi chukua vidokezo hivi 10 na ushinde kutopenda YAML mara moja!

Chanzo: mapenzi.com

Kuongeza maoni