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
13 stars 4 forks source link

Autosave kokeiden aikana #2531

Open dezhidki opened 2 years ago

dezhidki commented 2 years ago

In GitLab by @vesal on Feb 22, 2022, 14:39

Jotkut (tai jopa kaikki) komponentit voisivat autosavettaa itsensä tilapäisesti x sekunnin välein. Väli voisi olla esim 1 min tms. Tallennus jotenkin tilapäisesti niin, että jos selain kaatuu tms niin päästää palamaan siihen tilanteeseen, mutta kyseessä ei ole virallinen vastaus ennen kuin tallennetaan oikeasti.

Voisiko toteuttaa niin, että tulee normaali vastaus, mutta on invalid ja seuraava autosave muuttaa tätä vastausta. Sitten jos tulee save, niin ajetaan tämän viimeisimmän päälle.

Muuta:

sijualle commented 1 year ago

Varmaan ajatuksena on se sama, mitä puhuttiin, eli kantaan tallentuisi automaattisia vastauksia aikavälein tai fokusen siirtyessä. Autosavella merkityt jäävät näkyviin sivun refreshin jälkeen, ja ne voi tallentaa "varsinaiseksi" vastaukseksi. Plussaa, jos autosavet saa kantaan, niin voidaan seurata kuormaa.

Jos on kumoamispainikkeet mukana niin tuohon pitäisi saada joku kikka jolla se alkuperäinen vastaus haetaan myös, jotta voi palata siihen alkuperäiseen tilanteeseen jos tuo autosaveen annettu ei miellytä. Tuo pitäisi joko tehdä heti sivun avauksen mukana (eli kannasta pitää etsiä kaksi vastausta: se autosave-tagatty ja viimeisin virallinen). Tai sitten pitäisi laiskasti hakea sen undo-painamisen kohdalla se virallinen vastaus

Tuossa on se etu että jos koneen joutuu vaihtamaan kesken esseen kirjoittamisen niin voi jatkaa keskeneräistä vastausta vaikka unohtui hakata sitä tallennusnappulaa.

sijualle commented 1 year ago

Testailin tuota autosaven kumoamista

https://timdevs01-3.it.jyu.fi/view/undo

Tuohon liittyy sen verran erikoistapausten käsittelyjä ja hierottavaa että tuota ei kyllä kerkeä saada koeturvalliseksi ihan heti

Jos plugin tekee automaattisen keskeneräisen tallennuksen, ja sivu ladataan uudestaan niin tuossa joutuu miettimään missä se edellisen vastauksen tieto lähetetään pluginille:

Jos ottaa kakkosvaihtoehdon, niin voi helposti käskeä pluginia tallentamaan itsensä kun kumoaminen on tehty. Joissain plugineissa (qst) tulee jotain corner caseja mitä pitää hieroa, sillä esimerkiksi tyhjän vastaustaulukon formatointi ei tule suoraan qst:stä vaan qst:n sisäisestä komponentista, eli heti kumoamisen jälkeen ei voi heittää tallennuskutsua vaan odottaa että qst:n vastaustaulukko on muodostettu oiken.

Jos ottaa kolmosvaihtoehdon, niin pitäisi olla joku await-systeemi jonka plugin purkaa kun getStaten jälkeinen pluginin lataus on hoidettu loppuun ja plugin on valmis tallentamaan "tyhjän" tilanteen.

Kolmosvaihtoehdossa voisi periaattessa tallentaa myös suoraan palvelimella kun tehään undo-pyyntö. Tuossa pitäisi sitten miettiä miten tuo tehdään, eli kopioidaanko viimeisin virallinen (ei autosave-tagattu) vastaus uudeksi vastaukseksi vai merkitäänkö autosave-tagatut vastaukset jotenkin piiloon.

Jos viimeinen virallinen vastaus kopioitaisiin uudeksi vastaukseksi, niin pitäisi käsitellä tilanne jossa ei ole yhtään virallista vastausta. Koska se tyhjän vastauksen oikea formaatti tulee usein selaimen puolelta (qst), niin tuo ei ehkä ole se helpompi tapa.


Nykyään jos vaihtaa keskeneräisen vastauksen vaihtoehdot takaisin tallennettua vastaavaan (esim qst:ssä palaa samaan valintaan kuin viimeksi tallennettaessa), niin pluginit näyttää tallennettua tilaa. Tämän autosaven kanssa se ei onnistu, sillä vaikka virallinen tallennus vastaisi nykytilannetta, niin uusin (autosave-tagattu) on kannassa viimeisin oleva vastaus. Eli plugineita joutuu käymään läpi ja näyttämään tallentamatonta pluginia niin kauan että viimeisin vastaus on virallinen vastaus.


Mutta toisaalta tuon uon nykyisen undon käytöstä voisi kokonaan luopua tämän uuden autosave-systeemin kanssa. Eli sen sijaan että automaattisesti tallennettuja vastauksia käsiteltäisiin keskeneräisinä, niitä tallennettaisiin ihan kunnollisina vastauksina.

Undon sijaan vanhoihin vastauksiin pääsisi answerbrowserin kautta, joka aukeaisi dialogina. Sieltä voisi selata kaikkia vanhoja vastauksia (autosaveja tai erikseen tallennettuja), ja niistä voisi valita minkä vastauksen haluaaa. Etenkin esseissä tuo olisi undoa parempi, sillä jos aloittaa esseen kokonaan alusta, ja tallentelee välillä, ja sitten toteaa että se edellisen version ajatusvirta olikin parempaan, niin voisi silti valita sen vanhan version vaikka uudempia vastauksia on jo tehty.

Tuon vanhan vastauksen valitsemiseen dialogilla tosin liittyy myös tuo sama haaste että millä tavalla vanha vastaus aktivoidaan. Jos uudemmat vastaukset poistetaan (pehmeästi), niin käyttäjä menettää mahdollisuuden palata uudempaan vastaukseen (esim esseessä voi huomata että kyllä se uusi vastaus oli sittenkin parempi). Parmpi tapa olisi ehkä vain tehdä siitä vanhasta vastauksesta kopio uusimmaksi vastaukseksi. Tuohon jää vielä erikoistapauksena se 0-vastauksen palaaminen, sillä esim qst:ssä se tyhjää vastausta vastaava tilanne tulee selaimen puolelta. Tosin ehkä tuossa voisi toimia niin että tuota kautta ei pääse tilanteeseen jossa pluginiin ei ole vielä vastattu, vaan korkeintaan siihen ensimmäiseen vastaukseen.

Mutta kuitenkin tähän liittyy sen verran erikoistapauksia ja hierottavaa ettei tätä kannata tämän kevään valintakokeisiin ottaa. Etenkin nyt kun harjoittelut ovat olleet jo muutaman päivän käynnissä.

dezhidki commented 1 year ago

Joo, saattaa olla järkevää jättää monipuolinen undo pois siinä tapauksessa.

Pitäisikö sitten miettiä, kannattaako #3411 saada sellaiseen kasaan, että siitä saisi hyvin yksinkertaisen autosaven TKT- ja TJT-kokeisiin cspluginille? Sellainen saattaisi alkuun riittää, että fokusken poistuminen tekee tallennuksen, mutta jättää cspluginin unsaved-tilaan. Eli cspluginissa doRunCodessa

https://github.com/TIM-JYU/TIM/blob/23f89352b3b5f3e3f42e7ebf5dc14b30f21171aa/timApp/modules/cs/js/csPlugin.ts#L2714

jättää initSaved ajamatta, kun tallennus tehdään fokuksen menetyksen kautta. Siinä tapauksessa tallennus tehdään automaattisesti, mutta plugin saadaan luulemaan, että uutta tallennusta ei tehty; silloin käyttäjällä on mahdollisuus palata vielä takaisin omaan tallennukseen tai tehdä lopullinen tallennus painamalla Save. Toki sitten kun virkistää sivun, niin ei voi enää palata takaisin, vaan näkyy se oma autosave. Se kuitenkin voisi pelastaa niissä tilanteissa, joissa kone kaatuu ja unohtaa tallentaa. Eli mielipide tällaisesta tavasta?

Toki kaikkiaan ei nyt maailma varmaan kaadu, jos autosavea ei ole. Tehtävä, jota tuotti viime vuonna eniten ongelmaa tallennuksen kanssa, ei enää ole tänä vuonna käytössä. Näin ainakin saadaan sellainen, että ei nyt menettäisi vastauksia.

saviit commented 1 year ago

Tuo riittäisi myös TSAMOn tarpeisiin, jossa nimenomaan haluttiin autosave sille suttupaperille/muistiinpanoille, ettei hakijalle käy vahingossa niin että videosta tehdyt muistiinpanot häviävät heti kättelyssä koska unohti painaa tallennusta. Mitään undoja tai muita hienouksia tuo ei kaipaa.

sijualle commented 1 year ago

jättää initSaved ajamatta, kun tallennus tehdään fokuksen menetyksen kautta. Siinä tapauksessa tallennus tehdään automaattisesti, mutta plugin saadaan luulemaan, että uutta tallennusta ei tehty; silloin käyttäjällä on mahdollisuus palata vielä takaisin omaan tallennukseen tai tehdä lopullinen tallennus painamalla Save. Toki sitten kun virkistää sivun, niin ei voi enää palata takaisin, vaan näkyy se oma autosave.

Tuleekohan tuossa sitten tilanteita joissa käyttäjä tietoisesti jättää tallennuksen tekemättä, ja ajattelee että se edellinen, parempi versio jää vastaukseksi. Ja sitten seuraavilla sivunlatauksilla (esim siirtyy seuraavaan osaan, ja palaa ennen ajan loppua tarkastamaan omia vastauksiaan) huomaa että sinne onkin tallentunut se uusi väärä versio jota ei haluttu oikeasti tallentaa.

Tuo riittäisi myös TSAMOn tarpeisiin, jossa nimenomaan haluttiin autosave sille suttupaperille/muistiinpanoille, ettei hakijalle käy vahingossa niin että videosta tehdyt muistiinpanot häviävät heti kättelyssä koska unohti painaa tallennusta. Mitään undoja tai muita hienouksia tuo ei kaipaa.

Tuohon käyttöön voisi käyttää tuota #3411, eli tehdään aina pysyviä autosaveja kun focus karkaa. Tuon kanssa ei voi käyttää undoja tai muita reset-painikkeita kovin järkevästi, mutta jos niitä ei tarvita niin silloin se sopisi tuohon käyttötapaukseen

dezhidki commented 1 year ago

Tuleekohan tuossa sitten tilanteita joissa käyttäjä tietoisesti jättää tallennuksen tekemättä

Hmm, joo. Ja tuokin ratkeaisi siten, että olisi kunnollinen autosave. Eli jätetään näin ja tehdään kunnollinen ratkaisu purkkiviritelmän sijaan. Olisiko sitten kuinka suuri homma tehdä sellainen välimuoto tähän, että autosave tallentuisi hiljaisesti invalid-vastauksena ja ilman sen passittamista pluginille/jsrunerille? Eli meille kantaan jäisi vaan se autosaven sisältö. Jos käy sitten, että jostain syystä esim. hakija ei voi tallentaa vastausta, niin ainakin meille jää kantaan joku autosave invalid-vastauksena?

Mutta ehkä mennään tänä vuonna vähintään sillä, että TSAMOssa voi tehdä jatkuva autosave muistiinpanoihin ja QSTihin. Undohan ei sinänsä haittaa muistiinpanojen tapauksessa, siinä hakija tuskin haluaa peruuttaa vaan juurikin tallentaa. Eli utan tuon #3411 nyt sellaisenaan, ja jätetään tuon kunnollisempi autosave vielä. Tuota vastauksen tallentamista tietokantaan voisi miettiä.

vesal commented 1 year ago

Tuleekohan tuossa sitten tilanteita joissa käyttäjä tietoisesti jättää tallennuksen tekemättä, ja ajattelee että se edellinen, parempi versio jää vastaukseksi. Ja sitten seuraavilla sivunlatauksilla (esim siirtyy seuraavaan osaan, ja palaa ennen ajan loppua tarkastamaan omia vastauksiaan) huomaa että sinne onkin tallentunut se uusi väärä versio jota ei haluttu oikeasti tallentaa.

Entä jos luovutaan näissä autosavesta ja focus lost tilanteessa heitetään kysymys että poistui tallenteamtta, halutako tallentaa vai palata edelliseen versioon (pitääkö vielä olla vaihtoehto että jätetään tallentematt, mutta jo kirjoitettu odottamaan, mikä siis vastannee nykyistä oletuskäytöstä)?

Vesa