பொதுவாக பயன்பாடுகளின் வகைகளில் சிலஇயல்புநிலை அல்லது பயன்பாட்டிற்கு வெளியிலான நிலை அல்லது உள்ளமைவு, அத்துடன் பயனாளர்கள் தங்களுடைய தேவைகளுக்கு ஏற்பஅந்த உள்ளமைவைத் தனிப்பயனாக்கம் செய்வதற்கான வழிகள் ஆகியவை அடங்கும். எடுத்துக்காட்டாக, விபர் ஆபிஸ் ரைட்டரின் கட்டளை பட்டியில் Tools > Optionsஎன்றவாறு வாய்ப்புகளை தெரிவுசெய்வதன் மூலம் பயனாளர் தரவுகள், எழுத்துருக்கள், மொழி அமைப்புகள் , போன்றவற்றிற்கான அணுகலை லிபர் ஆஃபிஸ் ரைட்டர் வழங்குகிறது. இந்த அமைப்புகளை நிர்வகிக்க சில பயன்பாடுகள் (லிபர் ஆபிஸ் போன்றவை) குறிப்பிட்ட பகுதியை தெரிவுசெய்து சொடுக்குதல் எனும் பயனாளர் இடைமுகத்தை வழங்குகின்றன. பின்தொடர்வரைப் போல சில (கோப்புகளைக் குறிக்கின்ற GNOME பணி), XML கோப்புகளைப் பயன்படுத்துகின்றன. பல, குறிப்பாக ஜாவாஸ்கிரிப்ட் அடிப்படையிலான பயன்பாடுகள், பலரின் எதிர்ப்பையும் மீறி, JSON ஐப் பயன்படுத்துகின்றன . இந்த கட்டுரையில், JSON ஐ உள்ளமைவு கோப்பு வடிவமாகப் பயன்படுத்தலாமா வேண்டாமா என்பது பற்றிய விவாதமானது புறக்கணிக்கப்பட்டுள்ளது, மேலும் Groovy எனும் நிரலாக்க மொழியைப் பயன்படுத்தி இந்த வகையான தகவல்களை எவ்வாறு அலகிடுவது என விளக்கமளிக்கப்படுகின்றது. Groovy எனும் நிரலாக்க மொழியானது ஜாவாஎனும் நிரலாக்க மொழியை அடிப்படையாகக் கொண்டது, ஆனால் வேறுபட்ட வடிவமைப்பு முன்னுரிமைகள் கொண்ட Groovy எனும் நிரலாக்க மொழியானது பைத்தான் எனும் நிரலாக்க மொழியைப் போல உணரவைக்கும்.
Groovyஐ நிறுவுகைசெய்தல்
Groovy எனும் நிரலாக்க மொழியானது ஜாவாஎனும் நிரலாக்க மொழியை அடிப்படையாகக்கொண்டிருப்பதால், இதற்கு ஜாவாஎனும் நிரலாக்க மொழியையும் நிறுவுகை செய்யவேண்டியுள்ளது. லினக்ஸ் விநியோகத்தின் களஞ்சியங்களில் ஜாவா , க்ரூவியின் சமீபத்திய பதிப்புகளை காணலாம். அல்லது க்ரூவியை அதன் இணைய தளத்தில் கூறிடும் வழிமுறைகளைப் பின்பற்றி பதிவிறக்கம் செய்துநிறுவுகைசெய்திடலாம். லினக்ஸ் பயனாளர் களுக்கு ஒரு நல்ல மாற்று SDKMan ஆகும், இது ஜாவா, க்ரூவி , பல தொடர்புடைய கருவிகளின் பல்வேறு பதிப்புகளைப் பெறுவதற்காக பயன்படுத்திகொள்ளலாம். இந்த கட்டுரைக்கு, OpenJDK11 வெளியீடு, SDKMan இன் க்ரூவி 3.0.7 வெளியீட்டைப் பயன்படுத்திகொள்ளப்படுகின்றது.
JSON இன் மாதிரி உள்ளமைவு கோப்பு
இந்த செயல்முறைவிளக்கத்திற்காக, JSON ஐ Drupal இலிருந்து பயன்படுத்தி கொள்ளப்படுகின்றது – இது Drupal CMS ஆல் பயன்படுத்தப்படும் முக்கிய உள்ளமைவு கோப்பு – அதை config.json கோப்பில் சேமிக்கின்றது:
{
“vm”: {
“ip”: “192.168.44.44”,
“memory”: “1024”,
“synced_folders”: [
{
“host_path”: “data/”,
“guest_path”: “/var/www”,
“type”: “default”
}
],
“forwarded_ports”: []
},
“vdd”: {
“sites”: {
“drupal8”: {
“account_name”: “root”,
“account_pass”: “root”,
“account_mail”: “box@example.com“,
“site_name”: “Drupal 8”,
“site_mail”: “box@example.com“,
“vhost”: {
“document_root”: “drupal8”,
“url”: “drupal8.dev”,
“alias”: [“www.drupal8.dev”]
}
},
“drupal7”: {
“account_name”: “root”,
“account_pass”: “root”,
“account_mail”: “box@example.com“,
“site_name”: “Drupal 7”,
“site_mail”: “box@example.com“,
“vhost”: {
“document_root”: “drupal7”,
“url”: “drupal7.dev”,
“alias”: [“www.drupal7.dev”]
}
}
}
}
}
இது பல நிலைகளைக் கொண்ட சிக்கலானஆனால் நல்லதொரு JSON கோப்பாகும், இது பின்வருவதைபோன்றது:
<>.vdd.sites.drupal8.account_name
மேலும் சில பட்டியல்கள் பின்வருவை போன்றவை:
<>.vm.synced_folders
இதில், <> என்பது பெயரிடப்படாத உயர் மட்ட நிலையை குறிக்கிறது. க்ரூவி அதை எவ்வாறு கையாளுகின்றது என இப்போது காண்போம்.
க்ரூவியுடன் JSON ஐ பாகுபடுத்துதல்
க்ரூவியானது groovy.json எனும் தொகுப்புடன் வருகிறது, இது அனைத்து வகையான பொருட்களிலும் நிறைந்துள்ளது. இதனுடைய சிறந்த பகுதிகளில் ஒன்று JsonSlurper இனமாகும், இதில் JSON ஐ க்ரூவி வரைபடமாக மாற்றும் பல பாகுபடுத்தல் (parse()) வழிமுறைகள் உள்ளன இது திறவுகோள்களுக்கு எதிராக சேமிக்கப்பட்ட மதிப்புகளைக் கொண்டதொரு தரவுகளின் அமைப்பாக Json Slurper எனும் உதாரணத்தை உருவாக்குகின்றது config1.groovy என்ற பெயரில் ஒரு குறுகிய நல்ல க்ரூவி நிரலாக்கம் கூட உள்ளது, பின்னர் அதன் பாகுபடுத்தும் (parse()) வழிமுறைகளில் ஒன்றை JSON ஐ ஒரு கோப்பில் பாகுபடுத்தி அதை கட்டமைப்பு எனப்படும் வரைபட நிகழ்வாக மாற்றுகிறது, இறுதியாக அந்த வரைபடத்தை எழுதுகிறது :
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def config = jsonSlurper.parse(new File(‘config.json’))
println “config = $config”
இந்த நிரலாக்கத்தினை ஒரு முனைமத்தின் கட்டளை வரியில் இயக்கிடுக:
$ groovy config1.groovy
config = [vm:[ip:192.168.44.44, memory:1024, synced_folders:[[host_path:data/, guest_path:/var/www, type:default]], forwarded_ports:[]], vdd:[sites:[drupal8:[account_name:root, account_pass:root, account_mail:box@example.com, site_name:Drupal 8, site_mail:box@example.com, vhost:[document_root:drupal8, url:drupal8.dev, alias:[www.drupal8.dev]]], drupal7:[account_name:root, account_pass:root, account_mail:box@example.com, site_name:Drupal 7, site_mail:box@example.com, vhost:[document_root:drupal7, url:drupal7.dev, alias:[www.drupal7.dev]]]]]]
$
இதனுடைய வெளியீடு இரண்டு திறவுகோள்களைக் கொண்டதொரு உயர்மட்ட வரைபடத்தைக் காட்டுகிறது: vm ,vdd. ஆகிய ஒவ்வொரு திறவுகோளும் அதன் சொந்த மதிப்புகளின் வரைபடத்தைக் குறிக்கிறது. forwarded_ports திறவுகோளால் குறிப்பிடப்பட்ட வெற்று பட்டியலைக் கவனித்திடுக.அது எளியது, ஆனால் அது செய்த தெல்லாம் செய்திகளை அச்சிடுவதுதான். பல்வேறு கூறுகளை எவ்வாறு பெறுவது? சேமிக்கப்பட்ட மதிப்பை எவ்வாறு அணுகுவது? என்பதைக் காட்டும் மற்றொரு நிரலாகக்ம் பின்வருமாறு
config.vm.ip:
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def config = jsonSlurper.parse(new File(‘config.json’))
println “config.vm.ip = ${config.vm.ip}”
இதை இயக்கிடுக::
$ groovy config2.groovy
config.vm.ip = 192.168.44.44
$
ஆமாம், இதுவும் எளியதுதான். இது க்ரூவி சுருக்கெழுத்தை சாதகமாக்குகிறது:
config.vm.ip
config மற்றும் config.vm
இரண்டும் வரைபடத்தின் நிகழ்வுகளாக இருக்கும்போது, இவை இரண்டும் சமமாகின்றது:
config.get(“vm”).get(“ip”)
ஜாவாவில். JSON ஐ கையாளுவதற்கு இவ்வளவு கவணமாக செயல்படவேண்டியுள்ளது. ஒரு நிலையான உள்ளமைவை விரும்பினால், அதை பயனாளர் மேலெழுத அனுமதிக்க வேண்டுமா? அவ்வாறான நிலையில், நிரலில் ஒரு JSON உள்ளமைவை கடின மானகுறிமுறைவரிகளாக வைத்திருக்க விரும்பலாம், பின்னர் பயனாளர் உள்ளமைவைப் படித்து, நிலையான உள்ளமைவு அமைப்புகளில் எதையும் மேலெழுதலாம். மேலே உள்ள உள்ளமைவு நிலையானது என்று கொள்க, மேலும் பயனாளர் அதில் ஒரு துனுக்கினை (bit ) மட்டுமே மேலெழுத விரும்புகிறார், vm எனும் கட்டமைப்பில் உள்ள ipஉம் நினைவக மதிப்புகளும் அதை பயனாளர் Config.json கோப்பில் வைப்பதற்குமான குறிமுறைவரிகள் பின்வருமாறு:
{
“vm”: {
“ip”: “201.201.201.201”,
“memory”: “4096”,
}
}
இந்த நிரலைப் பயன்படுத்தி கூட அதைச் செய்யலாம்:
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
// ஒரு கோப்பிலிருந்து படிப்பதை விட ஒரு சரத்தை பாகுபடுத்துவதற்கு parseText () ஐப் பயன்படுத்திடுக
//இதுநமக்கு “standard configuration”என்பதை அளிக்கின்றது
def standardConfig = jsonSlurper.parseText(“””
{
“vm”: {
“ip”: “192.168.44.44”,
“memory”: “1024”,
“synced_folders”: [
{
“host_path”: “data/”,
“guest_path”: “/var/www”,
“type”: “default”
}
],
“forwarded_ports”: []
},
“vdd”: {
“sites”: {
“drupal8”: {
“account_name”: “root”,
“account_pass”: “root”,
“account_mail”: “box@example.com“,
“site_name”: “Drupal 8”,
“site_mail”: “box@example.com“,
“vhost”: {
“document_root”: “drupal8”,
“url”: “drupal8.dev”,
“alias”: [“www.drupal8.dev”]
}
},
“drupal7”: {
“account_name”: “root”,
“account_pass”: “root”,
“account_mail”: “box@example.com“,
“site_name”: “Drupal 7”,
“site_mail”: “box@example.com“,
“vhost”: {
“document_root”: “drupal7”,
“url”: “drupal7.dev”,
“alias”: [“www.drupal7.dev”]
}
}
}
}
}
“””)
// செந்தர உள்ளமைவை அச்சிடுக
println “standardConfig = $standardConfig”
// பயனர் உள்ளமைவு தகவலைப் படித்து பாகுபடுத்திடுக
def userConfig = jsonSlurper.parse(new File(‘userConfig.json’))
// பயனர் உள்ளமைவு தகவலை அச்சிடுக
println “userConfig = $userConfig”
// பயனர் உள்ளமைவை செந்தரத்துடன் இணைக்க ஒரு செயலி
def mergeMaps(Map input, Map merge) {
merge.each { k, v ->
if (v instanceof Map)
mergeMaps(input[k], v)
else
input[k] = v
}
}
// உள்ளமைவுகளை ஒன்றிணைத்து மாற்றியமைக்கப்பட்டவற்றை அச்சிடுக
// செந்தரதிதுடனான உள்ளமைவு
merge Maps(standardConfig, userConfig)
print ln “modified standardConfig $standardConfig”
இதை இயக்கிடுக:
$ groovy config3.groovy
standardConfig = [vm:[ip:192.168.44.44, memory:1024, synced_folders:[[host_path:data/, guest_path:/var/www, type:default]], forwarded_ports:[]], vdd:[sites:[drupal8:[account_name:root, account_pass:root, account_mail:box@example.com, site_name:Drupal 8, site_mail:box@example.com, vhost:[document_root:drupal8, url:drupal8.dev, alias:[www.drupal8.dev]]], drupal7:[account_name:root, account_pass:root, account_mail:box@example.com, site_name:Drupal 7, site_mail:box@example.com, vhost:[document_root:drupal7, url:drupal7.dev, alias:[www.drupal7.dev]]]]]]
userConfig = [vm:[ip:201.201.201.201, memory:4096]]
modified standardConfig [vm:[ip:201.201.201.201, memory:4096, synced_folders:[[host_path:data/, guest_path:/var/www, type:default]], forwarded_ports:[]], vdd:[sites:[drupal8:[account_name:root, account_pass:root, account_mail:box@example.com, site_name:Drupal 8, site_mail:box@example.com, vhost:[document_root:drupal8, url:drupal8.dev, alias:[www.drupal8.dev]]], drupal7:[account_name:root, account_pass:root, account_mail:box@example.com, site_name:Drupal 7, site_mail:box@example.com, vhost:[document_root:drupal7, url:drupal7.dev, alias:[www.drupal7.dev]]]]]]
$
செந்தர கட்டமைவின் மாறுதலாகஇந்த வரியானது துவங்கிடுவதாக காண்பிக்கின்றது மேலும் vm.ip, vm.memory ஆகியவற்றின் மதிப்புகள் மீறப்பட்டதைக் காட்டுகிறது. தவறான JSON ஐ நாம் சரிபார்க்கவில்லை என்பதையும், பயனாளர் உள்ளமைவு அர்த்தமுள்ளதா என்பதை உறுதிப்படுத்த நாம் கவனமாக இருக்கவில்லை (புதிய புலங்களை உருவாக்கவில்லை, நியாயமான மதிப்புகளை வழங்குதல், போன்ற பல) என்பதையும் நாம் இதன்வாயிலாக தெரிந்து கொள்ளலாம் . எனவே இரண்டு வரைபடங்களையும் ஒன்றிணைக்க அழகான சிறிய சுழல்நிலையின் வழிமுறை உலகின் உண்மையான நடைமுறையில் இல்லை.