Aihearkisto: Digitalisaatio

Oppimisanalytiikka – merkityksellistä aktiivisuuden visualisointia

Edellisessä oppimisanalytiikkaa käsittelevässä blogimerkinnässäni mainitsin, että esittelen vielä lisäksi erilaisen aktiivisuuskaavion toteutusta, jolla saadaan seurattua opiskelijan edistymistä vaikkapa tietyn aihealueen parissa. Tässä merkinnässä avaan sen taustoja sekä teknistä toteutusta.

Miksi tämä visualisointi tarvitaan?

Ohjelmointi I –opintojaksolle oli tarpeen saada selville opiskelijan opiskelumotivaatio, suhteutettuna ryhmän motivaatioon. Suoraviivaisin lähestymistapa, joka antaa edes jotain osviittaa aiheesta, on Moodlen aktiviteettiraportti.  Sen tarjoama tieto on yleinen ryhmän aktiivisuus kurssin aikana. Se ei kohdistu tiettyyn aihealueeseen, emmekä voi määrittää milloin kukakin opiskelijoista on keskittynyt mihinkin. Lisäksi jälkikäteen tarkasteltuna Moodlen tuottama aktiivisuuskaavion saa näyttämään dataa pelkästään aina tietystä takarajasta tähän päivään saakka, joten sen visuaalinen ulosanti ei ole niin hyvä. Yhtenä rajoituksena voi ajatella olevan myös Moodlen hakuparametri – kaukaisin hakuaika aktiivisuudelle on kaksi vuotta.

Moodlen aktiivisuuskaavio. Sen saa auki kohdasta Raportit -> Tilasto.

Ratkaisun hahmottaminen

Ensimmäiseksi lähdimme liikkeelle hahmottelemalla tulevan käyttöliittymä paperille. Tämän pohjalta keskusteltiin tarpeellisista ja tarpeettomista ominaisuuksista. Havaittiin, että jos on mahdollista valita pelkästään merkityksellisiä tapahtumia, saamme parempaa tietoa aktiivisuudesta. Tätä varten hahmottelimme valintalaatikot käyrään panoksen antaville materiaaleille ja aktiviteeteille.

Karkea käyttöliittymähahmotelma syksyltä 2018

Alustavan hahmottelun jälkeen oli syytä tarkastella mitä on tehtävissä. Esimerkiksi arvosanojen näkyminen käyrällä ei ainakaan tällä tavalla esitettynä tuottanut mitään lisäarvoa, joten ne jätettiin pois. Lisäksi kaikkien tehtävien hakeminen datasta osoittautui hieman hankalaksi tuossa vaiheessa, joten rajasimme ne pois. Lisäksi verbeiksi valittiin oletuksena yleiset selkeää aktiivisuutta ilmaisevat, kuten lähettää, kommentoida, päivittää ja vastata, sekä näiden eri ilmenemistavat xAPI-rekisterissä.

Seuraavaksi voimmekin siirtyä itse kyselyn toteuttamiseen! Asioiden yksinkertaisemiseksi jätämme käsittelemättä web-teknologioilla tapahtuvan tiedon hakemiseen sekä tietoliikenteen suojaukseen liittyvät osat, ja keskitymme itse visualisoinnissa tarvittavaan dataan. Kysely suoritetaan MongoDB-tietokantaan.

Miten data noudetaan tietovarastosta?

Aloitamme kyselyn suorittavan palvelimen puolelta. Visualisoitavaa dataa varten tarvitsemme siis kurssin tapahtumien päiväysten ääripäät, sillä on turhaa visualisoida ajanhetkiä, milloin mitään ei tapahdu. Tätä varten käytämme MongoDB:n aggregaatio-ominaisuutta.

Ensimmäiseksi rajaamme tapahtumat tietyn opintojakson sisälle.

Statements.aggregate([{ 
    $match : { 
      "statement.context.contextActivities.grouping.0.id" : courseUrl
    } 
  },

Tämän jälkeen ryhmittelemme datan uudelleen tapahtumien aikaleimojen perusteella, ja laskemme niistä minimi- sekä maksimiarvon.

 { 
    $group : { 
      _id : "$statement.context.contextActivities.grouping.0.id", 
      maxDate: { $max: "$statement.timestamp"}, 
      minDate: { $min: "$statement.timestamp"} 
    } 
  }],

Palautuneen datan perusteella voimme laskea montako päivää kurssi on kestänyt, ja toteuttaa sen avulla päiväkohtaisten pistekeskiarvojen laskennan.

Seuraavaksi haemme uuden datajoukon. Selvitämme kurssille osallistuvat opiskelijat rajaamalla distinct-hakumääreellä vain yksilölliset nimet annetun kurssin sisältä.

  Statements.distinct('statement.actor.name', { 
    "statement.context.contextActivities.grouping.0.id" : courseUrl 
  },

Kun data on palautunut, laskemme kunkin opiskelijan osalta erillisen summataulukon kertyneille pisteille.

        for( var a=0;a<numStudents;a++)
        {
          var student = {
            name: studentRows[a],
            scores: []
          };
          for(var sc=0;sc<numCourseDays;sc++)  student.scores[sc]=0;
          studentsTmp[student.name] = student;
        }

Itse pisteet saamme seuraavalla kyselyllä, jossa hyväksymme mukaan palautettavaan tietuejoukkoon kaikki aktiivista tekemistä määrittävät verbit. Haku rajatataan  tietyn opintojakson sisälle, ja tuotetun joukon alkiot sisältävät palautuessaan ainoastaan aikaleiman sekä opiskelijan nimen. Tässä kyselyssä on huomioitava, että käytetyt xAPI-verbit ovat järjestelmäkohtaisia, joten on aina syytä varmistaa, miten data on kuvattu eri tietovarastoissa – samaa voidaan ilmaista joskus usemmallakin tavalla.

  Statements.find( 
    { "$and": [ 
      {  "verbs": { $in : [ 
        "http://adlnet.gov/expapi/verbs/scored",
        "http://activitystrea.ms/schema/1.0/join",
        "http://id.tincanapi.com/verb/replied",
        "http://activitystrea.ms/schema/1.0/start",
        "http://activitystrea.ms/schema/1.0/submit",
        "http://activitystrea.ms/schema/1.0/follow",
        "http://activitystrea.ms/schema/1.0/update",
        "http://activitystrea.ms/schema/1.0/attach",
        "http://activitystrea.ms/schema/1.0/complete"
      ]}},
      { "statement.context.contextActivities.grouping.0.id" : courseUrl }}
   ]  
}, 
{    'statement.timestamp': 1,    'statement.actor.name': 1,  } 
)

Nyt kun kasassa on riittävät tiedot, voimme laskea pistekertymän kullekin opiskelijalle päiväkohtaisesti. Käymme läpi edellisestä kyselystä palautuneet tietueet, ja lisäämme kunkin opiskelijan tapahtumapäivälle pisteisiin yhden.

for(var s=0;s<scores.length;s++) 
{ 
   var scoreDay = moment(scores[s].statement.timestamp,"YYYY-MM-DDTHH:mmZ").startOf('day'); 
   if ( scoreDay.isSameOrAfter(start) && scoreDay.isBefore(end)){ 
     var numDaysSinceBeginning = scoreDay.diff(start, 'days'); 
     var studentName = scores[s].statement.actor.name; 
     studentsTmp[studentName].scores[numDaysSinceBeginning] += 1; 
   } 
}

Seuraavaksi laskemme pistekertymistä kumulatiivisen version siten, että aiempien päivien kertyneet pisteet lisätään nykyisen päivän pisteisiin. Samalla laskemme pisteiden summat päiväkohtaisiin keskiarvoihin.

          for(var property in studentsTmp ) 
          { 
            if ( studentsTmp.hasOwnProperty(property)){ 
              if ( studentsTmp[property].scores.length != numCourseDays ) 
                     averageScores[0] += studentsTmp[property].scores[0]; 
                     for(var d=1;d<studentsTmp[property].scores.length;d++) 
                     { 
                       studentsTmp[property].scores[d] += studentsTmp[property].scores[d-1];
                       averageScores[d] += studentsTmp[property].scores[d]; 
                   } 
              } 
          } 

Päiväkohtaiset pistesummat on jaettava vielä opiskelijoiden lukumäärällä keskiarvon laskemiseksi.

for( var day=0;day<averageScores.length;day++) 
{ 
   averageScores[day] /= numStudents; 
}

Tämän jälkeen edessä on ainoastaan palautettavan datan muotoilu selaimen koodissa.

Miten data saadaan selaimeen?

Selaimessa kyselyn lähettäminen tapahtuu seuraavalla tavalla. Muodostamme POST-metodikutsun, jonka avulla lähetetään haettavan opintojakson tunnus kyselyä varten. D3.js-kirjaston mukana tulevan asynkronisen palvelupyyntötoiminnon avulla saamme sen aikaan helposti. Kyselyssä rajaavana parametrina on kurssin URL-osoite, jota aiemmin kuvattu palvelinsovelluksen logiikka käyttää tulosjoukon rajaamisessa.

var url2 = '<PALVELUN URL-OSOITE>; 
d3.json(url2, { 
         method: "POST", 
         body: JSON.stringify({ course: url}), 
         headers: { 
             'Content-Type': 'application/json; charset=utf-8' 
         } 
}).then( function (json) {

then-osuus ottaa vastaan palautuvan datan käsittelyfunktion. Käsittelyfunktiossa ensimmäisenä muodostamme dataan erillisen date-kentän, johon liitämme tekstimuotoisesta aikaleimasta luodun javascriptin päiväysobjektin. Se antaa mahdollisuuden vertailla datan aikaleimoja helposti myöhemmin.

for(var x=0;x<json.length;x++) {
   var parse = d3.timeParse("%Y-%m-%dT%H:%MZ");
   json[x]["date"] = parse(json[x].timestamp); 
}

Tässä yhteydessä otamme käyttöön crossfilter-kirjaston. Muodostamme ensiksi dimensiot (x-akselille tuotettavat arvot) opiskelijoiden nimelle ja päiväykselle. Sen jälkeen laskemme ryhmittelysummat (y-akselille tuotettavat arvot) opiskelijoiden pisteille, sekä ryhmän pisteiden keskiarvoille päiväkohtaisesti.

  var ndx = crossfilter(json); 
  var studentDim = ndx.dimension(d => d.name ); 
  var dayDim = ndx.dimension(function (d) { return d3.timeDay(d.date); }); 
  var scoreDim = ndx.dimension(d => d.value ); 
  var scoresGroup = dayDim.group().reduceSum(d => d.value ); 
  var avgGroup    = dayDim.group().reduceSum(d => d.avg );

Minimi- ja maksimipäiväykset, sekä maksimipisteet saadaan datasta irti seuraavasti:

         var maxDate = d3.timeDay(dayDim.top(1)[0].date);
         var minDate = d3.timeDay(dayDim.bottom(1)[0].date);
         var scoreGroup = scoreDim.group();
         var maxScore = scoreDim.top(1)[0].value;

Opiskelijoiden valinta toteutetaan valikkorakenteella, joka onnistuu dc.js-kirjastolla seuraavasti. Valikkorakennetta voi ajatella ikään kuin omana “kaavionaan”, jossa tehdyt valinnat heijastuvat kaikkiin muihinkin dc.js:n NDX-kontekstilla luotuihin kaavioihin.  Valikon yhteyteen rakennamme toiminnallisuuden, jolla voimme piirtää valitun opiskelijan nimen kaavion oikeaan yläreunaan. Tämä auttaa tarkastelijaa hahmottamaan paremmin kenen datasta onkaan kyse.

var studentMenu = 
    dc.selectMenu('#dc-student-menu') 
      .dimension(studentDim) 
      .group(studentDim.group()) 
      .controlsUseVisibility(true) 
      .on('filtered.monitor', function(chart,filter) { 
          if (filter === null ) $('#name').html("Kaikki opiskelijat"); 
          else $('#name').html(filter);                                        
       });

Palkkikaavio päiväkohtaisia pisteitä varten saadaan aikaan seuraavasti.

var barChart = dc.barChart("#dc-bar-hits"); 
barChart 
  .width(990)
  .height(60) 
  .elasticY(true)
  .elasticX(true)
  .dimension(dayDim)
  .group(scoresGroup)
  .mouseZoomable(true)
  .x(d3.scaleTime().domain([minDate,maxDate]))
  .brushOn(true)
  .xUnits(d3.timeDays);

Koska haluamme esittää kaksi erillistä käyrää samassa kaaviossa, tarvitsemme dc.js:n yhdistelmäkaavion. Sen perusasetuksilla määritämme muodostettavan kaavion koon ja akseleiden ohjetekstit. Lisäksi ns. ohjauskaavioksi (.rangeChart) määritämme aiemmin luodun palkkikaavion, että voimme järkevästä valita tietyn aikavälin tarkasteltavaksi tarkemmin.

var compositeChart = dc.compositeChart('#dc-line-progress');
compositeChart
   .width(990)
   .height(400)
   .mouseZoomable(true)
   .dimension(dayDim)
   .legend(dc.legend().x(80).y(20).itemHeight(13).gap(5))
   .elasticY(true)
   .x(d3.scaleTime().domain([minDate,maxDate]))
   .xAxisLabel("Kurssin päivät")
   .yAxisLabel("Kertyneet pisteet")
   .rangeChart(barChart) 

Varsinaiset käyrät tuottavat kaaviot muodostetaan compose-funktiolle välitetyn javascript-taulukon avulla. Kaksi erillistä käyrää saadaan esittämään eri tietoja group-määrityksen avulla. Ensimmäinen esittää valittujen opiskelijoiden pisteiden summaa päiväkohtaisesti (scoresGroup), ja tähän vaikuttaa valikon avulla määritelty opiskelijakohtainen suodatus.

 .compose([ 
     dc.lineChart(compositeChart) 
        .width(990) 
        .height(120)
        .transitionDuration(1000) 
        .dimension(dayDim) 
        .x(d3.scaleTime().domain([minDate,maxDate])) 
        .round(d3.timeDay.round) 
        .xUnits(d3.timeDays) 
        .elasticY(true) 
        .colors('#f77') 
        .group(scoresGroup, "Saavutetut pisteet") 
        .brushOn(false),

Toinen käyristä esittää puolestaan koko ryhmän keskiarvoa. Tähän dataan opiskelijakohtainen suodatus ei vaikuta, sillä jokaiseen opiskelijatietueeseen on tallennettu myös kunkin päivän ryhmäkohtainen keskiarvo.

dc.lineChart(compositeChart) 
    .width(990)
    .height(120) 
    .transitionDuration(1000) 
    .dimension(dayDim) 
    .x(d3.scaleTime().domain([minDate,maxDate])) 
    .elasticY(true) 
    .colors('#ffff00') 
    .group(avgGroup, "Ryhmän keskimää¤rin saavuttamat pisteet") 
    .brushOn(false) 
]) 
.brushOn(false);

Lopuksi käskytämme kaikkia kaavioita piirtymään.

dc.renderAll(); 
}); 
} 

Miten visualisointi auttaa hahmottamaan edistymistä paremmin?

Kun tarkastelemme vaikkapa Moodlen tuottamaa kaaviota ja uutta aktiivisuuskaaviota samasta datasta, on havaittavissa, että jälkimmäinen osoittaa selkeästi paremmin suvanto- ja edistymiskohdat. Ryhmän keskiarvo on kaaviossa esitetty keltaisella värillä, ja opiskelijan puolestaan punaisella. Esimerkiksi tässä tapauksessa voidaan tulkita, että eräs opiskelija on suorittanut kurssia neljän erillisen rupeaman aikana, jotka ovat olleet kestoltaan lyhyitä, mutta niiden aikana on tapahtunut paljon. Kaaviosta paljastuu myös, että opiskelija on työskennellyt hieman jälkijättöisesti ryhmän keskimääräiseen työskentelyyn verrattuna, mutta lopuksi saavuttanut saman aktiivisuustason kuin ryhmä keskimäärin.

Myöhässä tehneen opiskelijan kaavio

Valittaessa erään toisen opiskelijan data tarkasteltavaksi, havaitsemme että tilanne on hieman toisin, ja aktiivisuutta on ollut ryhmän keskiarvoa enemmän heti alusta lähtien. Kuitenkin tällä opiskelijalla on ollut keskivaiheilla pitkiä jaksoja, jolloin aktiivisuus ei ole ollut niin suurta – nähtävästi alussa kiritty matka on antanut tilaa edetä loput kurssista rauhallisemmin.

Alussa aktiivisemman opiskelijan kaavio

Kun edellä olevaa kaaviota verrataan mitä Moodlesta oletuksena saadaan esille, voimme todeta yllä olevan kaavion olevan paljon yksityiskohtaisempi, sekä täsmällisempi. Moodlen kaavio ei erottele opiskelijoita, vaan näyttää kunkin päivän osalta roolikohtaiset tapahtumat yleisesti.  Uusista kaavioista saa tietoa ohjauksen tueksi, ja on helposti nähtävissä, milloin on syytä selvittää opiskelijalta tämän aktiivisuuden laskun syyt.

Mitä tämän jälkeen?

Mikäli samaan kaavioon liitetään eri aihe-alueisiin liittyviä aktiivisuuskäyriä, voimme nähdä entistä paremmin substanssikohtaista etenemistä. Silloin ohjauksen kohdistaminen on yhä täsmällisempää, ja se avaa myös (ainakin teoreettisen) mahdollisuuden niputtaa saman aihealueen parissa ohjausta tarvitsevat samalle ohjauskerralle.

Lisäksi erilaisten tapahtumien pistemäärän painottaminen voisi tulevaisuudessa olla tarpeellinen toiminto. Erilaiset oppimiskäsitykset voivat vaatia aina erilaista tekemistä, jolloin oppimiskäsityksen mukaiset erot pitäisi saada korostetusti esille.

Kirjoittaja Anssi Gröhn, tietojenkäsittelyn lehtori

Järjestemämuutoksista – mietteitä menneestä ja tulevasta

Strategiakauden 2016–2020 kääntyessä loppusuoralle on aika pysähtyä hetkeksi tekemään väliarviointia. Strategiakauden ensimmäiset vuodet ovat tuoneet mukanaan monia järjestelmämuutoksia ja niihin liittyvää osaamisen kehittämistä. O365-pilvipalvelut, Moodle(rooms), Reportronic, EXAM ovat enemmän tai vähemmän osa arkeamme. Se, että järjestelmä on käytettävissä ei vielä takaa sitä, että sitä aktiivisesti käytetään. Uuden omaksuminen vaatii osaamisen kehittämisen lisäksi usein uusia toimintatapoja ja niitä hyviä esimerkkejä. Tällainen on varmaan myös sähköinen tenttiympäristö EXAM. Hyvät mallit onnistuneista käyttäjäkokemuksista ovat yksi tapa lisätä kiinnostusta ympäristöön, joka tuo opiskelijalle joustavuutta opintoihin ja opettajalle ajan myötä lisää joustavuutta ja toivottavasti myös helpotusta työn tekemiseen.

Järjestelmien rinnalla strategiakauden ensimmäiset vuodet ovat painottuneet vahvasti henkilöstön osaamisen kehittämiseen. Järjestelmämuutoksiin liittyvän osaamisen kehittämisen rinnalla on toteutettu osaamiskartoitus, järjestetty verkkopedagogiikkaan liittyvää koulutusta ja pedagogista tukea, kehitetty verkko- ja monimuoto-opetusta, otettu käyttöön osaamismerkkejä, piltoitu verkko-opetuksen tuottemistamismallia ja uudistettu kampusten digimentorointia. Myös palvelujen digitalisaatiota on kehitetty esim. ottamalla käyttöön erityisesti opiskelijoille suunnattuja skype-ohjaus- ja neuvontapalveluita. Karelian digitaalisuutta ei kehitä digiryhmä, vaan koko korkeakouluyhteisö. Monet asiat syntyvät ja etenevät yksittäisten henkilöiden ja työryhmien aloitteesta ja innostuksesta uuteen.

Digitaalisuuden kehittämisen ajureina ja työkaluina toimivat meillä useat hankkeet, joissa viedään eteenpäin digitaalisuuden kehittämistä laajalla rintamalla. Hankkeet tuovat mukanaan mahdollisuuksia oman osaamisen, opetuksen menetelmien ja sisältöjen kehittämiseen. Ne tuovat mukanaan myös uusia resursseja, verkostoja ja työkaluja kehittämistyöhön näinä aikoina, joina kehittämiseen kohdennettavia resursseja on niukasti käytettävissä.

Strategiakauden loppuvaiheen kehittämiskohteiksi on määritelty BYOD-toimintamallin (opiskelijan oman laitteen käyttö) käyttöönotto, monimuoto-opetuksen ja –opiskelun tuki, järjestelmien, palvelujen ja prosessien sujuvuus, digiosaamisen tuotteistaminen sekä digitaalisaation vaikutus opetuksen toteutukseen ja sisältöihin. Digiryhmä on ottanut tavoitteekseen myös entistä aktiivisemman viestinnän digitaalisuuden kehittämiseen liittyen. Ja vaaniihan siellä nurkan takana jo se suuri tietojärjestelmiin liittyvä muutoskin – Peppi – jo ensi marraskuussa. Vaikka järjestelmämuutokset ovat aina työllistäviä ja työläitä, tämän muutoksen perusteleminen on poikkeuksellisen helppoa. Kun Winha loppuu, tarvitaan tilalle uusi opiskelijahallintojärjestelmä. Samalla luovumme SoleOPS-järjestelmästä ja keskitämme toimintoja Peppi-ympäristöön. Mikään järjestelmä ei ratkaise kaikkia ongelmia, mutta toivottavasti palvelujen ja järjestelmien sujuvuus paranee, kun rajapintojen määrä vähenee.

Yhteistyöterveisin kirjoittaja Marjo Nenonen, koulutuksen kehittämispäällikkö

SMErec: Virtuaalihologrammien testiympäristön rakentaminen

Edellisessä DigiIT!-blogimerkinnässäni käsittelin yleisesti Intel Realsense-syvyyskameroita, sekä totesin lopussa että virtuaalihologrammien tekemistä varten on rakennettava useamman kameran testiympäristö, sekä tutkia tallennusmenetelmiä ja rakentaa soveltuva visualisointiohjelmisto. Tässä blogimerkinnässä keskitytään näistä kolmesta kohdasta ensimmäiseen, eli testiympäristön rakentamiseen.

Lähtökohdat

Tavoitteena on siis luoda kaksi erillistä ympäristöä virtuaalihologrammien tallennukseen. Adobe Connect -tilaan 101b rakennetaan tuotantoympäristö: työasema, sekä neljä kameraa tallenteiden tekemistä varten.  Työhuoneeseeni puolestaan rakennetaan vastaava kehitysympäristö, jolloin on suoraviivaisempaa toteuttaa ohjelmistokehitystä. Lähdemme joka tapauksessa liikkeelle kehitysympäristön rakentamisesta – sen jälkeen tiedämme miten tuotantoympäristö kannattaa lopulta tehdä.

Ensimmäiset puutteet havaitaan kiinnitysvälineistä. Kameroissa on mukana kolmijalat, mutta niiden kiinnittäminen seinään ei ole mahdollista. Eräs tapa hankkia sopivat kiinnitysosat on suunnitella ja tulostaa ne itse 3D-tulostimella, joten miksipä sitä ei kokeiltaisi. Seinäkiinnikkeiden mallinnusta varten tarvitaan sopiva malli kameran jalustaruuviksi, että kamera on ylenpäätänsä mahdollista liittää kiinnikkeeseen. Sellainen on saatavilla esimerkiksi Thingiversestä CC-lisenssillä julkaistuna, jolloin siihen on luvallista tehdä myös muutoksia (kiitokset Basic3dprinting/Rob mcnulty). Tätä mallia hyödyntämällä loput osat on laadittavissa pienellä vaivalla, mikäli 3D-mallintaminen on hallussa.

Suunnittelu

Seinäkiinnikkeen toimintaperiaate on varsin yksinkertainen. Tarvitsemme siihen kolmisen osaa. Kameraan tulevan kiinnitysruuvin, jossa on toisessa päässä pallo. Sitten tarvitsemme itse kulmaosan, jonka yksi sivu kiinnitetään seinään. Kulmaosaan jätetään sopivat reiät ruuveille. Sitten tarvitsemme kulmaosaan kiinnitettävän kotelon palloruuville. Itse palloruuvi kiilataan koteloon asennusruuvilla, jolloin kamera pysyy paikoillaan.

Mallinnukseen käytin ilmaista avoimen lähdekoodin Blender-ohjelmistoa, josta mallin saa vietyä useisiin eri tiedostomuotoihin. Alla Blenderin näkymien kuvakaappaukset mallinnuksen loppuvaiheesta.

 

Seinäkiinnikkeen osat ortogonaalisesti esitettynä.

Seinäkiinnikkeen 3D-malli Blenderissä sivuilta ja ylhäältä kuvattuna.

Tulostus

Realsense-kameran seinäkiinnike tulostettuna sekä koottuna alkukantaisella, mutta tehokkaalla tavalla.

Tulostimena toimi Delta-tyyppinen Anycubic Kossel ja varsinaiseen tulostukseen käytin valkoista PLA-lankaa. Tulostusohjelmana käytin ilmaista Cura-ohjelmistoa. Tulostuspään koko oli 0.4mm, tulostetavan kerroksen paksuus 0.2mm, ja tulostuslämpötila 210 astetta. Sisäisenä tukirakenteena oli verkko, ja täyttömääränä 25%. Tulostusjäljen osalta tavoitteena ei ollut huippulaatu, joten tulostaminen ei kestänyt kovin pitkään (n. 2h). Siitä huolimatta näillä asetuksilla saatiin yllättävän kestävä lopputulos – ainakaan itse en pelkillä käsilläni saanut väännettyä seinään tulevaa kulmaosaa rikki, joten arvelen että kameran sekä kaapelin painokaan ei sitä riko.

Sen tietää sitten kun se on tehty…

Alun perin suunnittelin kiinnikkeeseen lisäksi erillisen kiristyslevyn, sekä siipiruuvin sen kiristämistä varten, mutta se osoittautui varsin huteraksi ratkaisuksi. Loppujen lopuksi sivuun liitetty asennusruuvi hoiti asian paremmin, ja kamera pysyy paikoillaan varsin luotettavasti. Jälkikäteen sain myös kehitysehdotuksia kiinnikkeiden parantamiseen asiantuntevalta kollegalta (kiitos Jukka!), mutta toistaiseksi kiinnikkeet tuntuvat toimivan niiden selkeistä puutteista huolimatta. Todettakoon että tämä on karu, mutta tähän hätään toimiva ratkaisu. Tuotantoympäristöön on myöhemmin suunniteltava parempi ja miellyttävämmän näköinen versio.

Asennus

Kameroiden saamiseksi seinälle tarvittiin kuitenkin vahtimestarin vakaata kättä (kiitos Vellu!), sekä kättä pidempää. Tämän jälkeen kameroiden kytkeminen oli varsin suoraviivaista.

Mitä Hiltillä ei voi tehdä, sitä ei tarvita.

Kamerat kytkettynä USB 3.0-laajennuskorttiin  jatkokaapeleilla.

Toinen kamera kiinnitettynä tiiliseinään.

Yksi kameroista kiinnitettynä hyllyyn.

Miten tästä eteenpäin

Kameroiden asentamisen jälkeen voin aloittaa syvyyskuvien yhteensovittamisen. Kameroiden tuottamat pistepilvet on suunnattava sekä sijoitettava sopivasti niitä toistavassa ohjelmassa, että ne muodostavat yhtenäisen mallin. Vaikka kamerat ovatkin nyt asennettuna vaakasuoraan, voi olla parempi että ne asennetaankin tuotantoympäristössä pystyyn, jolloin saadaan parempi esitys kuvattavasta kohteesta. Luvassa on siis varsin mielenkiintoinen vaihe!

Seuraavassa Digit!-blogimerkinnässäni käsittelenkin päivittyvän syvyystiedon tallennusmenetelmiä, sekä miten pistepilven voi muodostaa tehokkaasti kameroiden tuottamasta syvyystiedosta.

Kirjoittaja Anssi Gröhn, tietojenkäsittelyn lehtori

Karelia-starttityötilan käytön kokemukset

Karelia-starttityötila on itseopiskelupaketti, jonka kautta opiskelija perehtyy Karelian digitaalisiin ympäristöihin ja palveluihin jo ennen opintojen alkamista. Työtilan sisältö on suunniteltu ja toteutettu eAMK-hankkeessa (2018–2019) ja sisällön rakenteessa on hyödynnetty Savonian DigiAvain-kurssia.

Karelia-starttityötila on itseopiskelupaketti, jonka kautta opiskelija perehtyy Karelian digitaalisiin ympäristöihin ja palveluihin jo ennen opintojen alkamista. Kuvat 1 ja 2 kertoo työtilojen sisällön. Sisällön arvioinnista ja toiminnallisuudesta vastasivat: hoitotyön, tietojenkäsittelyn ja kv-opinto-ohjaajat, koordinoiva opinto-ohjaaja sekä opiskelijapalvelujen ja monimuotopedagogiikan suunnittelijat.

Kuva 1. Karelia-startti-työtilan sisältö.

Kuva 2. Karelia Start Kit -työtilan sisältö.

Starttipaketit laadittiin syksyn 2018 aikana ja se pilotoitiin tammikuussa 2019 aloittaneilla suomenkielisillä opiskelijoilla. Tämän postauksen ajankohtaan mennessä Karelia-startti-työtilaan oli kirjautunut 157 opiskelijaa. Heistä 105 (miespuolisista alle 10 %) kertoi opiskelualansa: fysioterapia 18, sairaanhoitaja 29, terveydenhoitaja 10, sosionomi 38 ja polkuopiskelijoita 9 sekä väyläopiskelijoita 1. Englanninkieliseen Karelia Start Kit -työtilaan ei tämän postauksen ajankohtana ollut vielä yksikään vaihto-opiskelija kirjautunut. Kansainvälisiltä opiskelijoilta ei ole siten satu palautetta. Syksyllä 2019 aloittavat opiskelija saavat käyttöönsä pilotin myötä kehittyneen starttipaketin käyttöönsä. Kiitos opiskelijoiden runsaan palautteen annon.

Suomenkielisiltä opiskelijoilta saatua avointa palautetta:

“Paljon tärkeitä asioita samassa paketissa. Hienoa jotta paketti on käytössä koko opintojen ajan.”

“Kurssi oli mielestäni selkeä, videot olivat hyvin tehtyjä ja rauhallisesti luettuja mikä teki mukana pysymisestä helpompaa.”

“Karelia-startti ohjaa todella hyvin opiskelijaa oppilaitoksen sähköisiin järjestelmiin ja kurssi helpottaa opintojen alkaessa ymmärtämistä ja etenemistä.”

“Eri asioista oli kerrottu hyvin monipuolisesti. Suurimmaksi osaksi ohjevideot olivat hyviä ja selkeitä ja kurssi oli hyödyllinen.”

“Videotallenteet olivat toimiva valinta. Jo aikaisemman korkeakoulututkinnon suorittaneena tutut asiat kertaantuivat helposti tallenteen pyöriessä taustalla ja uudet asiat tulivat tutuiksi videota seuraamalla.”

“Sain hyvän yleiskäsityksen siitä, mistä kaikesta tulee olla tietoinen erityisesti digitaalisten järjestelmien osalta.”

“Ohjauspalvelut oli todella hyvin ja monipuolisesti kerrottu, ja yhteystiedot selkeästi siellä esillä. Opiskelutaidot oli mielenkiintoista luettavaa, varsinkin linkitetyt nettisivut. Yleisesti oli hyvin kerrottu ohjelmista mitä tarvitsee käyttää AMK opinnoissa.”

“Tekeminen opettaa aina todella paljon. Sitä kautta saa varmuutta, että homma toimii. Startissa oli paljon tehtäviä, joiden kautta näki käytännössä, kuinka se toimii. Mielestäni on loistava juttu, että kaikki tiedot löytyvät ja niihin voi palata tarkistamaan, että kuinka se homma pitikään tehdä. Tekemällä oppii ja aina voi kysyä.”

“Tietoa eri järjestelmistä oli sopivasti sekä videomateriaalia oli hyvä määrä.”

“Starttia saa tehdä silloin, kun ehtii. Voi palata uudestaan ja uudestaan asiakokonaisuuksiin, hieno juttu.”

“Eri osioiden ohjeistaminen, kuinka kirjautua eri toimintoihin oli selkeästi esitetty. Aiheet oli eritelty, joten myöhemmin on niihin helppo palata, ei tarvitse etsiä mistä löytyy mitäkin.”

“Oli mukava päästä jo nyt tutustumaan tuleviin opintoihin ja käytäntöihin. Oli mukava tehdä tunnukset kaikkialle ja nähdä lukujärjestys ym.”

“Opastusvideot tuovat visuaalista lisää ohjeistuksiin ja selostukset tunteen, että ne on tehty juuri minulle. Ennen opintoja minulla on jo jonkinlainen kuva opiskeluun liittyvistä monista osa-alueista ja uskoisin, että orientoitumispäivien antiin on helpompi päästä käsiksi.”

“Asiat tuli esille todella yksityiskohtaisesti ja ne kerrottiin tarkasti ja selkeästi. Videot oli hyödyllisiä, sillä niistä näki mitä pitää tehdä.”

“Tällainen starttipaketti on todella hyödyllinen ennen opintojen alkua. Varmaan monta kertaa tulee palattua vielä paketin sisältöön, annettuja ohjeita oli helppo seurata ja sai todella hyvää tietoa eri osioiden toiminnasta.”

“Mielestäni Karelia-startti oli selkeä ja kaikki tarvittava tieto tuli esille ja uskon että kurssi helpottaa koulun aloitusta.”

“Selkeästi jäsennelty paketti! Mielestäni näihin on helppo myös palata tarvittaessa, sillä haluamansa asian löytää nopeasti.”

Starttipaketeista tiedotettiin Karelian henkilöstöä muun muassa viikkotiedotteiden kautta ja pilotista otettiin opiksi: korjattiin opiskelijoiden havainnoimat epäkohdat ja virheet sekä epätäsmälliset ilmaisut. Syksyä varten ollaan siten valmiimpia.

Lisätietoa eAMK:n digistarttipaketeista eAMK:n sivuilla.

Kirjoittaja Maarit Ignatius, monimuotopedagogiikan suunnittelija

Oppimisanalytiikan kokeiluja: the data is not enough – tehtävien vaikeusasteen visualisointia

Aiemmassa blogimerkinnässäni Oppimisanalytiikan kokeiluja: kuinka lakkasin olemasta huolissani ja rakastamaan LRS:ää  käsittelin kokemuksia Learning Lockerin hyödyntämisestä. Mainitsin myös, että Learning Lockeria kokeiltiin Karelia-ammattikorkeakoulun kielten opintojen verkkokurssien datan avulla. Seuraavaksi avaan tarkemmin, miten Learning Lockerin ulkopuolisia työkaluja hyödyntäen saatiin aikaan tehtävien vaikeusasetetta kuvaava kaavio Rautalankaruotsia-verkkokurssille.

Miksi tähän on ryhdytty?

Rautalankaruotsia on itseopiskeltava ruotsin kielen verkkokurssi, joka keskittyy kielioppiin ja sisältää runsaasti automaattisesti arvioitavia tehtäviä. Automaattinen arviointi kielten yhteydessä on monilta osin haastavaa, sillä oikean vastauksen voi periaatteessa antaa monella tavalla. Moodlen automaattiset arviointityökalut sen sijaan toimivat yleensä paremmin, kun kysymykseen on tarjolla yksi ainoa oikea vastaus. Tämän vuoksi automaattisen arvioinnin tekeminen vaatii runsaasti työtä, ja siltikin joku vaihtoehto voi jäädä huomiotta. Lisäksi itseopiskeluun suunnatun verkkokurssin tehtävien on oltava selkeitä, etteivät opiskelijat turhaudu.

Rautalankaruotsin ensimmäisten toteutusten yhteydessä tehtävätarkistuksiin oli luonnollisesti jäänyt pieniä virheitä, jotka aiheuttivat opiskelijoille ylimääräistä päänvaivaa. Mutta varmuuden saamiseksi oli syytä visualisoida, mitkä tehtävistä oikeasti vaativat kehittämistä.

Tässä blogimerkinnässä esittelen, millaisella kyselyllä tieto saadaan ulos Learning Lockerin tietokannasta, sekä käyn läpi visualisoinnissa hyödynnetyn dc.js-kirjaston pääpiirteet teknisen toteutuksen näkökulmasta.

Datan hakeminen Learning Lockerin tietovarastosta

Koska Learning Locker on oppimisen tietovarasto, ja se erottelee erilaiset oppimistapahtumat xAPI-rekisterin avulla, voimme saada selville kurssitoteutuskohtaisesti kunkin opiskelijan tehtäväpalautustapahtumat.  Tieto siirrettiin moodlen lokeista Learning Lockeriin erityisen xAPI-työkalun avulla.  Learning Locker on rakennettu MongoDB-tietokannan päälle, joten voimme tehdä kyselyjä sen tietokantaan MongoDB:n tarjoaman ohjelmointirajapinnan avulla.

Hyvä! Lähdemme liikkeelle siitä millaista tietoa haluamme taulukkomuodossa, eli jotain tämän suuntaista:

Tehtävät Ongelmissa (kpl) OK (kpl)
Tehtävä 1 0 54
Tehtävä 2 30 24

Pienen aivojumpan jälkeen on hahmotettavissa, että alkuvaiheessa kaikki tehtäväpalautustiedot on ryhmiteltävä opiskelijan sekä tehtävän nimen perusteella, sekä laskettava tietueeseen yhteen summa opiskelija-tehtävä-palautustapahtumapareista. Tämän avulla saamme selville, montako kertaa opiskelija on yrittänyt kutakin tehtävää. Tästä pääsemmekin jo rakentamaan kyselyä!

Koska joudumme laskemaan tietoja yhteen sekä ryhmittelemään niitä, käytämme apuna MongoDB:n ns. aggregaatio-operaatioita. Se tapahtuu mongoDB:n yhteydessä seuraavalla tavalla:


db.statements.aggregate( [{

Ensimmäisenä haemme tietovarastosta kaikki palautustapahtumat. Verbimäärityksellä voimme rajata palautuvaan tulosjoukkoon pelkät palautukset. Tapahtumat generoinut työkalu käyttää tässä tehtäväpalautuksen yhteydessä xAPI-rekisterin submit-verbiä (http://activitystrea.ms/schema/1.0/submit). Lisäksi rajoitamme tapahtumat tiettyyn kurssiin sen URL-osoitteen perusteella, joka tallennettu tapahtuman kontekstitietotaulukkoon, ja varmistamme että tapahtuma tulee halutusta tietovarastosta.


{
$match: {
"statement.verb.id":"http://activitystrea.ms/schema/1.0/submit",
"statement.context.contextActivities.grouping.0.id" : "KURSSIN_URL_OSOITE",
"lrs_id" : mongoose.Types.ObjectId("TIETOVARASTON_ID")
}
},

Nyt meillä on haettuna kaikki tehtäväpalautusta kuvaavat oppimistapahtumat! Seuraavaksi ryhmittelemme ne opiskelijan ja tehtävän nimen perustella, sekä laskemme yhteen montako kertaa kukin opiskelija-tehtäväpari esiintyi, ja tallennamme tiedon “hits”-muuttujaan.


{
$group: {
_id: {
task: "$statement.object.definition.name.en-GB",
student: "$statement.actor.name"
},
hits: { $sum:1}}
},

Sen jälkeen tarvitsemme raja-arvon, josta päättelemme ketkä opiskelijoista ovat ylittäneet yrityskerroille hyväksyttävän kynnyksen. Käsittelemme muistissa olevan datajoukon, ja lisäämme kuhunkin problems-kentän arvolla tosi tai epätosi, riippuen siitä oliko ennalta määritetty raja ylitetty vai ei.


{
$project: {
"_id.task" : true,
hits: true,
problems : { $gt: ["$hits", RAJA_ARVO ]}
}
},

Tämän jälkeen voimme ryhmitellä tiedon pelkästään tehtävän nimen perusteella, sekä lisätä tehtävätietueeseen ongelmissa olleiden ja normaalisti edenneiden opiskelijoiden määrät laskemalla ne yhteen problems-kentän perusteella:

{
$group : {
_id: "$_id.task",
"numberOfStudentsInProblems": { "$sum": { "$cond": [ { "$eq": [ "$problems", true] }, 1, 0 ]}},
"numberOfStudentsOk": { "$sum": { "$cond": [ { "$eq": [ "$problems", false] }, 1, 0 ]}}
}
}
]);

Kysely palauttaa nyt halutun datan, joka voidaan siirtää HTML-sivulle jollakin menetelmällä, esimerkiksi express.js-kirjastoa hyödyntävän nodejs-sovelluksen avulla. Asioiden yksinkertaistamiseksi sen tekninen esittely, sekä kyselyä varten välitettävien parametrien hyödyntäminen ohitetaan toistaiseksi.

Datan visualisointi

Datasta muodostetaan siis kaavio ja taulukko. Siinä hyödynnämme apuna crossfilter-filtteröintikirjastoa moniulotteiseen datan käsittelyyn, sekä dc.js-kaavionvisualisointikirjastoa. Tätä varten tarvitsemme tietyt javascript-kirjastot mukaan sivustoon:

<script src="d3.js"></script>
<script src="crossfilter.js"></script>
<script src="dc.js"></script>
<script src="d3-queue.js"></script>
<script src="d3-fetch.v1.js"></script>

Rakennetaan seuraavaksi pohja. Ensiksi luodaan HTML-sivulle <div>-elementit palkkikaaviota sekä taulukkoa varten:

<body>
<div id="dc-bar-attempts"></div>
<div id="dc-table-attempts">
<body>

 

Kun data on saatu haettua, muodostetaan crossfilter-kirjaston avulla riippuvuudet sisältävät datajoukot. Määrittelemme tehtävädimension, sekä erilliset ryhmät ongelmatapauksille ja normaaleille seuraavasti:

var ndx = crossfilter(json);
var taskDim = ndx.dimension(d => d._id );
var problemGroup = taskDim.group().reduceSum(d => d.numberOfStudentsInProblems );
var expectedGroup = taskDim.group().reduceSum(d => d.numberOfStudentsOk );

Tämän jälkeen meillä on riittävät yhteydet datan käsittelyyn monissa eri kaavioissa.

Visualisointia varten luomme luomme datasta ensimmäisenä palkkikaavion. Dimensioksi (eli X-akselille tuleviksi arvoiksi) määritetään tehtävät, ja pinoamme kaavioiden y-akselille ongelmallisten sekä normaaleiden opiskelijoiden määrät. Tämä tuottaa meille kaavion, jossa yksi palkki esittää yhden tehtävän tilanteen graafisesti.


var barChart = dc.barChart('#dc-bar-attempts');
barChart
.width(990)
.height(400)
.mouseZoomable(true)
.legend(dc.legend().x(80).y(20).itemHeight(13).gap(5))
.elasticX(true)
.elasticY(true)
.x(d3.scaleOrdinal())
.xUnits(dc.units.ordinal)
.xAxisLabel("Tehtävät")
.yAxisLabel("Odotetujen yrityskertojen ja niiden ylitysten suhde")
.dimension(taskDim)
.group( problemGroup, "Ongelmissa olleet")
.stack( expectedGroup, "Normaalit" )

Taulukoon rakennamme kolme saraketta: tehtävän nimi, ongelmallisten tapausten lukumäärä. sekä normaalien tapausten lukumäärä, sekä määritämme lajitteluksi laskevan järjestyksen ongelmallisten tapausten lukumäärän perusteella.


var table = dc.dataTable("#dc-table-attempts");
table
.dimension(taskDim)
.columns([
{ label: 'Tehtävä', format: function(d){ return d._id;} },
{ label: 'Ongelmissa (kpl)', format: function(d){ return d.numberOfStudentsInProblems;} },
{ label: 'OK (kpl)', format: function(d){ return d.numberOfStudentsOk;} }
])
.size(1000)
.group(function(d) {return "yes";})
.showGroups(false)
.sortBy(function(d) {return d.numberOfStudentsInProblems;})
.order(d3.descending);

Taulukon kukin rivi kertoo meille numeeriset arvot, millainen tilanne yksittäisen tehtävän osalta oli palautuskertojen suhteen – montako ongelmallista ja montako normaalia tapausta.
Loppujen lopuksi käskytämme dc.js-kirjastoa piirtämään kaaviot:
dc.renderAll();

Lopputulos palkkikaaviosta voi näyttää sopivalla datajoukolla esimerkiksi tältä. Oranssi palkki kuvaa normaalisti suorittaneiden määrää, ja sininen puolestaan raja-arvon ylittäneiden määrää. Ongelmalliset tehtävät on havaittavissa selkeästi.

Taulukko puolestaan esittää saman tiedon numeerisesti.

Miten kokeilu onnistui?

Visualisoinnin perusteella on helppo havaita mitkä tehtävistä ovat hankalia ja mitkä puolestaan helpompia. Myös yksityiskohtaiset tehtävänimet ja numeeriset arvot näkyvissä taulukosta. Kaavio ja taulukko tarjoavat suoraan tiedon, mitä tehtävistä on kehitettävä, joten kehitettyä visualisointia voi pitää varsin onnistuneena. Visualisointi on myös tarpeen mukaan suoraan siirrettävissä muihin opintojaksototeutuksiin, joissa on paljon automaattisesti tarkistettavia tehtäviä. Tämä tekee siitä varsin hyödyllisen työkalun suunnittelun tueksi.

Myöhemmin tänä keväänä esittelen erilaisen aktiivisuuskaavion toteutusta, jolla saadaan seurattua opiskelijan edistymistä vaikkapa tietyn aihealueen parissa.

Kirjoittaja tietojenkäsittelyn lehtori Anssi Gröhn

(21.3.2019 muokattu kuvia ja tekstiä)

eAMK-hankkeen satoa: DigiAvain ja CampusOnline

eAMK-hankkeessa ammattikorkeakoulut rakentavat yhteistä digitaalista ja ympärivuotista opintotarjontaa. Hanke on ollut käynnissä nyt 1,5 vuotta 23 ammattikorkeakoulun voimin.

Lisäksi työelämälähtöistä oppimisen ekosysteemiajattelu on osa ammattikorkeakoulupedagogiikkaa ja taustalle on vahvistettu opetushenkilöstön digipedagogiikka, mahdollistetaan opiskelijoiden digikyvykkyyden kasvun.

eAMK-kuvio

Starttipakettipilotti

Pilotteihin osallistui Hämeen amk, Humanistinen amk, Kajaanin amk, Laure-amk ja Savonia-amk. Laurea toteutti starttipaketin Optima-oppimisympäristöön ja muut Moodleen. Starttipaketti tulee opiskelijalle käyttöön siinä kohtaa opiskelua, kun hän on saanut opiskelupaikan ja on ottanut sen vastaan, mutta opiskelu ei ole vielä alkanut. Paketti on ”tulopalvelu” ja vastaa opiskeluintoon, joka aloittavilla opiskelijoilla on. Hyödynnetään tätä innokkuutta. Lisäksi tavoitteena on madaltaa sirpaleisuudesta ja järjestelmien palvelujen runsaudesta johtuvaa infoähkyä.

DigiAvaimen sijoittuminen opintoihin

Savoniassa DigiAvain-työtila on opiskelijan käytettävissä 3–4 viikkoa enne opintojen alkua. Savoniassa tämä sisältö on osa orientaatio-opintoja. Opiskelijatuutoreita hyödynnettiin BYOD-klinikoiden pitäjinä.

Palaute (asteikolla 1–4) oli suomenkielisestä 3,3 ja englanninkielisestä 2,9. Hyödylliseksi paketin koki 91 % suorittaneista. Kirjautuneita työtilaan oli 1714 suomenkielistä opiskelijaa ja 162 englanninkielistä. Moodle-badgen suoritti 1302 opiskelijaa ja palautetta antoi 767 opiskelijaa.

”Ohjelmat ym ovat nyt tuttuja, niin ei mene ihmettelyyn ja kaikkeen säätämiseen niin paljon aikaa koulun alettua.”

”viimeisen osion pari kysymystä oli kyllä niin kryptisiä ettei niistä kyllä ottanut tolkkua ennekuin analysoi oikein tunteella.”

Savonian DigiAvaimen sisältö

CampusOnline

On kesällä 2018 lanseerattu ammattikorkeakoulujen yhteisen verkko-opintotarjonnan portaali. CampusOnline on laajuudeltaa ympärivuotinen (kolme lukukautta). Ensimmäisessä tarjonnassa (syksy 2018) opintojaksoja oli 67. Keväällä 2019 jo lähes 400 opintojaksoa. Ilmoittautumisen ensimmäisenä päivänä vieraili portaalissa 7200 kävijää. Opiskelijat oli hyvin informoitu CampusOnlinesta. Kesän 2019 tarjonta avautuu 11.3. ja tarjolla silloin on yli 500 opintojaksoa. Tarjonta on avoinna myös avoimen amk:n opiskelijoille.

Digipedavalmennusta CampusOnline-opettajille

Ensimmäinen valmennus toteutettiin keväällä 2018 ja toinen syksyllä 2018. Näiden rinnalla on ammattikorkeakouluissa järjestetty omia valmennuksia. Helmikuussa 2019 on ammattikorkeakouujen pedagogisille tukipalveluhenkilöille tapaaminen jossa sovitaan, miten valmennus jatkossa hoidetaan ammattikorkeakoulujen omina toteutuksina.

Lisätietoa eAMK-hankkeesta muun muassa:

Tekstin ja kuvien lähde: Savonian koulutusvastuusuunnittelija Marja Kopelin esitysmateriaali ja esitys UEF–Karelia–Savonian ”DigiOpen pikkujoulu -webinaarissa” 13.12.2018.

Kirjoittaja Maarit Ignatius, monimuotopedagogiikan suunnittelija

SMErec: Virtuaalihologrammit rekrytoinnin tukena – syvyyskameroista

Karelian tietojenkäsittelyn koulutuksessa etäopiskelu on varsin yleistä. Tämän vuoksi opiskelijoiden mahdollisuudet osallistua erilaisiin rekrytointitapahtumiin Joensuussa ovat käytännössä pitkien etäisyyksien vuoksi rajatumpia lähiosallistujiin nähden. SMErec-hankkeen yhtenä tavoitteena on vahvistaa pk-yritysten kilpailukykyä kehittämällä yritysten rekrytointiosaamista ja varmistamalla sitä kautta pk-yritysten rekrytointien onnistuminen. Tätä tavoitetta kohti päästään parantamalla etäosallistujien mahdollisuuksia tuoda omaa osaamistaan esille erilaisissa rekrytointitapahtumissa. Siksi kehitämme keväällä 2019 hologrammitallenteita, silmällä pitäen erityisesti tietojenkäsittelyn etäopiskelijoiden tarpeita.

Avaan seuraavaksi hieman teknistä taustaa, millainen kamerateknologia osaltaan mahdollistaa virtuaalihologrammit ja holoportaation, sekä miten pääsemme yhden askeleen lähemmäksi VASU (6/2017) -artikkelissani käsittelemääni digitaalista läsnäoloa.

Mitä Intel Realsense –syvyyskamerat ovat?

 

Intel RealSense D435-kamerat ovat varsin näppärän kokoisia.

Siinä missä Microsoftin tutkima ja kehittämä holoportaatioratkaisu käyttää Kinect-sensoreita, SMErec-hankkeessa kamerateknologiaksi on valittu Intelin Realsense. Ominaisuuksiltaan ne ovat kuitenkin vastaavia; molemmissa on normaali kamera, infrapunasensorit, sekä stereokuvien laserkeilaukseen perustuva syvyyssensori. Niiden avulla voidaan muodostaa kolmiulotteinen pistepilvi, joka kuvaa rakeisena 3D-mallina kameran havaitseman ympäristön. Tämä on eräs fotogrammetrian menetelmistä, jossa pyritään selvittämään eri kohteista niiden muodot ja ominaisuudet (Aalto-yliopisto, 2019). Fotogrammetriaa voidaan hyödyntää niin suuriin kuin pieniinkin kohteisiin. Fotogrammetria toimii joko yksittäisillä kuvilla, jotka kuvataan kohteen ympäriltä ja joista ohjelmallisesti rakennetaan 3D-malli, tai keilaukseen pohjautuvilla menetelmillä, joissa syvyystieto mitataan erillisen sensorin avulla.

 

 

Miten syvyyskameroita käytetään?

 

Realsense-viewer ja kolmen kameran kuvat.

Kameroita varten on tarjolla ohjelmistokirjasto testiohjelmineen. Esimerkiksi Realsense-viewer tukee useampaa kameraa, ja sen avulla voi tarkastella sekä säätää kaikkia kameroiden ominaisuuksia. Se tukee RGB- kuin syvyystiedon esittämistä kuvina, sekä esitettyä yhden kameran tuottaman pistepilven 3D-mallina. Kameran kuva- ja syvyystiedon käsittelyyn tarvitsee kuiteknin Librealsense-ohjelmistokirjaston, on saatavilla Github-versionhallintapalvelusta niin Windows, Linux ja Mac OS-käyttöjärjestelmille.

 

Ohjelmistoja ja kameroita kehitetään jatkuvasti, joten myös niiden firmware saa päivityksiä kohtalaisen tiheään. Myös Realsense-viewer -ohjelman versioilla on vähimmäisvaatimuksena yleensä tietty kameroiden firmware-versio, joten ei ole syytä hämmästyä, jos ohjelmisto ei toimikaan kameroilla suoraan.

Realsense-viewerin tuottama 3D-malli syvyystiedon ja videokuvan perusteella.

Onko käyttöönotto helppoa?

Kamerat saa helposti käyttöön – mutta mikäli tavoitteena on siirtää syvyyskamera metriä kauemmaksi työasemasta, tai käyttöön on tarkoitus ottaa useampi kamera kerralla, on syytä huomioida muutamia asioita.

Yksi kamera vaatii aina yhden USB 3.0-väylän, joita kyllä nykyisissä PC-työasemissa on tarjolla. Yhteen väylään on voitu kytkeä useampi liitin, jolloin väylän kaistanleveys jaetaan siihen liittettyjen laitteiden kesken. Koska yhden kameran tuottama striimi kuluttaa kaistaa noin 5Gb/s (625 MB/s), mikä on lähellä yhden USB 3.0-väylän määritettyä maksimisiirtonopeutta, voi olla, että useampaa kameraa ei voi liittää yhteen työasemaan suoraan.

 

Kaistan riittävyysongelman saa ratkottua esimerkiksi erillisellä PCI Express 4x USB3.0-ohjainkortilla, joka tarjoaa jokaiselle liittimelle oman kanavan, eli 5Gbit/s kaista on varmasti tarjolla jokaiselle siihen liitetylle laitteelle. Testilaitteistoon hankitussa kortissa on tuki neljälle erilliselle USB 3.0-väylälle. PCI Express (2.0) 4x-väylän kapasiteetti puolestaan pitäisi riittää useamman kameran datan siirtämiseen, sillä sen kapasiteetti on noin 20Gbit/s. (Edwards, 2013).

Kauemmaksi sijoitetuille kameroille tarvitaan paremmat kaapelit.

Toinen ongelma, mitä kameroiden käyttöön liittyy, on että USB 3.0-kaapeleiden pituus muodostuu rajoittavaksi. Mikäli käytössä on normaali kaapeli, signaali heikkenee vastaavasti ja tiedonsiirtonopeus laskee kaapelin pituuden kasvaessa.  Yhden kameran käyttäessä lähes koko kanavan kapasiteetin, tiedonsiirtonopeuden lasku aiheuttaa pienempää ruudunpäivitysnopeutta. Koska tässä tapauksessa kaapeleiden pituuden on oltava 3-5 metriä, tarvitaan niin sanottuja aktiivikaapeleita, jotka vahvistavat signaalia ja varmistavat tiedonsiirtonopeuden riittävyyden.

 

Mitä näillä kameroilla on tarkoitus siis tehdä?

Kameroita käytetään animoitujen virtuaalihologrammien luomiseen. Eli skannaamme ja tallennamme reaaliaikaisesti kohteen liikkeen ja äänen, jotka voidaan toistaa myöhemmin uudelleen virtuaalitodellisuuslaseilla sekä erilaisilla lisätyn todellisuuden katsontalaitteilla.

Tämä vaatii tosin testiympäristön rakentamista, erilaisten tallennusmenetelmien tutkimista, sekä soveltuvan visualisointiohjelmiston rakentamista, joihin palaan vielä myöhemmin tämän keväänä Digit!-blogissa.

Kirjoittaja Anssi Gröhn, tietojenkäsittelyn lehtori

Oppimisanalytiikan kokeiluja: kuinka lakkasin olemasta huolissani ja rakastamaan LRS:ää

Learning Locker on Learning Record Store (LRS) -järjestelmä, jolle ehkäpä kuvaavin käännös on oppimistapahtumatietueiden tallennuspaikka. Learning Lockerin on kehittänyt HT2 Labs, ja järjestelmä on saatavilla niin avoimena lähdekoodina, kuin maksullisena pilvipalvelunakin. Learning Locker hyödyntää oppimistapahtumien tallentamisessa sähköistä oppimiseen liittyvää ohjelmointirajapintaa. Rajapinnasta käytetään nimitystä xAPI, tai Experience API tai TinCan API. XAPIn tapahtumat esitetään verkkosovellusten usein suosimassa tiedostomuodossa (JSON).

Learning Locker mahdollistaa erilaisista ulkoisista järjestelmistä koostetun tiedon yhdistämisen samaan tietovarastoon jatkokäsittelyä varten, sekä tarjoaa muutamia erilaisia visualisointityökaluja datan käsittelyyn. Maksullisessa versiossa visualisointityökaluja on tarjolla kattavammin. Learning Lockerin dokumentaation (2018) mukaan se on integroitavissa laajennosten avulla erilaisiin ulkoisiin oppimisalustoihin, kuten Moodleen, Blackboard Learniin ja ehkäpä Suomessa vähemmän tunnettuun Articulateen. Lisäksi tarjolla on Yammer-laajennos.

Miksi Learning Locker?

Learning Lockerin valintaan vaikuttivat erityisesti avoin lähdekoodi, ilmaisuus ja mahdollisuus asentaa se paikallisesti omille palvelimille – erityisesti EU-GDPR:n asettamien vaatimusten osalta pilvipalveluiden käyttäminen ei ole enää niin suoraviivaista. Myös Weissin (2017) mukaan Learning Locker on sijoittunut vuonna 2017 neljänneksi yhdeksän vertaillun LRS-järjestelmän kesken.

Learning Lockerin ominaisuuksista sai vaikutelman kattavasta ratkaisusta, jolla olisi mahdollista tallentaa oppimisanalytiikkadata sekä visualisoida se helposti. Lisäksi xAPIn avulla tapahtuva tiedon siirtäminen eri organisaatioiden LRS-järjestelmien kesken olisi helpompaa. Tästä olisi erityisesti hyötyä ristiinopiskelussa, sillä opiskelijoille esitettävän oppimisanalytiikkadatan on katettava kaikki hänen suorituksensa – riippumatta siitä, missä oppilaitoksissa hän opiskelee.

Learning Lockerin tietovarasto on toteutettu MongoDB:n avulla, joten sen sisältämää tietoa on mahdollista käyttää ulkoisissa visualisointityökaluissa kohtalaisen helposti – olettaen toki, että hallussa on ohjelmointiosaamista.

Kokemukset

Ensimmäiset kokemukset Learning Lockerista ovat varsin myönteisiä; sinällään järjestelmän käyttöönotto ja hyödyntäminen on varsin suoraviivaista. Hankalinta on ehkä saada järjestelmään merkityksellistä dataa järjestelmään sisälle. Kuten tulikin jo mainittua, Moodle-oppimisympäristöön on saatavilla erillinen laajennos, jonka voi konfiguroida lähettämään Moodlen keräämät tapahtumat Learning Locker-palvelimelle. Tämä vaatii myös palvelimen näkyviin julkisesti verkkoon, joten jätin tämän vaiheen pois ja rakensin erillisen työkalun, joka koostaa xAPI-tapahtumat Moodlen lokitiedostojen perusteella ja lähettää ne halutulle Learning Locker –palvelimelle, jota voi ajaa vaikkapa paikallisesti virtuaalikoneessa.

Pilotoinnin perusteella Learning Lockerin visualisointityökalut ovat erinomaisia nopeita testejä sekä yksinkertaisia visualisointeja varten, joissa dataa ei tarvitse yhdistellä tai käsitellä erityisesti – näkyvää saa aikaan muutamassa minuutissa, kuten esimerkiksi alla olevan aktiivisuutta esittävän kaavioyhdistelmän. Mikäli tarvetta on monimutkaisemmille kyselyille, on syytä käyttää muita työkaluja visualisoinnin tukena.

Tietojen siirrettävyys saa apuja Learning Lockerin käytöstä; minkä tahansa kyselyn tiedot voi siirtää CSV-muodossa olevaan tekstitiedostoon. Tekstitiedosto sisältää JSON-muodossa kunkin kyselyn palauttaman xAPI-tapahtuman, joten se on pienellä vaivalla mahdollista lukea ohjelmallisesti sekä siirtää toiseen xAPI-rajapinnan toteuttavaan järjestelmään.

Miten tästä eteenpäin?

Learning Lockeria on kokeiltu Karelia-ammattikorkeakoulun tietojenkäsittelyn sekä kielten opintojen verkkokurssien datan avulla. Vuonna 2018 olemme hyödyntäneet Learning Lockeria ja xAPIa visualisointiin liittyvissä piloteissa, ja oppimisanalytiikkadatan hallinnassa järjestelmä on osoittautunut varsin toimivaksi.

Teknisestä näkökulmasta olemme jo hyvin perillä Learning Lockerin ja xAPIn mahdollisuuksista. Jatkamme jo alkaneiden pilottien parissa, sekä jakamaan niistä saatuja tuloksia laajemmin. Toki edessä on vielä selvitystyötä rajanpintojen parissa, kuten esimerkiksi Peppi-järjestelmän sisältämän datan integrointi Learning Lockeriin.

Kirjoittaja Anssi Gröhn, tietojenkäsittelyn lehtori

Virtuaalitodellisuus- ja lisätyn todellisuuden järjestelmien kokemuksia

Yritysten kanssa toteutetussa Rakentamisen digitaalisaatio -kehittämisprojektissa on saatu kiinnostavia kokemuksia, joista hyödytään tulevaisuudessa. Taustalla on rakentamisen tietomalli, building information model – BIM. Kokemuksia saatiin virtuaalitodellisuus- sekä lisätyn todellisuuden järjesteelmistä teollisessa ympäristössä. Näitä kokeiltiin monialaisella opintojaksolla eri alojen opiskelijoiden itse tekemien mallien pohjalta.

Rakennusalalla koko rakennuksen, rakennusprosessin ja ylläpidon, rakennuksen elinkaaren aikaisten tietojen, tietomallipohjaisen suunnittelun standardiperhe on BIM. Projektissa käytettiin Collaboration platform -ratkaisua, jonka kautta on mahdollista jakaa kaikkien sidosryhmien kanssa sisältöä, olla vuorovaikutuksessa kaikkien kanssa.

Kuva 1. Rakennusten malleja.

Opetukseen liittyviä kokemuksia toteutettiin Hololens- ja Vuforia-kokeiluina. Kaikissa kokeiluissa oli käytössä tietomallipohjainen kiinteistön malli.

  • Yksi toteutus oli kahden viikon mittainen onglmalähtöinen älykaupunki-toteutus. Yritys tarjosi liiketoimintalähtöisen ongelman, jonka opiskelijaryhmät ratkoivat lähiviikon aikana ja siten kilpailivat toisten pienryhmien kanssa parhaimmasta lopputuloksesta.
  • Toisena kokeiluna toteutettiin virtuaalitodellisuustyöasemien avulla ja arkkitehtuurimallia käyttäen vuorovaikutusmahdollisuuksien kohdistamista joillekkin sidosryhmän jäsenille.
  • Koulutuksen kehittämistavoitteena oli kehittää Karelian tietojenkäsittelyyn, rakennus- ja talotekniikkaan liittyvää osaamista digitalisaation yhteydessä. Yhtenä konkreettisena toimenpiteenä on tehty Yleiset Tietomallivaatimukset -verkkokurssia.

Kuva 2. Rankarunkoinen mallinnus.

Keskeinen osa projektissa oli saada raaka-ainetta opetuksen käyttöön, jotta uusia teknologioita voidaan hyödyntää. Käytettiin Trimble Connect -projektipankkia mallinnuksiin: rankarunkoinen pientalo, kerrostalo piha-alueineen, Tohmajärven koulukeskus ja teräshalli, joka kuvaa teollisuushalllia. Lisäksi opiskelijat omatomisesti toteuttivat virtuaalisen luokkahuone rakennustekniikan opetukseen. Trimble Connect -projektipankkiin mallinnettiin rakennukset. Näiden mallien pohjalta opiskelijat toteuttivat rakennusten virtuaalitodellisuusjärjestelmät, joihin pääsee tutustumaan virtuaalilasien avulla.

Kuva 3. Tohmajärven koulun virtuaalitoteutus.

Opintojaksokokeiluna toteutettiin monialainen (rakennus-, talo- ja konetekniikka) 3 opintopisteen mittainen ”Virtuaalitodellisuus- ja lisätyn todellisuuden järjestelmät teollisessa ympäristössä” niminen opintojakso. Opiskelijat rakensivat 10 viikon aikana itsenäisesti projektissa olleiden kolmen opinnäytetyön tekijän, assistentin, tutoroimana esittelykelpoiset ratkaisut. Opintojakso päättyi ”show-päivään”, jossa opiskelijat esittelivät tuloksensa muille opiskelijoille sekä opettajille.

Tuloksina on viitetalomallien hyödynnettävyys useissa tekniikan koulutuksissa sekä tietojenkäsittelyn koulutuksessa. Yleiset edellä mainitun opintojakson toteutus sekä automatisoitu verkkokurssi. Projektin seurauksena liityttiin buildingSMAR Finland -yhteisöön.

Tekstin ja kuvien lähde: Karelian projektipäällikkö Petri Laitisen esitysmateriaali ja esitys UEF–Karelia–Savonian ”DigiOpen pikkujoulu -webinaarissa” 13.12.2018.

Kirjoittajat Maarit Ignatius, monimuotopedagogiikan suunnittelija ja Petri Laitinen, lehtori

Opiskelijan oppimisen tukeminen vertaisarvioinnin avulla

Mitä  vertaisarvoinnilla tarkoitetaan?

Vertaisarviointi voi kohdistua tiedon arviointiin, minkälaista tietoa tarkastellaan ja/tai erilaisiin taitojen arviointiin. Opiskelijoilla tulee olla selkeät ohjeet ja keskeiset kriteerit vertaisarvioinnin toteutukseen.

Vertaisarvioinnin muodot

Kuva 1. Vertaisarvioinnin muodot. Lähde: Postareffin esitysmateriaali.

Miten vertaisarviointi sopii opetus-oppimisprosessin kokonaisuuteen?

Kuva 2. Opetuksen linjakkuus (L. Postareffin 2018)..

Arviointikulttuuri tukee oppimista

Opiskelijoiden osallistaminen arviointiin auttaa motivointiin ja parantamiseen sekä suuntaamaan opiskelua siihen, missä tarvitaan kehittymistä. Arvioinnin avulla opiskelijaa ohjataan olemaan aktiivinen koko opiskeluprosessin ajan.

Kestävä arviointi

Kestävän arvioinnin tavoitteena vaikuttaa opiskelijoiden oppimisen taitoihin ja antaa palautetta itseohjautuvan oppimisen tueksi. Keskeistä on oman osaamisen kehittyminen. Arvioinnin tulisi tukea opiskelijan nykyistä oppimista, mutta myös valmiuksia oppia läpi elämän. Keskeistä on, että opiskelija saa oppimisen säätelytaitoja. Kestävä arviointi auttaa opiskelijaa tunnistamaan omat heikkoudet ja vahvuudet, jotta elinikäinen oppiminen mahdollistuu.

Kuva 3. Arvioinnin eri muodot (L. Postareffin 2018).

Vertaisarvioinnin tavoitteet

Kuva 4. Vertaisarvionnin tavoitteet (L. Postareffin 2018).

Yhdenmukaisuus varmistuu kriteerien käytöllä. Kattavuudella tarkoitetaan, että palaute tulee useammalta kuin yhdeltä.

Arvioinnin luotettavuus = luotettava ja oikeudenmukainen arvionti

  • Mitä arvioidaan = Validiteetti
  • MIten arvioidaan = Reliabiliteetti. Miten tarkasti ja miten johdonmukaisesti arvioidaan. Selkeät arviontikriteerit näkyviin.

Tekstin ja kuvien lähde: Turun yliopiston korkeakoulupedagogiikan apulaisprofessori Liisa Postareffin esitysmateriaali ja webinaariesitys UEF–Karelia–Savonian ”DigiOpen pikkujoulu -webinaarissa” 13.12.2018.

Lisää aiheesta, videot:

Kirjoittaja Maarit Ignatius, monimuotopedagogiikan suunnittelija