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

rndmacros aproo joka kerta uudet luvut #3506

Open vesal opened 1 year ago

vesal commented 1 year ago

Esim:

https://tim.jyu.fi/view/kurssit/tie/kvanttiaakkoset/materiaalia/a

on yritys luoda käyttäjälle 3 satunnaislukua jotka olisivat samoja joka kerta kun dokumentin aukaisee. Vikana näyttäisi olevan että tuonne:

https://github.com/TIM-JYU/TIM/blob/master/timApp/document/macroinfo.py#L157

tultaessa user on None. Ja näin siemenluku arvotaan joka kerta uudestaan.

vesal commented 1 year ago

Sitten pitäisiköhän siemen muodostaa userid+docid jotta käyttäjä ei saisi samoja arvoja toisessa dokussa? Voisi olla myös fuksua että rndmacros kaveriksi olisi rndmacrosseed jolla voisi makroja käyttäen säätää siementä niin, että haluttaessa saisikin samat luvut eri dokumenteissa, eli silloin voisi sanoa että siemen on %%userid%%

vesal commented 1 year ago

Tuota muuten kutsutaan 2x yhtä sivunvirkistystä kohti? Ja 2. kerralla user olisi olemassa ja tulee sama seed, mutta ensimmäisen kutsukerran tulosta käytetään noiden makrojen tekemiseen ja silloin useria ei ole.

dezhidki commented 1 year ago

Workaround tuolle on laittaa nocache="true". Plugineille sitä ei tarvitse, sillä plugineissa makrot avataan käyttäjäkontekstin kanssa (taitaa olla nykyään kahdesti, eka kerta yleisessä lohkoprosessoinnissa ilman kontekstia ja toisen kerran pluginkohtaisessa prosessoinnissa kontekstin kanssa).

Jos lohkon cachetus on päällä, niin MacroInfo:lle ei annetta käyttäjän kontekstia, jolloin käyttäjätunnuksesta riippuvat satunnaislukugeneraattorit eivät toimi. Se on sikäli ehkä bugi, että satunnaislukugeneraattorin pitäisi käyttäjätietojen puuttuessa tuttaa sellainen dokumenttikohtainen siemenluku. Vaihtoehtoisesti pitäisi näyttää selkeä virhe käyttäjälle, että pitää laittaa nocache="true" jos käyttää rndmacros peruslohkossa eikä pluginissa taikka visible-attribuutissa. Joka tapauksessa samaa mieltä, että sen ei sasi antaa joka kerta uudet luvut.

Pluginit ja visible-attribuutit ovat sikäli erikoiset, että niissä makrot avataan aina käyttäjäkontekstilla. Plugineissa taitaa olla tällä hetkellä sellainen logiikkavirhe, että siinä makrot avataan kahdesti: ensin peruslohkona ilman käyttäjäkontekstia ja sitten toisen kerran avataan YAML käyttäjäkontekstin kanssa, jolloin kaikki satunnaistus toimii oikein.

vesal commented 1 year ago

Mutta tuo ei taida olla ihan sama asia, koska arvonta tehdään mielestäni jo dokumenttia avattessa ja se määrää mitä tuolle tuonne macros-listaan. Mutta näköjään workaroudiksi kelpaa:

``` {settings=""}
auto_number_headings: 0
rndmacros:
  r: "[2,3,4]"
  seed: "%%userid%%"


jos nyt oikein kokeilin.
vesal commented 1 year ago

Ei kelvannutkaan, sillä ainakin lokaalissa koneessa %%seed%% on nyt aina 800 oli käyttäjä mikä tahansa.

dezhidki commented 1 year ago

nocache="true" on riittävä workaround tällä hetkellä , sillä se pakottaa käyttäjän kontekstin aina käytettäväksi makrojen avaamisessa.

Asian voi varmistaa esimerkiksi laittamalla

``` {settings=""}
auto_number_headings: 0
rndmacros:
  satunnainenNoppa: "[2,3,3]

Ja dokumenttiin

- {nocache="true"}

satunnainen: %%satunnainenNoppa%%


Sekä kokeilemalla, mitä tapahtuu, kun vaihtaa `true` -> `false` tai ottamalla `nocache` pois kokonaan.
Pluginien tapauksessa riittää esimerkiksi testikis
type: text
highlight:
stem: "Satunnainen luku: %%satunnainenNoppa%%"
button: Tallenna
rows: 1 


ja varmistumalla, että stemmissa on samalla käyttäjällä aina sama satunnaisluku. Debuggerilla varmaan huomaa, että plugineille tällä hetkellä makrot avataan kahdesti (en vielä ehtinyt testata, mutta näin veikkaisin kortin perusteella).

Esimerkki: <https://tim.jyu.fi/view/users/dezhidki/tim-tests/test-rndmacros>
vesal commented 1 year ago

OK, pitää kokeilla. Jostakin syystä kun Teiko kokeili, niin tuli eri plugineihin eri arvonta, mutta pitää vielä varmistaa...