Git Product home page Git Product logo

automation's Introduction

I'm interested in

  • technology enhanced learning and have developed online courses/programmes since 2011;
  • teaching computer science and security; as well as research into how to best teach those topics (using variation theory);
  • literate programming;
  • research in security, particularly democracy-enhancing technologies;
  • automation, particularly tedious and repetitive administrative tasks.

I consider myself computer scientist and variation theorist.

automation's People

Contributors

dbosk avatar

Stargazers

 avatar

Watchers

 avatar  avatar

automation's Issues

Översikt över hur man automatiserar rapportering till Ladok

Automatisk rapportering av resultat från Canvas till Ladok

På KTH har IT-avdelningen implementerat sin egen Canvas-till-Ladok-resultatrapportering. Senast jag tittade på den lämnade den dock en del att önska. Andra lärosäten verkar ha liknande situation, men förhoppningsvis migrerar fler till SUNET:s version så att alla slipper uppfinna hjulet.

Men som alltid när man tvingar dataloger att göra något för hand, så har de inom kort skrivit ett program som gör det åt dem. Jag och några andra lärare som är intresserad av automation har skrivit ihop några egna verktyg. Dessa kan vara användbara för andra lärosäten också, så jag tänkte dela dem här. Eventuellt har de några funktioner som SUNET:s resultatrapportering inte heller har. Exempelvis ställde någon en fråga i maj om hur man kan rapportera resultaten för enskilda seminariegrupper från Canvas till Ladok, med dessa verktyg kan man det. För att åstadkomma det gör man följande:

canvaslms results -c kurs -A uppgiftsgrupp-för-Ladokmodul -G studentgrupp-i-canvas | {gör om canvaskursnamn till bara kurskod} | ladok report -fv

I slutet av texten ska det där förhoppningsvis vara fullt förståeligt.

Läsa ut resultat ur Canvas

Det första verktyget är canvaslms. Det kan användas för att interagera med Canvas. (Det använder sig av Canvas API.) Det är utvecklat för att köras i terminalen, skrivet i Python så det ska fungera på de flesta system.

Installera och konfigurera canvaslms

Vi kan installera det genom att köra

python3 -m pip install -U canvaslms keyrings.alt

Man behöver keyrings.alt för att köra på WSL/Windows.

Första gången man kör det behöver man fixa en logintoken från Canvas. Det räcker med att köra

canvaslms login

och följa instruktionerna som ges. Notera att det där är något som behöver göras en gång och aldrig mer (förrän man byter dator eller liknande).

Använda canvaslms för att exportera resultat

Låt oss titta på den första delen av koden i inledningen.

canvaslms results -c kurs -A uppgiftsgrupp-för-Ladokmodul -G studentgrupp-i-canvas

Denna specificerar vilken kurs vi vill exportera resultat ifrån, -c kurs. Identifieraren “kurs” kan ersättas med vilken del som helst av kursnamnet i Canvas, både det långa och det korta, och det behöver inte matcha hela. I mitt fall kan jag rapportera för alla omgångar av kursen med kurskod DD1310 genom att bara skriva -c DD1310, men om jag bara vill ha årets skriver jag -c “DD1310 HT22” (det är så IT döper våra kurser i Canvas på KTH). (För den tekniske läsaren: -c tar ett reguljärt uttryck som argument.)

I Canvas har jag examinationsuppgifterna grupperade i uppgiftsgrupper, en uppgiftsgrupp per modul i Ladok. Exempelvis LAB1 innehåller en serie med labbar som alla måste vara godkända för att få godkänt betyg rapporterat i Ladok. -A ovan specificerar vilken uppgiftsgrupp som ska rapporteras. Om vi vill rapportera LAB1 så skriver vi -A LAB1. (För den tekniske: Även -A tar ett reguljärt uttryck. När jag vill raportera samtliga labbserier i DD1310, som har ladokmomenten LAB1, LAB2 och LAB3, då skriver jag -A LAB[123]; dessa slås inte ihop, utan det blir ett resultat för LAB1, ett för LAB2 och ett för LAB3.)

Till sist, problemet i någons fråga: Om man inte vill rapportera alla resultat i kursen (samtliga studenter), utan bara för några (exempelvis vid delrapportering). Då kan man använda -G “grupp 1” för att exportera resultaten för studentgruppen som heter “grupp 1” bland grupperna i Canvas. Detta är vanliga grupper i Canvas, inte sektioner, så läraren kan skapa dem utan särskild behörighet.

Kör vi den här raden

canvaslms results -c "DD1310 HT22" -A LAB1 -G "grupp 1"

får vi en CSV-fil (tabbseparerad) som innehåller kolumnerna: kursnamn (DD1310 HT22 i exemplet ovan), ladokmoment (LAB1), studentidentifierare, betyg, inlämnings- eller rättningsdatum, rättande lärare 1, …, rättande lärare N. Studentidentifieraren är vad Canvas kallar “integration ID”, vilket i KTH:s fall är samma som det unika ID varje student har i Ladok. (Därav behöver jag aldrig personnumret för studenten.) Datumet är inlämningsdatum om det finns, annars rättningsdatum om studenten inte har lämnat in något (exempelvis vid muntlig examination). Sist är en lista med alla lärare/assistenter som rättat någon version av inlämningsuppgiften.

Rapportera resultat till Ladok

För att kunna rapportera resultaten vi precis har exporterat från Canvas ovan, behöver vi verktyget ladok.

Installera och ställa in ladok

Detta kan vi göra på följande sätt:

python3 -m pip install -U ladok3

Notera att paketet heter “ladok3” medan kommandot heter “ladok”.

Även här behöver vi logga in. Detta görs en gång för alla, eller tills att man måste byta lösenord.

ladok login

Rapportera resultat

För att rapportera resultat med ladok kan vi köra

... | ladok report -fv

Då kommer ladok att förvänta sig CSV-data som har samma kolumner som de som exporterades av canvaslms ovan. Det man behöver tänka på här är den där delen från ovan {gör om canvaskursnamn till bara kurskod}. canvaslms exporterar namnet på canvasrummet, medan ladok bara bryr sig om kurskoden. Så vi måste göra om rumsnamnet till kurskoden. I exemplet ovan behöver vi köra om “DD1310 HT22” till “DD1310”. En enkel lösning i terminalen är att köra sed “s/ HT22//”, som tar bort “ HT22” och kvar blir då bara kurskoden. Allt som allt blir det då

canvaslms results -c "DD1310 HT22" -A LAB1 -G "grupp 1" | sed “s/ HT22// | ladok report -fv

Vad betyder då -fv? -f betyder att vi vill klarmarkera resultaten. -v betyder att vi vill skriva ut vad som rapporteras, annars skrivs något ut bara om ett fel inträffar. Ett fel som kan inträffa är att studenten redan har ett resultat (plussning är tillåtet på KTH) eller att studenten registrerat avbrott på utbildningen innan resultaten hann rapporteras.

Slutsats

Det vi åstadkommer är att vi kan rapportera resultat från Canvas till Ladok. Då vi kan göra det med ett kommandoradsgränssnitt betyder det att vi kan automatisera det så att det kör i bakgrunden. Jag kör det i bakgrunden några dagar i veckan och får ett mail när det finns något nytt att attestera.

Fördelarna är att studenterna får rätt datum i Ladok, dvs inlämningsdatum om det finns. Vi registrerar även samtliga som deltagit i rättningen. Studenterna får dessutom resultaten med minimalt dröjsmål.

För de tekniskt intresserade

Verktygen finns tillgängliga på GitHub:

En detaljerad översikt av implementationen ges i den dokumenterade källkoden för respektive paket:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.