Toteutin harrasteprojektina sekä tietokoneelle että mobiililaitteille taipuvan web-sovelluksen, jossa tärkeänä kriteerinä oli kyvykkyys hyödyntää dataa monipuolisesti koneoppimisen, rajapintojen ja visualisointien muodossa.

Tämä blogi keskittyy esittelemään lopputulosta ja toiminnallisuuksia.

Blogin toisessa osassa on kuvattu web-sovelluksen teknistä toteutusta.

Blogi ei ole sponsoroitu.

Web-sovelluksen esittelyvideo (1 min 29 s)

Ensimmäiseen käytännön kokeiluun pääseminen vie aikaa

Tavoitteenani oli rakentaa harrastemielessä web-sovellusalusta datan keräämiseen, laskentaan ja esittämiseen. Otin ensimmäiseksi käyttökohteekseni punttisalikäyntieni tallentamisen ja seuraamisen.

Sain sovelluksen perustukset kuntoon työstettyäni kokonaisuutta vapaa-ajalla parin kuukauden aikana. Tästä oli vielä pitkä matka siihen, että sovellus toimisi oikeassa käytössä punttisalilla.

Siirsin dataa vanhoista paperisista harjoituspäiväkirjoistani tietokantaan nähdäkseni, millä painoilla olen aiemmin harjoitellut.

Ehkä puoli vuotta aloituksesta testasin sovellusta ensi kertaa punttisalilla. Usein löytyi pieni bugi, joka esti ohjelman käytön ja jouduin tallentamaan treenin paperille tai mustiinpanosovellukseen.

Lista tehdyistä punttisaliharjoituksista. Vasemmalla on auki sovelluksen navigointipalkki.
Lista tehdyistä punttisaliharjoituksista. Vasemmalla on auki sovelluksen navigointipalkki.

Saatuani perustoiminnallisuudet kuntoon törmäsin käytettävyyshaasteisiin. Punttisalilla treenatessani en kerkeä tai tahdo nähdä jokaista tilastoa ja numeroa, vaan haluan kirjata tulokset kännykkään vaivattomasti. Mobiilikäytössä korostuukin toimintojen helppokäyttöisyys ja automatisointi.

Sovelluksessa on kolme näkymää punttisaliharjoitukselle. Tämä on niin sanottu pikanäkymä, joka on huomattavasti perinteistä listaa nopeampi käyttää. Harmaassa laatikossa näkyy harjoitukseen käytetty aika reaaliajassa.
Sovelluksessa on kolme näkymää punttisaliharjoitukselle. Tämä on niin sanottu pikanäkymä, joka on huomattavasti perinteistä listaa nopeampi käyttää. Harmaassa laatikossa näkyy harjoitukseen käytetty aika reaaliajassa.

Web-sovelluksen analytiikka vaatii vahvat perustukset

Törmäsin punttisalisovelluksessani samoihin haasteisiin kuin työtehtävissäni Solitalla.

Analytiikka vaatii laadukasta dataa. Datassa tulisi olla mahdollisimman vähän puuttuvia arvoja, data tulisi olla aina samoissa yksiköissä ja niin edelleen. Pienetkin poikkeamat saattavat vaikuttaa merkittävästi laskelmiin.

Laadukkaan datan edellytyksenä on vakaa IT-infrastruktuuri. Jos järjestelmät muuttuvat jatkuvasti tai tarvittavaa dataa ei kerätä, on datan esikäsittely, analysointi ja automatisointi äärimmäisen vaikeaa.

Siksi matka voi olla yllättävän pitkä ensimmäisestä ideasta kehittyneeseen datan hyödyntämiseen.

Jokaisesta punttisaliliikkeestä oli tarjolla lisätietoja ja perustason analytiikkaa. Esimerkiksi ORM MAX (<a href='https://en.wikipedia.org/wiki/One-repetition_maximum' rel='noopener ' target='_blank'>One Repetition Maxmimum</a>) arvo kertoi tutkimukseen perustuvaa matemaattista kaavaa hyödyntäen, mikä olisi teoreettinen yhden toiston maksimitulokseni. ORM-arvo tekee sarjoista vertailukelpoisia, vaikka toistojen määrä vaihtelee.
Jokaisesta punttisaliliikkeestä oli tarjolla lisätietoja ja perustason analytiikkaa. Esimerkiksi ORM MAX (One Repetition Maxmimum) arvo kertoi tutkimukseen perustuvaa matemaattista kaavaa hyödyntäen, mikä olisi teoreettinen yhden toiston maksimitulokseni. ORM-arvo tekee sarjoista vertailukelpoisia, vaikka toistojen määrä vaihtelee.

Koneoppiminen mahdollistaa web-sovelluksen automatisoinnin

Aiemmin olin luonut punttisaliohjelmani Excelillä, joka arpoi harjoitusta varten valituille lihasryhmille suoritettavat liikkeet ja toistomäärät tietyllä logiikalla. Yksi web-sovellukseni tärkeimmistä ominaisuuksista olikin liikkeiden arpominen yhdellä klikkauksella ennalta määritetyn harjoitusmallin perusteella.

Klikkaamalla harjoitusmallia eli 'rutiinia' sovellus luo harjoitukseen satunnaiset sarjat rutiinissa määritetyn rakenteen mukaisesti. Jatkossa koneoppiminen voisi arvioida sopivan painomäärän.
Klikkaamalla harjoitusmallia eli 'rutiinia' sovellus luo harjoitukseen satunnaiset sarjat rutiinissa määritetyn rakenteen mukaisesti. Jatkossa koneoppiminen voisi arvioida sopivan painomäärän.

Harjoitusten arpominen on täysin manuaalinen tehtävä. Haluaisin jossain vaiheessa lisätä harjoitusten automaattiseen luontiin ominaisuuden, joka valitsisi etukäteen sopivan painomäärän jokaiseen sarjaan. Tässä voitaisiin käyttää koneoppimista hyödyntämällä aikaisemmista harjoituksista kertynyttä dataa. Valmiiksi valitut painot auttaisivat keskittymään itse harjoituksen suorittamiseen.

Optimaalista painomäärää esimerkiksi penkkipunnerrukseen voitaisiin ennakoida koneoppimismallilla lepopäivien määrän, edellisen tuloksen ja sarjan järjestysnumeron perusteella.

Web-sovelluksen kehittäminen ei lopu koskaan

Alkuperäisenä ajatuksenani oli toteuttaa web-pohjainen data-sovellus henkilökohtaisen datan analysointiin, mutta myös alusta julkisten sovellusten ja laskureiden tekemiseen.

En asettanut tiukkoja tavoitteita tai takarajoja. Aloin vain tekemään. Sovelluksessa on valtavasti asioita joita haluaisin kehittää, mutta aika on rajallista. Kaikkien haluamieni ominaisuuksieni toteuttaminen vaatisi ohjelmistokehitystiimin.

Lopputulos on pääpiirteiltään sellainenkin kuin aloittaessani toivoin, vaikka yksityiskohdissa ja lisäominaisuuksissa saisi kulutettua ikuisuuden.

Jos tarvitsee perussovelluksen tiettyyn tarpeeseen pikaisella aikataululla, on järkevää maksaa muutama euro kuukaudessa valmiista verkkopalelusta tai mobiilisovelluksesta.

Taidan käyttää punttisalitreenieni valitsemiseen jatkossakin arvonta-Exceliäni tai nostelen painoja päivän fiiliksen mukaan.

Blogin osa 2 löytyy täältä: Web-sovellus pilvessä data edellä - Tekninen toteutus.