TIM ja Abacus
Abacus on matemaattisten aineiden tehtäväpankki.
- ks: Aalto
Kesän 2016 projektin tavoite on saada Abacus-tehtävät toimimaan "läpinäkyvästi" TIMin sisällä.
Projektin henkilöt:
- Vesa Lappalainen, tilaaja TIM-puolelta
- Anni Laitinen, tilaaja matematiikan laitoksen puolelta
- Pekka Kasa, harjoittelija
- Joonas Keppo, harjoittelija
1. Esimerkkejä tehtävistä
Ohjeita:
Esimerkkejä:
1.1 Malleja JY:n Moodlessa
1.2 PHP debuggaus
https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug
https://www.ostraining.com/blog/coding/phpini-file/ - missä PHP ini
/usr/local/etc/php/php.ini nl /usr/local/etc/php/php.ini | grep linenr cat -n file.txt | grep '^ *8872'
asenna xdebug:
pecl install xdebug zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so => php.ini
Lisäykset php.ini
-tiedostoon (Dockerfile), muista muuttaa IP:oman koneesi IP:tä vastaavaksi, siis sen. jossa VSCode pyörii:
RUN echo 'zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so\n\
[XDebug]\n\
xdebug.remote_host = 192.168.59.6\n\
xdebug.remote_enable = 1\n\
xdebug.remote_autostart = 1\n' >>/usr/local/etc/php/php.ini
T:\www\.vscode\launch.json
:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"pathMappings": {
"/var/www/html": "T:\\www\\api"
}
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
1.3 PHP ja PHPStorm
- avaa hakemisto
e:\tim\stack
1.4 iframe kommunikointi
- https://stackoverflow.com/questions/9153445/how-to-communicate-between-iframe-and-the-parent-site
- https://gist.github.com/pbojinov/8965299
- https://www.panda-os.com/blog/2015/03/communicate-iframe-parent-window/
- https://medium.com/zendesk-engineering/sandboxing-javascript-e4def55e855e
- https://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
1.5 Stack API
https://abacus.aalto.fi/mod/quiz/attempt.php?attempt=2579&cmid=1347
https://timbeta.it.jyu.fi/view/users/vesal/koe/stack/stack1 - Stack demo in TIM
https://vkanakaraj.wordpress.com/2009/12/18/javascript-vs-dom-vs-bom-relationship-explained/
Authoring_quick_start.md - miten tehdään kysymyksiä
Answer_tests.md - vastausten testaamisen ohjeet
jsxgraph.block.php - jsxgraph-blokin käsittely
jsxgraph.js - komponenttien bindaaminen
castext.class - tehtävän tekstin käsittely
Stack Plot - ei toimi???
JSX-esimerkkejä - 4 esimerkki jsx käytöstä
Asennus:
tee tarvittaessa ja mene
/var/www/api
hae repo:
git clone -b api_v4 https://github.com/maths/moodle-qtype_stack.git .
docker kontin luonti:
sudo docker build -t stack .
palvelimen käynnistys
sudo docker run --rm=true --security-opt seccomp=unconfined -v plots:/var/data/api/stack/plots --name stack-test-container -p 90:80 stack
kontin käynistys interaktiiviseksi
sudo docker run -t -i --rm=true --security-opt seccomp=unconfined -v plots:/var/data/api/stack/plots --name stack-test-container -p 90:80 stack /bin/bash
linkkejä
remove all containers
docker rm $(docker ps -aq)
Git-komentoja
git branch git remote add vesal https://github.com/vesal/moodle-qtype_stack.git git remote -v git branch -vv git fetch vesal git branch --set-upstream-to api=vesal/api_v4 api_v4 git branch -vv git add ... git reset ... git commit git push git status
Sulla kannattaa varmaan olla lokaalisti 2 haaraa:
1) se sun oma joka siellä on tällä hetkellä ja osoittaa vesal/api_v4 2) se joka osoittaa origin/api_v4 eli sinne alkuperäiseen, sen saa luotua näin: git checkout --track api_v4_original origin/api_v4 vaiko: git checkout -b api_v4_original origin/api_v4 ja sitten: git pull git checkout api_v4 git merge api_v4_original
- stack-haaran luonti:
- Ensin cs-component aktiiviseksi haaraksi: Branches-ikkunasta etsi cs-component (lienee origin-kohdan alla), rightclick -> Checkout -> Create local branch -> Checkout
- uusi haara: menusta Branch -> Add branch, nimeksi stack. Nyt stack pitäisi näkyä lihavoituna Branches-ikkunassa, koska se on aktiivinen (nykyinen) haara. Journal-kohdassa pitäisi cs-component ja stack osoittaa samaan committiin.
- nykyisen haaran vaihtaminen:
- Branches-ikkunasta etsi haluttu haara, rightclick -> Checkout.
- mergeäminen (eli jos masterista pitää tuoda esim. bugikorjauksia stack-haaraan):
- stack-haara aktiiviseksi
- Branches-ikkunassa master-haaran kohdalla rightclick -> Merge -> Fast Forward (tai jos ei ole sitä vaihtoehtoa, niin sitten Create Merge Commit)
1.5.1 [[jasxgraph]] Moodle -toteutus:
Matin kirje:
STACKin [[jsxgraph]] lohkon Moodle toteutus toimii seuraavasti:
- Evaluoidaan mitä lohkon sisällä on eli injektoidaan koodiin parametrit paikalleen, tuloksena pitäisi olla JavaScript koodin pätkä.
- Katsotaan onko input referenssejä siinä lohkon parametriosiossa, jos on niin pisteään koodin eteen vastaavat muuttujat ja logiikka joka hakee niille arvot, eli koodia joka hakee tietyn nimisen input kentän referenssin.
- Luodaan uusi
<div>
johon tuo sitten kohdennetaan ja valitaan sille uniikki id. Laitetaan se id koodin eteen muuttujana divid. Katsotaan jos parametrit sisältävät kokomääreitä tuolle diville ja pusketaan se dokumenttiin. - Koodi dumpataan Moodlen AMD-loaderiin kehystettynä logiikalla joka lataa sille ensin JSXGraph kirjaston, noi bindaus funktiot sinä stack_jxg objektina ja tarvittaessa MathJaxin. MathJax loadataan YUI:n kautta kun Moodlessa on vielä sekin sotku taakkana. Mutta tuossa kohtaa saa varmasti porttaaja suoristettua polkua.
- [[jsxgraph]]...[[/jsxgraph]] lohkon paikalle jää vain tyhjä
<div>
jolla on uniikki id ja mahdollisesti mitat, koodi siirtyi sinne AMD loaderiin.
Tämä on käytännössä sen stack_jxg olion toteutus:
https://github.com/maths/moodle-qtype_stack/blob/master/amd/src/jsxgraph.js
Ja noiden parametrien mäppäys siis tapahtuu täällä:
https://github.com/maths/moodle-qtype_stack/blob/master/stack/cas/castext/jsxgraph.block.php
Muista kuitenkin että tuo tarjottu kirjasto bindaus funktio ei ole ainoa tapa toimia. Eli neljännessä samplessa tässä setissä otetaan kyllä referenssi inputtiin mutta bindaus tehdään aikalailla monimutkaisemmin ja käsin, oletuksella että referenssillä saa inputin jolla leikkiä:
[[jsxgraph]] esimerkeissä ei pitäisi timeoutteja pahemmin esiintyä, eli ne toimivat AMD-loaderin kautta ja alustuvat vasta kun käytännössä kaikki muu on jo valmiina, ainoa mihin timeoutin niissä tarvinnee on animatiot ja graaffien välinen kommunikaatio
1.5.2 Maxima
https://hub.docker.com/r/unihalle/maximapool/
docker run -d --security-opt seccomp=unconfined --name TestMaximaPool --env-file .env -p "8765:8080" -v "/var/www/volumes/pool.conf:/opt/maximapool/pool.conf:ro" unihalle/maximapool
http://tim3:8765/MaximaPool/MaximaPool
curl -d "input=2%2B3%3B&timeout=2000&version=2017121800" -X POST http://localhost:8765/MaximaPool/MaximaPool
https://github.com/dimitri/pgloader/wiki/Running-in-Docker-(SBCL-warning)
1.5.3 Sage
1.5.4 Vesan levymountteja
OK P: \\192.168.59.68\log Microsoft Windows Network
OK T: \\tim3\timvar Microsoft Windows Network
Unavailable V: \\192.168.59.9\m Microsoft Windows Network
2. Tavoitteita
Pääajatuksena on yksinkertaistaa opiskelijan tilannetta silloin kun tehtäviä tehdään osin TIMissä ja osin toisessa järjestelmässä.
2.1 Opiskelijan kannalta "yksi ohjelma"
Osin tavoite voidaan saavuttaa näyttämällä perus-Moodle iframesa.
Oletuksena nykyisin ohjelmissa on, että ne eivät anna tetä tehdä. Kohde-Moodleista voidaan toivottavasti tämä asetus muuttaa.
Ongelmaksi jää silloin vielä se että opiskelijan pitää erikseen TIMin lisäksi kirjautua Moodleen. Ja iframeen jää näkyviin paljon itse tehtävään kuulumatonta asiaa, joka pitäisi saada pois.
2.2 Ei ylimääräisiä näkymässä
Eli ensimmäinen parannus on saada iframe näkymä sellaiseksi, että siinä näkyy pelkkä tehtävä ilman mitään ylimääräistä koristelua. Ihannetilanteessa tehtävä aukeaa suoraan opiskelijalle niin, ettei tarvitse erikseen painaa mitään "jatka tehtävää" tms.
2.3 Pisteet saadaan suoraan TIMiin
Opettajan ja opiskelijan kannalta olisi suotavaa, että Moodlen tehtävästä laskemat pisteet olisi käytettävissä TIMissä, missä pelillistämisen kautta näistä tuloksista näytetään joku yhteispisteitä tai "kasvavia kaupunkeja".
Opettajan kannalta tärkeää on että opiskelijan pistekertymät erilaisista Moodle/TIM-tehtävistä tulleet pisteet saadaan helposti siirrettyä seuraaviin järjestelmiin. Jyväskylässä Korppi-järjestelmään.
2.4 Opiskelijan ei tarvitse kirjaantua Moodleen
Opiskelijan kannalta käyttö olisi helpointa jos hänen ei erikseen tarvitse kirjautua Moodeleen. Voidaanko toiminta tehdä suoraan jollakin TIM-käyttäjällä?
Vai jos jokaisesta opiskelijasta tarvitaan oma tunnus, niin voidaanko tämä tieto toimittaa suoraan TIMistä? Tässä vaihtoehdossa voi olla että opiskelija joutuu kerran luomaan itselleen Moodle-tunnukset?
2.5 Opiskelijan vastaus saadaan TIMiin
Opettajan mahdollisten tutkimusten kannalta voisi olla hyvä saada opiskelijoiden vastaukset TIMin sisällä käytettäväksi. Normaleista TIM-tehtävistä opettaja (ja opiskelija myös) näkee täydellisen vastaushistorian ja näin voidaan selvittää paremmin mitä ovat ongelmakohdat kussakin tehtävässä.
Tätä varten voi STACKin abacus
-haaran quiz report osoittautua hyödylliseksi jos siitä saa vastaukset revittyä irti ja lähetettyä eteenpäin TIM:ille muodostomalla uusi LTI ext_
tai custom_
parametri. Toisaalta, quiz report on tällä hetkellä beta-vaiheessa ja voi olla kuitenkin selkeintä repiä vastaukset irti TIM:in puolelta JavaScriptilla iframe
:n sisältä.
- yksi vaihtoehto voi olla myös että tietoa otetaan jos mahdollista sieltä iframessa olevista tekstilaatikoista jos ne on helposti tunnistettavsissa. Jos tämä onnistuu, niin voidaan myös vastaavasti kääntäen työntää sisältöä niihin tekstilaatikoihin?
2.6 Opiskelijan edellinen vastaus saadaan pohjaksi uudelle kerralle
Nykyisissä TIM-tehtävissä opiskelija voi ottaa historiasta minkä tahansa vastauksensa ja kokeilla sitä uudestaan. Samoin voi opettaja tehdä opiskelijan tehtävälle.
Tätä toimintoa Moodlessa tukisi se, että TIMissä tallessa olevas vastaus voitaisiin siirtää "opiskelijan" kirjoittamaksi ennen Ajo-painikkeen painamista.
2.7 Tekniikka sovellettavissa kaikkiin Moodle-tehtäviin
Tulevaisuutta varten olisi hyvä, mikä tehty työ olisi hyödynnettävissä kaikkien Moodle-tehtävien yhteydessä. Vielä parempi jos se toimisi yleisesti minkä tahansa LTI-tarjoajan kanssa.
2.8 Opettajan työtä helpottavat parannukset
Ihannetilanteessa myös opettaja voisi toimia yhden järjestelmän kautta. Tämä kuitenkin vaatii niin paljon muutoksia, että kesän 2016 projektissa tyydyttäneen siihen, että opettajalle tarjotaan linkkiä, josta pääsee muuttamaan tehtäviä ja riittävä ohjeistus siihen, mitä pitää kirjoittaa TIMin vastaavaan tehtävä-pluginiin YAML-koodia. Mm. id:t mitä pitää mihinkäkin lisätä jne.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.