# timOhjeet

TIDE-komentorivityökalun käyttöohjeet

10.6.2024

Jyväskylän yliopisto
Informaatioteknologian tiedekunta

1. Johdanto

Olethan ensin asentanut komentorivityökalun?

TIDE-komentorivityökalu mahdollistaa TIM-järjestelmän ohjelmointitehtävien hakemisen ja palauttamisen käyttäjän omalla paikallisella työasemalla.

Mikäli ohjeet eivät sisällä tarvitsemaasi tietoa, jätä kommentti dokumenttiin. Tarvittaessa voit olla yhteydessä TIM-ylläpitäjiin lähettämällä sähköpostia osoitteeseen tim@jyu.fi.

2. Kohdealueeseen liittyvät käsitteet

Dokumentissa käytetään seuraavia kohdealueeseen liittyviä käsitteitä:

  • Komentorivityökalu tarkoittaa IDE-pluginin ja TIM-järjestelmän välistä komentoriviohjelmaa.

  • TIDE-tehtävä tarkoittaa TIM-järjestelmässä sijaitsevaa tehtävää, joka voidaan ladata TIDE-komentorivityökalulla.

  • TIDE-tunniste tarkoittaa tehtävälle annettua ID:tä, jonka saa selville komennon tide task list vasteesta.

  • Tehtävien hakeminen tarkoittaa tehtävien tietojen lataamista TIM-järjestelmästä.

  • Tehtävien lataaminen tarkoittaa IDE-tehtävien tallentamista paikallisiksi tiedostoiksi käyttäjän laitteelle.

  • Tehtävän palauttaminen tarkoittaa käyttäjän paikallisten tehtävätiedostojen palauttamista TIM-palvelimelle.

  • $ kuvaa komentorivin komentotulkin komentokehotetta.

  • <- ja >-merkkejä käytetään esimerkeissä erotinmerkkeinä polkujen yhteydessä. Merkkejä ei tule antaa komentoja käytettäessä.

  • [- ja ]-merkkejä käytetään esimerkeissä erotinmerkkeinä valitsimien yhteydessä. Merkkejä ei tule antaa komentoja käytettäessä.

3. Komentoesimerkkien syntaksi

Ohjeen komentoriviesimerkeissä käytetään seuraavia merkintätapoja:

Merkintätapa Kuvaus
Arvo Arvo ilman sulkeita tulee kirjoittaa esimerkin mukaisesti.
< Arvo > Kulmasulkeissa oleva arvo on vapaasti annettava.
[ Arvo ] Hakasulkeissa oleva arvo on valinnainen.

4. Kirjautuminen

Komento

$ tide login

avaa selainikkunan, jossa pyydetään kirjautumaan TIM-järjestelmään. Kirjautuminen antaa komentorivityökalulle oikeudet käyttäjän profiilin sekä käyttäjälle oikeudet kurssien ja tehtävien hakemiseen ja palauttamiseen.

Onnistuneen kirjautumisen jälkeen komentoriviohjelmaan tallennetaan käyttöoikeus käyttöjärjestelmän mukaiseen tunnistetietojen hallintaan, ja se pysyy voimassa 10 vuorokautta kirjautumiskertaa kohden. Jos sisäänkirjautuminen on vielä voimassa ja tide login komento ajetaan uudestaan, kirjautuneen käyttäjän TIM-tunnus ja käyttöoikeuden voimassaoloaika näkyvät komennon antamassa vasteessa.

5. Kirjaudu ulos

Komento

$ tide logout

kirjaa ulos komentorivityökalusta. Samalla poistuvat myös kirjautumistiedot käyttäjän tietokoneelta ja komentorivityökalulle annetut käyttöoikeudet.

6. Listaa kurssit

Komento

$ tide courses

listaa kaikki kurssit, jotka sisältävät komentoriviltä ladattavia harjoituksia. Jos kursseja ei löydy, tulostuu näyttöön ilmoitus No courses found.

Esimerkiksi komento ja sen antama vaste voivat olla seuraavanlaiset:

$ tide courses
Course: TIEP112, C/C++ Javan jälkeen, ID: 115303
    - DemoC1, ID: 639244, Path: kurssit/tie/ohj2/2024k/demot/DemoC1
    - DemoC2, ID: 639246, Path: kurssit/tie/ohj2/2024k/demot/DemoC2

7. Listaa tehtävät

Komento

$ tide task list <TIM-HARJOITUSKANSIO>

hakee tehtävät annetusta TIM-HARJOITUSKANSIO-polusta.

Esimerkiksi komento ja sen vaste voivat olla seuraavanlaiset:

$ tide task list kurssit/tie/ohj2/2024k/demot/DemoC1
ID: t2
ID: t3
ID: t6
ID: t7
...

8. Lataa tehtävä

Komento

$ tide task create [--all] <TIM-HARJOITUSKANSIO> [<TIDE-TUNNISTE>]

hakee ja tallentaa yhden tehtävän tai kaikki tehtäväkerran tehtävät annetun TIM-HARJOITUSKANSIO -parametrin mukaisesta polusta. Käytettäessä TIDE-tunnistetta, haetaan ja tallennetaan vain yksi tehtävä. Käytettäessä -a tai --all valitsinta ilman TIDE-tunnistetta, tallennetaan kaikki polun tehtävät.

Tallennus tapahtuu siihen polkuun, jossa komento suoritetaan.

Komennon valinnaiset valitsimet ovat seuraavat:

Options:
  -a, --all
  -f, --force
  -d, --dir TEXT

Jokaisella valitsimella on pitkä ja lyhyt versio, esimerkiksi --all ja -a.

Komennon task ja sen valitsimien käyttöä sekä niiden antamia vasteita havainnollistavat seuraavat esimerkit:

  • Yhden tehtävän lataaminen

    $ tide task create kurssit/tie/ohj2/2024k/demot/DemoC1 t2
    Tehtävä1 was saved
  • Kaikkien tehtävien lataaminen polusta valitsimella -a

    $ tide task create kurssit/tie/ohj2/2024k/demot/DemoC1 -a
    t2 was saved
    t3 saved
    t6 saved
    t7 was saved
    ...
  • Tehtävän ylikirjoittaminen valitsimella -f

    $ tide task create kurssit/tie/ohj2/2024k/demot/DemoC1 t2 -f
    Tehtävä1 was saved
  • Kaikki aiemmin ladatut tehtävät ylikirjoitetaan lisäämällä polun perään valitsimet -a -f

    $ tide task create kurssit/tie/ohj2/2024k/demot/DemoC1 -a -f
  • Tehtävien lataaminen valitsimen -d avulla haluttuun hakemistoon nykyisessä polussa

    $ tide task create kurssit/tie/ohj2/2024k/demot/DemoC1 t2 -d Omakansio
  • Tehtävien lataaminen valitsimen -d avulla haluttuun polkuun

    $ tide task create kurssit/tie/ohj2/2024k/demot/DemoC1 Tehtävä1 -d
    C:\Users\Nimi\Desktop\
  • Jos polussa on välilyöntejä, se tulee laittaa lainausmerkkeihin seuraavasti:

    $ tide task kurssit/tie/ohj2/2024k/demot/DemoC1 t2 -d
    "C:\Users\Nimi\Desktop\Omakansio 3"

9. Tehtävän palauttaminen

Komento

$ tide submit <POLKU> 

palauttaa tehtävän TIM-järjestelmään annetun polun perusteella. POLKU-parametrin on vastattava polkua, johon tehtävä on tallennettu käyttäjän paikallisella työasemalla. Onnistunut palautus tulostaa komentoriville palautteen vastauksesta tai virheilmoituksen.

Esimerkiksi kun palautettava tehtävä sijaitsee käyttäjän laitteella kansiossa D:\DemoC1\t2\, komento ja sen antama vaste voisivat olla seuraavanlaiset:

PS C:\Users\Nimi> tide submit D:\DemoC1\t2\
Saved answer successfully.
Stats for nerds:
  0.920   0.908
Compile time:
real    0m0.082s
user    0m0.030s
sys     0m0.032s

Run time:
real    0m0.001s
user    0m0.000s
sys     0m0.001s

Console feedback:
Anna huoneen pituus, leveys ja korkeus metreissä > Huoneen pinta-ala 
on 12.0 neliömetriä. Huoneen tilavuus on 30.0 kuutiometriä.

Komento

$ tide submit .

palauttaa vastaustiedostot kansiosta, jossa komento suoritetaan.

Palautuksen onnistuessa komento ja sen antama vaste ovat seuraavankaltaiset:

PS D:\DemoC1\t2> tide submit .
Saved answer successfully.
...

10. Lisätietoja

Lisätietoja komentojen käytöstä ja niiden vaihtoehdoista saadaan käyttämällä --help -valitsinta kunkin komennon kanssa. Esimerkiksi tide login --help näyttää lisätietoja kirjautumiskomennosta.

Konsoliin tulostuvat INFO-lokitiedot raportoivat komentoriviohjelman toimintaa. Voit vaihtaa lokituksen tasoa DEBUG tasolle, lisäämällä ympäristömuuttujan TIDECLI_LOG_LEVEL arvolla 10. Esim. linuxissa export TIDECLI_LOG_LEVEL=10

Komentorivityökalun ja IDE-lisäosan tehtävien kanssa yhteensopivan kurssin ja kurssitehtävien määrittäminen TIMissä

7.6.2024

Jyväskylän yliopisto
Informaatioteknologian tiedekunta

1. Johdanto

Komentorivityökalu mahdollistaa TIM-järjestelmän ohjelmointitehtävien hakemisen ja niiden vastausten palauttamisen opiskelijan omalla työasemalla komentoriviä käyttäen. Komentorivityökalulla voi tarkastella TIMistä yhteensopivia kursseja ja niiden tehtäväkertoja, hakea TIMistä yksittäisen kurssin yhden tehtäväkerran kaikki tehtävät tai yksittäisen tehtävän, listata yhden tehtäväkerran kaikki yhteensopivat tehtävät ja palauttaa yhden tehtävävastauksen kerrallaan.

Visual Studio Coden IDE-lisäosan avulla on mahdollista ladata ja palauttaa TIM-ohjelmointitehtäviä suoraan Visual Studio Code -kehitysympäristössä.

Kurssin opettajan tulee määrittää TIM-järjestelmässä komentorivityökalulla tai IDE-lisäosaan haettavissä olevat ohjelmointitehtävät. Ohje neuvoo kurssille, tehtäväkertaan ja tehtäviin tarvittavien asetusten määrittämisessä.

Mikäli ohjeista puuttuu jokin tarvitsemasi tieto, jätä kommentti dokumenttiin. Tarvittaessa voit olla yhteydessä TIM-ylläpitäjiin lähettämällä sähköpostia osoitteeseen tim@jyu.fi.

2. Kohdealueeseen liittyvät käsitteet

Dokumentissa käytetään seuraavia kohdealueeseen liittyviä käsitteitä:

  • Komentorivityökalu tarkoittaa IDE-pluginin ja TIM-järjestelmän välistä komentoriviohjelmaa.

  • Kurssi voi koostua yhdestä tai useammasta tehtäväkerrasta.

  • Tehtäväkerta tarkoittaa yleensä yksittäistä TIM-dokumenttia (esimerkiksi Jyväskylän yliopiston ohjelmointikursseilta tuttu Demo 1), jossa on yksi tai useampi ohjelmointitehtävä.

  • Tehtävä on tyypillisesti erityinen TIM-lohko, jonka opettaja voi määritellä TIM-järjestelmään ja johon opiskelija voi tallentaa vastauksia.

  • IDE-lisäosa tarkoittaa IDE-ympäristöön kehitettyä lisäosaa, jonka avulla voidaan käyttää TIMin toiminnallisuuksia suoraan IDEn kautta.

  • IDE-tehtävä tarkoittaa TIM-järjestelmässä sijaitsevaa tehtävää, joka on mahdollista hakea komentorivityökalulla tai IDE-lisäosalla.

  • Tehtävien hakeminen tarkoittaa tehtävien hakemista TIM-järjestelmästä.

  • Tehtävien lataaminen tarkoittaa IDE-tehtävien lataamista paikallisiksi tiedostoiksi opiskelijan laitteelle.

  • Tehtävän palauttaminen tarkoittaa yksittäisen tehtävän opiskelijan laitteella olevien tiedostojen palauttamista TIM-järjestelmään. Palautuksen jälkeen palautetut tiedostot näkyvät opiskelijalle ja kurssin opettajalle kyseisen tehtävän vastauksissa.

  • Yhteensopiva tarkoittaa tehtäväkerran tehtäville ja kurssin etusivudokumentille tehtäviä määrityksiä, joiden avulla kurssi, tehtäväkerrat ja tehtävät saadaan näkyviin komentorivityökalussa ja IDE-lisäosassa.

  • Plugin tarkoittaa TIMin csPlugin-liitännäistä.

  • $ kuvaa komentorivin komentotulkin komentokehotetta.

3. Yhteensopivan kurssin etusivudokumentin määritys

Jotta kurssin tehtävät saadaan määritettyä komentorivityökalun ja IDE-lisäosan kanssa yhteensopiviksi tulee kurssin etusivun asetuslohkoa muokata seuraavasti:

  1. Lohkoa pääsee muokkaamaan painamalla vasemman navigaatiolistan yläosan rataskuvaketta ja avautuvasta asetuslistasta Edit settings -painiketta Edit settings.

  2. Etusivudokumentin settings-attribuuttiin tulee lisätä asetus ideCourse: ja eritellä - path:-muuttujiin kaikkien IDE-tehtäviä sisältävien tehtäväkertojen polut.

IdeCourse-asetusta ja IDE-tehtäviä sisältävien tehtäväkertojen polkujen asettamista havainnollistaa seuraava esimerkki:

``` {settings=""}
ideCourse:
    - path: kurssit/Python/tk1
    - path: kurssit/Python/tk2
    - path: kurssit/Python/tk3
```

Tarkoitetaanko sanalla "tehtäväkertojen" samaa kuin "dokumenttien"? Jos kyllä, niin dokumenttien olisi tässä kuvaavampi. (Jollakin saattaa olla useita demoja/tehtäväkertoja/tms. yhdessä dokumentissa.) -AJL

14 May 24

4. Yhteensopivien tehtävien määritys

Komentorivityökalun ja IDE-lisäosan kanssa yhteensopivien ohjelmointitehtävien plugin tulee olla csPlugin. Aínoastaan csPlugin-liitännäisellä toteutettuja ohjelmointitehtäviä on mahdollista hakea komentorivityökalulla ja IDE-lisäosalla. Tehtävälle tulee myös olla määriteltynä yksilölliset taskID (kuten #esimerkki) ja ideTask (kuten ideTask="t1"). Mikäli tehtävä koostuu TIMissä useammasta tiedostosta tulee näillä tiedostoilla olla sama ideTask-arvo.

Lisäksi tehtävälle kannattaa määrittää yksilöllinen tiedostonimi filename:-attribuutilla (kuten numerot.py). Ilman filename-attribuutin määritystä tehtävän nimeksi asetetaan main, johon liitetään type-attribuutin arvo, kuten c, cpp, cs tai py. Filename-attribuutti määrittämällä saadaan tiedostolle asetettua haluttu nimi ja tiedostotyyppi. Type-attribuutin arvo määrittyy automaattisesti kun csPlugin-liitännäinen luodaan ja valitaan haluttu ohjelmointikieli. Kyseistä attribuuttia käytetään tiedostotyypin määrityksessä siinä tapauksessa, jos filename-attribuuttia ei ole annettu. Muiden kuin edellä mainittujen attribuuttien arvot tulevat valmiina csPluginista.

TaskID-attribuutti määritetään csPlugin-liitännäistä luodessa. Jos kahdelle csPluginille yritetään asettaa sama taskID-attribuutin arvo, ilmoittaa TIM-järjestelmä virheestä. IdeTask-arvo määrittämällä yksilöidään ohjelmointitehtävät toisistaan komentorityökalua ja IDE-lisäosaa varten.

Path-attribuutti tulee csPlugin-liitännäistä luodessa automaattisesti osaan ohjelmointikielistä, jolloin sen arvoksi tulee user automaattisesti. Lisätietoja path-attribuutista voi lukea csPlugin-attribuutit -ohjeesta.

Useita tiedostoja sisältävien IDE-tehtävien tapauksessa filename-attribuutin lisäämättä jättäminen johtaa mahdollisesti virheeseen opiskelijan hakiessa tehtäviä omalle laitteelleen. Virhe johtuu siitä, että mikään käyttöjärjestelmä ei salli kahden tai useamman samannimisen tiedoston luomista samaan hakemistoon.

Komentorivityökalun ja IDE-lisäosan kanssa yhteensopivan tehtävän määrittämistä havainnollistaa seuraava esimerkki:

``` {#lentokone plugin="csPlugin" ideTask="t4"}

filename: lentokone.py
type: py
path: user
fullprogram: |!!
# BYCODEBEGIN
lento = "      __|__    "  
kone = "*---o--(_)--o---*"
print(lento + "\n" + kone)
# BYCODEEND
!!
```

Vain rivien # BYCODEBEGIN ja # BYCODEEND välissä oleva sisältö tulee näkyviin opiskelijan hakemiin tehtäviin, kun ne haetaan komentorivityökalun tai IDE-lisäosan avulla. Tämän lohkon ulkopuolelle voidaan lisätä esimerkiksi tehtävän mallivastaus tai muita tietoja ja ne eivät tule näkyviin opiskelijoille.

5. Määritysten toimivuuden varmistaminen

Luvun ohjeilla voit varmistaa, että olet määrittänyt oikein komentorivityökalulla tai IDE-lisäosalla kurssilta haettavissa olevat tehtävät.

Komento

$ tide courses

listaa kaikki opiskelijan kurssit ja tehtäväkerrat, jotka ovat komentorivityökalun ja IDE-lisäosan kanssa yhteensopivia. Jos kursseja ei löydy, tulostetaan ilmoitus No courses found.

Yhteensopivat kurssit ja niiden tehtäväkerrat hakeva komentorivikomento ja sen vaste näyttävät seuraavan kaltaisilta:

$ tide courses
Course: Sekakurssi, ID: 82
    - ts1, ID: 84, Path: kurssit/allinone/tasksets/ts1
    - ts2, ID: 85, Path: kurssit/allinone/tasksets/ts2
    - ts3, ID: 86, Path: kurssit/allinone/tasksets/ts3
    - ts4, ID: 87, Path: kurssit/allinone/tasksets/ts4

Course: Python, ID: 71
    - tk1, ID: 72, Path: kurssit/Python/tk1
    - tk2, ID: 73, Path: kurssit/Python/tk2
    - tk3, ID: 74, Path: kurssit/Python/tk3

Course: C++-kurssi, ID: 76
    - demo1, ID: 77, Path: kurssit/c/demo1


IDE-lisäosan tapauksessa oikein määritellyt kurssit ja tehtäväkerrat tulevat näkyviin, kun opiskelija on kirjautunut TIM-tunnuksilla käyttäen IDE-lisäosan login-painiketta. Tämän jälkeen esille tulee My Courses -painike, mitä painamalla yhteensopivat kurssit ja tehtäväkerrat esitetään IDE-lisäosassa kuvan 1 mukaisesti.

Kuva 1. Kurssinäkymä IDEssä opintojaksolle TIEP112, C/C++ Javan jälkeen.
Kuva 1. Kurssinäkymä IDEssä opintojaksolle TIEP112, C/C++ Javan jälkeen.

Lisätietoja komentorivityökalun komennoista voi katsoa komentorivityökalun käyttöohjeesta ja lisätietoja IDE-lisäosan toiminnoista IDE-lisäosan käyttöohjeesta.

# javapalautus

Java-tehtävien palautus

  1. Mennään kurssin hakemistoon

  2. Annetaan komento, esim

    tide task create kurssit/tie/ohj2/v/2025/kevat/demot/Demo4 -a  
  3. syntyy (jos ei jo ole) src/demo/d4-hakemisto ja sen alle kaikki tehtävät

  4. palautus:

    tide submit IkaMain.java

    palauttaa yhden tiedoston tai jos haluaa kaikki saman tehtävän kerralla, niin

    tide submit -a IkaMain.java

    missä IkaMain.java on jokin ko tehtävän tiedosto.

Java-version suunnittelua

Esimerkki .timdata-tiedostosta

# muutos241209

Muutokset 9.12.2024

  1. Haun syntaksi ennallaan, annetaan hakemistossa joka on tehtävien "juuri"

  2. lähettämisen syntaksi

    tide submit ([-a] tiedoston nimi) | .

  • .timdata on yhteinen koko kurssin kaikille tehtäville (ks esim edellä)

  • se syntyy hakemistoon, jossa create-komento annetaan tai joka on sen viimeisenä parametrina

  • lisätty attribuutti taskDirectory, joka Pythonissa näkyy task_directory

  • task_directory voi olla eri jokaiselle samankin tehtävän tiedostolle, tosin Java-tiedostojen osalta yleensä sama

  • tulee automaattisesti Jave-tiedostolle esim:

    package demo.d4.fx;
    
    public class IkaMain  {

    josta tulee automaattisesti task_directory: src/demo/d4/fx ja filename: IkaMain

  • JavaFX:n .css ja .fxml -tiedostoille pitää itse laittaa taskDirectory: src jolloin tiedoston nimi vie ne oikeaan paikkaan.

  • muutokset tehty:

Muutokset 10.12.2024

  • kohtuullisen iso muutus tuli siitä, että task_type pitää erikseen kuljettaa kaikissa taskin tiedostoissa, koska ne eivät ole välttämättä samaa tyyppiä. Esim jos ei kuljettanut, niin .css tiedosto yritettiin ajaa Java-tiedostona.

  • jos annetaan

     submit .

    otetaan nykyhakemisto, noustaan ylöspäin kunnes löytyy .timdata-tiedosto (ks esimerkki yllä).

    • jos hakemistossa on vain yksi task, se lähetetään (tämä vastaa vanhaa toimintaa loogisesti, eli yksi tehtävä/hakemisto)
    • jos on useita, niin virhe
  • jos annetaan esimerkiksi

    submit IkaMain.java

    niin otetaan ko tiedoston täydellinen polku. Noustaan tiedoston hakemistosta ylöspäin kunnes löytyy .timdata

    • tuolta etsitään se task, jolla on täsmälleen sama saved_full_path-arvo.
      • lähetetään ko tiedosto
  • jos annetaan esimerkiksi

    submit -a IkaMain.java

    niin otetaan ko tiedoston täydellinen polku.

    • kuten edellä, mutta lähetetään kaikki sen taskin tiedostot johon etsittävä tiedosto kuuluu
    • tiedostot lähetettävä tällöion siinä järjestyksessä kuin ne ovat task_files-listassa

Vielä pitää tehdä

Mahdollisesti tarvitaan joskus:

  • voisi optimoida metadatan tallennusta siten, että sitä ei kirjoiteta heti tiedostoon, vaan vasta kun kaikki demokerran tehtävät on lisätty. Vaatisi "globaalin" course_metadatan ja jos se on, niin sitä muutetaan ja sitten lopuksi kun createsta ollaan postumassa se globaali tallennetaan. En tiedä kuinka hyvin file-cachet huolehtivat siitä, että onko tuolla merkitystä sitten kun demoja on paljon samassa .timdata:ssa. Tuo selviää kun pääss kokeilemaan koko Ohj2-kurssin datalla.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.