Matakai 10 zuwa YAML Zen

Dukkanmu muna son Mai yiwuwa, amma Mai yiwuwa shine YAML. Akwai nau'i-nau'i da yawa don fayilolin daidaitawa: lissafin ƙima, nau'i-nau'i masu ƙima, fayilolin INI, YAML, JSON, XML da sauran su. Koyaya, saboda dalilai da yawa daga cikin duka, YAML galibi ana ɗaukarsa da wahala musamman. Musamman ma, duk da ƙarancin kuzarin sa na shakatawa da kuma iyakoki masu ban sha'awa don aiki tare da ƙimar matsayi, tsarin YAML na iya zama mai ban haushi tare da tsarin sa na Python-kamar shigar da shi.

Matakai 10 zuwa YAML Zen

Idan YAML ya ba ka haushi, za ka iya - kuma ya kamata! – ɗauki waɗannan matakai guda 10 masu zuwa don rage ɓacin ranku zuwa matakin yarda da soyayya da YAML. Kamar yadda ya dace da wannan jerin, shawarwarinmu guda goma za a ƙidaya su daga karce, za mu ƙara yin tunani da ayyukan ruhaniya yadda ya kamata 😉

0. Sanya editan ku yayi aiki

Komai wane editan rubutu kuke da shi, tabbas akwai aƙalla plugin ɗin don aiki tare da YAML. Idan ba ku da ɗaya, nemo kuma shigar da shi nan da nan. Lokacin da aka kashe bincike da kafawa zai biya sau da yawa a duk lokacin da za ku gyara YAML.

Misali, edita Atom yana goyan bayan YAML ta tsohuwa, amma ga GNU Emacs dole ne ka shigar da ƙarin fakiti, misali, yaml-mode.

Matakai 10 zuwa YAML Zen

Emacs a yanayin YAML da nunin sarari.

Idan editan da kuka fi so ba shi da yanayin YAML, to ana iya magance wasu matsalolin ta hanyar aiki tare da saitunan. Misali, daidaitaccen editan rubutu na GNOME Gedit ba shi da yanayin YAML, amma ta tsohuwa yana haskaka tsarin YAML kuma yana ba ku damar saita aiki tare da indentations:

Matakai 10 zuwa YAML Zen

Saitin indents a cikin Gedit.

A plugin zane-zane don Gedit, yana nuna sarari azaman dige-dige, yana kawar da shubuha tare da matakan shiga.

A takaice dai, ba da lokacin koyo game da editan da kuka fi so. Nemo abin da shi ko al'ummarsa na ci gaba zasu bayar don aiki tare da YAML, kuma kuyi amfani da waɗannan fasalulluka. Tabbas ba za ku yi nadama ba.

1. Yi amfani da linter

Mahimmanci, harsunan shirye-shirye da yarukan da ake yin alama suna amfani da maƙasudin ƙira. Kwamfuta suna da kyau a tsinkaya, wanda shine dalilin da ya sa manufar lintera. Idan a cikin shekaru 40 na wanzuwarsa ta wuce ku kuma har yanzu ba ku yi amfani da linter na YAML ba, to lokaci ya yi da za ku gwada yamllint.

Sanya yamllint Kuna iya amfani da daidaitaccen mai sarrafa fakitin Linux. Misali, in Red Hat ciniki Linux 8 ko Fedora ana yi kamar haka:

$ sudo dnf install yamllint

Sa'an nan kuma kawai ku kunna yamllint, ku aika da shi fayil ɗin YAML don dubawa. Wannan shine abin da yake kama idan kun ƙaddamar da fayil tare da kuskure zuwa linter:

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

Lambobin hagu ba lokaci bane, amma daidaitawar kuskure: jere da lambar shafi. Bayanin kuskuren bazai gaya muku komai ba, amma kun san ainihin inda yake. Kawai kalli wannan wurin a cikin lambar, kuma wataƙila komai zai bayyana.

Lokacin da yamllint bai sami kurakurai a cikin fayil ba, ba a buga komai akan allo. Idan irin wannan shiru ya ba ku tsoro kuma kuna son ƙarin ra'ayi, to zaku iya gudanar da linter tare da umarnin amsawar sharadi ta hanyar ampersand sau biyu (&&), kamar haka:

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

A cikin POSIX, ampersand sau biyu yana ƙone idan kuma kawai idan umarnin da ya gabata ya dawo 0. Kuma yamllint kawai ya dawo da adadin kurakurai da aka samu, wanda shine dalilin da ya sa wannan duka yanayin ginin yana aiki.

2. Rubuta da Python, ba YAML ba

Idan da gaske YAML ya ba ka haushi, kawai kada ka rubuta a ciki, a zahiri. Ya faru cewa YAML shine kawai tsarin da aikace-aikacen ke fahimta. Amma ko a wannan yanayin, ba lallai ba ne don ƙirƙirar fayil ɗin YAML. Rubuta akan abin da kuke so sannan ku tuba. Misali, akwai babban ɗakin karatu na Python pyaml da hanyoyin juyawa guda biyu: jujjuya kai da jujjuya ta hanyar rubutun.

Juya kai

A wannan yanayin, fayil ɗin bayanan kuma rubutun Python ne wanda ke haifar da YAML. Wannan hanya ta fi dacewa da ƙananan saitunan bayanai. Kuna rubuta bayanan JSON a cikin maballin Python, gabatar da shi tare da umarnin shigo da kaya, kuma a ƙarshen fayil ɗin ƙara layi uku don aiwatar da fitarwa.

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

Yanzu muna gudanar da wannan fayil ɗin a Python kuma mu sami fitarwa.yaml fayil:

$ 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

Wannan ingantaccen YAML ne, amma yamllint zai gargaɗe ku cewa ba ya farawa da -. To, ana iya gyara wannan cikin sauƙi da hannu ko a ɗan gyara shi a rubutun Python.

Juyawa ta hanyar rubutun

A wannan yanayin, da farko muna rubutawa a JSON, sannan mu gudanar da mai canzawa a matsayin rubutun Python daban, wanda ke samar da YAML azaman fitarwa. Idan aka kwatanta da hanyar da ta gabata, wannan hanyar tana da ma'auni mafi kyau, tun da canjin ya bambanta da bayanai.

Da farko, bari mu ƙirƙiri fayil ɗin JSON misali.json, alal misali, zaku iya ɗauka daga gare ta 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"
			}
		  }
		}
	  }
	}

Sa'an nan kuma za mu ƙirƙira rubutun mai sauƙi kuma mu adana shi a ƙarƙashin sunan json2yaml.py. Wannan rubutun yana shigo da duka tsarin YAML da JSON Python, kuma yana loda takamaiman fayil ɗin JSON mai amfani, yana yin jujjuyawa, kuma yana rubuta bayanan zuwa fayil ɗin fitarwa.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()

Ajiye wannan rubutun a cikin hanyar tsarin kuma gudanar da shi kamar yadda ake buƙata:

$ ~/bin/json2yaml.py example.json

3. Yi la'akari da yawa kuma akai-akai

Wani lokaci yana da amfani a kalli matsala ta wani kusurwa daban. Idan kuna fuskantar matsala wajen wakiltar alaƙar da ke tsakanin bayananku a cikin YAML, zaku iya canza shi na ɗan lokaci zuwa wani abu da kuka saba.

Misali, idan kuna jin daɗin yin aiki tare da jerin ƙamus ko JSON, zaku iya canza YAML zuwa JSON tare da umarni biyu kawai a cikin harsashi na Python mai mu'amala. Bari mu ce kuna da fayil ɗin YAML mydata.yaml, to wannan shine yadda zai yi 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.'}

Kuna iya samun wasu misalai da yawa akan wannan batu. Bugu da kari, akwai da yawa online converters da na gida parsers samuwa. Don haka kada ku yi jinkirin sake fasalin bayanan lokacin da kuka ga jumble mara fahimta kawai a ciki.

4. Karanta ƙayyadaddun bayanai

Komawa zuwa YAML bayan dogon hutu, yana da amfani don ziyarta yaml.org kuma sake karanta ƙayyadaddun bayanai (tallafi). Idan kuna da matsaloli tare da YAML, amma ba ku kai ga takamaiman bayani ba, to lokaci yayi da za a gyara wannan yanayin. Ƙayyadaddun ƙayyadaddun bayanai suna da ban mamaki da sauƙin rubutawa, kuma ana kwatanta buƙatun haɗin gwiwar tare da adadi mai yawa na misalai a cikin Babi na 6.

5. Tsara-tsare

Lokacin rubuta littafi ko labarin, yana da amfani koyaushe don fara zana jita-jita na farko, aƙalla a cikin nau'in tebur na abun ciki. Haka yake da YAML. Mafi mahimmanci, kuna da ra'ayin abin da ake buƙatar rubuta bayanai a cikin fayil ɗin YAML, amma ba ku fahimci yadda ake haɗa shi da juna ba. Don haka, kafin zana YAML, zana tsarin ƙira.

Pseudo-config yana kama da lambar ƙididdiga, inda ba lallai ne ku damu da tsari ko shigar da ku ba, dangantakar iyaye da yara, gado da gida. Haka yake a nan: kuna zana bayanan bayanan yayin da suke tasowa a cikin ku.

Matakai 10 zuwa YAML Zen

Pseudo-Confilling Programmers (Martin da Tabitha) da basirarsu (harsunan shirye-shirye: Python, Perl, Pascal da Lisp, Fortran, Erlang, bi da bi).

Bayan zana ɓangarorin ƙididdiga akan takarda, bincika ta a hankali kuma, idan komai yana cikin tsari, tsara shi ta hanyar ingantaccen fayil ɗin YAML.

6. The Tabs vs. Spaces Dilemma

Dole ne ku warware matsalar "Shafuka ko sarari?". Ba a ma'anar duniya ba, amma a matakin ƙungiyar ku kawai, ko aƙalla wani aiki. Ba kome ba ko wannan ya haɗa da yin amfani da bayanan aiki tare da rubutun sed, kafa editocin rubutu a kan injinan shirye-shirye, ko kuma ɗaukar rasitu na cikakken bin umarnin linter a ƙarƙashin barazanar korar, amma duk membobin ƙungiyar ku waɗanda ke cikin wata hanya ko wata alaƙa da YAML dole ne a yi amfani da sarari kawai (kamar yadda ƙayyadaddun YAML ke buƙata).

A cikin kowane editan rubutu na al'ada, zaku iya saita shafuka masu daidaitawa ta atomatik zuwa takamaiman adadin sarari, don haka tawaye na maɓallai. tab ba sai ka ji tsoro ba.

Kamar yadda kowane maƙiyin YAML ya san da kyau, ba za ku iya ganin bambanci tsakanin shafuka da sarari akan allo ba. Kuma idan ba a ga wani abu ba, yawanci shine abu na ƙarshe da mutane ke tunawa, bayan sun daidaita, bincika da kuma kawar da duk wasu matsalolin da za su iya yiwuwa. Sa'a guda na lokacin da aka kashe don neman madaidaicin tabo ko toshe sararin samaniya kawai yana kururuwa cewa kuna buƙatar ƙirƙirar manufa don amfani da ɗayan ko ɗayan, sannan aiwatar da ingantaccen bincike don bin shi (misali, ta hanyar. Git ƙugiya don tilasta shi ta hanyar linter).

7. Kadan ya fi (ko fiye da ƙasa)

Wasu mutane suna son rubutawa a cikin YAML saboda yana jaddada tsari. A lokaci guda, suna amfani da rayayye don yin amfani da indentation don haskaka tubalan bayanai. Wannan wani nau'i ne na zamba don yin koyi da yarukan ƙira waɗanda ke amfani da ƙayyadaddun iyaka.

Ga misalin irin wannan tsarin daga Takaddun da za a iya yiwuwa:

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

Ga wasu, wannan zaɓin yana taimaka musu wajen warware tsarin YAML a cikin kawunansu; ga wasu, akasin haka, yana fusatar da su da abubuwa da yawa waɗanda ba dole ba, a ra'ayinsu, ƙima.

Amma idan kai ne ma'abucin takardar YAML kuma ke da alhakin kiyaye ta, to kai da kai kadai dole ne ya ayyana yadda ake amfani da indentation. Idan babban fasinja ya fusata ku, kiyaye shi zuwa mafi ƙarancin yuwuwar bisa ga ƙayyadaddun YAML. Misali, fayil ɗin da ke sama daga Takaddun da za a iya sake rubutawa ana iya sake rubuta shi kamar haka ba tare da wata asara ba:

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

8. Yi amfani da babura

Idan koyaushe kuna maimaita kuskure iri ɗaya yayin cika fayil ɗin YAML, yana da ma'ana don saka samfuri a ciki azaman sharhi. Sannan lokaci na gaba zaku iya kwafi wannan samfuri kawai kuma ku shigar da bayanan gaske a wurin, misali:

---
# - <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. Yi amfani da wani abu daban

Idan aikace-aikacen ba shi da makama akan ku, to yana iya dacewa da canza YAML zuwa wani tsari na daban. Bayan lokaci, fayilolin sanyi na iya girma da kansu sannan yana da kyau a canza su zuwa rubutun sauƙi a cikin Lua ko Python.

YAML abu ne mai girma da mutane da yawa ke so don ƙarancinsa da sauƙi, amma ya yi nisa da kawai kayan aiki a cikin arsenal. Don haka wani lokacin kuna iya ƙi shi. Binciken dakunan karatu suna da sauƙin nemowa ga YAML, don haka idan kun ba da zaɓuɓɓukan ƙaura cikin sauƙi, masu amfani da ku za su tsira daga wannan gazawar ba da raɗaɗi ba.

Idan ba za ku iya yin ba tare da YAML ba, to ku ɗauki waɗannan shawarwari guda 10 kuma ku shawo kan rashin son YAML sau ɗaya kuma gaba ɗaya!

source: www.habr.com

Add a comment