TIM-JYU / TIM

TIM (The Interactive Material) is an open-source cloud-based platform for creating interactive learning documents.
https://tim.education/view/about/en-US
MIT License
14 stars 4 forks source link

Tehtävien uudelleenarvonta #2341

Closed dezhidki closed 2 years ago

dezhidki commented 3 years ago

Vaikka TIMin staunnaistaminen toimii hyvin STACK-tehtävien kanssa, joskus on hyvää pystyä arpomaan pyynnöstä tehtävää uudelleen. Tätä varten voisi olla erillinen asetus STACKissa, joka arpoo uuden siemenluvun ja resetoi tehtävän painiketta painatessa.

Tästä on hyötyä silloin, kun haluaa tehdä "loputtomia" harjoitustehtäviä samalla tavalla kuin vaikkapa Wolfram Problem Generator.

Alettu tekemään branchissä answernr. Tämä perustuu siihen, että siemenlukuun lisätään vielä vastauksen järjestysnumero (0=ensimmäinen vastaus).

Tehtävä vielä:

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 09:40

Stackissä voi käyttää TIMin arpomaa lukua siemenlukuna. Eli kannattaa saman tien tehdä niin, että tuon voi arpoa uudelleen jolloin se toimii missä vaan komponentissa.

Vesa

dezhidki commented 3 years ago

Stackissä voi käyttää TIMin arpomaa lukua siemenlukuna.

Siis joo, se on se tapa, jolla nykyään STACKissa pitää arpoa tehtävät TIMissa.

Eli kannattaa saman tien tehdä niin, että tuon voi arpoa uudelleen jolloin se toimii missä vaan komponentissa.

Ai siis että yleisesti tuota TIM-satunnaistuksen simenlukua voi jollain painikkeella vaihtaa? En nyt uskalla sanoa, kuinka suuri työ se olisi, koska TIM-satunnaistaminen on sen verran geneerinen ominaisuus, että se ei riipu mistään pluginista. Varmaan tarkoittaisi sitä, että pitäisi jokaiselle lohkolle tallettaa sen tämänhetkinen käyttäjäkohtainen siemenluku.

Varmaan teen niin, että teen ekaksi ominaisuuden STACKille, koska se on tarpeeksi rajattu ja sitä nyt tarvittaisiin heti. Mutta tutkin samalla, kuinka paljon työtä olisi tehdä siitä yleinen TIM-satunnaistuksen ominaisuus.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 10:00

Eikös resetin vousi tehdä atribuutilla yleiseksi mihin vaan tim tehtävään niin, että se samoo plugininille ettei ole vanhaa vastausta.

Eikös stack antaisi silloin uuden tehtövän ilman vastausta

dezhidki commented 3 years ago

Ainakin cspluginissa yleisessä käyttöliittymässä on se undo-painike, mutta se toimii vain, jos kielityyppi käyttää cspluginin yleistä käyttöliittymää. STACK käyttää omaa Angular-komponenttia.

En nyt uskalla sanoa, että saisi mihin tahansa TIM-tehtävään, koska TIMissa ei ole sellaista "yhteistä" tehtävän ulkonäköä kaikille plugineille, vaan jokainen plugin määrittää ulkonäkönsä itse. Vaikka jokainen TIM-tehtävä on yleensä plugin, mikä tahansa plugin ei välttämättä ole tehtävä.

Mutta tästä tulee mieleen, että tekisin jonkun yleisen komponentin, jolla tällaisen undo-toiminnon voi helposti liittää mihin tahansa pluginiin. Varmaan joskus olisi yleisestikin hyvää määriittää jotkut yleiskomponentit (siis muutakin kuin SCSS-luokat), jolla voi saada tällaiset toiminnallisuudet heti jokaisen tehtäväpluginiin. Tällä hetkellä näyttää olevan niin, että jokainen tehtäväplugin tekee itse layoutin cspluginin näköiseksi.

Eikös stack antaisi silloin uuden tehtövän ilman vastausta

Juu, jos käyttää TIM-satunnaistuksen siemenlukuna kellonaikaa eikä oletusarvoa (pluginin markupista + käyttäjänimestä generoitu hash). Siinä tosin on sellainen bugi nyt kun kokeilin, että se arpoo uuden siemenluvun, kun painetaan "lähetä", jolloin STACKin tarkistuskoneeseen menee eri tehtävä kuin mihin käyttäjä on vastannut.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 10:18

Eihän tuo kuuten ihan hyvin toimi? Kun teen uuden tehtävän, siinä tulee kysymys ja kun siihen vastaa, niin eka menee aina väärin.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 10:23

Yhteistä kaikille tehtävill on se answerbrowser ja siihen voisi periaatteessa ujuttaa tällaista nollausta.

Tosin sius se toinen vaihtoehto olisi että jo tim tasolla ei välitettäisi pluginille vanhaa tietoa, jolloin plugin tuottaa joka tehtävään alussa olevan tilanteen.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 15:42

Tuo:

https://tim.jyu.fi/view/users/dezhidki/stack_random_test

ei toimi myöskään MathCheckille ja tuskin sitten millekkään muullekkaan csPlugin pohjaiselle tehtävälle. Aina saa vääriä vastauksia. Täytyy vähän miettiä asiaa miten noita tietoja palautetaan pluginille takaisin.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 16:14

Vika ilmenee myös niin, että kun selailee omia vastauksiaan, niin joka kerraksi arvotaan uusi tehtävä. Ymmärtääkseni johonkin (???) on tallennettu käytetty siemen, koska kun opettaja selailee eri opiskelijoiden vastauksia, niin osataan näyttää kullakin käytetty tehtävä (???). Tuota samaa tekniikka joutuisi käyttämään tuossa selailussa, mutta myös answer-reitissä jotta sinne ei viedä uutta arvottua tehtävää, vaan se mikä opiskelijalle oli näytetty.

Sitten kun tämä on kunnossa, niin arvottujen tehtävien toteuttaminen on lähempänä.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 19:40

Ongelma lähtee tuolta: vastauksen tallentamisen kohdalta timApp/answer/routes.py rivi 598 kun haetaan tehtävä, niin se haetaan uuden arvonnan perusteella. Tuohon pitäisi jotenkin saada se anhan arvonnan tulos. Hankalaa, koska sitä vanhan arvonnan tulosta ei ole mihinkään tallennettu Periaatteessa sen voisi viedä selaimelle ja selain palauttaisi sen, mutta silloin oltaisiin alttiita sillä että käyttäjä muuttelisi sitä. Esim niin, että tietäisi jonkun arvonnan (kaverin koneella katsottu ja vastattu oikein tms) jolle tietää oikean vastauksen ja työntäisi ne post-kutsuun. Tosin joko silloin ollaan tilanteessa että sama kaveri olisi voinut vastata oikein siinä selaimessa missä häckiä yritetään. No voihan olla että siellä kaverin koneella oli helpompi tehtävä. Mutta alkuun se voisi riittää jos nöin tehtyjä tehtäviä ei ole tarkoituskaan käyttää pisteiden antamiseen vaan käyttäjää varoitetaan että näin saa tehdä vain preppaustehtäviä. Toinen mahdollisuus olisi tallentaa arvonnan tulos kantaan jokaista käyttäjää/vastausyritystä kohti.

Kantaan tallentamisen vika on siinä, että jos käyttäjä avaa samaan kysymykseen useita ikkunoita, niin tulevasta vastauksesta ei voida sellaisenaan tietää mihin ikkunaan avatusta oli kyse. Paitsi jos tarkoitus onkin että jo käyttäjän 1. kysymyksen haulla kiinnitetään seed ja jos avaa toisen ikkunan, niin sillin käytetään samaa seed, kunnes tulee vastaus jolloin se kannassa oleva seed vaihdetaan. Tämä vaihtoehto tarvitsisi siis uuden taulun jossa on task_id, vastaaja_group_id ja seed.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 20, 2021, 21:23

Osin munkin vika, sillä tuolla timApp/util/rndutils.py 205 jos seed on tyhjä, niin parametrina tuotavasta rnd_seed huolimatta AINA arvotaan uusi rnd_seed. ELi joka tapauksessa pitäisi answer-reitille olla tapa ilmoittaa että nyt on PAKKO käyttää tätä rnd_seed.

Toimii se että seed puuttuu kokonaan ja se että seed on vakio. Tämä että seed="" ei toimi alkuunkaan tehtävien yhteydessä.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 21, 2021, 16:28

Käyttötarkoitukseen helpoimmalla saatettaisiin päästä jos plugin reitti ja answer reitti saavat tietää että monesko käyttäjän vastaus on menossa (aluksi 0) ja sitten normaalia seediä "suolataan" vielä tällä luvulla. Silloin ei tarvitsisi mitään viedä kantaan ja jokainen vastaus muodosta sitten uuden kysymyksen. Rikki tämä voisi edelleen mennä sillä, että käyttäjä avaa useita kertoja saman kysymyksen eri ikkunoihin ja vastailee hiihin satunnaisessa järjestyksessä. Mutta menee se muutenkin rikki tavallaan jos on rajattu määrä vastauskertoja ja tekee tuota. Tämän voisi ehkä jatkossa tarkistaa niin, että tuo kertanumero on selaimen tiedossa jolloin jokaisella ikkunalla on kertanumero tiedossa ja vain yhdeltä ikkunalta hyväksytään tähän kertaan liittyvä vastaus.

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 21, 2021, 16:30

Nyt tuota on aloitettu tekemään branchiin:

https://gitlab.com/tim-jyu/tim/-/tree/answernr

Testata voi esimerkiksi alla olevalla dokulla. Uuden tehtävän saa kun refreshaa selaimen. Toistaiseksi EI saa vastata samaan tehtävään uudelleen, eli vastaamisen jälkeen on selain refreshattava. Selailemalla näkee vanhat tehtävät ja vastaukset, mutta niihinkään ei saa vastata uudelleen. Puutteista ruksi kortin alussa.

``` {id="LlATVrLNrO0Q" #seq2_1r plugin="csPlugin" rnd="[[-10,10],[-10,-1]]" seed="answernr"}
header: Itseisarvo %%rnd|string%%
type: mathcheck
isHtml: true
stem: 1. Ratkaise luvun `%%rnd[0]%% +  %%rnd[1]%%` itseisarvo.
fullprogram: |!!
arithmetic
f_nodes 1
abs( %%rnd[0]%% +  %%rnd[1]%% )
// BYCODEBEGIN
=
// BYCODEEND
!!
type: stack
newtask: true
undo:
  button: Yay
-pointsRule: {}
header: "Ynnää lukuja %%rnd[0]%%"
open: true
-stackData:
    seed: %%rnd[0]%%
    readOnly: false
    feedback: true
    score: true
    lang: 'fi'
    question: |!!
---
name: Ynnää
question_html: |
  <p>Laske yhteen {@a@} + {@b@} &nbsp; [[input:ans1]] &nbsp;&nbsp;[[validation:ans1]]</p>
variables: |-
  a : rand(20)-9;
  b : rand(20)-9;
specific_feedback_html: '[[feedback:prt1]]'
note: <p>Tämä on note</p>
inputs:
  ans1:
    type: algebraic
    model_answer: a+b
    box_size: 15
    syntax_hint: "99"
    syntax_attribute: value
response_trees:
  prt1:
    first_node: node_0
    nodes:
      node_0:
        answer: ans1
        model_answer: a+b
        T:
          score_mode: equals
          answer_note: prt1-1-T
          feedback_html: <p>Oikein!  Hienoa!</p>
        F:
          answer_note: prt1-1-F
          feedback_html: <p>Voi ei, meni väärin.</p>
stackversion: 0
...    
!!
dezhidki commented 3 years ago

In GitLab by @vesal on Aug 23, 2021, 03:11

Nykyisen version puutteet:

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 23, 2021, 03:11

marked the task answerBrowserin pitäisi tehdä painike: Uusi tehtävä (pitäisi tilata samalla tavalla kuin refresh tekee sivulle) as completed

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 24, 2021, 03:21

marked the task Näytä refreshin jälkeen AB:ssä tyhjää paikkaa samoin kuin New task jälkeen, as completed

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 24, 2021, 03:21

marked the task Lisää answernr answerbrowser3.ts 1035 jälkeen as completed

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 24, 2021, 03:21

marked the task vastaamisen jälkeen kaikissa plugintyypeissä pitäisi Aja tai Tallenna tms disabloida/piilottaa as completed

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 24, 2021, 03:25

Tehty niin, että ab kertoo monesko vastaus on valittuna ja sitten tätä käytetään apuna siemenen laskemisessa. Näin saadaan selattaessa vanhat vastaukset oikeilla kysymyksillä ja niihin voi kokeilumielessä vastata uudelleen, mutta uusi vastaus ei tallennu. Ja jos siitä on pisteitä jaossa, niin uudesta vastauksesta ei saa pisteitä.

KUn sivu luodaan, niin muista poiketen comboboxeissa näytetään tyhjää valintaa merkkinä siitä, että kyseessä on uusi tehtävä.

Käyttämiseksi tarvitaan "vain" seed="answernr"

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 29, 2021, 11:16

marked the task Attribuutti: initNewAnswer:, jolla voi määritellä, että mikä pohjateksti tulee vastaukseen as completed

dezhidki commented 3 years ago

In GitLab by @vesal on Aug 29, 2021, 22:46

marked the task Mahdollisuus tehdä tehtäviä, joissa pitää saada vaikkapa 10 tehtävää oikein. as completed

dezhidki commented 3 years ago

In GitLab by @vesal on Sep 1, 2021, 08:38

marked the task vanhaan vastaaminen ei saisi näyttää saved. Thety ohje kuina postprogramilla as completed

dezhidki commented 3 years ago

Oliko tässä vielä jotain puuttuvaa? Ainakin kaikki ruksit ovat merkattu ja kommenttien perusteella ensisijaiset virheet korjattu.

dezhidki commented 3 years ago

In GitLab by @vesal on Oct 14, 2021, 09:17

Oliko tässä vielä jotain puuttuvaa? Ainakin kaikki ruksit ovat merkattu ja kommenttien perusteella ensisijaiset virheet korjattu.

Ainakin tämän kortin voi sulkea. Tehdään uusi jos ilmenee jotakin. Alkuperäinen "tilaaja" ei oe tainnut olla yhteyksissä että toimiiko hän mielestään.