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

csPlugin: koodaustehtävien lataaminen lokaalisti ja lähetys TIMiin, integraatio yleisten kehitysympäristöjen kanssa #3137

Open dezhidki opened 2 years ago

dezhidki commented 2 years ago

Taustaa ja käyttötapauksia

Näitä varten olisi hyvää, jos TIM tarjoaisi jonkinlaisen suoran integraation (etä)kehitystyökaluihin.

Mitä tällä hetkellä on olemassa

Pohdintaa

Tämä on tällä hetkellä varmaan aika pienellä prioriteetillä, koska nykyisellä Ohj1 ja Ohj2 käytöllä pärjää aika hyvin copypastella (tehtävien määrän sijaan on panostettu tehtävien sisältöön, joten tehäviä ei ole niin paljon kuin HYn MOOCissa).

Mutta jos tämän lähtee tekemään TIMiin, niin sille voisi ajatella kolmenlaista eri toteutusta

Toteutus

Jos tämän joskus lähtee tekemään, alkuun saattaa riittää ihan CLI-työkalu. JYU-TIMin kannalta tämä on ihan OK, koska CLIn käyttö on ihan oletettua ohjelmointikursseilla. Laajempi käyttö varmaan ekaksi vaatisi itse ohjelmointikurssien rakenteen muuttamista.

vesal commented 1 year ago

CLI-rajapintaa voi kutsua aika helposti IDEjen puolelta. Ell silloin olisi mahdollista palauttaa tehtäviä joko copy/pastella tai suoraan painikkeella IDE:stä tai komentoriviltä. API-key voisi helpottaa sitä että ei tarvitse tunnus/salasanaa tallentaa mihinkään ja voisi rajata että ko API-key käy vain tehtävien palauttamiseen, joten sillä ei mahdottomasti aiheuttaisi tietoturvaongelmia. Tehtävän palauttamiseen tarvitaan docid/taskid-pari. Tuon voisi kuljettaa tehtävien pohjakoodissa sopivalla tavalla kommentoituna.

vesal commented 1 year ago

Sama CLI-voisi tarjota rajapinnan myös tehtävien hakemiseen (käytännössä sama kuin palautusikkunan Näytä koko koodi + Copy)

vesal commented 1 year ago

Mietin tuota IDE-pluginia eilen Simon kanssa Ohj1 ja Ohj2 näkökulmasta ja sitten jatkoin miettimistä vielä uimahallissa.

1) Siitä voisi olla sikäli hyötyä, että nythän tehtävien palautuskertojen määrä on osin valhelelinen, koska IDEssä tekeville näyttäytyy TIMIssä 1-2 palautusta ja pelkästään TIMIssä tekeville helposti kymmeniä. Eli jos jokainen IDEssä tehty ajo olisi myös palautus, niin saataisiin täsmällisempää dataa.

2) Projektien ylläpito niin, että TIM kertoisi mitä projektissa tulisi olla, vaatisi jokaista eri kieltä/IDEä varten TIMiin omia määrityksiä. Helpompi lähestymistpa (ainakin omassa kontekstissa olisi) sellainen (mikä osin nytkin on käytössä), eli on kurssille tehty valmiiksi sellaiset projektit ja solutionit pohjaksi, joissa tarvitaan enemmän kuin yksi tiedosto. Ja tämä on valmiina Git-repona joka joko ladataan suoraan tai TIMin IDE-pluginin avulla. Tehtäväpohjiin on jo valmiiksi jollakin sovitulla kommenttitavalla koodattu minkä TIM tehtävän (se #-nimi tehtävässä + dokumentin nimi, joka voi oletuksena tulla tiedoston hakemiston nimestä, esim demo7).

3) TIMin päässä tehtävien pohjaksi näytettävä koodi niitä varten, jotka jostakin käsittämättömästä syystä haluavat tehdä vain TIMissä, haetaan sieltä demopohjien GIT-reposta (tämä on valmiina, koska tehtäväpohjaan voi kirjoittaa koodin tai sanoa että haetaan URLista. Tosin nyt joutuisi samaa aisaa laittamaan 2x, tiedoston URL ja tiedostoon tuleva kommentti niin, että vain toinen sanotaan).

4) Tehtäväpohjien tulee olla sellaisia, että ne kääntyvät, mutta eivät toimi. Opiskelijan projektien tulee lähtökohtaisesti olla ain ilman virheitä ja varoituksia. Tosin osan voi hoitaa unlloudaamalla projektit joissa on virheitä kunnes ne korjataan.

5) Missä tehtävissä tämä ei toimisi ihan heittämällä? Mulla on sellaisia tehtävissä jossa on monta osaa samasta koodista ja jotta osan n voi tehdä ilman että osaa n-1 on tehnyt, niin tehtävässä n on valmiina osan n-1 (ja mohdollisesti muuta) koodi, mutta sitä opiskelijalle ei näytettä. Eli TIMissä tuollaisia tehtäväsarjoa joi tehdä vaikka ei ole osannut edeltäviä palasia. IDE-versiossa tämä vaatisi kohtuullisen hankalasti ylläpidettäviä DLL/jar ratkaisuja.

6) Erikseen pitää miettiä miten hoidetaan kurssit, jossa voi tehtäviä palauttaa haluamallaan kielellä. Tuskin kukaan jaksaa joka kielelle tehdä pohjia. Tällaisia kursseja on esim Algoritmit 1 ja Algoritmit 2.

Käytännössä siis opettaja ylläpitäisi tehtäväpohjat Gitissä ja TIMissä sanottaisiin mitä pohjia kuuluu mihinkäkin palautukseen. Pieni haaste tulee siitä, mitä tapahtuu kun tehtäväpohjia korjataan ja opiskelija on jo alkanut tekemään tehtävää. Saadaanko tehtäväpohjan diff sovellettua helposti opiskelijan jo tekemään vastaukseen?

Itse IDE-APIlle jäisi siis tehtäväksi lähettää tiedotoja TIMille ja TIM sitten ajaa ne millä ajaa (määritelty TIMIn tehtäväpohjaan, oletuksena mun kurssilla ihan nykyisillä tavoilla) ja arvostelee miten arvostelee ja sama palaute mikä tulee nyt ajosta TIMin tehtäväruutuun lähetettäisiin pisteineen IDElle.

Tosin Simon kanssa mietittiin sitä, että missä on tehtävien kuvaukset ja jottei TIMIä kirjoitettaisi uudestaan IDE-API-pluginiin, todettiin että tehtävien kuvakset on sujuvinta pitää TIMissä, koska niihin voi kuulua kuvia, videoita, animaatioita jne.

Eli joka tapauksessa TIMin tehtäväsivu pitäisi olla opiskelijalla vieressä auki. Ja silloin voisi jopa olla melkoisen sama toimittaako TIM IDElle palautetta, vai riittäisikö katsoa sitä TIMistä, mikä taas hieman helpottaisi plugia ja APIa? Oikein sujuvan toiminnan kannalta tämä vaatisi TIMiin websockettia, jotta selain osaisi virkistää ajoruudut sitä mukaa kun IDEstä tulee palautuksia. Tosin versiossa 0.1 tuon voisi hoitaa sillä että opiskelija painaa painiketta "Lue palautteet" tms.

APIn ja Pluginin 0.1 versio voisi siis olla toimia seuraavasti

Yksinkertaisissa tehtävissä tuo "hakee GITistä" voidaan korvata sillä, että tekee iste porjektin ja pasteaa sinne lähdekoodin päälle TIMistä Copy-painikkeella haetun koodin (johon opettaja koodannut sen palautusosoitteen, joka tuossa tapauksessa voidaan versiossa 0.2 lisätä Copy-painikkeella automaattsiestikin).

Ja ehkä versiossa 0.01 tuo API-avaimen antaminen pluginille voisi olla sen laittaminen johonkin sovitulla nimellä hakemistoon joka on ylempänä kuin projekti?

Noin minusta API olisi aika "ohut" ja pluginillakin olisi varsin vähän töitä?