A config.json fájl a kurzus konfigurációját írja le. Olyan fontos információkat tartalmaz, mint a kurzus feladatai és fogalmai.
A következő legfelső szintű tulajdonságok általános kurzus-metaadatokat tartalmaznak:
language: a kurzus nyelve (pl. "C#"). A hossza legfeljebb 255 lehet. (kötelező)slug: a kurzus nyelve kisbetűs, kebab-case formátumú stringként (pl. "csharp"). A hossza legfeljebb 255 lehet. (kötelező)active: egy boolean érték, amely azt jelzi, hogy a kurzus aktív-e (azaz a tanulók csatlakozhatnak a kurzushoz a weboldalon) (kötelező)blurb: a nyelv rövid leírása. A hossza legfeljebb 400 lehet. (kötelező)version: a config.json fájl verziója (jelenleg 3-ra rögzítve) (kötelező)online_editor: az online szerkesztőhöz használt beállításokat leíró objektum: (kötelező)
indent_style: vagy "space", vagy "tab" (kötelező)indent_size: a behúzás mérete egész számként (pl. 4) (kötelező)highlightjs_language: a nyelvazonosító a Highlight.js-hez (lásd az azonosítók teljes listáját) (opcionális)status: egy objektum, amely leírja, hogy mely v3-s funkciókat kell engedélyezni: (kötelező)
concept_exercises: egy boolean érték, amely azt jelzi, hogy készültek-e tanulófeladatok (kötelező). Ha az értéke true, az Exercism weboldalának felülete jelzi, hogy a kurzushoz érhetők el tanulófeladatok.test_runner: egy boolean érték, amely azt jelzi, hogy implementáltak-e egy tesztfuttatót (kötelező). Ha az értéke true, a beküldött megoldásokat átengedjük a tesztelési infrastruktúránkon, és az eredményeket megjelenítjük a weboldalon. A weboldal emellett lehetővé teszi a tanulóknak, hogy tesztfuttatást indítsanak az online szerkesztőből.representer: egy boolean érték, amely azt jelzi, hogy implementáltak-e egy representert (kötelező)analyzer: egy boolean érték, amely azt jelzi, hogy implementáltak-e egy elemzőt (kötelező)files: A feladathoz használt fájlok helyének mintázatai, a feladat könyvtárához viszonyítva. (opcionális)
solution: a stub implementációs fájl(ok) mintázata (opcionális)test: a tesztfájl(ok) mintázata (opcionális)example: a példa-implementációs fájl(ok) mintázata (opcionális)exemplar: az exemplar-implementációs fájl(ok) mintázata (opcionális)editor: további írásvédett szerkesztőfájl-mintázatok (opcionális)test_runner: a kurzus tesztfuttatóját leíró objektum (ha van): (kötelező, ha a status.test_runner értéke true)
average_run_time: egy egész number érték, amely megadja, hogy a tesztfuttató átlagosan hány másodperc alatt fut le (pl. 4) (kötelező, ha a status.test_runner értéke true)approaches: objektum a kurzus megközelítéseire vonatkozó metaadatokkal: (kötelező, ha a kurzusnak van legalább egy megközelítése)
snippet_extension: a kódrészletfájl kiterjesztéséhez használt string érték (pl. rb) (kötelező, ha a kurzusnak van legalább egy megközelítése)Ez a kulcs a kurzusszintű fájlhelyek megadására szolgál. Ahelyett, hogy a karbantartóknak manuálisan kellene beállítaniuk a files kulcsot a feladatok config.json fájljaiban, a configlet ezekkel a kurzusszintű mintázatokkal automatikusan feltöltheti azt.
A files objektumban meghatározott fájlmintázatok a következő helyőrzőket támogatják:
%{kebab_slug}: a kebab-case formátumú feladat-slug (pl. bit-manipulation)%{snake_slug}: a snake_case formátumú feladat-slug (pl. bit_manipulation)%{camel_slug}: a camelCase formátumú feladat-slug (pl. bitManipulation)%{pascal_slug}: a PascalCase formátumú feladat-slug (pl. BitManipulation)A configlet később támogatni fogja ezeknek a mintázatoknak a használatát, hogy feltöltse a files kulcsot a feladat .meta/config.json fájljában.
{
"language": "C#",
"slug": "csharp",
"active": true,
"status": {
"concept_exercises": true,
"test_runner": true,
"representer": false,
"analyzer": false
},
"blurb": "C# is a modern, object-oriented language with lots of great features, such as type-inference and async/await. The tooling is excellent, and there is extensive, well-written documentation.",
"version": 3,
"online_editor": {
"indent_style": "space",
"indent_size": 4,
"highlightjs_language": "csharp"
},
"test_runner": {
"average_run_time": 2
},
"files": {
"solution": [
"%{pascal_slug}.cs"
],
"test": [
"%{pascal_slug}Tests.cs"
],
"example": [
".meta/Example.cs"
],
"exemplar": [
".meta/Exemplar.cs"
]
}
}
A legfelső szintű exercises kulcs egy objektum, amelynek három lehetséges kulcsa van:
concept: egy tömb, amely felsorolja a kurzus tanulófeladataitpractice: egy tömb, amely felsorolja a kurzus gyakorlófeladataitforegone: egy tömb, amely azon feladatok slugjait sorolja fel, amelyeket a kurzus nem kíván implementálniMinden tanulófeladat egy bejegyzés az exercises.concept tömbben.
A feladatok a weboldalon ugyanabban a sorrendben jelennek meg, ahogy ebben a fájlban szerepelnek, és ennek meg kell egyeznie azzal a tipikus sorrenddel, ahogy meg kell oldani őket.
Egy tanulófeladat a következő mezőkből áll:
uuid: egy V4 UUID, amely egyedileg azonosítja a feladatot. Az UUID-nak egyedinek kell lennie a kurzusan belül és az összes kurzus között is, és soha nem változhatslug: a feladat slugja, amely kisbetűs, kebab-case formátumú string. A slugnak egyedinek kell lennie a kurzusan belüli összes tanuló- és gyakorlófeladat slugja között. A hossza legfeljebb 255 lehet.name: a feladat neve. A hossza legfeljebb 255 lehet.concepts: azon fogalom-slugok tömbje, amelyeket ez a tanulófeladat tanítprerequisites: azon fogalom-slugok tömbje, amelyeket fel kell oldani, mielőtt a tanuló elkezdheti ezt a feladatotstatus (opcionális): a feladat állapota, amely a következők egyike: "wip", "beta" "active" vagy "deprecated"; ha nincs megadva, az alapértéke "active"
wip: Egy folyamatban lévő feladat, amely még nem kész a nyilvános használatra. Az ilyen jelölésű feladatokat nem jelenítjük meg a tanulóknak a felületen, és nem használjuk feloldási logikához. A karbantartók számára megjelenhetnek.beta: Új, aktív feladatokat jelöl, amelyekről visszajelzést szeretnénk kapni. Ezeknél a feladatoknál beta címkét jelenítünk meg az oldalon, egy „Kérünk, adj visszajelzést!” felszólítással.active: Az aktív feladatok szokásos állapotadeprecated: Olyan feladatok, amelyeket már nem jelenítünk meg azoknak a tanulóknak, akik még nem kezdték el őket (ebben a szakaszban nem használhatók). További információért lásd az elavult feladatokról szóló oldalt.{
"exercises": {
"concept": [
{
"slug": "cars-assemble",
"name": "Cars, Assemble!",
"uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
"concepts": [
"if-statements",
"numbers"
],
"prerequisites": [
"basics"
]
},
...
]
}
}
{
"exercises": {
"concept": [
{
"slug": "cars-assemble",
"name": "Cars, Assemble!",
"uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
"concepts": [
"if-statements",
"numbers"
],
"prerequisites": [
"basics"
],
"status": "wip"
},
...
]
}
}
Minden gyakorlófeladat egy bejegyzés az exercises.practice tömbben. Egy gyakorlófeladat a következő mezőkből áll:
uuid: egy V4 UUID, amely egyedileg azonosítja a feladatot. Az UUID-nak egyedinek kell lennie a kurzusan belül és az összes kurzus között is, és soha nem változhatslug: a feladat slugja, amely kisbetűs, kebab-case formátumú string. A slugnak egyedinek kell lennie a kurzusan belüli összes tanuló- és gyakorlófeladat slugja között. A hossza legfeljebb 255 lehet.name: a feladat neve. A hossza legfeljebb 255 lehet.practices: azon fogalom-slugok tömbje, amelyek gyakorlásában a feladat segít a tanulóknakprerequisites: azon fogalom-slugok tömbje, amelyeket fel kell oldani, mielőtt a tanuló elkezdheti a feladatotdifficulty: egy szám, amely a feladat nehézségét jelzi. A számnak az 1 (legkönnyebb) és 10 (legnehezebb) közötti tartományban kell lennie. A weboldal a nehézséget a következőképpen értelmezi:
status (opcionális): a feladat állapota, amely a következők egyike: "wip", "beta", "active" vagy "deprecated"; ha nincs megadva, az alapértéke "active"
wip: Egy folyamatban lévő feladat, amely még nem kész a nyilvános használatra. Az ilyen jelölésű feladatokat nem jelenítjük meg a tanulóknak a felületen, és nem használjuk feloldási logikához. A karbantartók számára megjelenhetnek.beta: Új, aktív feladatokat jelöl, amelyekről visszajelzést szeretnénk kapni. Ezeknél a feladatoknál beta címkét jelenítünk meg az oldalon, egy „Kérünk, adj visszajelzést!” felszólítássalactive: Az aktív feladatok szokásos állapotadeprecated: Olyan feladatok, amelyeket már nem jelenítünk meg azoknak a tanulóknak, akik még nem kezdték el őket (ebben a szakaszban nem használhatók).A gyakorlófeladatok „Ajánlott sorrendje” a weboldalon megfelel a feladatok practice tömbben szereplő sorrendjének.
{
"exercises": {
"practice": [
{
"slug": "leap",
"name": "Leap",
"uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
"practices": [
"if-statements",
"numbers",
"operator-precedence"
],
"prerequisites": [
"if-statements",
"numbers"
],
"difficulty": 1
},
...
]
}
}
{
"exercises": {
"practice": [
{
"slug": "leap",
"name": "Leap",
"uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
"practices": [
"if-statements",
"numbers",
"operator-precedence"
],
"prerequisites": [
"if-statements",
"numbers"
],
"difficulty": 1,
"status": "beta"
},
...
]
}
}
Ha egy kurzus tudja, hogy nem kíván implementálni egy feladatot, amely a Problem Specifications repóban van definiálva, akkor a feladat slugját hozzáadhatja az exercises.foregone kulcshoz. A configlet figyelmen kívül hagyja a mellőzött feladatokat, amikor kiírja a kurzus nem implementált feladatait.
Okok, amiért egy kurzus esetleg nem kíván implementálni egy feladatot:
{
"exercises": {
"foregone": [
"lens-person"
]
}
}
Minden fogalom egy bejegyzés a legfelső szintű concepts tömbben. Egy fogalom a következő mezőkből áll:
uuid: egy V4 UUID, amely egyedileg azonosítja a fogalmat. Az UUID-nak egyedinek kell lennie a kurzusan belül és az összes kurzus között is, és soha nem változhatslug: a fogalom slugja, amely kisbetűs, kebab-case formátumú string. A slugnak egyedinek kell lennie a kurzus összes fogalma között. A hossza legfeljebb 255 lehet.name: a fogalom neve. A hossza legfeljebb 255 lehet.tags: meghatározza azokat a feltételeket, amelyek teljesülése esetén egy beküldés egy megközelítéshez kapcsolódik. (opcionális)
all: olyan címkék tömbje, amelyeknek mind szerepelniük kell egy beküldésen (opcionális, kivéve, ha az any egyetlen elemet sem tartalmaz)any: olyan címkék tömbje, amelyek közül legalább egynek szerepelnie kell egy beküldésen (opcionális, kivéve, ha az all egyetlen elemet sem tartalmaz)not: egyik címkének sem szabad szerepelnie egy beküldésen (opcionális){
"concepts": [
{
"uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
"slug": "numbers",
"name": "Numbers",
"tags": {
"all": [
"concept:number"
]
}
}
]
}
A nyelv fő jellemzői tömören leírják, melyek a nyelv legfontosabb jellemzői. Céljuk, hogy a nyelv érdekesebb jellemzőit népszerűsítsék a leendő tanulók körében. A címeknél törekedj a lehető legkevesebb szakzsargon használatára, szem előtt tartva, hogy a tanulók a nyelv megtanulása előtt még nem biztos, hogy tisztában vannak azzal, mit jelentenek a nyelvspecifikus szakkifejezések.
A fő jellemzőket a legfelső szintű key_features mező adja meg, amely objektumok tömbjeként van definiálva a következő mezőkkel:
title: tömör fejléc a fő jellemzőhöz. A hossza legfeljebb 25 lehet. A Markdown nem támogatott.content: a fő jellemző leírása. A hossza legfeljebb 100 lehet. A Markdown nem támogatott.icon: a jellemzőhöz megjelenítendő ikon. Olyan ikont választhatsz, amelyet megfelelőnek tartasz, függetlenül annak nevétől. A következő ikonok használhatók:
communityconcurrencycross-platformdocumentationdynamically-typedeasyembeddableevolvingexpressiveextensiblefastfunfunctionalgarbage-collectedgeneral-purposehomoiconicimmutableinteractiveinteropmulti-paradigmportablepowerfulproductivesafescientificsmallstablestatically-typedtoolingwebwidely-usedEzeknek az ikonoknak a vizuális megjelenését a fő jellemzők ikonjai szakaszban nézheted meg.
Pontosan 6 fő jellemzőt kell megadni.
{
"key_features": [
{
"title": "Fault-tolerant",
"content": "Elixir runs on the Erlang VM, known for running low-latency, distributed and fault-tolerant systems.",
"icon": "safe"
},
...
],
}
A kurzusok címkékkel láthatók el, ami lehetővé teszi a kurzusok keresését egy adott címkekombináció alapján.
A kurzusnak a címkéit a nyelv általános használata alapján kell kiválasztania. Képzeld el például, hogy egy tanuló ezen gondolkodik: „Szeretnék gépi tanulással foglalkozni, melyik nyelvet válasszam?”, vagy: „Szeretnék funkcionális programozást tanulni, melyik nyelvet válasszam?”. Ha a te nyelved jó jelölt lenne, add neki azt a címkét. Ha a nyelved támogat néhány funkcionális ötletet, de azokat ritkán használják, vagy néhányan gépi tanulást végeznek vele, de ez ritka, akkor ne alkalmazd ezeket a címkéket.
A címkéket a legfelső szintű tags mező adja meg, amely stringek tömbjeként van definiálva. A következő címkék használhatók (kategóriák szerint csoportosítva):
paradigm/array: a nyelv tömbprogramozási nyelvparadigm/declarative: a nyelv támogatja a deklaratív programozási stílustparadigm/functional: a nyelv támogatja a funkcionális programozási stílustparadigm/imperative: a nyelv támogatja az imperatív programozási stílustparadigm/logic: a nyelv támogatja a logikaalapú programozási stílustparadigm/object_oriented: a nyelv támogatja az objektumorientált programozási stílustparadigm/procedural: a nyelv támogatja a procedurális programozási stílustparadigm/stack-oriented: a nyelv támogatja a veremorientált programozási stílusttyping/static: a nyelv statikus típusozást használtyping/gradual: a nyelv fokozatos típusozást használtyping/dynamic: a nyelv dinamikus típusozást használtyping/strong: a nyelv erős típusozást használtyping/weak: a nyelv gyenge típusozást használexecution_mode/compiled: a kód a végrehajtás előtt először lefordításra kerülexecution_mode/interpreted: a kód közvetlenül értelmezésre kerülplatform/windows: Windows rendszeren futplatform/mac: Macen futplatform/linux: Linuxon futplatform/ios: iOS-en futplatform/android: Androidon futplatform/web: böngészőben futruntime/standalone_executable: önálló futtatható programként futruntime/language_specific: nyelvspecifikus futtatókörnyezetben futruntime/clr: Common Language Runtime (.NET) környezetben futruntime/jvm: JVM-en (Java) futruntime/beam: BEAM-en (Erlang) futruntime/wasmtime: Wasmtime-on (WebAssembly) futused_for/artificial_intelligence: mesterséges intelligenciaused_for/backends: backendekused_for/cross_platform_development: platformok közötti fejlesztésused_for/embedded_systems: beágyazott rendszerekused_for/financial_systems: pénzügyi rendszerekused_for/frontends: frontendekused_for/games: játékokused_for/guis: grafikus felhasználói felületekused_for/mobile: mobilused_for/robotics: robotikaused_for/scientific_calculations: tudományos számításokused_for/scripts: szkriptekused_for/web_development: webfejlesztésNe feledd, hogy teljesen rendben van, ha egyetlen kategóriából több címkét is megadsz.
Példa
{
"tags": [
"paradigm/declarative",
"paradigm/functional",
"paradigm/object_oriented",
"platform/linux",
"platform/windows",
"runtime/jvm"
]
}
Így nézhet ki egy érvényes config.json fájl:
{
"language": "C#",
"slug": "csharp",
"active": true,
"status": {
"concept_exercises": true,
"test_runner": true,
"representer": false,
"analyzer": false
},
"blurb": "C# is a modern, object-oriented language with lots of great features, such as type-inference and async/await. The tooling is excellent, and there is extensive, well-written documentation.",
"version": 3,
"online_editor": {
"indent_style": "space",
"indent_size": 4,
"highlightjs_language": "csharp"
},
"test_runner": {
"average_run_time": 2
},
"files": {
"solution": [
"%{pascal_slug}.cs"
],
"test": [
"%{pascal_slug}Tests.cs"
],
"example": [
".meta/Example.cs"
],
"exemplar": [
".meta/Exemplar.cs"
]
},
"exercises": {
"concept": [
{
"slug": "lucians-luscious-lasagna",
"name": "Lucian's Luscious Lasagna",
"uuid": "7d358894-4fbd-4c91-b49f-d68f1c5aa6bc",
"concepts": [
"basics"
],
"prerequisites": []
},
{
"slug": "cars-assemble",
"name": "Cars, Assemble!",
"uuid": "93fbc7cf-3a7e-4450-ad22-e30129c36bb9",
"concepts": [
"if-statements",
"numbers"
],
"prerequisites": [
"basics"
],
"status": "wip"
}
],
"practice": [
{
"slug": "hello-world",
"name": "Hello, World!",
"uuid": "6c88f46b-5acb-4fae-a6ec-b48ae3f8168f",
"practices": [
"strings"
],
"prerequisites": [
"basics"
],
"difficulty": 1
},
{
"slug": "leap",
"name": "Leap",
"uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
"practices": [
"if-statements",
"numbers",
"operator-precedence"
],
"prerequisites": [
"if-statements",
"numbers"
],
"difficulty": 2,
"status": "beta"
}
]
},
"concepts": [
{
"uuid": "2eb4a463-355f-46ef-ac55-a75ec5afdf86",
"slug": "basics",
"name": "Basics"
},
{
"uuid": "4466e33e-dcd2-4b1f-9d9d-2c4315bf5188",
"slug": "if-statements",
"name": "If Statements"
},
{
"uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
"slug": "numbers",
"name": "Numbers"
},
{
"uuid": "7a86561d-173b-45c0-a53c-1ffd7b9ff259",
"slug": "strings",
"name": "Strings"
}
],
"key_features": [
{
"title": "Modern",
"content": "C# is a modern, fast-evolving language.",
"icon": "expressive"
},
{
"title": "Cross-platform",
"content": "C# runs on almost any platform and chipset.",
"icon": "cross-platform"
},
{
"title": "Multi-paradigm",
"content": "C# is primarily an object-oriented language, but also has lots of functional features.",
"icon": "multi-paradigm"
},
{
"title": "General purpose",
"content": "C# can be used for a wide variety of workloads, like websites, console applications, and even games.",
"icon": "general-purpose"
},
{
"title": "Tooling",
"content": "C# has excellent tooling, with linting and advanced refactoring options built-in.",
"icon": "tooling"
},
{
"title": "Documentation",
"content": "Documentation is excellent and exhaustive, making it easy to get started with C#.",
"icon": "documentation"
}
],
"tags": [
"paradigm/declarative",
"paradigm/functional",
"paradigm/object_oriented",
"platform/linux",
"platform/windows",
"runtime/jvm"
]
}