Open dezhidki opened 1 year ago
Onko pisteryhmittelijöiden kattamien tehtävien lukumäärää tai maksimipistemäärää vielä mahdollista laskea millään tavalla? Tämä lienee viimeinen puuttuva ominaisuus, jonka tarvitsen syksyn kurssille.
Moi, ei vielä ole (prioriteetiksi nousi backendin päivittäminen ajan tasalle), mutta se on minulla listalla ennen syksyä :)
Sen verran kartoitin tilanteen, että syntaksi tulee olemaan todennäköisesti muotoa
fields:
- plugininfo:123.tallyfield.count
jolloin tallykentillä haetaan vastausten sijaan tietoja itse plugineista. Eli siis 'tally' etuliitteen sijaan käytetään 'plugininfo' ja muuten kenttäsyntaksi on sama kuin tallyn laskennassa. Siihen voi siis valmistautua, laitan tällä viikolla sinulle kokeiltavaksi 👍
Ominaisuus on nyt TIMissa, tässä esimerkki: https://tim.jyu.fi/view/users/dezhidki/snipetit/snip-plugininfo (katso JSRunnerin koodi sekä sivun asetukset).
Ei ole vielä dokumentaatiota, mutta syntaksi on
plugininfo:[doc_id].[group].[field]
jossa
doc_id
(valinnainen) on dokumentin ID, josta pluginit haetaan. Jos puuttuu, dokumentin ID on tämänhetkisen avatun dokumentin ID.group
(valinnainen) on pisteryhmittelijän nimi. Jos määritetty, kenttään haetaan vain pisteryhmittelijää vastaavat pluginit. Tällä tavoin pluginit voidaan suodattaa.field
on arvo, joka lasketaan haetuista plugineista. Tällä hetkellä on toteutettu vain:
count
: palauttaa löydettyjen pluginien lukumääränTällä ominaisuudella ei taida pystyä vielä tekemään taulukkoa kaikista tietyn pisteryhmittelijän tehtävien pisteistä. Hahmottelin sitä varten seuraavanlaista loitsua.
``` {#summary plugin="tableForm"}
groups:
## Funktio-ohjelmointikurssin opiskelijat saavat toimia testiaineistona.
- tiea341-2023-syksy-opiskelijat
fields:
## Haetaan sen sivun tunniste, jolla tehtävät asuvat.
## Tässä sivun nimeksi on oletettu `testi`.
{% set id = ("kurssit/tie/tiea341/2023s" ~ "/" ~ "testi") | docid %}
{% if id > 0 %}
## Haetaan sen pisteryhmittelijän tunniste, johon tehtävät kuuluvat.
## Tässä pisteryhmittelijän nimeksi on oletettu `laaja`.
## Suodatinta `slurp` ei ole vielä olemassa.
{% set exercise_names = (id ~ ".laaja") | slurp %}
{% for exercise_name in exercise_names %}
## Haetaan yksi pisteryhmittelijän tehtävä, ja
## annetaa sille lyhyt nimi, joka perustuu uniikkiin tehtävän nimeen.
- %% id %%.laaja.%% exercise_name %%.points=%% exercise_name %%
{% endfor %}
{% endif %}
## Edellisen silmukan voisi odottaa tuottavan seuraavanlaisen tuloksen,
## joka näkyisi taulukossa yhtenä rivinä tehtävää kohti.
# - 500000.exercise_1_1.points=exercise_1_1
# - 500000.exercise_1_2.points=exercise_1_2
# - 500000.exercise_1_4.points=exercise_1_4
## Hieman yleistämällä tällä saataisiin myös kooste
## kaikista kurssin tehtävien pisteistä.
```
Joo, tämän kortin nimi viittasikin max_points
-kenttään.
Sellainen on tosiaankin, että tällä hetkellä voi hakea tehtävien lukumäärän:
https://github.com/TIM-JYU/TIM/issues/3429#issuecomment-1683403904
Mutta täydellistä max_points -laskua ei vielä ole. Jätän tämän kortin auki ja muutan tagia.
Kommentoidaan nyt vielä tännekin, että max_points
-tiedon näyttäminen olisi hyödyllinen työkalu myös valintakokeiden laatijoille.
Omasta mielestäni on ihan OK määritellä max_points
-ominaisuus siten, että se ei ota huomioon postProgram-säätöjä ja opettajan ylikirjoittamia pisteitä. Tosin olisi mielestäni kohteliasta näyttää Teacher-näkymässä ilmoitus tilanteessa, jossa opettaja tallentaa pisteeksi arvon, joka on suurempi kuin (esim. csPluginin) maxPoints
.
(Miten muuten tuo nimeäminen menee, pitäisikö olla maxPoints
vai max_points
?)
Haikailin edellisessä kommentissa myös jotain mekanismia, jolla voisi iteroida pisteryhmittelijöiden kattamien tehtävien yli. Tällöin laskettavan asian voisi päättää itse.
Jatkoa kortille #3389
Pisteryhmittelijöille (
point_sum_rule
) voisi olla lisäkenttämax_points
, joka sisältää ryhmään kuuluvien tehtävien maksimipistemäärän. Silloin esim. JSRunnerissa voisi kysellä maksimipisteet kentällätally:rule.max_points
.Käytännön toteutus kuitenkaan ei ole suoraviivainen, koska TIM-tehtävissä ei aina ole kiinteitä maksimipisteitä (esim. postprogrammilla voi aina antaa mielivaltaiset pisteet, ja opettaja voi ylikirjoittaa pisteytyksen). Lisäksi eri plugineissa maksimipisteet esitetään eri tavoin (esim. csPluginissa
pointsRule.maxPoints
ja qst:ssämaxpoints
). Lisäksi maksimipisteet ovat tällä hetkellä pluginien ominaisuus, minkä takia maksimipisteiden selvittäminen vaatii pluginin markupin hakua ja lataamista.Tähän toteutukseen on muutama vaihtoehto:
max_points
rajoitetaan hakemaan pisteet markupista, mutta vain käyttäenpointsRule.maxPoints
, koska se on määritelty kaikkien pluginien yleiseksi pistekentäksianswer
-tietokantatauluun). Tällöin maksimipisteet voi hakea tietokannasta, ja niiden määritys voi toteuttaa pluginkohtaisesti. Lisäksi maksimipisteiden tallennus olisi perusteltua tehdä vastaukseen, koska tehtävän maksimipisteet saattavat muuttua tehtävässä.Kumpikin tapaus edellyttää melko paljon refaktorointia, ja ensimmäinen vaihtoehto voi turhaan hidastaa pisteryhmittelijät.