Open vesal opened 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%%
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.
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.
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.
Ei kelvannutkaan, sillä ainakin lokaalissa koneessa %%seed%% on nyt aina 800 oli käyttäjä mikä tahansa.
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
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>
OK, pitää kokeilla. Jostakin syystä kun Teiko kokeili, niin tuli eri plugineihin eri arvonta, mutta pitää vielä varmistaa...
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.