Aikajana

Hyödyllisyyksiin asti pääsyä esittelevän interaktiivisen aikajanan, kaikkine autenttisine tietosisältöineen, eräänä toteuttamisen perusteena on ollut tehdä erilaisten terveydenhuollon ammattilaisten kanssa keskusteltavuudesta jouhevampaa ja tarjota heille vähemmällä muunlaisella selittämiselle mahdollisuus muodostaa ymmärrystä tutkittavasta heidän mukavuusaluettaan laajemmalta. Tietenkin tällaisen aikajanan on tarkoitus olla myös henkilökohtainen, erilaisten indikaattoreiden koonnin väline, jonka avulla ei tarvitse muistella väärin minkälaista jonain aiempana hetkenä olikaan. Toki se soveltuu myös sen todistelemiseen, kuinka määritelmällisesti esim. vain aivojen seutuville liittyvä oireyhtymä ei olekaan niin yksiselitteinen kuin saatetaan antaa ymmärtää eli oireilu, jota voidaan luonnehtia tyypilliseksi, voidaan ehkä häivyttää kokonaan pois. Tai ehkäpä jonkinlainen oireyhtymää muistuttava piirteisyys saa luulemaan olevansa johonkin oireyhtymään erityisen täsmäävä, vaikkei etiologia (syyt) olisi ehkä ollenkaan linjassa tyypillisyyksien suhteen, jolloin aikajana-avusteinen vaikuttavien tekijöiden tarkkailu voi tuoda esiin jotain, mitä voi käyttää apuna toiminnanohjaamisessa.

Ryhmiteltynä ja erottuvaisesti tyyliteltynä tietoa saa mahtumaan aikajanalle paljonkin kerralla tarkasteltavaksi ilman, että tietoa vaikuttaa olevan liiaksi. Tai jos tietoa sitten kuitenkin on liiaksi, voi tietoryhmiä piilotella painikkeilla. Zoomattavuus ja soveltuva orientoituneisuus/motivoituneisuus päätelmien ja huomioiden tekemiseen avustavat myös aikajanan hyödyntämisessä.

Jokainen käyttäjä voi käyttää omanlaisiaan tietoryhmiä, mutta tarkoituksena juuri esimerkinlaisten tietoryhmien käyttämisessä on ollut saavuttaa tosielämän tilanne, jossa jatkuvuutta kelpo olotiloissa on runsaasti ja oireilujen syitä on suoraan tai epäsuorasti tajuttu niin paljon, ettei niistä olisi enää riesaa. Lähtökohdaksi onnistumiselle on määritetty, että päiväkohtaisesti täytyy olla vertailtavuutta, minkä on ajateltu lutviutuvan sillä, että pysyttäytyy sellaisessa tavanomaisten ravintoaineiden saantimääräsuosituksia myötäilevässä ruokavalion ja aktiviteettien kombinaatiossa, jota varioimalla ja hienoisesti säätämällä saa aikaan muutoksia oirekuvassa ja kelpo olojen esiintymisissä.

Ruoka-aineilla on oletettu olevan erityisen suuri oletettu tai varmahko merkityksensä, joten kokeilun vuoksi ruoka-aineiden ja ravintolisien määriä on häivytelty/korostettu. Toisinaan jotain poistuu toviksi ja jotain voi tulla uutena mukaan joksikin aikaa, mutta joka tapauksessa ravintoaineiden määrien osalta hiukan yleisiä ravintoainesuosituksia ylempänä pysyen. Päivittäin paljolti samoja ruoka-aineita ja ravintolisiä käyttämään tottumattomalle olisi toki melkoiset haasteensa pysyttäytyä samanlaisehkon jatkamisessa, mutta jos elimistö joutuu joka päivä varautumaan johonkin erilaiseen, tehnee sellainen päiväkohtaiset vertailtavuudet oireilun ym. suhteen jokseenkin vaikeaksi? Ruoka- ja ravintoaineiden käytön ajoittamisella ja määrien varioimisella on myös tehty paljon kokeilua kuten myös tahallisilla ruokavalion tavanomaisuuksista poikkeamisilla.

Tietokyselyt ja tiedon toissijainen käyttö

Tietokyselyiden hyödyttävyys on käyttäjästä itsestään ja datan merkittävyydestä riippuvaista, sillä eräälläkin tietokyselyllä voidaan saada esim. stressitasot piirtymään siten ryhmitellysti, että ryhmiä ovat erottamassa toisistaan unessa olemisen hetket ja mihin päätelmien tekemistä avustamaan voi ottaa mukaan vaikkapa jonkin syödyn ruoan, jonka on huomannut olleen erityisen tyypillisesti stressitasoa nostattavaa. Lisätietoa tietokyselyistä kirjoituksessa "Oddqueries (tiedon exportointi ja tietokyselyt)".

Tiedon toissijainen käyttö saa alkunsa datan konvertoimisesta sellaiseen muotoon, että sitä voidaan käyttää esim. taulukkolaskentaohjelmassa tai analytiikkaohjelmistoissa. Käytettävissä tähän liittyen on yksinkertaisiin exportointitarkoituksiin tarkoitettu oddqueries-käsky, josta on esimerkkejä kirjoituksessa "Oddqueries (tiedon exportointi ja tietokyselyt)".

Esittelysivut ja lähdekoodi

Kirjoituksessa "Oikeudellisia käytön rajoitteita" on mainittu hieman tarkemmin, mitä suhteellisen helposti hyödynnettävällä ja tarjolle asetetulla lähdekoodilla voi tehdä, mutta lyhyesti sanoen sitä voi muokata käyttöönsä kuten haluaa, kunhan edes johdannaisversioita ei käy laajemmin levittelemään. Esittelysivut on juuri niitä, joita lähdekoodissa on mukana muokattavaksi ja mallia otettavaksi.

Zoomaus hiirellä tai mobiilisti sormin, fullscreen-moodiin pääsyyn linkkimäinen painikkeensa, päiväkohtaiset kommentit näkyvissä sen perusteella, mitä päiviä aikajanalla on kulloinkin näkyvissä ja tietoryhmien piilottamiseen on erilliset painikkeensa. Päiväkohtaista kommenttia klikkaamalla aikajana rajautuu näyttämään vain kyseisen päivän. Vähintään kellonajan näyttävät toolipit useimmilla visualisoiduilla tietueilla. Tunnistettuina bugeina (käytetyn JavaScript-kirjasto vis.js:n ja sen timeline-moduulin kehitystyö lopetettu alkuperäisen tekijänsä toimesta jo useampi vuosi sitten) mm. sormin zoomaamisen aiheuttama häkellystilanne iPadia käytettäessä ja tehokkailla tietokoneilla ilmenevä ruudunpäivityksen hidastuminen tietoelementtien määrän lisääntyessä kovin suureksi.

Videoesittely

Mukavuussyistä laitettu katseltavaksi myös näytön tallennus -video, jossa esitellään aikajanan käytettävyyttä, sekä muutamia oddqueries-käskyjä.

Kenenkäs ideaa tämä tällainen?

Tämä kaikki on yhden tietoteknisesti koulutetun yksityishenkilön tekosia, jolla sattuu olemaan soveltuvaa oireilua ja monipuolista kokemusta terveydenhuollossa asioimisesta. Jokunen mittari hiilidioksidimittarista älykellon sensoreihin sattui olemaan käytettävissä, joten niitä saattoi käyttää muutamanlaisten olosuhteiden ja elimistön tilojen mittailuun. Kokeilujen edistymisen aikana ostettu sisäilmanpuhdistuslaite, jonka mobiili käyttöliittymä mahdollistaa laitteen ohjailun ja PM2.5-tason muutoksen seurannan, sekä ilmankostutuslaite, jossa myös samankaltainen ohjauksen ja seurannan mahdollisuus. Harkinnassa tätä kirjoittaessa myös lämpöpatterin termostaatin vaihtaminen irtoanturiseen, sillä huoneilmaan vaikuttavuudet ovat erityisen oleellisia oireisiin vaikuttavia tekijöitä. Ruoan ja ravintoaineiden käyttö oli jo muutenkin suht tyypillistettyä, lenkkeily on ollut aktiviteeteissa mukana jo pitkältä ajalta, motivaatioita terveysselvittelyihin löytyy ns. akateemisesta kiinnostuneisuudesta henkilökohtaisiin tavoitteisiin ym.

Muokattavissa olevat tiedostot

Rivimäärältään lyhyehkö HTML-tiedosto kuten personaltimeline-example1-html määrittää aikajanan ym. näyttävän sivun rakenteen, siinä valmistellaan olennaiset ohjelmistokomponentit optionaalisuuksineen ja tehdään valintaa sen suhteen, mitä dataa aikajanalle laitetaan. Aikajanalla olevien elementtien tyylittely tehdään aikajanan osalta tiedostoon feelingtimeline.css ja kaiken muun osalta luovasti nimettyyn tiedostoon others.css. Tietoryhmissä käytettävä data on käytännössä joukko JavaScriptin array-tyyppisiä muuttujia sisältäen objekti-tyyppisiä tietueita. Datan rakenteesta tarkemmin kirjoituksessa "Tietoryhmien datarakenteet ja attribuutit".

Aikajanan muokkaamiseksi eri henkilöiden tarkoituksiin on tavanomaisesti riittävää olla tekemättä mitään aikajanan kontrollilogiikan enimmälti sisältävään tiedostoon personaltimeline.js. Sama pätee myös tiedostoon oddqueries.js. Nämä tiedostot, kuten muutkin, sisältävät monin kohdin avustavia selitteitä, jotta on helpompi hahmottaa/ymmärtää, mitä käytetään mihinkin.

Kaikki tiedostot demosivujen tapaisten toteutusten luomista varten ovat saatavilla GitHub-sivuilta: dfgdfg..

Esivaatimukset ohjelmointitaidoiksi

Ohjelmointitaitoja ei välttämättä tarvitse paljoa, sillä muokkaajan tarvitsee vähimmillään vain vaihtaa omia tietojaan esimerkkitietojen tilalle ja olla lisäämättä mukaan niitä tietoryhmiä, joita ei tarvitse. Todennäköisesti sitä kuitenkin haluaa ottaa mukaan sellaisen tyyppisiä tietoja, joille ei ole ollut soveltuvaa tietoryhmää, mikä vaatiikin sitten jo feelingtimeline.css-tiedoston hienoista muokkausta, sillä muistettavuuden vuoksi muuttujien ja tyylittelyjen nimet ovat tietoryhmien mukaisia. Käytännössä lähtökohdat ovat hyvät, kun tietää mitä tarkoittaa HTML, osaa tyylitellä sitä CSS:llä ja pystyy lukemaan JavaScript-koodia.

Mukavaksi ja näppäräksi ohjelmointivälineeksi voi suositella otettavan käyttöön Visual Studio Code. Jonkinmoisesta tottumuksesta nettisivujen tekoon tai muokkailuun on hyötyä, sillä muuten kaikkea saattaa kaikesta huolimatta tulla ajateltavaksi hiukan liiaksi kerralla. Tämä siitäkin huolimatta, että koodi on jäsennelty siten, ettei siinä pitäisi olla kovin vaikea navigoida.

Aikajanan näyttäminen

Aikajanan ja siinä käytettävän datan käyttöönottoa HTML-sivun JavaScript-koodissa.

Kuvasta voi havaita, että aikajanan muodostaminen ja näyttäminen on jokseenkin selkeä toimenpide, sillä aikajana eli käytännössä sen kontrollilogiikka tarvitsee syötteekseen näytettävät tiedot tietynrakenteisena ja tietojen mukaan ymppäämisen jälkeen aikajanan valmistelu onkin pitkälti valmista. Huomaa myös kommenteiksi muutetut rivit, joissa käytetään metodia limitGroupUse. Sellaista juuri ennen aikajanan initialisointia käyttäen voi rajata tietoryhmän näkyvyyttä alkamaan ja päättymään tietyille päiville, mille voi olla käyttöä esim. silloin, jos jokin mittari on ensin sijoitettuna yhteen huoneeseen ja myöhemmin johonkin toiseen huoneeseen, eikä koe tarkoituksenmukaiseksi pitää molempia mittausarvoja näkyvillä jonkin tietyn ajankohdan jälkeen. Tai ehkäpä oirekuva muuntuu joksikin aikaa sellaiseksi, että osan oireilusta voisi erottaa joksikin aikaa erilliseksi tietoryhmäkseen, jolloin sen tietoryhmän näkyvyydelle voi asettaa alku- ja päättymisaikansa.

Aikajana ohjelmistokomponenttina perustuu JavaScript-kirjasto vis.js:n moduuliin "timeline" ja yleensä ottaen se tarvitsee syötetiedoikseen lähinnä näytettäväksi tarkoitetun tiedon tietynlaisena datarakenteena, sekä HTML-elementin, johon aikajana tulisi sijoittumaan. Sitä ei ole kehitetty enää pitkiin aikoihin, mutta sen käyttöönotto on mielekkään vaivatonta. Jonkinmoinen hitaus runsaalla visualisoidun datan määrällä saattaa olla vaivaksi varsinkin hitaampia laitteita käytettäessä.

Optionaaliset ominaisuudet

Nämä eräät optionaaliset ominaisuudet saattaa hyvinkin haluta pitää kaikki käytössä. Niitä ovat ovat fullscreen-näkymä, päivittäiset kommentit, tietoryhmien pois/näkyviin -painikkeet ja oddqueries (tiedon exportointi ja tietokyselyt). Kuvituskuvatkin ovat tavallaan optionaalinen ominaisuus, mutta ehkä lähinnä sen vuoksi esillä, että mieleen juontuisi idea siitä, että kuvituskuvien avulla on helpompi ajatella kuin toisin muistelemalla. Oddqueries on selitetty tarkemmin kirjoituksessa "Oddqueries (tiedon exportointi ja tietokyselyt)".

Optionaalisten toimintojen käyttöönottoa HTML-sivun JavaScript-koodissa.

Aikajanan päiväkohtaiset kommentoinnit. Tämä on erikseen käyttöön otettavissa oleva ominaisuus, mikä toimii siten, että aikajanan oletettavasti alapuolella näytetään päiväkohtaiset kommentoinnit niiden päivien osalta, jotka ovat juuri tuolloisella katselun hetkellä kokonaan aikajanalle mahtuvia. Täten aikajanan zoomailu ja aikajanalla siirtyminen saa päiväkohtaisten kommenttien listan päivittymään. Datan rakenteesta päiväkohtaisuuksien osalta on myös lisätietoa kirjoituksessa "Tietoryhmien datarakenteet ja attribuutit".

Tietoryhmien piilotettavuus ja takaisin näkyviin tuominen. Kun aikajanan sisältö ensilatauksella visualisoidaan, kaikki tietoryhmät näytetään, mutta arvattavasti aikajanan yläpuolella olevilla painikkeilla voi piilottaa ja palauttaa takaisin näkyviin tietoryhmän jos toisenkin. Nämä painikkeet luodaan automaattisesti, kunhan vain ottaa tämän ominaisuuden käyttöön. Näille on sitä suurempi tarve, mitä pienempiruutuisella näytöllä sivua katselee. Alunperin koodailu on tehty 32-tuumaista näyttöä käyttäen, mihin mahtuu runsaanlaisesti informaatiota ja vasta siinä jossain koodailun myöhemmillä vaiheilla on annettu ajatusta sillekin, josko esim. tablet-laitteillakin pitäisi voida olla käytettävyyttä.

Oddqueries-käskyt ovat kaikki silkkaa JavaScriptiä, jotka annetaan erillisessä tekstikentässään ja käynnistetään enteriä painamalla. Vaihtoehtona ovat, että käskyn tulokset näytetään joko kaaviona, joka sekin aikajanallinen, tai tekstuaalisesti. Annettu JavaScript-pohjainen käsky suoritetaan käytännössä käyttäen ohjelmointikielen eval-metodia. Seuraavassa esiteltyjen oddqueries-käskyjen lisäksi voi syötteeksi antaa myös "clear()", joka arvatenkin palauttaa jonkinlaiseen lähtötilanteeseen.

Syntaksi

Tekstuaalisia tuloksia antaville tai sellaista valmisteleville käskyille:

  • showManualResults(anyhtml)
  • makeExportableItems(dataarray, dateformattype, shouldsplittitletext)
  • makeGroupItemVarieties(dataarray, separator)

Kaaviollisia tuloksia tai sellaista valmisteleville käskyille:

  • makeOccasionalChart(dataarray)
  • addToOccasionalChart(dataarray, differentiatingindex, nopathdrawing)
  • addRangedToOccasionalChart(dataarray, differentiatingindex)
  • getSimilarGroupItems(groupname, searchstring, separator, regexpstr)
  • getGroupItemDateClusters(minutes, groupname, searchstring, separator, regexpstr)
  • getGroupItemDailyClusters(groupname, searchstring, separator, regexpstr)
  • getGroupItemClustersBetweenRangedGroupItem(groupname, rangedgroup, searchstring, separator, regexpstr)
  • getGroupItemClustersBetweenNonRangedGroupItem(groupname, nonrangedgroup, searchstring, separator, regexpstr)

Esimerkkikäskyjä

  • oddqueries.showManualResults(oddqueries.makeExportableItems(nutritionData, 1, false))
  • oddqueries.showManualResults(oddqueries.makeExportableItems(nutritionData, 2, true))
  • oddqueries.showManualResults(oddqueries.makeGroupItemVarieties(nutritionData,","))
  • oddqueries.makeOccasionalChart(oddqueries.getGroupItemClustersBetweenRangedGroupItem("stress", "sleeping", "10,20,30,40,50,60,70,80,90"))
kymmenellä jaollisia lukuja annettu tietokyselyn tarkentimena
  • oddqueries.makeOccasionalChart(oddqueries.getGroupItemClustersBetweenRangedGroupItem("stress", "sleeping", "5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95"))
annettu kaikki mahdolliset esiintyvät luvut tietokyselyn tarkentimena
  • oddqueries.makeOccasionalChart(oddqueries.getGroupItemClustersBetweenRangedGroupItem("stress", "sleeping", null, null, "[0-9]{1,3}"))
annettu tietokyselyn tarkennin säännöllisenä lausekkeena
  • oddqueries.makeOccasionalChart(oddqueries.getGroupItemClustersBetweenNonRangedGroupItem("bloodpressure", "jogging", null, null, "^(1[0-2][0-9])"))
  • oddqueries.addToOccasionalChart(new Array(oddqueries.getSimilarGroupItems("jogging")), 3, true)
Tietokyselyn palauttamat array-tyyppiset tietoklusterit eivät ole rakenteellisesti kovin merkittäviä, jos tietoa on niin vähän, että yhteen tietoklusteriin sijoittuu vain yksi tieto, sillä tuolloin tiedon esittäminenkin on paljolti toisiinsa liittymättömistä pisteistä koostuvaa, jotka edustavat tässä verenpaineen yläpainetta ylempien pisteiden osalta. Alemmat pisteet edustavat kaavion täydennykseksi lisättyjä lenkkeilyjen hetkiä. Koska metodi getSimilarGroupItems ei palauta vaadittuja sisäkkäisiä array:tä, metodin vastaus on kietaistu uuteen sellaiseen. Samaisen metodin boolean-arvo viimeisenä parametrinä tarkoittaa "älä piirrä klusterikohtaisia viivoja pisteiden välille".
  • oddqueries.makeOccasionalChart(oddqueries.getGroupItemDailyClusters("roomair", null, null, "^[0-9]{1,3} ppm ([0-9]{1,3},{1,3})"))
tietokyselyn tarkentimessa olevan säännöllisen lausekkeen avulla nimikkeiden tietystä osasta on osoitettu suluin se kohta, joka täsmäävistä nimikkeistä halutaan ottaa kaaviossa käytettäväksi, mikä tässä tarkoittaa huoneilman lämpötilaa (desimaalit jäävät pois lukuja käsiteltäessä pelkästään kokonaislukuina)
  • oddqueries.makeOccasionalChart(oddqueries.getGroupItemDailyClusters("roomair", null, null, "^([8-9][0-9][0-9]|1[0-9]{1,3})"))
  • oddqueries.addToOccasionalChart(oddqueries.getGroupItemDailyClusters("nutrition", "lettu"), 2)
Sinänsä ihan höpökysely tietokyselyksi, mutta tässä on otettu ikään kuin vakavaan tarkasteluun mahdollinen korrelaatio korkean huoneilman hiilidioksitason ja (jonkinlaisen) letun syömisen välillä. Metodilla getGroupItemDailyClusters vastauksena saadut tietoklusterit ovat päiväkohtaisia, mikä ilmaistaan tässä myös visuaalisesti.
  • oddqueries.makeOccasionalChart(oddqueries.getGroupItemClustersBetweenRangedGroupItem("symptoms", "sleeping", "lievä väsymys"))
Kaikkea tietoa ei voi esittää numeroarvoin, joten niiden sijainti y-akselilla on nollakohdassa kuten tässä oire "lievä väsymys" ajankohdan mukaan x-akselille sijoitettuna ja klusteroituna nukkumisen hetkiin perustuen.

Lisäselvyyttä tietokyselyiden tarkentimista

Tietokyselyn tarkentimina voi käyttää hakusanaa, hakusanarimpsua erotinmerkillä tai säännöllisiä lausekkeita. Nämä ovat identtisiä metodin palauttaman vastauksen osalta:

  • oddqueries.getGroupItemDateClusters(240, "nutrition", "juusto,tee")
  • oddqueries.getGroupItemDateClusters(240, "nutrition", "juusto,tee",",")
  • oddqueries.getGroupItemDateClusters(240, "nutrition", "juusto;tee",";")
  • oddqueries.getGroupItemDateClusters(240, "nutrition", null, null, "(tee|juusto)")

Valmisteleva datankäsittely metodilla getGroupItemDateClusters palauttaa array-tyyppisen tietoköntän, joka sisältää yhden tai useamman array-tyyppisen tietoklusterin, missä parametrina annettu minuutteja tarkoittava lukuarvo tarkoittaa ajallista miniväliä kahden eri klusterin välillä. Jos kyseinen aikaväli on niin suuri, ettei sellaista ajallista väliä käytettävissä olevassa datassa olekaan, kaikki palautuva tieto sijoittuu yhteen tietoklusteriin.

  • oddqueries.getGroupItemDateClusters(960, "nutrition", "juusto;tee", ";")
  • oddqueries.getGroupItemDateClusters(240, "nutrition", "juusto;tee", ";")
  • oddqueries.getGroupItemDateClusters(2000, "nutrition", "juusto;tee", ";")

Bugi vis.js:n timeline-moduulissa

Vaikka sellainen konfigurointi-optio on vis.js:n ohjeiden mukaan käytettävissä, millä saa kaaviollisen aikajanan toimimaan siten, että sekä sen vasemmalla, että oikealla puolella on erilliset y-akselit, tämä ominaisuus ei toimi, eikä näytä toimivan vis.js:n esittelysivuillakaan. Selittynee sillä, että vis.js kehittäminen on sen alkuperäisen tekijän toimesta lopetettu jo ajat sitten, eikä sen yhteisöllisesti edelleen kehitetty versio ole sekään päivittynyt pitkiin aikoihin. Pitänee ehkä joskus tehdä jossain määrin uusiksi jotain toista JavaScript-kirjastoa käyttäen.

Aikajanan valmistelu tietoryhmien lisäämisellä

Annettaessa kontrollilogiikalle tietoryhmän tietoja, voidaan siinä yhteydessä antaa viisi erilaista visualisointiin vaikuttavaa boolean-tyyppistä arvoa seuraavan syntaksin mukaan: addToItemsGroups(dataarray, indicatorname, groupname, grouplongname, isbackgroundindicator, haslevels, showstimedifference, limiteditemwidth, largerimage).

Koodissa se näyttäisi vaikkapa tällaiselta:

personaltimeline.addItemsToGroups(timerangedFeelingFineData, "feelingfine", "Kelpo olo", true, false, true, false, false);

Lisämääritettä showstimedifference varten ei tarvitse tehdä täydentävää tyylimäärittelyä tiedostossa feelingtimeline.css, jos tietoryhmää varten muuten on jo tyylittelyä tehtynä, mutta se vaatii toimiakseen, että tietoryhmän objekteilla on sekä alku-, että päättymisaika, sillä näistä lasketaan tunteina ja minuutteina näiden aikojen välinen ero.

Lisämäärite limiteditemwidth taasen tarkoittaa, että sisältötekstin alueensa sisäpuolellaan pitävä elementti voi olla enintään ennalta rajatun levyinen (60 pikseliä) ja jos teksti ei siihen mahdu, teksti katkaistaan poikki ja tekstin loppuun lisätään tarvittaessa "...". Lisämäärite haslevels toimii visuaalisesti vain, jos tietoryhmien objekteilla on attribuutti level määritettynä (ks. myös alakohta "Tarkemmin esimerkki-tietoryhmien attribuuteista"). Lisämäärite isbackgroundindicator vaatii visuaalisesti toimiakseen sen, että kyseistä tietoryhmää varten on tyylimäärittelynsä valmiina (mallin mukaan tehtynä tai entisiä käyttäen). Lisämäärite largerimage vaikuttaa tooltipien kuvakokoihin (leveys) tietoryhmän laajuisesti kuvien suurempana näkymisenä, mutta kuvia ei silti skaalata suuremmaksi kuin mitä ne todellisuudessa ovat (maksimikoot pienemmällä kuvakoolla 220 pikseliä ja suuremmalla 580).

Tietoryhmissä käytettävistä attribuuteista

Kaikki aikajanalle sisällytettävä on tietoryhmittäin omissa array-tyyppisissä muuttujissaan, joissa olevat objektit attribuutteineen vastaavat kukin yhtä aikajanan tietoryhmän elementtiä (visualisoitua tietuetta).

Kuvassa on esimerkinomaisesti kelpo oloksi nimetty tietoryhmä, jonka objekteilla on attribuutteina vain alku- ja loppuajat. Annettaessa nämä tiedot kontrollilogiikalle (esimerkkisivulla), määritetään siinä yhteydessä vielä erikseen, että kyseistä tietoryhmää käytetään visuaalisesti ottaen background-tyylisesti eli enemmän alaa vievänä palkkina, jonka päälle voisi optionaalisesti sijoittaa vielä jonkin muunkin tietoryhmän tiedot (ks. "Aikajanan valmistelu tietoryhmien lisäämisellä" ja mikseipä myös esimerkkikoodia, jossa aikajanan initialisointia valmistellaan).

Ajankohdat

Tietoryhmien muuttujien nimet kannattaa muistikuormituksensa vähentämiseksi pitää luonnehtivan nimisinä, jottei tarvitse myöhemmin ihmetellä mihinkä ne tiedot kuuluivatkaan, joiden attribuutteina ei ole muuta kuin alku- ja loppupäivät ja -kellonajat (starttime ja endtime). Kaikkien muiden paitsi päiväkohtaiset-tietoryhmien aikamerkinnät noudattavat syntaksia "YYYY-MM-DD HH:mm". Päiväkohtaisilla käytettävä attribuutti päivän määrittämiseen on day ja syntaksina "YYYY-MM-DD".

Joillakin tapahtumilla kuten unella on tavanomaisesti alkunsa ja loppunsa, sekä toisinaan myös keskeytyksensä, joten sellaisen voi kirjoitella yhtenä tai useampana objektina. Aikanajana-komponentti sijoittelee ne sitten paikoilleen. Jos ajan antamisen kanssa möheltää, siitä ei välttämättä seuraa sen suurempaa vahinkoa kuin, että visualisoitu tietua sijaitsee jossain omituisessa kohdin, mutta toki sekin on mahdollista, että aikajana ei toimi ollenkaan ennen kuin virheensä korjaa.

Päätelmien tekemisien kannalta olennaisempaa voi joidenkin tietoryhmien osalta olla ilmentymisien toistuvuus ja alkaminen/loppuminen kuin eksakti kesto eri kertoina, joten sellaisissa tapauksissa pelkkä jonkin ilmenemisen ajankohta ja otsikoiva selite (title, elaboration tai level) voi riittää (esim. joidenkin fysioterapeuttisten oireiden tapauksessa).

Nimikkeet, otsikot ja selitteet

Aikajanalla näkyvä tieto per tietue haetaan ensisijaisesti attribuutista title tai elaboration (ei muuta kuin eroa kuin se, että toinen käyttötarkoituksena hiukan erilaiselta), mutta jos niitä ei ole annettu koetetaan käyttää attribuutissa level olevaa tietoa. Level-attribuutissa on lisäksi se erityisyys, että sen avulla voi vaikuttaa tiedon tyylittyvyyteen, mikä täytyy kuitenkin valmistella erikseen feelingtimeline.css-tiedostossa (mallin mukaan). Jos mitään näistä attribuuteista ei ole, sitten näkyvänä tietona on "yep". Poikkeuksen tässä sanottuun muodostaa se, jos tietoryhmä on kokonaisuudessaan määritelty olevan background-tyyppinen, sillä tuolloin title ja elaboration -attribuutteja ei huomioida, mutta level-attribuutti kylläkin.

Syynä sille, ettei joitakin asioita luonnehdi jokaiselle tietoryhmän tietueelle erikseen, voisi olla se, että tietoryhmän nimi on muutenkin sillä tapaa selittävä, ettei tietueille tarvitse antaa muuta kuin starttime-attribuutti, jonka perusteella visualisoitu tieto voi sijoittua aikajanalla.

Tietokyselyidyn näkökulmasta tietueisiin kirjoitettua tietoa (attribuutit title tai elaboration) ei välttämättä tarvitsee pilkkoa valmiiksi "atomisiin osiinsa", sillä oleelliset kohdat voi osoittaa myöhemminkin säännöllisiä lausekkeita (eng. regular expressions) käyttäen. Täten esim. yhteen huoneilma-tietueeseen voi laittaa useita sisäilmasta kertovia tietoa kuten hiilidioksitason ja huoneen lämpötilan. Säännöllisisten lausekkeiden käytöstä on lisätietoa ja hetikäyttöisiä esimerkkejä kirjoituksessa "Oddqueries (tiedon exportointi ja tietokyselyt)".

Vaikka nimikkeissä, otsikoissa ja selitteissä voi käyttää HTML-koodia, on huomioitava, että aikajana ei ole konfiguroitu siten, että se sopeutuisi monirivisiin tietueisiin ja toisaalta oddqueries-kyselyitä voi olla hankalampi saada hyödynnetyksi syötetiedon ollessa HTML-koodista. Visualisoidun tiedon olemukseen on ensisijaisesti tarkoitus vaikuttaa tyylitiedostoon feelingtimeline.css tehdyillä muutoksilla.

Vakavuuden asteet tai tasot

Joitakin ilmiöitä tai tapahtumia saattaa haluta tarkentaa tapauskohtaisesti esim. vakavuuden tason osalta, jolloin voi käyttää attribuuttia level ja antaa sille numeroarvon esim. väliltä 1 - 3. Tämän toimivuus vaatii, että tyylimäärittelyissä tällainen tasoisuuden mahdollisuus on otettu huomioon, mikä tulee paremmin ymmärretyksi vilkaisemalla tiedostoa feelingtimeline.css ja hakee sieltä rivejä esille esim. hakusanalla "stress_level1".

Tooltipit ja visualisoidun tiedon korostamiset

Jokaiselle aikajanaan sijoittuvan tietoryhmän objektille (paitsi background-tyyppisille) voi antaa attribuutiksi:

  • alternativestyle (numeerinen arvo väliltä 1 - 9),
  • tooltipimage (kuvatiedoston nimi images-hakemistossa) ja/tai
  • tooltiptext (tooltipissä näytettävä teksti ajan lisäksi).

Alternativestyle-tyylittelyt

Näitä on ounasteltu voitavan käyttää siten, että ne eivät olisi aivan liiaksi huomiota vieviä, mutta kuitenkin aikajanaa silmäillessä tulisi tunnistetuksi merkitsevän jotain erityistä, joka sitten todennäköisesti tulisi selitetyksi tarkemmin päivittäiskommenteissa. Värisävyiset versiot ovat käytettävissä kuvastamaan jonkin olevan jollain tapaa huonommin/pahanlainen tai paremmin/hyvänlainen. Numerojärjestyksen voi lukea kuvasta siksak-kaavalla eli ylimmällä rivillä vasemmalla ilman alternativestyle-attribuuttia oleva ja sen alapuolella alternativestyle-attribuutti numeroarvolla 1. Nämä tyylittelyt toimivat käyttökelpoisesti jo entuudestaan reunuksen sisältäviin elementteihin, mutta eivät niinkään sellaisiin, joiden merkittävyyden taso on tarkoitettu esitettävän level-attribuutilla. Liian monen merkittäväksi tarkoitetun visuaalisen vihjeen sisällyttäminen samaan elementtiin olisi muutenkin luettavuutta hidastavaa.

Tooltipien kuvat ja tekstit

Tooltipien taustaväri on musta ja tekstin väri valkoinen, jos kumpaakaan attribuuttia, tooltiptext tai tooltipimage, ei ole annettu, mutta niitä käytettäessä taustaväri tooltipillä on valkoinen ja tekstin väri musta. Tooltipit näyttävät vakiona kellonajan tai kellonajat, jos sekä starttime, että endtime on annettu. Attribuutti tooltipimage mahdollistaa kuvan näyttämisen tooltipissä, sekä samalla myös tooltiptext-attribuutin sisällön, jos se on annettu. Jos lisäksi tietoryhmäkohtaisesti on otettu käyttöön lisämäärite largerimage, nämä kuvat näkyvät isompikokoisena. Kellonaika näkyy tooltipeissä joka tapauksessa. Tooltipin tooltiptext-attribuutissa voi käyttää HTML-koodia rajoituksetta.

Päivittäiskommentit

Päivittäisissä kommenteissa voi myös käyttää HTML-koodia, mihin sisältyy myös mahdollisuus HTML:n style-attribuutin käyttöön tekstin tyylittelyyn ja class-attribuutin käyttöön käyttääkseen tyylittelyä, joka on määritelty feelingtimeline.css-tiedostossa. Kuvassa olevan esimerkkitekstin versaalilla (suuraakkosin) kirjoitetut kohdat ovat kaikkien kolmen kohdan osalta toteutettu kolmella eri tavalla: HTML-tagilla strong ja sille tyylitiedostossa määritellyllä tyylillä "text-transform: uppercase;", HTML-tagilla b (käytännössä sama kuin strong) ja sille annetulla attribuutilla style, jolla arvona "text-transform: uppercase;", sekä keksityllä HTML-tagilla fancytitle, joka on kokonaisuudessaan määritelty tyylitiedostossa.

Kontrollilogiikka-koodin muuttaminen

Tiedosto personaltimeline.js on pyritty pitämään sellaisena, ettei sinne oikeastaan olisi mitään välttämätöntä asiaa, mutta jos sielläpäin tulee käyneeksi, kannattanee ensikohteikseen ottaa metodit addItemsToGroups ja doAfterTimelineInit. Niissä käsitellään mm. sitä, mitä syötetiedolla tehdään ja mitä tapahtuu sitten, kun aikajana on ensilataamisen jälkeen initialisoitu käyttöön. Jos välttämättä haluaa tehdä muutoksia aikajanan konfigurointiasetuksiin, voi niitä tehdä vis.js:n timeline-moduulin ohjeiden mukaisesti muuttujaan options. Tiedostoon oddqueries.js ei myöskään pitäisi heti ensimmäiseksi olla asiaa mennä tekemään muutoksia, mutta voi sieltä ottaa vilkaistavakseen esim. metodin getGroupItemClustersBetweenRangedGroupItem ja todeta saavansa itsensä hämmennyksiin yrittämällä ymmärtää sitä ensilukemalla.

Ohjelmistoteknisvivahteista kehitystyötä

Kaikenlaista paranneltavaa voisi toki tehdä, kuten:

  • optimoida visuaalisesti esitetyn tiedon luettavuutta
  • hahmotella ohjelmistoteknisiä keinoja informaatioähkyn hallitsemiseksi
  • miettiä minkälaisten seikkojen osalta pitäisi voida osoittaa toisiinsa vaikuttavuus ja miten se tehtäisiin
  • varmistella visualisoinnissa käytetyn datan olevan rakenteensa osalta käytettävissä muunkinlaisissa sovellutuksissa
  • miettiä miten sitten toimitaan, jos tietoa jo paljon kertyneenä haluaisikin erotella joitain nimikkeitä useammaksi sellaiseksi
  • parannella oddqueries-ominaisuutta
  • automatisoida tiedonkeruuta ja dataksi tekemistä

Mikäpä sen tuosta vaan takaisi, että käydessään tekemään jotain, jolla on tavoite, asiat vaan sujuisivat ilman tekemisensä suunnitelmallistamista ja sen ajoittaista uudelleenarvioimista. Onnistumisen mahdollisuuksia parantanevat, kun:

  • Kirjoittelee huomioitaan paperille jonkinlaista struktuuria noudattaen, käy ajoittain paperille kirjoittamansa läpi ja muuntaa samaisen tiedon digitaaliseen muotoon.
  • Muodostaa näkemyksiä raja-arvoista ja sopivista tasoerotteluista eli voisiko esim. lievä/vahva -jaottelu olla riittävää vai tarvitseeko olla tarkempi.
  • Ottaa käyttöön uusia tietoryhmiä, jos sellaisista on tai voisi olla hyötyä, sekä arvioi toisinaan josko jotkin tietoryhmät ovat vääränlaisia tai puutteellisia.
  • Ei ole itselleen liian ankara oirenimikkeitä valitessaan ja niissä pysytellessään, sillä jonkin aikaa valitsemiaan käytettyään niiden merkitysala alkaa tuntumaan selkeämmältä.
  • Tekee päätöksiä mittailutiheyksistä ja -ajoituksista, sekä hankkii tuntumaa mittareiden rajoitteista ja toimivuuksista. Mittareita voi mahdollisuuksien mukaan hankkia lisää missä vaiheessa vain.
  • Miettii miten kertyvän tiedon avulla voi muodostaa päättelemisen avuksi vinkkejä siitä, miten asiat saattavat korreloida toistensa suhteen, edistää jonkin ilmentymistä, tyrehdyttää jotain ym.
  • Harkitsee voisiko joitain oireita käyttää indikaattoreina jollakin tapahtumalle tai tapahtumien kululle.
  • Kyseenalaistaa ja sujuvoittaa tiedonkeräämiskäytäntöjään.
  • Käy aikajanaa läpi ja pohtii visualisoidun tiedon selittyvyyttä sellaisenaan eli ilman täydentävää selittämistä, sekä arvioi josko joidenkin tietoryhmien visuaalisesti esittämisen sijaan voisi toimia toisinkin.
  • Yliviivaa papereilta ne tiedot, jotka on jo muuntanut digitaaliseen muotoon, sekä hankkiutuu ajoittain eroon kaikesta tietoa tarpeettomasti duplikoivasta kuten papereille kirjoittelusta.
  • Ottaa talteen ja tekee havainnollistavia kuvia aikajanan yhteydessä tai muissa yhteyksissä käytettäväksi.
  • Laittaa talteen monisanaisesti luonnehtimisiaan tai niiden luonnoksia, sillä niitä voi käyttää päiväkohtaisissa mietiskelyissä, joiden on tarkoitus olla nähtävillä aikajanan alapuolella.
  • Ei hoputa itseään kirjoittamaan päiväkohtaisia mietintöjään digitaaliseen muotoon, jos niitä on ilman huolta unohtamisesta kirjoitettavissa myöhemminkin enemmän kerralla, muttei kuitenkaan viivyttele digitaaliseen muotoon kirjoittamista liian pitkään.

Aikajana-snapshot (kuva 1), jossa on jos jonkinmoista oireilua, on kelpo olon määrältiin erittäin vähäinen, nukkumisen jälkeen ei edes ruoan avulla saa olotiloja paranemaan, nenä tuntuu tukkoiselta, hengityksessä on työläyttä ja yleensä ottaen on jokseenkin huono olo. Lenkkeily sujuu vähäisessä määrin, mutta siitä ei tuolloin saanut sille päivälle kummoisempaa hyötyä. Mälsyyttä (yep-merkinnät) esiintyi paljon, mikä tarkoittaa, ettei oikein mihinkään jaksaisi ryhtyä, eikä oikein edes jaksa haluta mitään. Hiilidioksitasotkin ovat taas päätyneet luokituksesta hyvä yhtä luokitusta huonommaksi. Karkeilla on joutessaan kokeiltu, josko niillä saisi jotain virkeyttä vaikka aikaan, mutta eipä saanut. Unirytmikin aivan väärällään. Ruokavaliota nimikkeinä ei ole syytä tuomita liian varhain, sillä moneen kertaan on todennut, että ravintolisien ja tällaisten ruokien kanssa (karkit pois) saa aikaan esim. yhtäjaksoisesti kolmen viikon ajaksi hyvät unet, tehokkaan lenkkeilyjaksavuuden, runsaasti päivittäistä produktiivista aikaa ja sosiaalinenkin jaksaa olla.

Kuva 1. Huonommanlaista.

Aikajana-snapshot (kuva 2), jossa esiintyy paljon kelpoista olotilaa ja parit tehokkaat lenkkeilyt, on vajaa pari kuukautta myöhemmin, jolloin on jo ehditty ostaa käyttöön sisäilmanpuhdistuslaite PM2.5-mittarilla ja ilmankostutin (evaporaattori) kosteusmittarilla. Ruokavalio on pitkälti samanlainen, mutta siihen on tehty hienoisia muutoksia käyttäen erillistä taulukkolaskentaohjelmalla tehtyä ravintoainesaanti-selvitystä hyväkseen, jotta voi tietää suht tarkkaan, että saa kivennäisaineiden tarkkuutta myöten ravintoaineita jotakuinkin 110 % yleisiin suosituksiin nähden. Huomionarvoista, että lähinnä aamuisin herätessä on jotain mainitsemisen arvoista oiretta, mutta eipä niitäkään kauaa esiinny, kun vain vähän jaloittelee ja syö. Joinakin aiempina aamuina hiilidioksitasot ja sisäilman kosteustasot ovat olleet ongelmana ja keskeyttäneet unen esim. 4 - 6 tunnin paikkeilla. Sisäilmanpuhdistuslaitetta on alettu käyttämään keittiössä, koska PM2.5-mittarin mukaan se on ainoa ja olennaisin moisten partikkelien lähde, joten ruoan valmistamisen jälkeen se voi jäädä keittiöön hurisemaan siksi aikaa, että ilma puhdistuu keittiössä siinä määrin, että sisäovet voi jälleen avata (toki käytössä myös ruoanlaiton aikaan). Ruokien osalta on ehditty tekemään muutoksia, kokeiluja ja hienosäätöjä, minkä on huomannut vaikuttavan erittäin paljon mm. lenkkeilyn tehokkuuteen ja helppouteen. Karkkejakin voi hyvän olotilan vallitessa syödä sen kummemmitta pöhnäisyyksittä. Koska ulkoilman kosteuskin on noussut pakkasten alkaessa väistymään, on se osaltaan tehnyt nenätukkeisuudesta poissa olevaista oiretta. Polvioireet johtuvat todennäköisesti "pehmusteiden" eli kollageenin koostumuksen muutoksista elimistön nestetasapainon vääristyessä nukkumisen aikoihin, jolloin öinen liikehdintä rasittaa paljon lenkkeilevän polvia joiltain osin. Oireena molemmanlaiset polvioireet tapaavat poistua päiväkohtaisesti muiden oireiden mukana. Stressitasoja vaikuttavat nostavan yksinomaan ruoka ja stressitasojen kanssa vaikuttaa korreloivan myös leposyke. Verenpainetta ei kuvassa tuolla päivällä näy, mutta se olisi jotakuinkin 118/79. Edelliskesänä lenkkeilyjaksavuus on ollut sitä luokkaa, että esim. 15.45 km sujuu ajassa 1:18:44 keskinopeudella 5:06 /km.

Kuva 2. Kelpo olotiloja riittämiin.

Mittaamattomaksi ja ylöskirjoittamattomaksi ovat jääneet mm. auditiiviset häiriötekijät, joiden häiritsevyys muodostuu psykologisen merkitynsä saamisen vuoksi, ei siksi että niitä kuuluu jostain. Niillä on potentiaalia aiheuttaa stressireaktioita, joita ei välttämättä ole helppo laannuttaa tai sitten ne vaikuttavat vähän kerrallaan, mutta pitkään. Huonommissa olotiloissa ollessa päätelmien tekeminen siitä, mikä itselle olisi hyväksi tai miten saada olotilojaan paremmaksi, ei välttämättä ole ihan helppoa. Toisinaan olotilojen parantaminen voi vaatia jonkin laitteen oston, mutta ei sitä tarpeellista laitetta välttämättä heti tajua, ellei ensin saavuta riittämiin kelpo olotiloja, jotta voi tehdä hyvälaatuista mietintää. Ihminen on kuitenkin vain ihminen, joten kognitiivinen stressi voi tehdä vaikeaksi ajatella asioita riittävän laadukkaasti ja riittävästi asioita huomioon ottaen. Toisinaan asioiden edistämisen yrittäminen voi tyrehtyä vaikkapa siihen, että kiinteistönhuolto ei kuljeta mukanaan soveltuvia mittareita esim. huoneiston ilmanvirtauksien selvittelyyn.

Tämä kaikki tällainen suht tavallisten asioiden toisiinsa vaikuttaminen (mitä ei tässä sen enempää avattu) on hyvin vaikeaa käsiteltävää hyvinvointialueille, varmaan myös YTHS ja työterveys, eikä esim. yksityinen ravitsemusterapeuttikaan ole välttämättä sen kummoisempi kuin hyvinvointialueen sellainen, joten senkin vuoksi yksilön itsensä tai jonkun muun hänen apunaan olevan olisi hyödyllistä ottaa aikajana-avusteista vastuuta itsensä tai toisen hyvinvoinnista.

Huonoissa olotiloissa pitkään oleminen käy tietysti vaikuttamaan myös hänestä muodostuviin vaikutelmiin, eivätkä muut ihmiset useinkaan ole sen valmiimpia tajuamaan, mistä hänen oireilussaan, käytöksessään ym. havainnoitavissa olevassa on kyse, vaikka asiat voisivat selkiytyä kenties hyvinkin helposti, kunhan ensin tajutaan, mitkä ovat suht täsmälliset toimenpiteet, mitä pitäisi tehdä.

Erityisesti terveysselvittely-aikajanan päivittäiskommentteineen on tarkoitus sekä esitellä yhdenlainen tapaa ottaa yksilön terveyteen ja hyvinvointiin vaikuttavien tekijöiden avulla päättely paremmin hallintaan, että tarjota kenelle tahansa käyttökelpoinen perusta käydä tekemään itseään tai jotain tuntemaansa varten jotain samankaltaista. Oddqueries-kyselyihin voi suhtautua eräänlaisena kikkailuna tai prototyypittelynä, vaikka onhan koko terveysselvittely-aikajanakin eräänlainen koettelu sille, voisiko siitä todella olla hyötyä.

Kuka tahansa voi ladata itselleen tarjolle asetetun zip-paketin, joka sisältää esimerkkiaineiston ja lähdekoodin sen käyttöön, minkä jälkeen täten saamaansa voi soveltaa omaan käyttöönsä tai tehdäkseen vähäisessä määrin sovellutuksia muita ihmisiä varten. Ei ole kuitenkaan sallittua laittaa mitään saadusta lähdekoodista johdettua (tai sellaisenaan) nettiin kenen tahansa tai enemmän kuin muutaman henkilön käytettäväksi jossain pääsyrajoitteisessa paikassa.

Ottaen huomioon, kuinka kankeita monet kaupalliset sovellutukset ja käytännöt voivat terveysalalla toimijoilla olla, voi jollekulle hyvinkin juolahtaa mieleen, että tästähän voisi kehittää jotain kaupallista, mutta ei sellaista voisi edes suositella, sillä JavaScript-komponentit, joita on käytetty aikajanan ym. toteuttamiseen, eivät ole yhtälaisesti eri päätelaitteilla toimivia ja ne ovat muutenkin jo siinä määrin vanhahtavia, että siinä asettuisi vain turhaan loppukäyttäjien bugi- ja ominaisuusvajekritiikille alttiiksi. Yksiselitteisesti kaupallisuudesta todettakoon joka tapauksessa, että sellainen ei ole lähtökohtaisesti sallittua, mutta pyydettäessä sellaiseen saa helposti luvan vähäistä palvelusta tjm. vastaan. Voit myös tiedustella, josko olisi kiinnostusta lähteä mukaan kehittelemään jotain sellaista, mikä juontui mieleen terveysselvittely-aikajanan kokeilemisesta.

JavaScript-kirjastot

Nämä ovat kaikki MIT-lisenssillä eli niillä voi tehdä pitkälti mitä vaan. Tarjolle asetettu zip-paketti sisältää näiden kirjastojen tiedoistoista olennaisimmat. Ne on alunperin asennettu käyttäen NPM ja Bower, minkä vuoksi zip-paketti sisältää hakemiston nimiä kuten "node_modules" ja "bower_components". Seuraavien, käytössä olevien JavaSscript-kirjastojen asennuspaketeissa on jopa sadoittain tiedostoja, joten oleellisten osoittaminen on täten tehty jättäen zip-pakettiin juurikin ne.