Työn kirjallinen osa (PDF) - students.tut.fi

TOMI SYVÄJÄRVI
SÄÄASEMAJÄRJESTELMÄN VIRTUAALIMALLI
Kandidaatintyö
Tarkastaja: projektipäällikkö Jari Seppälä
Työ jätetty tarkastettavaksi
29. marraskuuta 2013
II
TIIVISTELMÄ
TAMPEREEN TEKNILLINEN YLIOPISTO
Systeemitekniikan laitos
SYVÄJÄRVI, TOMI: Sääasemajärjestelmän virtuaalimalli
Virtual model of a weather station information system
Kandidaatintyö, 34 sivua
Marraskuu 2013
Pääaine/painotus: Automaation tietotekniikka
Tarkastaja: projektipäällikkö Jari Seppälä
Avainsanat: Sääasemajärjestelmä HTML5 3D käyttöliittymä WebGL JavaScript
Tässä kandidaatintyössä tutustutaan TTY:n Systeemitekniikan laitoksen sääasemajärjestelmään, ja kehitetään siitä moderneilla, HTML5 ja WebGL-tekniikoita tukevilla, webselaimilla ilman liitännäisiä toimiva virtuaalimalli. Tämä työn kirjallinen osa on jaettu
luvuittain kokonaisuuksiin, alkaen yleisestä johdannosta, jossa esitellään työn taustat ja
yleiset tavoitteet.
Johdannon jälkeen ensimmäisessä luvussa on kuvattuna sääasemajärjestelmän nykytila ja sen osat, toisessa virtuaalimallin ja siihen liittyvän sivuston ohjelmistotekninen
vaatimusmäärittely, kolmannessa valitut tekniikat ja JavaScript-kirjastot, neljännessä
ohjelmistotekninen suunnittelu arkkitehtuurin ja olioanalyysin osalta, viidennessä selvitetään valmista toteutusta ja sen ratkaisuja, ja lopuksi yhteenvetoon on koottu lyhyesti
prosessin aikana kertyneet kokemukset ja tavoitteiden saavuttaminen.
Virtuaalimallin ja siihen liittyvän web-sivuton toteutuksessa hyödynnetään vielä
melko nuorta WebGL-teknologiaa ja useita JavaScript-kirjastoja. Kullekin JavaScriptkirjastolle esitetään valintaperusteet ja selitetään niiden rooli sivuston toteutuksessa.
Merkittävimmiksi kirjastoiksi valitaan Three.js sekä JQuery, joista Three.js:ää käytetään
kolmiulotteisen sääaseman virtuaalimallin esittämiseen selaimessa, ja JQueryä kaksiulotteisten HTML-pohjaisten elementtien hallintaan ja AJAX-hakuihin.
Sivuston toteutusta kuvataan yksityiskohtaisesti, ja tämä työn kirjallinen osa toimii
samalla järjestelmän ohjelmistoteknisenä dokumentaationa. Valmis toteutus sisältää
helposti muokattavaa tietosisältöä erillisten HTML-sivujen muodossa, ja visuaalisesti
näyttävän, käyttäjän navigoitavissa olevan kolmiulotteisen virtuaalimallin. Yhteenvedossa todetaan, että toteutus täyttää sille asetetut päätavoitteet. Todetaan kuitenkin, että
sivuston tietosisältö vaatii kuitenkin vielä laajentamista, jotta siitä olisi todellista hyötyä. Lopuksi esitetään useita toteutuksen jatkokehitysehdotuksia.
III
SISÄLLYS
1 Johdanto....................................................................................................................... 1
2 Sääasemajärjestelmä .................................................................................................... 2
2.1 Järjestelmän osat ............................................................................................... 2
2.2 Tietojen kulku ja rajapinnat .............................................................................. 4
3 Vaatimusmäärittely...................................................................................................... 6
3.1 Käyttötapaukset ................................................................................................. 6
3.1.1 Käyttötapaus 1: Selaus 2-ulotteisen käyttöliittymän avulla................. 6
3.1.2 Käyttötapaus 2: Selaus 3-ulotteisen käyttöliittymän avulla................. 7
3.1.3 Käyttötapaus 3: Tietosivujen käyttö .................................................... 7
3.2 Tietosisältö ........................................................................................................ 7
3.3 Tekniset rajoitteet .............................................................................................. 8
3.4 Käyttöliittymä ................................................................................................... 8
3.5 Ulkoasu ........................................................................................................... 10
4 Valitut tekniikat ......................................................................................................... 11
4.1 HTML5 ja CSS3 ............................................................................................. 11
4.2 JavaScript ja JQuery........................................................................................ 12
4.3 WebGL ja Three.js .......................................................................................... 13
5 Ohjelmistotekninen suunnittelu ................................................................................. 15
5.1 Sovellusarkkitehtuuri ...................................................................................... 15
5.1.1 HTML ja AJAX ................................................................................. 15
5.1.2 CSS .................................................................................................... 16
5.1.3 JavaScript ........................................................................................... 17
5.2 Olioanalyysi .................................................................................................... 18
5.2.1 JavaScriptin oliomalli ........................................................................ 18
5.2.2 Rajapinnat .......................................................................................... 20
5.2.3 FocusableItem .................................................................................... 21
5.2.4 HTMLBillboard ................................................................................. 22
5.2.5 AnimatedDataLink ............................................................................ 22
6 Toteutus ..................................................................................................................... 24
6.1 Keskeiset ratkaisut .......................................................................................... 24
6.1.1 Visuaalinen ilme ................................................................................ 24
6.1.2 3D-mallit ............................................................................................ 25
6.1.3 Tietosivut ........................................................................................... 25
6.1.4 Tietosisältö ......................................................................................... 26
6.2 Käyttöliittymä ................................................................................................. 27
6.3 Yhteensopivuus ............................................................................................... 29
7 Yhteenveto ja tulokset ............................................................................................... 31
7.1 Vaatimusten ja tavoitteiden saavuttaminen..................................................... 31
7.2 Valittujen tekniikoiden soveltuvuus................................................................ 32
IV
7.3 Jatkokehitysajatuksia ...................................................................................... 33
Lähteet ............................................................................................................................. 35
V
LYHENTEET, TERMIT JA NIIDEN MÄÄRITELMÄT
Lyhenne
API
CPU
CSS
DOM
GPRS
HTML
HTTP
OpenGL
PC
PNG
POE
ROSA
RRD
SOAP
SVG
TTY
UML
URL
W3C
WebGL
WHATWG
WLAN
WSDL
WWW
XML
Sanat, joista lyhenne muodostuu
Application Interface
Central Processing Unit
Cascading Style Sheets
Document Object Model
General Packet Radio Service
Hypertext Markup Language
Hypertext Transfer Protocol
Open Graphics Library
Personal Computer
Portable Network Graphics
Power Over Ethernet
Road Surface Analyzer
Round Robin Database
Simple Object Access Protocol
Scalable Vector Graphics
Tampereen Teknillinen Yliopisto
Unified Modeling Language
Uniform Resource Locator
World Wide Web Consortium
Web Graphics Library
Web Hypertext Application Technology Working Group
Wireless Local Area Network
Web Services Description Language
World Wide Web
eXtensible Markup Language
Termi
3D
C
Termin selitys
3 Dimensional, kolmiulotteinen
Dennis
Ritchien
1970-luvun
alussa
UNIXkäyttöjärjestelmälle kehittämä imperatiivinen ja myöhemmin standardisoitu ohjelmointikieli.
Yksi tärkeimmistä kaupallisessa ohjelmistokehityksessä
käytettävistä ohjelmointikielistä. Bjarne Stroustrup kehitti
C++:n 1980-luvulla C-kielestä lisäämällä siihen muun muassa olio-ohjelmointiin ja geneerisyyteen liittyviä ominaisuuksia
C++
VI
Java
JavaScript
Kirjasto
MySQL
Pt100-vastus
Skripti
Sulautettu PC
Transitio
Vaisala ROSA
Web
WebGL
Sun Microsystemsin kehittämä laaja teknologiaperhe ja ohjelmistoalusta, johon kuuluu muun muassa laitteistoriippumaton oliopohjainen ohjelmointikieli
Etenkin web-ohjelmoinnissa käytetty skriptityyppinen ohjelmointikieli
Ohjelmistotekniikan käsite, jolla tarkoitetaan uudelleenkäytettävää, tiettyyn asiaan keskittyvää ohjelmakoodia joka
muodostaa oman kokonaisuutensa
MySQL AB:n erittäin suosittu relaatiotietokantaohjelmisto
Standardoitu ja yleisesti käytetty platinasta valmistettu vastuslämpötila-anturi
Komentosarja. Esimerkiksi skriptikieli eli komentosarjakieli
mahdollistaa tietoteknisten tehtävien määrittelyn ja automaattisen suorittamisen ilman varsinaisten ohjelmointikielien käyttöä
Tiettyyn tarkoitukseen suunniteltu PC-tietokone. Vähemmän yleiskäyttöinen kuin tavallinen PC
Siirtymä tilasta toiseen
Vaisala Oyj:n tiesääasematuote
WWW, Internet-verkossa toimiva hajautettu hypertekstijärjestelmä
JavaScript-rajapinta kolmiulotteisen grafiikan piirtämiseen
web-selaimissa
Taulukko 1. Dokumentissa käytetyt merkintätavat.
Lihavointi
Huomiot
[Hakasuluissa]
Viittaukset
(Kaarisuluissa)
Avatut lyhenteet ja kommentit
1
1 JOHDANTO
Tampereen teknillisen yliopiston (TTY) Systeemitekniikan laitoksella on 2000-luvun
alussa tutkimuskäyttöön hankittu Vaisala ROSA (Road Surface Analyzer)-tiesääasema.
Sääasema on asennettu siihen liittyvine tietoteknisine järjestelmineen TTY:n Sähkötaloon, kenttälaitteiden ja antureiden sijaitessa talon katolla. Järjestelmän varsinainen
käyttötarkoitus ei ole kuitenkaan kerätä tarkkoja mittaustietoja Hervannan säästä, vaan
tutkimuksen kohteena on ollut muun muassa sääaseman ohjaus langattoman GPRS
(General Packet Radio Service)-yhteyden yli.
Nykyään järjestelmää käytetään lähinnä esimerkkinä web-tekniikoita hyödyntävästä
tietojärjestelmästä ja harjoituksissa tietyillä laitoksen kursseilla. Järjestelmään liittyen
on myös tehty viime vuosina useita kandidaatintöitä. Nämä automaation tietotekniikan
aineopintokokonaisuuteen liittyvät kandidaatintyöt ovat käytännössä kaikki olleet eri
alustoille toteutettuja käyttöliittymiä sääasemajärjestelmän tarjoamien tietojen lukuun.
[1]
Järjestelmään on myös 2000-luvun aikana tehty joitakin muutoksia, mutta ne on dokumentoitu valitettavan heikosti. Muutokset ovat tuoneet kenttälaitteiden ja palvelimen
väliin WLAN (Wireless Local Area Network)-yhteyden GPRS:n sijaan, ja järjestelmää
varten laitoksella itse kehitettyjä ohjelmistoja on päivitetty sekä osin yksinkertaistettu.
Tämä opinnäytetyö pyrkii osaltaan parantamaan järjestelmän nykytilan dokumentaatiota, ja luomaan sen rakenteesta helposti lähestyttävän selkeän kuvauksen kolmiulotteisen
virtuaalimallin muodossa.
Virtuaalimalli toteutetaan web-sivustona, jonka tulee toimia suoraan moderneilla
web-selaimilla kuten esimerkiksi Google Chromella ja Mozilla Firefoxilla. Tämä opinnäytetyön kirjallinen osa toimii kyseisen virtuaalimallin ja siihen liittyvän sivuston ohjelmistoteknisenä dokumentaationa, ja kattaa vaatimusmäärittelyn, ohjelmistoteknisen
suunnittelun sekä toteutuksen osa-alueet. Näiden lisäksi esitellään valintaperusteineen
valitut tekniikat ja lopuksi esitellään valmista toteutusta sekä pohditaan työn onnistumista.
2
2 SÄÄASEMAJÄRJESTELMÄ
Sääasemajärjestelmällä tarkoitetaan tässä työssä kokonaisuutta, joka muodostuu sekä
fyysisistä laitteista, kuten antureita ja tietokoneista, että niiden yhteistoiminnan mahdollistavista ohjelmistoista. Tämän luvun pääasiallinen tavoite on sekä esittää lukijalle, että
dokumentoida järjestelmän fyysinen ja ohjelmistotekninen toiminta nykyisessä muodossaan. Ohjelmistojen osalta kuvaus on kuitenkin pintapuolinen lähinnä niiden monimutkaisuuden, mutta osin myös niiden nykyisen tilan tarkan tiedon hankinnan vaikeuden
vuoksi.
2.1
Järjestelmän osat
Systeemitekniikan laitoksen sääasemajärjestelmä perustuu Vaisala ROSA tiesääasemaan, ja sen osat voidaan jakaa kolmeen pääryhmään: Antureihin, kenttälaitteisiin ja palvelimeen sekä sen käyttäjiin. Antureihin kuuluu Vaisalan lämpötilaa, ilmankosteutta, tuulen suuntaa ja nopeutta sekä sademäärää mittaavat laitteet, jotka ovat
asennettu TTY:n Sähkötalon katolle. Kenttälaitteet koostuvat ROSA-järjestelmän keskusyksiköstä, sulautetusta PC:stä ja sen WLAN-tietolinkistä palvelimelle. Palvelin
muodostaa kokonaisuuden tietojen tallentamiseen kahteen eri tietokantaan ja niiden jakamiseen web-palvelurajapinnan kautta erilaisille käyttöliittymätoteutuksille. Kuva 1
esittää nämä pääryhmät, niiden sisältämät laitteet sekä tietolinkit yksinkertaistettuna
verkkokaavion muotoon.
Kuva 1: Sääasemajärjestelmän verkkokaavio
Järjestelmän käytössä olevia Vaisalan valmistamia antureita on: Yhdistetty tuulen nopeus- ja suunta-anturi WM30, lämpötilaa ja ilmankosteutta mittaava HMP45D sekä sademäärämittari QMR101. Nämä yleiskäyttöiset ja hyvin vähän huoltoa vaativat laitteet on
asennettu TTY:n Sähkötalon D-siiven katolle. Tuuli- ja sadeanturit on Vaisala ROSA
tiesääasema-asennukseen tyypillisesti kuuluvassa mastossa, lämpötila- ja kosteusanturin
3
taas ollessa kattorakenteen luoteispuolen seinässä. Erillisen seinäasennuksen perusteina
on vähäisempi suoran auringon säteilyn määrä ja muiden antureiden vieressä oleva ilmastointikoneen lämmönvaihdin, jotka voivat vaikuttaa mittauksiin. Kuva 2 esittää antureiden asennustavan ja ympäristön, tuulianturit ovat maston huipulla ja sademäärämittari poikkivarressa.
Kuva 2: Tuuli- ja sademääräantureiden asennustavat sekä ympäristö
Kenttälaitteisiin kuuluu Vaisala ROSA-järjestelmän keskusyksikkö, sulautettu teollisuus-PC WStrider 200A, 5GHz WLAN-tukiasema Ubiquiti Networks PicoStation M2HP, sekä näiden oheislaitteet kuten virtalähteet. Termiä kenttälaite käytetään tässä kuvaamaan laitteiden sijaintia mittauspisteiden läheisyydessä. Vaikka nämä laitteet onkin
tässä tapauksessa asennettuna sisätiloihin, on ne mahdollista suojauksensa puolesta
asentaa myös suoraan ulos jopa ilman erillistä kotelointia.
Tyypillisessä asennuksessa järjestelmän kenttälaitteisiin kuuluu vain ROSA keskusyksikkö, joka sisältää yhden tai useampia mittauskortteja DRI521, emolevyn DMB132,
optiona sulautetun tietokoneen DMC586M, modeemin DMX50, virtalähteen DPS132
sekä mm. riviliittimet kytkentöjä varten, kaikki koottuna IP 66 suojattuun säänkestävään
kaappiin Eldon KGR3215. [2, s. 4] Näistä osista on kuitenkin asennettuna tai käytössä
vain virtalähde ja yksi DRI521-tyypin mittauskortti, jota on mahdollista käyttää myös
itsenäisesti ilman emolevyä tai järjestelmän omaa sulautettua tietokonetta.
Erillinen sulautettu teollisuus-PC WStrider 200A on asennettu seinälle ROSAlaitteiston kaapin viereen ja suorittaa mittaustietojen luvun suoraan Vaisalan mittauskortilta, välittäen ne eteenpäin varsinaiselle mittaustietopalvelimelle Ubiquiti Networks Pi-
4
coStation M2-HP WLAN-tukiasemaa käyttäen. Palvelimen päässä on toinen samanlainen WLAN-tukiasema, jolloin yhteys syntyy näiden kahden välille. Tämä WLANtukiasema toimii yleisellä 2,4 GHz taajuusalueella, mutta käyttää laajempaa 5 MHz
kaistaa, jolla saavutetaan häiriösietoisempi yhteys. Muiden samalla taajuusalueella toimivien verkkojen häirintään vaikuttavan lähetystehon tulee olla melko suuri, sillä signaalin matkalla katolta ensimmäiseen kerrokseen on useita teräsbetonirakenteita.
Palvelin käsittää tässä tapauksessa Systeemitekniikan laitoksen ylläpitämän webpalvelimen ja samassa yhteydessä toimvat sääasemajärjestelmään liittyvät tietokannat.
Tietokantoja on kaksi: MySQL:ään pohjautuva, johon tallennetaan kaikki sääasemalta
saadut mittaustulokset, ja RRD (Round Robin Database) joka sisältää vain tietyn verran
uusimpia mittauksia, mutta tarjoaa erikoistuneita lisätoimintoja kuten kuvaajien luomisen suoraan kannasta sen omilla komennoilla. [3, s. 14-15] MySQL-kanta on perinteinen relaatiotietokanta, josta voidaan tehdä kyselyjä minkä tahansa tietueiden ominaisuuksien perusteella ja tuloksena saadaan kannan sisältämiä tietoja sellaisenaan. RRD
taas on kehitetty erityisesti aikaperustaisen tiedon käsittelyyn ja on rakenteeltaan silmukkamainen, eli sen koko säilyy täyttymisen jälkeen vakiona. [4]
Sääasemajärjestelmän RRD sisältää 5 minuutin ja tunnin välein (12 mittauksen) lasketut keskiarvot mittaustiedoista. 5 minuutin välein otettuja keskiarvoja säilytetään kannassa 290 kappaletta, eli noin vuorokauden mittaukset, tunnin välein otettuja mittausten
keskiarvoja säilytetään tietokannassa 168 kappaletta, eli noin viikon ajalta. [3, s. 15]
2.2
Tietojen kulku ja rajapinnat
Kuva 1 havainnollistaa järjestelmän tietoyhteyksiä sen eri osien välillä ja etenkin niiden
muodostamaa ketjua antureilta käyttöliittymille. Rinnakkaisia yhteyksiä on antureiden
ja ROSA-mittauskortin, sekä palvelimen ja käyttäjien välillä, mutta muuten tieto kulkee
yksittäistä reittiä pitkin. Vaikka käytännössä kaikki yhteydet ovatkin laiteparien välillä
kaksisuuntaisia, varsinainen järjestelmän keräämä tieto kulkee kuitenkin kuvan 1 esityksessä vain vasemmalta oikealle, eli antureilta kenttälaitteille, kenttälaitteilta palvelimelle
ja lopulta palvelimelta käyttäjille.
Käytetyt Vaisalan anturit ovat niin sanotusti tyhmiä, ja tarjoavat vain yksinkertaiset
fysikaalisiin suureisiin perustuvat mittaussignaalit. Käytännössä tämä tarkoittaa esimerkiksi resistanssin tai jännitteen muuttumista suhteessa varsinaiseen mitattavaan suureeseen. Lämpötilan mittaukseen käytetään Pt100-vastuksen resistanssin nelijohdinmittausta, ilmankosteudelle jänniteviestiä 0-1V, tuulen suunnalle muuttuvaa vastusta 1-11kΩ ja
tuulen nopeudelle jännite-/virtapulssitusta [5, 6]. Sademääräanturin toiminnasta ei löytynyt luotettavaa lähdetietoa, mutta sen voidaan olettaa käyttävän jotakin edellä mainituista tekniikoista. Kukin anturi on kytketty omalla kaapeloinnillaan ROSAkeskusyksikön mittauskorttiin, joka hoitaa muun muassa jännitteensyötön ja signaalien
tarkkailun.
ROSA-keskusyksikön DRI521-mittauskortti kykenee antureiden signaalien lukemisen ja arvojen mittaustuloksiksi muuntamisen lisäksi etenkin tienpinta-antureiden perus-
5
teella tekemään monimutkaisia laskennallisia päättelyitä vallitsevista olosuhteista. Käytössä olevien ilmakehän antureiden tapauksessa kortin tehtävänä on kuitenkin vain signaalien tulkitseminen halutuiksi fysikaalisiksi suureiksi. Kortti tarjoaa RS-232Cstandardin mukaisen sarjaliikenneväylän, jota käytetään mittaustietojen lukemiseen erilliselle sulautetulle PC:lle. [5]
Sulautettu PC WStrider 200A hoitaa mittaustietojen kyselyn mittauskortilta sarjaväylän avulla, sekä niiden välittämisen palvelimelle WLAN-linkin kautta. PC:n ohjelmisto toimii palvelimena, joka vastaa varsinaiselta sääasemapalvelimelta tuleviin HTTP
(Hypertext Transfer Protocol) POST -pyyntöihin. PC muokkaa mittaustiedot tietynlaiseen XML (eXtensible Markup Language)-muotoon, joka lähetetään palvelimelle HTTP
RESPONSE -viestinä. Uusimmat mittaustiedot haetaan mittauskortilta aina pyynnön
saapuessa, eli lukutiheys ja ajoitus riippuvat palvelimesta. [3, s. 28]
WLAN-linkki yhdistää sulautetun PC:n ja sääasemapalvelimen. Käytössä on Ubiquiti Networks PicoStation M2-HP, joka tarjoaa 10/100 BASE-TX (Cat. 5, RJ-45)Ethernet liitynnän, ja saa käyttöjännitteensä samasta liittimestä POE (Power Over Ethernet)-tekniikkaa käyttäen. Sulautettu PC ei kuitenkaan tarjoa POE liitäntää, vaan välissä käytetään erillistä POE-sovitinta, joka toimii tukiaseman virtalähteenä. [6]
Varsinainen sääasemajärjestelmän palvelin hoitaa mittaustietojen tallentamisen ja
tarjoaa julkisen rajapinnan tietojen lukuun. Palvelimella on Web service-rajapinta, jonka
kautta on mahdollista muun muassa kysellä mittaustietoja aikaperustaisesti molemmista
tietokannoista SOAP (Simple Object Access Protocol)-muotoisilla HTTP-pyynnöillä,
joihin palvelin vastaa samaten SOAP-viesteillä. Palvelun WSDL (Web Services Description
Language)-kuvaus
on
saatavilla
osoitteesta:
http://koni.ain.rd.tut.fi:8080/TelitJava/services/Soapservice?wsdl
6
3 VAATIMUSMÄÄRITTELY
Ohjelmistoteknisen suunnittelun yksi keskeisimpiä vaiheita on vaatimusmäärittely, jossa nimensä mukaisesti määritellään (yleensä asiakkaan) sille asettamat toiminnalliset ja
ei-toiminnalliset vaatimukset. Vaatimusmäärittelyssä yleisesti käytetty tapa kuvata toiminnallisia vaatimuksia on käyttötapaukset, jotka kuvaavat käyttäjän ja ohjelmiston
vuorovaikutusta käyttäjän päämäärien saavuttamiseksi. Käyttötapausten lisäksi tässä
luvussa käsitellään tietosisältöä, teknisiä rajoitteita, käyttöliittymää ja ulkoasua. Ohjelmistolle asiakkaan asettamat vaatimukset jättävät kuitenkin paljon vapauksia suunnitteluun, joten suurin osa kuvatuista vaatimuksista ja tavoitteista ovat itse asetettuja.
3.1
Käyttötapaukset
Ohjelmiston käyttötapaukset kuvaavat yleisien toimintojen suorituksen vaihe vaiheelta,
niiden esiehdot, sekä suorituksen aikana mahdollisesti tapahtuvat virhetilanteet. Ohjelmistolla voi olla erilaisia käyttäjiä, mutta kaikilla on pääsy samoihin toimintoihin, joten
varsinaisia käyttäjäryhmiä on vain yksi. Käyttötapauksia esittää Kuva 3, ja niitä on: selaus 2-ulotteisen navigaation avulla, selaus 3-ulotteisen navigaation avulla ja tietojen
lukeminen tietosivuilta.
Selaus 2-ulotteisen
käyttöliittymän avulla
Selaus 3-ulotteisen
käyttöliittymän avulla
Käyttäjä
Tietosivujen käyttö
Kuva 3: Ohjelmiston käyttötapauskaavio
3.1.1
Käyttötapaus 1: Selaus 2-ulotteisen käyttöliittymän avulla
Esiehdot: Ohjelmiston käyttämiä tekniikoita tukeva web-selain ja yhteys palvelimelle.
7
Tapahtumakuvaus: 1. Käyttäjä navigoi ohjelmiston etusivulle ja odottaa että se latautuu kokonaan. 2. Käyttäjä painaa vasemman laidan valikosta joko pääryhmän tai osan
nimeä, joka toimii linkkinä. 3. Sivun alaosaan latautuu asynkronisesti valitun pääryhmän tai osan kuvauksen sisältävä dokumentti.
Mahdolliset virhetilanteet: Vaihe 3, sivua ei löydy tai asynkroninen lataus ei onnistu,
jolloin käyttäjälle näytetään virheilmoitus.
3.1.2
Käyttötapaus 2: Selaus 3-ulotteisen käyttöliittymän avulla
Esiehdot: Ohjelmiston käyttämiä tekniikoita tukeva web-selain ja yhteys palvelimelle.
Tapahtumakuvaus: 1. Käyttäjä navigoi ohjelmiston etusivulle ja odottaa että se latautuu kokonaan. 2. Käyttäjälle esitetään 3-ulotteinen näkymä sääasemajärjestelmästä, josta hän voi hiirellä valita pääryhmän tai osan, josta haluaa saada lisätietoja. 4. Valitusta
osasta tai ryhmästä näytetään 3-ulotteisessa näkymässä perustietokortti. 5. Sivun alaosaan latautuu asynkronisesti valitun pääryhmän tai osan täyden kuvauksen sisältävä
dokumentti, ilman että 3-ulotteisen näkymän käyttö häiriintyy.
Mahdolliset virhetilanteet: Vaihe 5, sivua ei löydy tai asynkroninen lataus ei onnistu,
jolloin käyttäjälle näytetään virheilmoitus.
3.1.3
Käyttötapaus 3: Tietosivujen käyttö
Esiehdot: Ohjelmiston käyttämiä tekniikoita tukeva web-selain ja yhteys palvelimelle.
Tietosivu valittuna ja ladattuna käyttötapausten 1 ja 2 kuvaamalla tavalla.
Tapahtumakuvaus: 1. Käyttäjä vierittää selaimen näkymää alaspäin, jotta haluttu kohta tietosivua tulee näkyviin. 2. Käyttäjä valitsee tietosivulla olevista kuvista yhden kerrallaan katseltavaksi suurempana klikkaamalla. 3. Valitun kuvan täysikokoinen versio
ladataan ja näytetään käyttäjälle varsinaisen sivun päällä siten, että alla olevan sivun tila
ei muutu. 4. Käyttäjä voi siirtyä kyseisen tietosivun kuvien välillä eteen ja taakse suoraan sulkematta täyden koon kuvankatselutoimintoa. 5. Käyttäjä sulkee kuvankatselutoiminnon klikkaamalla sulkemispainiketta tai taustalla näkyvää sivun osaa. 6. Käyttäjä
jatkaa infosivun sisällön tutkimista. 7. Käyttäjän klikatessa ohjelmiston ulkopuolelle
viittaavaa linkkiä sivu aukeaa uuteen välilehteen.
Mahdolliset virhetilanteet: Vaihe 3, Kuvaa ei löydy tai asynkroninen lataus ei onnistu,
jolloin käyttäjälle näytetään virheilmoitus.
3.2
Tietosisältö
Ohjelmiston tehtävä on toimia helposti lähestyttävänä ja selkeänä tietopankkina, joka
kattaa Systeemitekniikan laitoksen sääasemajärjestelmän kaikki osa-alueet antureista
käyttöliittymiin. Pääasiallinen paino on järjestelmän teknisessä toteutuksessa ohjelmistotekniikan näkökulmasta, eli tietolinkit ja niiden rajapinnat tulee olla erotettavissa ja
kuvattuna. Kuhunkin järjestelmän osaan liittyvää tietosisältöä tulee olla helppoa muokata ja lisätä esimerkiksi erillisten HTML-sivujen muodossa.
8
Sääasemajärjestelmä koostuu seuraavista osa-alueista, joiden tulee näkyä valmiissa
ohjelmistossa: Meteorologiset anturit, Vaisala ROSA järjestelmän keskusyksikkö, sulautettu PC, WLAN-linkki, web-palvelin, tietokannat ja käyttöliittymät. Näiden väliset
yhteydet tulee kuvata ja mahdollistaa laajempien tietoaineistojen liittäminen kuhunkin
komponenttiin.
Käyttäjäkannan laajuuden vuoksi ohjelmiston tulee tarjota myös vähemmän ohjelmistotekniikkaa tunteville käyttäjille ymmärrettävää tietoa siten, että he kykenevät vaivattomasti muodostamaan yleiskuvan sääasemajärjestelmän toteutuksesta ja toiminnoista. Tämä informaatio voi pitää sisällään, mutta ei tarvitse rajoittua seuraaviin: Laitteiden
fyysinen olemus, antureiden toimintaperiaate ja ominaisuudet, sääasemajärjestelmän
sisäisten tietovirtojen kulkureitit ja järjestelmän tarjoamat palvelut loppukäyttäjille.
3.3
Tekniset rajoitteet
Ohjelmisto tulee toteuttaa web-sivuna, joka voidaan asettaa saataville julkisesti. Toteutuksessa tulee käyttää moderneja web-tekniikoita kuten HTML5:tä, ja sen tulee toimia
vähintään yhdellä viidestä suosituimmasta internetselaimesta työpöytätietokoneympäristössä, ilman erikseen asennettavia liitännäisiä. Sovelluksen toiminta sekä Google Chromen että Mozilla Firefoxin uusimmilla vakailla versioilla on suotavaa.
Ohjelmiston tarjoaman pääasiallisen tietosisällön tulee olla saatavissa myös selaimilla, jotka eivät tue 3-ulotteisen esityksen toteuttamiseen käytettyjä tekniikoita. Käytännössä komponenttien tietosivujen selaus ja luku tulee olla mahdollista HTML5standardin perustoiminnallisuutta ja yleisimpiä siihen liittyviä tekniikoita (CSS3, JavaScript) tukevilla selaimilla.
3.4
Käyttöliittymä
Käyttöliittymä on ohjelmiston tärkein kokonaisuus, sillä käyttäjän kannalta ohjelmisto
on sen käyttöliittymä. Siksi käyttöliittymän selkeyteen ja toimintojen intuitiivisuuteen
tulee kiinnittää erityistä huomiota. Käyttöliittymän tulee muodostua pääosin erillisistä,
mutta toistensa kanssa yhteen toimivista, 2-ulotteisista sekä 3-ulotteisista osista. Yhteistoiminnalla tarkoitetaan, että molemmat ovat käytettävissä rinnakkain, ja ne tukevat toisiaan parantaen ohjelmiston yleistä käytettävyyttä verrattuna yhden käyttöliittymän toteutukseen..
Kuva 4 esittää 2-ulotteisen käyttöliittymän rautalankamallin ja ohjelmiston visuaalisen rakenteen yhdessä tietosivujen valinnan perustoiminnallisuuden kanssa. Kuvasta
poiketen selainikkuna ei tule olemaan yleisessä käyttötapauksessa yhtä korkea, vaan
kerralla näkyy pystysuunnassa huomattavasti rajoitetumpi osa sivua.
9
Kuva 4: Sivun rakenteen ja 2-ulotteisen käyttöliittymän hahmotelma
Tietosivujen avaaminen tulee onnistua sekä 2-ulotteisen, että 3-ulotteisen käyttöliittymän kautta. Molemmissa tapauksissa tietosivun lataus tulee suorittaa asynkronisesti
siten, että sivun muiden osien käyttö ei häiriinny latauksen aikana. Lisäksi kuhunkin
tietosivuun tulee olla mahdollista muodostaa suoraan osoittava URL (Uniform Resource
Locator)-osoite, joka saa ohjelmiston samaan tilaan kuin muita navigointikeinoja käyttämällä.
3-ulotteisen käyttöliittymän tulee toimia itsenäisenä kokonaisuutena, jotta sen käyttö
on mahdollista erikseen ilman että ohjelmiston muut osat ovat samaan aikaan näkyvillä.
10
Näkymässä tulee tätä varten olla esitettynä riittävä määrä tietoa sääasemajärjestelmän
komponenteista, jotta käyttäjä voi muodostaa yleiskuvan sen toiminnoista pelkästään
tämän käyttöliittymän kautta. Kustakin komponentista esitettävät tiedot tulee sisältää
vähintään seuraavat: Komponentin nimi, valmistaja ja merkki, rooli järjestelmässä (esimerkiksi anturi tai palvelin) ja tietolinkeistä tyyppi, tiedon kulkusuunta sekä minkä
komponenttien välillä yhteys on. Lisäksi on tärkeää, että käyttäjällä säilyy koko ajan
kuva siitä, miten kulloinkin esitettävä informaatio liittyy järjestelmäkokonaisuuteen, eli
esimerkiksi mistä päin mallia nykyinen kuvakulma on.
3.5
Ulkoasu
Ulkoasun näyttävyys on tärkeää, sillä ohjelmistoa on tarkoitus käyttää yhtenä laitoksen
järjestelmien esittelymateriaaleista. Näyttävän ulkoasun tehtävänä on herättää mielenkiinto aiheeseen satunnaisissa käyttäjissä, ja parantaa yleisesti käyttökokemusta. Ulkoasu ei kuitenkaan ole tärkeydessä käytettävyyttä korkeammalla.
Ohjelmiston yleinen tyyli tulee olla yhtenäinen, ja on suotavaa noudattaa pääpirteiltään TTY:n määrittelemää visuaalista ilmettä sekä värimaailmaa. Tällä mahdollistetaan
visuaalinen yhteensopivuus olemassa oleviin järjestelmiin ja verkkosivuihin. 2ulotteisen käyttöliittymän ulkoasussa tärkeintä on selkeä, minimalistinen ja moderni
vaikutelma. 3-ulotteisen käyttöliittymän tulee olla keskeisessä osassa ohjelmistoa, ja
tämän tulee näkyä myös sen visuaalisessa ilmeessä suhteessa muihin ohjelmiston komponentteihin, eli se voi olla rikkaampi ja kiinnittää käyttäjän huomion esimerkiksi animaatioilla.
11
4 VALITUT TEKNIIKAT
Asiakkaan vaatimukset toteutettavalle järjestelmälle eivät nimeä toteutuksen ohjelmistoteknisiä yksityiskohtia, kuten käytettäviä web-tekniikoita. Niiden valinta on kuitenkin
erittäin keskeinen osa ohjelmiston suunnittelua ja vaikuttavat suoraan, muun muassa
rajoitteidensa kautta, toteutuksen sujuvuuteen ja lopputulokseen. Tässä luvussa esitellään toteutukseen valitut keskeiset tekniikat lyhyesti ja kullekin valinnalle perustelut
suhteessa muihin harkittuihin vaihtoehtoihin.
4.1
HTML5 ja CSS3
HTML5 on käsitteenä monimuotoinen, ja sillä voidaan tarkoittaa esimerkiksi kaikkia
moderneja web-tekniikoita, tai tarkemmin rajattuna HTML-merkintäkielen uutta versiota ilman muita liittyviä tekniikoita, kuten CSS3 tai tiettyjä sovellusrajapintoja. HTML5määrittely ei ole myöskään vielä valmis, vaan sen kehitys jatkuu W3C:n (World Wide
web Consortium) ja WHATWG:n (Web Hypertext Application Technology Working
Group) yhteistyöprojektina. Määrittelyn eri osat ovat myös kehityksensä hyvin eri vaiheissa, joista lähempänä lopullista olevat on jo nyt tuettuja useimmissa web-selaimissa,
mikä mahdollistaa niiden käytön kuluttajillekin suunnatuissa web-sivustoissa ja sovelluksissa. [7]
HTML5 tuo joka tapauksessa merkittävän määrän uusia ominaisuuksia web-sivujen
kehittämiseen, ja sen tavoitteina on muiden muassa vähentää tarvetta erillisten liitännäisten käytölle, vähentää yleisten toimintojen skriptaustarvetta, toimia laiteriippumattomasti ja perustua olemassa oleviin HTML, CSS, DOM (Document Object Model) ja
JavaScript määrittelyihin. Uusiin ominaisuuksiin lukeutuu uudet semanttiset elementit,
täysi CSS3-tuki sisällön tyylittelyyn, suora tuki videolle ja äänelle, 2- ja 3-ulotteinen
grafiikka (SVG (Scalable Vector Graphics), CSS3), sovellusliittymät kuten Geolocation
API ja dokumentin dokumenttioliomallin mukaisen rakenteen (DOM) tarkempi määrittely. [7, 8]
CSS3 on CSS-tyylimäärittelyn uusin yhtenäinen versio, mutta määrittelyltään modulaarinen, josta johtuen siitä ei ole olemassa yksittäistä koottua määrittelyä. Eri moduulit
(joita on yli 50) ovat myös eri kehitysvaiheissa, ja web-selaimien tuki CSS3:een kuuluville moduuleille ja jopa yksittäisille ominaisuuksille on myös vielä melko hajanaista.
Tärkeimpiä ja jo nykyään eniten käytettyjä uusia ominaisuuksia verrattuna CSS 2.1:een
on tyylien animointi, laajempi tuki taustakuville ja läpinäkyvyydelle, tuki väriliukumille
ja elementtien varjoille, elementtien pyöristetyt nurkat sekä DOM-elementtien ominaisuuksiin kohdistuvat valitsimet. [9, s. 232-235]
12
Virtuaalimallisivuston toteutuksen kannalta HTML5 ja CSS3 ovat luonnollisia valintoja toteutuksen ydintekniikoiksi, sillä tärkeimpiä vaatimuksia on nimenomaan toiminta moderneilla web-selaimilla ilman erillisiä liitännäisiä. Lähes kaikki vaihtoehtoiset
tekniikat vaatisivat liitännäisiä 3d-näkymän esittämiseen, mutta HTML5:den canvaselementillä voidaan tehokkaasti esittää mitä vain ajon aikana päivittyvää grafiikkaa osana web-sivua. Esimerkkinä yksi liitännäisiä tarvitsematon vaihtoehto HTML5:den canvasille on 3d-näkymän esittäminen SVG-muodossa, mutta sen heikkoutena ovat merkittävät esitettävään grafiikkaan kohdistuvat tekniset rajoitteet ja selvästi heikompi suorituskyky. Käytännössä HTML5:den canvas elementin käyttö on tällä hetkellä ainut järkevä tapa dynaamisen 3D-grafiikan sisällyttämiseen web-sivulle kun otetaan huomioon
esityksen rikkaus- ja suorituskykyvaatimukset.
CSS3:n käyttö ei ole toteutuksen kannalta yhtä välttämätöntä, sillä sivuston ulkonäkö ja toiminta on mahdollista toteuttaa myös laajemmin tuettua CSS 2.1 määritystä hyväksikäyttäen. CSS3:n uudet ominaisuudet tekevät kuitenkin tiettyjen ulkoasun elementtien toteutuksesta huomattavasti yksinkertaisempaa ja miellyttävämpää. Esimerkiksi väriliukumien toteutuksessa voidaan käyttää suoraan CSS3:n tyylimäärittelyjä bittikartoista muodostuvien taustojen sijaan. CSS3:n valitseminen toteutuksessa käytettäviin
tekniikoihin on toisaalta myös vaikuttanut ulkoasun tyylin muodostumiseen. Vanhemman tyylimäärittelyn valinnan myötä ulkoasustakin olisi todennäköisesti tullut osin erilainen.
4.2
JavaScript ja JQuery
JavaScript on käytännössä kaikkien nykyisten web-selaimien tukema ohjelmointikieli,
jonka tarkoituksena on mahdollistaa dynaamisten web-sivujen luominen. JavaScriptillä
voidaan muun muassa muokata esitettävän web-sivun rakennetta ja ulkoasua tai ladata
uutta sisältöä palvelimelta AJAX:illa (Asynchronous JavaScript And XML) ilman että
sivua täytyy ladata kokonaisuudessaan uudestaan. Ohjelmointikielenä JavaScript on
oliopohjainen, löysästi tyypitetty ja dynaaminen skriptikieli, jonka syntaksi muistuttaa
C:tä ja Javaa, mutta on muuten näihin verrattuna konsepteiltaan ja toiminnaltaan hyvin
erilainen.
JavaScript on myös ainut laajasti webselaimien suoraan tukema skriptikieli, joten
sen valinta toteutustekniikaksi on itsestään selvä. Eri selaimien toteutukset niistä osista,
jotka eivät ole JavaScriptin määrittelyn piirissä, kuten web-sivun HTML-sisällön dokumenttioliomallikuvauksessa (DOM), ovat kuitenkin etenkin vanhemmissa versioissa
erilaisia, mistä johtuen sama JavaScript-koodi ei toimi samoin kaikilla alustoilla. Ratkaisuksi tästä johtuviin yleisiin ongelmiin on kehitetty useita erilaisia JavaScriptillä toteutettuja kirjastoja, jotka pyrkivät tarjoamaan saman toiminnallisuuden mahdollisimman laajalla kentällä web-selaimia ja niiden versioita.
Nykyään selvästi suosituin JavaScript-kehyskirjasto on JQuery, jonka keskeisenä
ideana on yksinkertaistaa ja nopeuttaa web-sivujen dynaamisten JavaScriptillä toteutettujen ominaisuuksien tuottamista. Se tarjoaa muun muassa lyhennetyt ja yksinkertaiste-
13
tut kutsut yleisille toiminnoille kuten tapahtumankäsittelijöiden rekisteröinnille, tehokkaan tavan valita elementtejä DOM-puusta ja muokata niiden kaikkia ominaisuuksia.
[10, s. 196] JQuery ei tuo varsinaisesti mitään uutta mitä pelkällä JavaScriptillä ei voida
toteuttaa (mikä olisikin paradoksaalista, sillä se on itsessään toteutettu kokonaan JavaScriptillä), mutta sen tarjoamat toiminnot ovat niin paljon yksinkertaisempia käytettäviä, että käytännössä se löytyy todella monien suosittujen sivustojen taustalta. [10, s.
196] JQueryyn löytyy myös paljon vapaasti saatavilla olevia laajennuksia, ja ”tavallista”
JavaScriptiä voi myös käyttää sen rinnalla varsin saumattomasti [10, s. 315-317].
JQueryn valinnassa avustavaksi JavaScript kirjastoksi ei tehty varsinaista vertailua
muihin samoja ominaisuuksia tarjoaviin kirjastoihin. Valinta perustui lähinnä henkilökohtaiseen haluun tutustua tähän suurta suosiota saavuttaneeseen ratkaisuun ja luottamukseen siitä, että se tulee täyttämään tämän verrattain yksinkertaisen sivuston tarpeet
hyvin. Lisäksi JQueryn käytön osaamisesta voi olla hyötyä jatkossa, mahdollisissa
muissa web-kehitysprojekteissa.
4.3
WebGL ja Three.js
WebGL (Web Graphics Library) on OpenGL (Open Graphics Library):yn perustuva
JavaScriptin kautta käytettävä sovellusliittymä (API) interaktiivisen kolme- ja kaksiulotteisen grafiikan esittämiseen web-selaimessa. Tuki WebGL:älle riippuu selaimesta, mutta on sisäänrakennettu siten, että erillisiä liitännäisiä ei tarvita ja se on tuotu osaksi moderneja web-standardeja, mikä mahdollistaa näytönohjaimella tuotettavan sisällön käytön saumattomasti muiden web-sivun elementtien kanssa. WebGL:n etu onkin juuri sen
tarjoamassa rajapinnassa laitteen näytönohjaimen käyttöön, mikä mahdollistaa visuaalisesti rikkaan esityksen käyttäen perinteisistä työpöytäohjelmistoista tuttuja tehosteita ja
tekniikoita. Erillisen näytönohjaimen suorituskyky on kolmiulotteisen grafiikan tuottamisessa myös aivan eri luokassa verrattuna pääsuorittimeen (CPU (Central Processing
Unit)).
WebGL tukeutuu HTML5:den canvas-elementtiin varsinaisen tuotetun grafiikan
esittämisessä, joten kaikki WebGL:ää tukevat selaimet tukevat myös canvaselementtejä, mutta ei toisinpäin. Tuki kaikille WebGL:n ominaisuuksille on hieman
vaihtelevaa sitä tukevien selainten kesken, mutta merkittävimmät modernit selaimet kuten Mozilla Firefox, Google Chrome (ja muut webkit-pohjaiset kuten Apple Safari) tukevat kaikkia tärkeimpiä ominaisuuksia, joten sovelluskehitys näille alustoille on mahdollista ilman suurempia ongelmia toiminnan eroista selaimien välillä.
WebGL on kuitenkin itsessään melko matalan tason rajapinta, joten suoraan sen
päälle rakentuvien sovellusten kehittäminen vaatii melko paljon perehtymistä, ja siinä
on näin ollen työlästä päästä alkuun. Tätä ongelmaa helpottamaan on kehitetty JavaScript-kirjastoja, jotka pyrkivät hieman samaan tapaan kuin JQueryn kaltaiset kirjastot
merkittävästi helpottamaan ja yksinkertaistamaan yleisten toimintojen toteutusta. Yksi
tällainen kirjasto on Three.js, joka tarjoaa WebGL:n lisäksi myös muita (mutta rajoit-
14
tuneempia) piirtureita 3D-grafiikalle, mutta ennen kaikkea yksinkertaistetut tavat luoda
ja hallita objekteja, maailmaa, materiaaleja, valaistusta, animaatioita ja niin edelleen.
Three.js on tällä hetkellä web-käytössä suosituimpia 3D-kirjastoja, ja sen kehitys
jatkuu edelleen aktiivisena. Saman kehitysprojektin piirissä on kehitetty varsinaisen
ydinkirjaston lisäksi paljon hyödyllisiä lisäkirjastoja ja esimerkkejä, jotka ennestään
helpottavat sen käyttöönottoa. Vaikka kirjaston dokumentaatio on varsin puutteellista,
lähes kaikista ominaisuuksista löytyy valmiit esimerkit, ja ne ovatkin keskeisessä roolissa toiminnallisten mahdollisuuksien kartoituksessa ja käytön opettelussa.
Three.js:än valinta käytettäväksi 3D kirjastoksi perustui sillä toteutettujen esimerkkisovellusten runsauteen ja internetin keskustelupalstoilta löytyneisiin yleisesti positiivisiin kommentteihin. Lisäksi verrattain laaja käyttäjäkanta on jo tuottanut internetiin
kattavan määrän keskusteluja yleisistä kehitystyössä vastaan tulevista ongelmista ja ratkaisuista niihin. Muista vastaavista kirjastoista oli vaikeampi löytää selkeästi esitettyjä
esimerkkejä tai ne eivät vaikuttaneet visuaalisella ilmeellään ja toiminnallisuudellaan.
Harkittuja vaihtoehtoja Three.js:lle olivat muiden muassa Scene.js, X3DOM, CopperLicht ja Kuda.
Yhden tämän työn pääasiallisista tavoitteista ollessa visuaalinen näyttävyys, käytettävien tekniikoiden tulee osoittaa soveltuvuutta ja niiden tarjoamia mahdollisuuksia
näyttävien olemassa olevien toteutusten muodossa. Muuten saattaa helposti törmätä visuaalista ilmettä latistaviin tekniikoiden rajoitteisiin, jotka eivät välttämättä ole suoraan
havaittavissa, ennen kuin kyseisiin tekniikoihin on tutustunut syvällisemmin.
15
5 OHJELMISTOTEKNINEN SUUNNITTELU
Ohjelmistotekninen suunnittelu on yksi merkittävimmistä vaiheista ohjelmistoprojektissa. Siinä määritellään ohjelmiston rakenne arkkitehtuurista yksittäisten toiminnallisuuksien toteutukseen asti. Suunnittelu perustuu vaatimusmäärittelyyn ja edeltää varsinaista
toteutusvaihetta, joskin usein kehitysprosessi on iteratiivinen. Tämä luku jakautuu kahteen pääosaan: sovellusarkkitehtuuriin ja olioanalyysiin. Sovellusarkkitehtuurissa kuvataan valittujen tekniikoiden soveltamista yleisemmällä tasolla, kun taas olioanalyysi
esittelee ohjelmiston rakennetta yksityiskohtaisemmin ja erityisesti luokkajakoisesti.
5.1
Sovellusarkkitehtuuri
Sovellusarkkitehtuuri kuvaa ohjelmiston korkeimman tason rakennetta, eli komponentteja mistä se muodostuu ja riippuvuuksia ulkoisiin lähteisiin. Tämä aliluku kuvaa miten
keskeisimpiä tekniikoita sovelletaan suunnitteluongelman ratkaisussa. Lisäksi esitellään
sivuston rakennetta ja elementtien yhteistoimintaa yleisellä tasolla.
5.1.1
HTML ja AJAX
Web-sivut koostuvat perinteisesti useista HTML-sivuista, joiden välillä liikutaan linkkien avulla. Aina linkkiä klikatessa lähetetään web-palvelimelle pyyntö linkin osoittamasta uudesta sivusta ja vastauksena palvelin palauttaa kyseisen sivun. Vähänkin isommat
tai monimutkaisemmat sivustot on lähes poikkeuksetta toteutettu palvelinpuolen ohjelmointitekniikoilla, kuten esimerkiksi PHP-skripteillä, siten että selaimelle palautettava
sivu luodaan pyynnön ja palvelin tietokannan sisällön perusteella. Näin on mahdollista
toteuttaa hyvin monipuolisia sovelluksia ja dynaamisuutta sillä selaimelle lähetettävä
sivu ei ole enää vain palvelimen kiintolevylle tallennettu tiedosto, vaan se voi olla joka
kutsulla täysin uniikki.
Palvelinpuolella toteutetun dynaamisuuden heikoin lenkki on kuitenkin se tosiseikka, että sivu tulee aina ladata kokonaisuudessaan uudestaan, mihin kuluu väistämättä
jonkin verran aikaa. Käyttäjän klikkauksen ja uuden näkymän avautumisen välillä on
siis selvästi havaittava odotusaika. Esimerkiksi animaatioiden tai muun nopeaa päivitysnopeutta vaativan sisällön toteuttaminen ei ole käytännössä mahdollista käyttämällä
pelkästään perinteisiä tekniikoita, jotka ovat vain palvelinpuolella dynaamisia. Selaimessa ajettavilla ohjelmilla, kuten JavaScriptillä, voidaan kuitenkin näitä tuottaa,
mutta kaikki tarvittava tieto tulee ladata kerralla tai sivu päivittää kokonaan uudestaan
palvelimelta.
16
JavaScript mahdollistaa huikean määrän erilaisia toimintoja, mutta tämän sivuston
toteutuksen kannalta keskeisessä roolissa on niinkutsutut AJAX-tekniikat. AJAX:in
ideana on luoda JavaScriptillä asynkronisia kutsuja palvelimelle, ja saada vastauksena
esimerkiksi XML-muotoista tietoa, jota voidaan edelleen esittää web-sivulla ilman sivun lataamista kokonaan uudelleen. Asynkronisella tarkoitetaan tässä yhteydessä perinteisen synkronisen toiminnan vastakohtaa, jossa asiakas (selain) jää odottamaan palvelimen vastausta. Asynkronisessa toiminnassa sivun käyttö ei siis pysähdy tai esty uuden
tiedon hakemisen ajaksi, vaan se tapahtuu käyttäjän näkökulmasta huomaamattomasti
taustalla.
Virtuaalimallin sivusto muodostuu yksittäisestä HTML5-syntaksia käyttävästä pääsivusta, ja se tukeutuu vahvasti AJAX:iin (käytettynä JQueryn kautta) sisällön lataamisessa. Pääsivu sisältää viitteinä kaikki koko sivustossa käytetyt CSS-tyylimäärittelyt ja
JavaScriptit, jotka tuodaan omista tiedostoistaan, mutta ladataan kuitenkin synkronisesti
samalla kertaa pääsivun kanssa. Pääsivu toimii siis runkona, jonka rakennetta muokataan selaimessa JavaScriptillä ajon aikana. Sivusto ei käytä mitään palvelinpuolen dynaamisuutta, eli kaikki palvelimelta ladattava sisältö on staattista.
Jokainen tietosivu ja 3D-näkymän tietolaatikko on toteutettu omina HTML5syntaksin mukaisina dokumentteinaan. Näitä dokumentteja on siis mahdollista tarkastella myös erikseen, pääsivun ulkopuolella, mutta niiden tyylimäärittelyt on kuitenkin
suunniteltu toimimaan vain osana pääsivua. Tietosivut ladataan asynkronisesti sitä mukaa kun käyttäjä navigoi kyseiseen kohtaan virtuaalimallia, ladatusta sivusta suodatetaan pois pääsivun osana turhat elementit kuten header ja body, jonka jälkeen vain haluttu osa sijoitetaan osaksi pääsivua.
3D-näkymän malli ladataan niin ikään asynkronisesti kun pääsivu on latautunut. Se
sisältää varsinaisen geometrian, materiaalit ja 3D-asetelman määrittävän Colladatiedoston lisäksi erillisinä kuvatiedostoina olevia tekstuureita. Geometrian sisältämä tiedosto ladataan ensin, jonka jälkeen selain hakee siinä määritellyt tekstuurit erikseen palvelimelta. Mallin latauksen jälkeen ladataan jokaista tietolaatikkoa vastaava HTMLsivu JQueryn asynkronista latausta käyttäen, lisätään pääsivun DOM-puuhun, piirretään
tekstuuriksi ja lopuksi poistetaan HTML DOM-puusta.
5.1.2
CSS
HTML5:dessä on haluttu siirtyä kokonaan malliin, jossa sisältö ja tyylimäärittelyt ovat
erotetut toisistaan. Tätä ajatusta on ollut jo HTML-merkintätavan edellisissä versioissa,
mutta ne ovat toisaalta myös sisältäneet tiettyjä attribuutteja ja elementtejä joilla on
merkitystä pelkästään dokumentin esityksen kannalta. Esimerkkinä näistä toimivat
vaikka lihavoinnin ”<b>”-elementti tai vaakasuuntaisen asettelun ”align”-attribuutti.
Tietosisällön ja rakenteen sisältävän dokumentin erottaminen sen esitystavan määrittelystä tarjoaa useita selviä etuja, kuten tyylimäärittelyjen uudelleenkäytettävyyden useilla
sivuilla, dokumenttien koon pieneneminen, standardien yksinkertaistuminen ja tietosisällön (koneellisen) tulkinnan helpottuminen.
17
CSS on keino HTML-sivujen esitystavan määrittämiseen, jonka avulla on mahdollista luoda samasta HTML-dokumentista hyvin erilaisia esityksiä. CSS:llä voidaan määrittää kaikkea elementtien koosta ja asettelusta käytettyihin fontteihin, taustoihin ja tehosteisiin kuten animaatioihin tai varjoihin. Se mahdollistaa myös itsessään suoraan rajallisen määrän dynaamisuutta dokumentin ulkoasuun ilman JavaScriptiä, kuten esimerkiksi elementtien ulkoasu voi muuttua kun käyttäjä vie hiiren kursorin niiden päälle.
Virtuaalimallin sivusto käyttää CSS3:a lähes kaikkeen asetteluun ja kaikkeen elementtien ulkoasun määrittelyyn. Tietyt elementtien asettelut ja koot lasketaan erikseen
JavaScriptillä johtuen kyseisten toteutusten hankaluudesta tai mahdottomuudesta pelkästään CSS:ää käyttämällä. CSS-määrittelyjä voidaan jakaa useaan tiedostoon, joka
helpottaa kokonaisuuksien hahmottamista. Eri tiedostoissa olevat määrittelyt voivat kuitenkin olla ristiriidassa toistensa kanssa, joten toivotunlaisesta yhteistoiminnasta on pidettävä erikseen huolta.
Itse toteutetut CSS-määrittelyt on sivustossa jaettu kolmeen tiedostoon: ”billboard_style_HD.css” määrittelee 3D-näkymän tietolaatikoiden esityksen, ”infopage_style”
vastaavasti kaikille tietosivuille yhteisen ulkoasun ja ”style.css” on pääsivun ja tyylimääritys. Lisäksi ”JQuery UI” ja ”JQuery Lightbox” kirjastoilla on omat tyylimäärittelynsä, jotka ovat myös molemmat omissa tiedostoissaan.
5.1.3
JavaScript
JavaScriptiä käytetään sovelluksessa käytännössä kaiken toiminnallisuuden toteuttamiseen. Kaikki sovelluksen sisäiset linkit on kytketty JavaScriptiin siten, että selaimen vakiotoiminto estetään ja sen sijaan ajetaan kyseistä linkkiä vastaava tapahtumankäsittelijä. Tämä toimintamalli on sovelluksen toiminnan kannalta välttämätöntä, sillä käyttöliittymän ulkoasua ja sisältöä halutaan muokata ohjelmallisesti nimenomaan selaimessa
AJAX-tekniikoita käyttäen. Perinteisiä HTML-linkkien toimintoja käytetään vain sovelluksen ulkopuolisiin lähteisiin viitatessa, jolloin sivut avataan aina uudessa välilehdessä
tai ikkunassa sovelluksen tilan katoamisen tai muuttumisen estämiseksi.
JavaScript on käytössä myös kaiken 3-ulotteisen sisällön esittämisessä. Vaikka suurin osa varsinaisesta 3d-sisällöstä on staattista ja ladataan esimääritellystä mallista, sen
esittäminen tapahtuu kuitenkin JavaScriptin avulla. Osa 3D-sisällöstä kuten tietokortit
kuitenkin myös luodaan JavaScriptillä. Three.js JavaScript-kirjastoa käytetään kaikkiin
3-ulotteisen näkymän esityksen tuottamiseen ja hallintaan liittyviin tarpeisiin.
Sovelluksen JavaScript-toteutus on jaettu useaan tiedostoon siten, että ne muodostavat loogisia kokonaisuuksia. Tiedostojako on tehty pelkästään kokonaisuuden selkeyden
vuoksi, ja kaikki tiedostot tulee kuitenkin aina ladata sovelluksen pääsivun kanssa. JavaScript ei syntaksin tasolla tue nimiavaruuksia, ja vastaavien rakenteiden toteuttaminen
muuten on katsottu tarpeettomaksi sovelluksen verrattain yksinkertaisen rakenteen
vuoksi. Käytetyt kirjastot käyttävät kuitenkin omia nimiavaruuksiaan, mikä on nimikonfliktien välttämiseksi tärkeää niiden ollessa yleiskäyttöisiä ja merkittävästi laajempia.
Sovellus käyttää JQueryä 2D-käyttöliittymän toimintojen toteutukseen, AJAXhakuihin sekä DOM-puun muokkaamiseen. Lisäksi JQuerylle tehtyjä liitännäisiä käyte-
18
tään seuraavasti: JQuery UI Message käyttäjälle näytettäviin virhe ja varoitusviesteihin,
JQuery Hashchange selainriippumattomaan osoiterivin ”hash-osan” muutoksen havaitsemiseen ja JQuery Imagesloaded selainriippumattomaan tietosivujen kuvien latauksen
valmistumisen havaitsemiseen.
Three.js mukana tulevista skripteistä sovellus käyttää (varsinaisen Three.js kirjaston
lisäksi) ColladaLoader.js:ää 3D-mallin lataamiseen ja muuntamiseen esitysmuotoon
Collada-tiedostosta sekä muokattua versiota OrbitControls.js:ästä kameran liikuttamisen
käyttöliittymään. Näiden kirjastojen lisäksi käytössä on vielä Tween.js joka tuottaa erilaisia käyrämuotoja noudattavia siirtymiä mielivaltaisten arvojen välillä ja
HTML2Canvas joka piirtää tietolaatikoiden HTML-sivut bittikartoiksi HTML5 canvaselementtiin.
5.2
Olioanalyysi
Olioanalyysin on ohjelmistoteknisen suunnittelun keskeinen työkalu ja –vaihe, jossa
sovelletaan olio-ohjelmoinnin periaatteita ohjelmiston rakenteen suunnitteluun. Tosin
mikäli toteutuksessa ei käytetä olio-ohjelmointia, korvataan tämä vaihe muilla suunnittelumenetelmillä. Olioanalyysin tavoitteena on hahmottaa ongelma siten, että se on ratkaistavissa olio-ohjelmoinnin periaatteita käyttäen, ja sen lopputuloksena ovat määritykset ohjelmiston luokkajaosta sekä luokkien rajapinnat. Tämä luku esittelee ensin JavaScriptin oliomallia, ja sitten toteutukseen kuuluvat keskeiset luokkamaiset rakenteet.
5.2.1
JavaScriptin oliomalli
JavaScript on oliopohjainen ohjelmointikieli, mutta se eroaa oliomallinsa osalta selvästi
niin sanotuista perinteisistä luokkaperustaisista ja vahvasti tyypitetyistä olioohjelmointikielistä kuten C++:sta tai Javasta. JavaScriptissä ei ole luokkia, vaan jokainen olio voi olla rakenteeltaan uniikki, minkä lisäksi olioiden tietorakennetta voidaan
muokata ajon aikana vapaasti. Lisäksi funktiot ovat myös olioita, ja niinpä niillä on
myös tiettyjä jäsenmuuttujia ja -funktioita. [11]
JavaScriptissä olioilla on nimettyjä jäsenmuuttujia ja -funktioita joita kutsutaan parametreiksi. Itse olion rakenne on tyypitetty taulukko, josta voidaan hakea parametrien
arvoja niiden merkkijono- tai lukuperustaisen nimen perusteella. Olioiden periyttäminen
eli määriteltyjen tietorakenteiden uudelleenkäyttö onnistuu helpoiten kopioimalla isäolio ja lisäämällä siihen halutut toiminnallisuudet. Lisäksi on mahdollista käyttää erityistä prototyyppi-parametria, jonka kautta saatavaa oliota muokkaamalla kaikki siitä
periytyvät oliot muuttuvat. Tämä vastaa luokkaperustaisessa kielessä jonkin luokan
muokkaamista, mutta on mahdollista suorittaa täysin dynaamisesti ajon aikana. [11]
Prototyyppiperustaisella ohjelmointikielellä on kuitenkin mahdollista toteuttaa luokkamaisia rakenteita ja niiden perintää, mutta tällöin käyttäjän on itse asetettava itselleen
niistä koituvia rajoitteita, sillä ohjelmointikieli ei tue näitä rakenteita suoraan. Luokkarakenteisiin ohjelmointikieliin tottuneena JavaScriptin erittäin joustava rakenne on alkuun hyvin hämmentävä, ja sen tarjoamien uusien mahdollisuuksien hahmottaminen
19
vaatii jonkin verran harjaannusta. Lisäksi dynaamista tyypitystä ja luokatonta oliomallia
käyttävän sovelluksen suunnittelu ja esittäminen esimerkiksi tuttujen UML (Unified
Modeling Language)-luokkakaavioiden avulla on haastavaa.
Sovelluksesta on kuitenkin havaittavissa tiettyjä rakenteita, jotka ovat järkeviä toteuttaa kiinteiden olioluokkien kaltaisesti. On hyvin yleistä käyttää JavaScriptsovelluksissa ainakin osittaista luokkajakoa, jolloin toteutuksesta tulee huomattavasti
selkeämmin hahmottuva kuin täysin dynaamisilla olioilla. Vaikka kieli ei pakota tiettyyn rakenteeseen, ovat tietyt toimintatavat hyväksi ja toimiviksi todettuja, ja niinpä niitä näkee käytettävän esimerkiksi monissa JavaScript-kirjastoissa.
Tähän sovellukseen toteutettavilla luokilla on kuitenkin tiettyjä samankaltaisia ominaisuuksia (muuttuja ja funktioparametreja) jotka eivät ole suoranaisesti perinnällä toteutettavia, mutta vastaavat lähinnä rajapintojen (interface) toteutusta. JavaScript ei tunne myöskään rajapintojen määrittelyä ja perinteisesti luokkapohjaisissa ohjelmointikielissä rajapintoihin ei sisälly muuttujaparametreja, mutta näiden tiettyjen sovelluksen olioiden yhteisten ominaisuuksien esittämiseen rajapinnat sopivat kuitenkin melko hyvin.
20
Kuva 5: Kolmen pääluokan rajapinnat ja riippuvuudet UML luokkakaaviona
Itse toteutettuja luokkamaisia rakenteita on sovelluksessa FocusableItem,
HTMlBillboard ja AnimatedDataLink, jotka kaikki liittyvät 3D-näkymän toteutukseen.
Näiden lisäksi on nimettömiä, puhtaasti tiedon varastointiin käytettäviä, olioita esimerkiksi kameran kohdekohtaisille asetuksille. FocusableItemeitä käytetään kameran hallintaan ja ne muodostavat 3D-käyttöliittymän perustan, HTMLBillboard sisältää tietokorttien lataamiseen ja hallintaan tarvittavat toiminnot ja AnimatedDatalink on graafinen
esitys tietolinkistä kahden laitteen välillä. Näiden luokkien väliset suhteet ja toteuttamat
rajapinnat on esitetty kuvassa 5.
5.2.2
Rajapinnat
Kolmelle pääluokalle on nähtävissä tarve kahdelle melko yleiselle rajapinnalle. Nämä
melko korkean abstraktiotason rajapinnat liittyvät 3D-objektin korostamiseen ja kame-
21
ran ohjaamiseen ja toistuvat samanlaisina, mutta niiden toteutukset vaihtelevat luokkien
välillä. Juuri merkittävät erot toteuttavissa luokissa ja varsinaisten toimintojen erilaisuus
on syynä rajapinta-rakenteen käyttöön periyttämisen sijaan.
IHighligtable-rajapinta on varsin yksinkertainen ja sisältää vain kaksi funktioesittelyä: setHighlight jota käytetään objektin korostuksen kytkemiseen päälle tai pois ja getPickingMeshes, jolla toteuttavalta oliolta saadaan haettua sen korostuksen tarkasteluihin
käytettävät varsinaiset 3D-objektit. Objektien korostus on toteutettu siten, että kameran
projektiotasosta luodaan kursorin kohdalta säde, jonka osumista 3D-maailman objekteihin tarkastellaan. Tätä varten tarvitaan lista niistä kaikista objekteista joiden kanssa törmäyksiä halutaan tarkastella, eli korostettavat objektit. Tarkastelun nopeuttamiseksi
käytetään geometrialtaan merkittävästi yksinkertaisempia objekteja kuin mitä käyttäjälle
näytetään, ja nämä objektit saadaan kultakin rajapinnan toteuttavalta oliolta taulukossa
getPickingMeshes-funktion paluuarvona.
SetHighlight-funktiolla voidaan asettaa toteuttavan olion korostus päälle tai pois
riippuen highlight-parametrista. Korostuksen tarkoituksena on antaa käyttäjälle vinkki
siitä, että kyseinen objekti on valittavissa tai siihen liittyy jotain muuta toiminnallisuutta. Korostus voidaan toteuttaa esimerkiksi objektin materiaalia muuttamalla, jolloin
käyttäjä huomaa muutoksen ja objekti myös erottuu paremmin taustastaan.
IFocusable-rajapinta on huomattavasti monimutkaisempi, sillä se sisältää kameran
kohdistamiseen ja tietokorttien näyttämiseen tarvittavat funktiot. SetCameraSettingsTofunktio saa toteuttavan olion asettamaan kameran ohjaimen parametrit funktion parametrina annettuun ohjaimeen, focusControl taas asettaa parametrien lisäksi myös kameran paikan ja suunnan. GetCameraTargetPositions-funktion tarkoitus on mahdollistaa
laskea kameran tuleva paikka kohdistuksen jälkeen, joka tarvitaan kohdistuksen siirtymäanimaation loppupisteeksi. Lisäksi rajapinnassa on funktiot tietokorttien tai muun
lisätiedon näyttämiselle ja piilottamiselle animaation kanssa tai ilman. Lisätiedot on tarkoitus näyttää aina kun objekti on valittuna, mutta erilliset funktiot tuovat tähän lisää
joustavuutta.
5.2.3
FocusableItem
FocusableItem-luokka täyttää tarpeen esittää useita erikseen valittavia objekteja 3D avaruudessa siten, että kullakin voi olla omat asetuksensa kameran ohjaimelle. Vaatimuksena on, että objektit ovat sekä korostettavia (IHighlightable-rajapinta), että kameralla
kohdistettavia (IFocusable-rajapinta).
FocusableItemin toiminnot keskittyvät kameraohjaimen asetusten säilömiseen, niiden asettamiseen kameran ohjaimeen kun näkymä halutaan kohdistaa kyseiseen kohteeseen, sekä korostukseen tarvittaviin 3D-objekteihin. Sillä ei ole muita funktioita toteutettujen rajapintojen lisäksi, ja niinpä FocusableItem voidaankin ajatella vain näiden
kahden rajapinnan eräänlaisena perustoteutuksena. Käytännössä kuitenkin FocusableItem-oliot ovat sovelluksen toiminnan kannalta keskeisiä, sillä ne muodostavat 3Dkäyttöliittymän perustan. Kamera liikkuu pelkästään näiden olioiden määrittämien kohteiden välillä, ja jokaisella kohteella on omat asetuksensa kameran ohjaimelle.
22
Jokaisella FocusableItem-oliolla on uniikki avainsana, jonka avulla on tehty liitos
HTML:ällä toteutetun 2-ulotteisen ja JavaScriptillä tuotetun 3-ulotteisen sovelluksen
osan välille. Kutakin tietosivua, siihen liittyvää HTML linkkiä ja 3D-mallin kohdetta
yhdistää sama avainsana. Avainsanoja käytetään myös viitteinä ja olioiden järjestelyyn
taulukoihin.
5.2.4
HTMLBillboard
HTMLBillboard-oliot muodostavat kaikki 3D-näkymän tietolaatikot. Näiden tietolaatikoiden sisältö on määritetty kukin omassa HTML-tiedostossaan ja esitystapa tulee kaikille laatikoille yhteisestä CSS-tiedostosta. Luokan tehtävänä on ladata AJAX:illa kyseinen HTML-sivu ja tyylitiedosto, lisätä se (näkymättömäksi) osaksi pääsivun DOMpuuta, piirtää laatikko html2canvas-kirjastoa käyttäen väliaikaiseen Canvas-elementtiin,
ladata tekstuuri Canvasilta ja luoda sille Three.js:n materiaali sekä varsinainen geometria. Lisäksi luokka toteuttaa sekä IHighlightable että IFocusable-rajapinnat, eli tietolaatikko voidaan korostaa ja siihen voidaan kohdistaa kamera.
IFocusable-rajapinnan hideInfo ja showInfo-funktiot vaikuttavat tämän luokan toteutuksessa koko tietolaatikon näkyvyyteen toisin kuin FocusableItemissä, jossa niiden toteutus vain välittää kutsun siihen liittyville tämän luokan olioille eli tietolaatikoille. Tietolaatikon piilotuksen ja esiintuonnin animointiin käytetään Tween.js-kirjastoa ja
Three.js:n materiaalien läpinäkyvyysparametria.
Tietolaatikoiden toteuttaminen HTML-sivuina mahdollistaa yhtä helpon muokattavuuden sekä tietosivuille, että tietolaatikoille. Muokattavuus on tärkeää, sillä täydellistä
kuvausta järjestelmän kaikista osista ei ole tarkoitus tuottaa tämän kandidaatintyön aikana, johtuen tiedon saatavuusongelmista. Lisäksi järjestelmään saattaa tulla muutoksia
tai tietoja, linkkejä, kuvia ym. halutaan lisätä jälkikäteen. HTML-toteutus on tosin hyvin
monimutkainen verrattuna staattisiin kuviin ja vaatii useita AJAX-kyselyitä palvelimelle, mutta ladattavan tiedon määrä on toisaalta pienempi verrattuna esimerkiksi PNG
(Portable Network Graphics)-pakattuihin tekstuureihin. CSS-tyylitiedostoa muokkaamalla on myös mahdollista hyvin helposti muuttaa kerralla kaikkien tietolaatikoiden ulkoasua.
Tietolaatikoiden tekstuurit piirretään CSS-tyylien määrittämässä koossa, joka on 512
x 1024 pikseliä. Tämä verrattain korkea tarkkuus yhdessä lineaarisen interpoloinnin ja
anisotrooppisen suodatuksen kanssa takaa tekstin hyvän luettavuuden mahdollisimman
laajalla katselukulma ja esitysresoluutioskaalalla. Tekstuurin resoluution ollessa vakio,
on myös tietolaatikon kokosuhde lukittu 1:2, jonka taustalla on WebGL:n vaatimus että
kaikkien tekstuurien molemmat mitat tulee olla kahden potensseja.
5.2.5
AnimatedDataLink
AnimatedDataLink on kaikkien järjestelmän tietoyhteyksien visualisointiin tarkoitettu
luokka, jonka pääasiallisena tehtävänä on luoda riittävästi varioitavissa oleva esitys kuvaamaan erilaisia yhteystyyppejä. Luokan toiminnot liittyvät lähinnä yhteyksien ani-
23
mointiin, mutta se periytyy FocusableItem-luokasta, eli näillä olioilla on ainakin teoriassa myös kaikki tuon luokan ominaisuudet. Käytännössä kuitenkin yhteyksien korostusja valintatoimintoja ei käytetä nykyisessä toteutuksessa hyväksi.
Tietoyhteydet esitetään kahden pisteen välillä kulkevilla kolmiulotteisilla objekteilla, toteutuksessa päädyttiin käyttämään vihreitä nuolimaisia tasokuvioita. Näiden objetien liikkeen ja muiden yhteyteen liittyvien asetusten määrittämiseen on yhteensä 20
parametria. Luokan toteutus on tehty siten, että mikäli jotakin parametria ei erikseen
määritellä, käytetään sille erikseen määriteltyä vakioarvoa. Tämä helpottaa yhteyksien
luomista merkittävästi, kun vakioarvot on määritetty mahdollisimman yleiskäyttöisiksi.
Asetusparametrien avulla on mahdollista asettaa muun muassa objektien liikenopeus, suunta, linkin kaksisuuntaisuus, viiveet eri vaiheissa, objektien kierrätys jne. Näiden
lisäksi luokka mahdollistaa erikseen yhteyksien ketjuttamisen siten, että objektit näyttävät liikkuvan yhtenäistä pidempää yhteyttä pitkin, sekä objektien automaattisen, purskeisen, luonnin halutulla nopeudella.
24
6 TOTEUTUS
Tämä luku kuvaa lopullisen toteutuksen niitä erityisiä ratkaisuja, joita ei ole vielä käsiteltyä aiemmin, sekä käyttöliittymää. Vaatimusmäärittely ja suunnittelu on tässä projektissa tarkoituksella jätetty hieman epätarkoiksi kuvauksiksi ohjelmistosta, jotta esimerkiksi ulkoasussa voidaan kokeilla erilaisia vaihtoehtoja toteutuksen aikana ilman tarvetta muuttaa jo tehtyjä määrittelyjä ja dokumentaatiota. Näiden yksityiskohtien lopputuloksia esitellään siis perusteluineen tässä luvussa. Käyttöliittymää käsitellään erikseen,
koska se on hyvin keskeisessä osassa ohjelmiston vaatimusten ja siten projektin onnistumisen kannalta.
6.1
Keskeiset ratkaisut
Tämä alaluku kuvaa toteutuksen aikana lopullisen muotonsa saavuttaneita ratkaisuja ja
toteutuksen lopullista tilaa. Näitä ratkaisuja on käsitelty visuaalisen ilmeen, 3D-mallien,
tietosivujen ja yleisen tietosisällön osalta.
6.1.1
Visuaalinen ilme
Sivuston ulkoasu on toteutettu käytännössä kokonaan CSS-tyylimäärittelyillä ja visuaalisen ilmeen pohjana on TTY:n graafinen ohjeisto. Tyylin inspiraationa on käytetty
TTY:n julkisia websivuja www.tut.fi yhtenäisen ilmeen luomiseksi. Yhtenäisestä ulkoasusta on etua, sillä käyttäjä tunnistaa TTY:n värimaailman ja elementtien asettelut, ja
se myös mahdollistaa sivuston mahdollisen sulauttamisen Systeemitekniikan laitoksen
sivuille, jotka käyttävät samaa teemaa.
Sivun tyyli muodostuu valkoisen ja sinisen taustavärin sekä mustan tai sinisen tekstin käytöstä, tehosteväreinä on vihreää ja oranssia. Kaikki nämä värit ovat TTY:n graafisesta ohjeistoista ja muodostavat harmonisen kokonaisuuden. Tehostevärejä vihreää ja
oranssia käytetään harkiten käyttöliittymän korostuksissa, eikä niitä käytännössä näykkään ennen kuin käyttäjä vie kursorin linkin tai valittavan objektin päälle. Lisäksi sivuston fontit on määritetty graafisen ohjeiston mukaisiksi, mutta ne saattavat korvautua
samankaltaisilla käyttäjän laitteella saatavilla olevilla fonteilla mikäli varsinaista fonttia
ei löydy.
3D-näkymän tyyli ja värimaailma ovat tarkoituksella selvästi erilaiset verrattuna 2ulotteisen sisältöön. Siinä missä muu sivusto käyttää vaaleita ja kirkkaita värejä, 3Dnäkymän taustat ovat hyvin tummia. Tällä pyritään kiinnittämään käyttäjän huomiota
sivuston keskeisimpään elementtiin ja toisaalta 3D-näkymässä varsinaiset kohteet (laitteet) ovat kaikki melko vaaleita jolloin ne erottuvat hyvin tummasta taustasta.
25
Transitioita ja animaatioita käytetään helpottamaan käyttäjää havaitsemaan muutosta, sillä ihmisen on huomattavasti helpompi havaita ja kiinnittää huomio liikkeeseen
kuin yhtäkkiseen ulkoasun muutokseen. CSS3:lla on helppo määrittää muutosanimaatiot
eli transitiot elementtien tyylien vaihtumiseen. Näitä transitioita käytetään 2D käyttöliittymässä helpottamaan käyttäjää havaitsemaan, että 2D ja 3D käyttöliittymät ovat rinnakkaisia vaihtoehtoja korostamalla 2D-käyttöliittymän linkki kun käyttäjä osoittaa 3D
näkymän objektia sekä toisinpäin.
3D-näkymässä transitioita käytetään tietolaatikoiden esiintuomiseen ja piilottamiseen, sekä tietysti kameran liikkeille. Kaikki 3D-näkymän transitiot on toteutettu käyttäen Tween.js-kirjastoa, joka mahdollistaa hyvin vähällä vaivalla useiden eri matemaattisten käyrämuotojen käytön, lineaarisesta vaimennettuun tai hyppivään. Varsinaista animaatiota on tietolinkeissä jotka esittävät tiedon kulkutapaa ja tiheyttä erilaisilla linjaa
pitkin kulkevilla objektipulsseilla.
6.1.2
3D-mallit
Kaikki 3D-näkymän mallit ovat tätä sovellusta varten itse tuotettuja, ja muodostivat
merkittävän osan työstä yhdessä muiden visuaalisten elementtien kanssa. Mallit on toteutettu erillisinä Autodesk 3ds Max 2012-ohjelmalla, koottu asetelmaksi ja viety
OpenCollada liitännäistä käyttäen yhteen collada-tiedostoon. Jokaisesta järjestelmän
fyysisestä osasta on ulkonäölliseen realismiin pyrkivä polygonipohjainen malli, pääosin
itse toteutetut tekstuurit ja 3ds Maxissa määritetyt varjostin (materiaali) parametrit.
Jokaiselle valittavissa olevalle objektille on myös erilliset korostus- ja yksinkertaistetut valintageometriat, sekä objektit jotka määräävät kohdistetun kameran kohdepisteen, jotka ovat myös samassa tiedostossa varsinaisten visuaalisten mallien kanssa. Nämä geometriat tunnistetaan mallin latausvaiheessa erityisten nimien perusteella. Valintageometrioiden nimet ovat muotoa ”pick_x”, korostusgeometrioiden ”highlight_x” ja
keskipisteiden ”dummy_x_center” jossa x on niitä vastaavan kohdistettavan tai korostettavan objektin uniikki avainsana, eli esimerkiksi ”embeddedpc” joka viittaa sulautettuun tietokoneeseen.
3ds Maxista tuotu malli ei kuitenkaan sisällä lainkaan animaatiota vaan on täysin
staattinen, eli kaikki 3D-näkymän animaatiot ja transitiot on toteutettu JavaScriptillä.
Lisäksi tietyt visuaaliset tehosteet luodaan vasta selaimessa, koska ne ovat yksinkertaisempia toteuttaa JavaScriptillä kuin mallintamalla. Esimerkiksi mallissa olevan pohjatason ruudukko on toteutettu käyttämällä Three.js:n mukana tulevaa erityistä viivojen
piirtämiseen tarkoitettua varjostinta.
6.1.3
Tietosivut
Suurin osa sivuston tarjoamasta tietosisällöstä on määrä toteuttaa erillisinä tietosivuina.
Tämän kandidaatintyön puitteissa tietosivuista on kuitenkin toteutettu vain tyngät, johtuen osittain kattavan tiedon heikosta saatavuudesta, ja osittain sisällön tuottamisen vaatimasta suuresta työmäärästä.
26
Jokaisella järjestelmän osalla on oma tietosivunsa, ja ne on toteutettu samaa pohjaa
hyväksikäyttäen HTML-sivuina. Kaikilla tietosivuilla on yhteinen esitystavan määrittävä CSS tyylitiedosto, mikä mahdollistaa niiden ulkoasun helpon muokkaamisen. Tietosivut koostuvat osan nimen mukaisesta pääotsikosta, kuvaosiosta sivun yläosassa, varsinaisesta sisältöosiosta, sekä linkkiosiosta sivun alalaidassa. Kuva 6 esittää sivuston etusivunakin toimivaa yleiskuvaus-tietosivua.
Kuva 6: Yleiskuvaus-tietosivu sellaisena kun se näyttäytyy osana sivustoa
Tietosivujen yhteinen pohjatyyli on melko yksinkertainen, mutta HTML ja CSS määrittelyjen avulla niille on mahdollista sisällyttää hyvin monipuolista sisältöä. Varsinaisen
sisällön (HTML) ja esitystavan (CSS) erottamisella on myös mahdollistettu samojen
tietosivujen käyttö eri ympäristöissä, sillä esitystapa on täysin muokattavissa ottamalla
käyttöön eri CSS määrittely. Esimerkiksi samoista sivuista on mahdollista saada mobiililaitteille tai koko ruudun käyttöön paremmin soveltuvat versiot eri tyylimäärittelyillä.
6.1.4
Tietosisältö
Sivuston tietosisältö, sellaisena kuin se on tämän kandidaatintyön puitteissa toteutettu,
kattaa yleiskuvauksen järjestelmästä ja esittelee lyhyesti kaikki sen komponentit. 3Dnäkymä tarjoaa visuaalisesti kiinnostavan, mutta silti selkeän kuvan järjestelmän kolmesta pääryhmästä ja niiden välisistä tietoyhteyksistä. 3D-maailmaan upotetut tietolaatikot on pyritty laatimaan naseviksi tietoiskuiksi kustakin laitteesta, mahdollistaen
27
yleiskuvan muodostamisen järjestelmän toiminnoista pelkästään tätä mallia tarkastelemalla.
Sivusto ei nykyisessä muodossaan kuitenkaan juuri tarjoa ohjelmistoteknisesti relevanttia tietoa muuten kuin linkkien muodossa. Järjestelmässä olevien ohjelmistojen, sekä niiden muodostamien palveluiden ja rajapintojen, kuvaaminen jää tietosivujen sisällön vastuulle. Tätä ratkaisua puoltaa ohjelmistojen abstraktien konseptien vaikea esittäminen kolmiulotteisina, ja tämän kaltaisen tiedon vakiintuneiden esitystapojen kaksiulotteisuus. Sisällön tuottaminen kolmiulotteisena on myös kertaluokkaa työläämpää,
eikä sillä saavuteta merkittäviä etuja, pikemminkin käyttäjät yleensä kokevat tällaiset
ratkaisut väkisin tehdyiksi ja hankaliksi käyttää.
6.2
Käyttöliittymä
Toteutettu käyttöliittymä koostuu määrittelyn mukaisesti kahdesta erilaisesta, mutta yhteenliitetystä osasta: kaksi- ja kolmiulotteisesta käyttöliittymästä. Kaksiulotteinen käyttöliittymä on perinteisempi HTML-sivusto, jonka ulkoasu ja tehosteet on määritelty lähes kokonaan CSS:n avulla. Kolmiulotteinen käyttöliittymä taas on sääasemajärjestelmän 3D-malliin lisättyä toiminnallisuutta ja dynaamisuutta, joka on toteutettu käytännössä kokonaan JavaScriptillä.
Nämä käyttöliittymät on yhdistetty JavaScriptin avulla siten, että käyttäjän toiminnot
näkyvät molemmissa, ja ne toimivat rinnakkaisina ja siten vaihtoehtoisina tapoina navigoida järjestelmän eri osien välillä. Esimerkiksi hiiren kursorin vieminen 3D näkymässä
jonkin järjestelmän osan päälle, toteutetaan korostus sekä 3D näkymässä, että kaksiulotteisen käyttöliittymän navigointilinkeissä. Sama korostus toimii myös toisin päin. Tällä
rinnakkaisuudella on haluttu helpottaa sivuston käytön oppimista, sillä kolmiulotteisen
käyttöliittymän nopea omaksuminen voi olla vaikeampaa kuin yleisesti web-sivuilla
käytettyihin navigointitekniikoihin perustuvan kaksiulotteisen vaihtoehdon.
Sivustolle linkittämistä on yksinkertaistettu mahdollistamalla suoraan tietylle tietosivulle siirtyminen sivustolle saavuttaessa. AJAX-pohjaisissa sivustoissa suoraan tiettyyn sisältöön linkkaaminen tuo omat haasteensa, sillä sisällölle ei ole omaa yksikäsitteistä URL-osoitetta, mikäli sitä ei erikseen toteuteta palvelinpuolella. Tässä sivustossa
käytetty ratkaisu perustuu URL:in niin sanotusti ”risuaita-merkillä” (#) erotettuun
osaan, joka voidaan lukea JavaScriptillä sivun latautumisen jälkeen. Jokaiselle tietosivulle on oma yksilöllinen tunnisteensa, jota voidaan käyttää URL:issa esimerkiksi
seuraavasti: http://www.students.tut.fi/~syvajar3/kandi/index.html#windsensor. Tämä
esimerkkiosoite esittää käyttäjälle suoraan tuulianturin tietosivun ja kohdistaa myös 3Dnäkymän vastaavasti.
28
Kuva 7: Sivuston etusivu pienellä resoluutiolla
Kuva 7 esittää sivuston etusivuna toimivaa yleiskuvaus-näkymää sellaisena kuin se esittäytyy melko pienellä resoluutiolla, kuten esimerkiksi kannettavan tietokoneen näytöllä.
Kuvasuhde on tässä kuitenkin epätavallisen korkea, sillä siinä haluttiin näkyvän enemmän myös tietosivua kuin tyypilliselle näytölle mahtuu. 3D-näkymän minimileveys on
960 pikseliä, jolloin se asettuu oikeasta laidasta samaan linjaan tietosivun kanssa.
29
Kuva 8: Käyttöliittymä korkealla resoluutiolla, huomaa 3D-näkymän venyminen suhteessa muihin elementteihin
Kuva 8 havainnollistaa sivuston elementtien asettumista suurella resoluutiolla. 3Dnäkymä venyy leveyssuunnassa täyttääkseen paremmin käytettävissä olevan tilan. Näkymän korkeus määräytyy kuitenkin aina siten, että tietosivun ylälaita ei katoa näytöltä.
Tällä saadaan käyttäjä havaitsemaan tietosivun olemassaolo ja vaihdos aina valitun kohteen vaihtuessa.
Näistä kuvista ei tule kuitenkaan esille tietosivujen selaamista helpottava vasemman
laidan kaksiulotteisen menupalkin ominaisuus: sivua vieritettäessä se seuraa näkymän
ylälaidan mukana. Tämän ominaisuuden ansiosta tietosivuja lukevan käyttäjän ei tarvitse siirtää näkymää takaisin ylös vaihtaakseen kohdetta, sillä valikko on aina näkyvillä.
6.3
Yhteensopivuus
Sivusto on suunniteltu käytettäväksi niin sanotuilla työpöytäselaimilla, ja ensisijaisesti
työpöytätietokoneille tyypillisillä resoluutiolla ja laajoilla resursseilla. Nämä suunnittelun lähtökohdat näkyvät valituissa tekniikoissa ja etenkin 3D-näkymän toteutuksessa,
sillä sen esittäminen suunnitellulla tavalla käytännössä vaatii että käyttäjän tietokoneessa on moderni erillinen näytönohjain. Kannettavilla tietokoneilla sivusto ja 3D-näkymä
ovat edelleen tarkasteltavissa, mutta tietyt tehosteet voivat näkyä huonommin tai jäädä
kokonaan pois, minkä lisäksi näkymän päivitysnopeus saattaa pudota niin alhaiseksi,
että käyttökokemus kärsii merkittävästi sulaviksi tarkoitettujen animaatioiden muuttuessa diaesityksiksi.
Mobiililaitteilla sivustoa on mahdollista käyttää, mikäli käytetty selain tukee
HTML5:ttä ja JavaScriptiä. 3D näkymä vaatii lisäksi WebGL-tuen, mikä on vielä harvinainen mobiiliselaimissa. Esimerkkinä kuitenkin Mozilla Firefox Androidilla tukee näitä tekniikoita ja sivusto on katseltavissa kokonaisuudessaan, sekä selattavissa mikäli
30
laitteessa riittää resursseja. 3D-näkymä käyttää verrattain suuria tekstuureja, mitkä vaativat mobiililaitteiden mittakaavassa paljon muistia grafiikkaohjaimelta.
Työpöytäselaimista sivusto on todettu kokonaisuutena täysin toimivaksi Mozilla Firefoxin versiolla 22.0 ja Google Chromen versiolla 28.0.1500.72 m. Testeissä käyttöjärjestelmänä toimi 64 bittinen Windows 7. Koko sivuston kehitystyön ajan nämä kaksi
selainta toimivat testausalustoina ja yhtenäinen toiminta molemmilla oli myös yksi tavoitteista. On myös hyvin todennäköistä, että sivusto toimii oikein näiden selaimien eri
käyttöjärjestelmäversioilla, sekä myös muilla WebKitiin perustuvilla selaimilla kuten
Opera 15:sta tai Apple Safarilla, mutta näitä ei erikseen testattu.
31
7 YHTEENVETO JA TULOKSET
Tämän luku kokoaa saavutetut tulokset ja peilata niitä asetettuihin tavoitteisiin. Tämän
työn ollessa ohjelmistokehitysprojekti, voidaan myös arvioida valittujen tekniikoiden
soveltuvuutta ja esittää jatkokehitysajatuksia. Kokonaisuutena työn onnistuminen koostuu sekä itse ohjelmiston, että tämän kirjallisen osan tavoitteiden saavuttamisesta, ja kokonaisuutena asetetussa aikataulussa pysymisestä.
7.1
Vaatimusten ja tavoitteiden saavuttaminen
Suurin osa tämän opinnäytetyön toteutukseen liittyvistä tavoitteista on itse asetettuja,
sillä kandidaatintyön yleiset vaatimukset ja työn teettäjän, eli Systeemitekniikan laitoksen, toiveet ovat melko suurpiirteisiä. Työlle saatu tehtävänanto olisi mahdollista tiivistää muutamaan lauseeseen, eli käytännössä kaikki yksityiskohtaisemmat tavoitteet ja
rajoitteet tuli määrittää itse.
Keskeisin toteutuksen päätavoite oli kehittää Systeemitekniikan laitoksen olemassa
olevasta sääasemajärjestelmästä web-selaimessa ilman erillisiä liitännäisiä toimiva 3ulotteinen virtuaalimalli. Mallin toteutuksessa tulee panostaa visuaaliseen näyttävyyteen
ja kykyyn luoda käyttäjälle yleiskuva järjestelmästä. Voidaan todeta, että nämä tavoitteet on saavutettu hyvin. Toteutettu sivusto käyttää vielä nuoria, mutta jo melko laajasti
tuettuja standardoituja web-tekniikoita kuten WebGL:ää ja se on suoraan käytettävissä
monille eri alustoille saatavilla olevilla selaimilla, kuten Google Chromella ja Mozilla
Firefoxilla. 3D-mallin ja käyttöliittymän ulkoasu on mielenkiintoa herättävä ja värimaailmaltaan sopusointuinen, yksinkertaiset animaatiot tuovat siihen eloa.
Toteutukselle itse asetetuista (ja työn ohjaajan tukemista) tavoitteista nousevat esiin
kattava tietosisältö, helppokäyttöisyys ja muokattavuus. Tietosisältö jäi valitettavasti
vielä melko minimaaliselle tasolle, ja se kykenee lähinnä luomaan yleiskuvan järjestelmästä sellaiselle, joka ei ole siihen ennen tutustunut. Järjestelmän ohjelmistoista kiinnostuneelle käyttäjälle ei sivustosta valitettavasti ole juuri hyötyä. Sisällön muokattavuuteen liittyvät tavoitteet on kuitenkin saavutettu: järjestelmän tietosivut ja 3D-mallin
tietolaatikot on toteutettu helposti muokattavassa HTML-formaatissa. Järjestelmän osien lisääminen tai poistaminen vaatii silti kuitenkin JavaScript-toteutukseen syventymistä ja staattisen 3D-mallin muokkaamista, mikä vaatii erityisosaamista ja -työkaluja.
Kandidaatintyön kirjallisen osan yleiset vaatimukset on määritelty TTY:n opinnäytetyöohjeessa. Ne määrittelevät varsin tarkasti työn sisällön ja ulkoasun, jolloin työn kirjoittaminen on osaltaan helpompaa, ja ennen kaikkea ne takaavat töille yhtenäisen muodon, ja että tekijä samalla tutustuu tieteellisen kirjoittaminen yleisiin sääntöihin. Tämän
työn tutkimusaiheena voidaan pitää sääasemajärjestelmään tutustumista, sen dokumen-
32
tointia, sekä 3-ulotteisen grafiikan mahdollistavien modernien web-tekniikoiden nykytilan ja sovellettavuuden tutkimista.
Tämän työn kirjallisessa osassa painoarvo on kuitenkin haluttu pitää toteutuksen dokumentoinnissa, alkaen perustelluista tekniikoiden valinnoista ja päätyen valmiiseen
tuotteeseen, ja siinä hyödynnettyihin ratkaisuihin. Lisäksi työ tarjoaa yleiskuvan käytetyistä tekniikoista ja niiden käytännön soveltamisesta avattuna siten, että webtekniikoita tuntematonkin voi hyötyä sen lukemisesta. Syynä toteutukseen painottumisessa on, että ohjelmistojen dokumentointi on niiden ylläpidettävyyden kannalta ensiarvoisen tärkeää, ja tämä opinnäytetyön kirjallinen osa tulee olemaan toteutuksen ainoa
kuvaus.
Alkuperäinen työn toteutuksen ja kirjallisen osan yhteinen valmistumisaikataulu oli
asetettu 2013 toukokuun loppuun. Työn tekeminen aloitettiin varsinaisesti helmikuussa,
ja se eteni aikataulun mukaisesti, kunnes huhti- ja toukokuussa muista opinnoista aiheutui niin paljon kiireitä, että kandidaatintyön tekeminen pysähtyi kokonaan useaksi viikoksi. Kandiseminaariesityksen pitämisen aikaan toukokuun loppupuolella työn toteutus oli vielä melko pahasti kesken, ja kirjallisesta osasta puuttui myös useampi luku lähes kokonaan. Toukokuun lopulla seminaariesityksen pitämisen jälkeen, ja etenkin kokopäiväisten kesätöiden alettua 3.6, motivaatio työn tekemiseen oli alhainen ja eteneminen hidasta. Toteutuspuoli valmistui kuitenkin vähitellen kesä- ja heinäkuun aikana ja
heinäkuun loppupuolella alkoi myös kirjallisen osan puuttuvien osien kirjoitus. Heinäkuun lopussa, kaksi kuukautta alkuperäistä aikataulua jäljessä, molemmat osat olivat
viimein valmiit lähetettäväksi työn ohjaajalle kommentoitaviksi ennen lopullista palautusta arvostelua varten.
7.2
Valittujen tekniikoiden soveltuvuus
WebGL:n tuki web-selaimissa on nykyään jo hyvällä tasolla, kaikille yleisimmille alustoille on saatavilla yksi tai useampia sitä tukevia selaimia. Tämä tosin johtuu suurelta
osin yksittäisten selainten monien alustojen tuesta. WebGL-standardi on myös jo riittävän kypsä, jotta ainakin perustekniikoita hyödyntävät toteutukset toimivat eri selaimissa
samalla tavalla, mikä helpottaa siihen perustuvien sovellusten kehittämistä.
Pelkän WebGL:n käyttö suoraan vähänkään monimutkaisemmissa projekteissa ei
kuitenkaan vaikuta erityisen järkevältä, sillä se tarjoaa kuitenkin vain melko matalan
tason toimintoja. Tästä johtuen sen päälle onkin kehitetty useita JavaScript-kirjastoja,
joista tässä työssä käytettiin Three.js:ää. Kokemukset Three.js:n käyttöönotosta ja soveltamisesta ovat hyvät, kirjasto osoittautui helposti omaksuttavaksi ja vakaaksi. Kirjaston
nopea kehitystahti voi aiheuttaa kuitenkin ongelmia, sillä versiosta toiseen vaihtaminen
aiheuttaa omat ongelmansa, ja internetistä löytyvät esimerkit on toteutettu satunnaisille
kirjaston versioille, eivätkä siten välttämättä toimi itse käyttämäsi version kanssa. Jo
pelkästään tämän työn toteutusta tehtäessä, noin puolen vuoden aikana, Three.js:stä julkaistiin yhteensä viisi uutta versiota.
33
Muut toteutuksessa käytetyt JavaScript-kirjastot, kuten JQuery, ovat pidempään kehitettyjä tuotteita ja siten niiden voidaan olettaa olevan vakaita ja kehityksessään vähemmän radikaaleja, eli vaikka kehitys saattaa olla edelleen aktiivista, suuren muutokset
ydinominaisuuksiin ovat epätodennäköisiä. Näiden kirjastojen käyttö olikin helppoa
kattavan dokumentaation ansiosta. Pienien yhden asian apukirjastojen tarkka toiminta
on myös mahdollista sisäistää pelkästään niiden lähdekoodia tutkimalla.
Suurin osa toteutuksen kehitystyöstä oli JavaScript-ohjelmointia, sillä käytännössä
kaikki sivuston toiminnot on toteutettu sen avulla. JavaScript oli minulle projektia aloittaessa täysin uusi ohjelmointikieli, ja sen melko radikaalisti minulle tutuista ohjelmointikielistä kuten C#:sta tai Javasta eroavien konseptien opiskelu vei jonkin verran aikaa,
mutta ei ollut varsinaisesti vaikeaa. Opiskelussa auttoi internetistä löytyvä valtava määrä erilaisia esimerkkejä, dokumentaatiota ja itseopiskelumateriaalia.
JavaScriptin käytössä suurimmat haasteet johtuvat suoraan sen ominaisuuksista hyvin dynaamisena skriptikielenä. Käytännön ohjelmointityötä useiden laajojen kirjastojen
kanssa hankaloittaa merkittävästi JavaScriptin muuttujien dynaaminen tyypitys, sillä
parhaatkaan editorit eivät kykene kertomaan oliomuuttujan kautta saatavilla olevia jäsenfunktioita tai kyseisen olion ominaisuuksia (properties), sillä ne määrittyvät vasta
ohjelmaa suoritettaessa. Sama ongelma on myös funktiokutsuissa, kaikki funktioiden
parametrit ovat kielen puolesta aina vapaaehtoisia ja niiden tyypit sekä arvot voivat olla
mitä tahansa. Ohjelmoijan tulee siis aina erikseen selvittää funktion dokumentaatiosta
tai lähdekoodista millaisia olioita se todellisuudessa tarvitsee parametreinaan.
JavaScriptin ohjelmoinnin hankaluuksien lisäksi sillä toteutettuja ohjelmia on tavallista vaikeampi testata ja korjata (debug). Tämäkin johtuu suoraan kielen ominaisuuksista, dynaamisten olioiden rakenne voi odottamattomasti muuttua esimerkiksi nimiavaruustörmäyksen tai vain olion väärän käyttötavan vuoksi. Moderneista web-selaimista
ainakin Google Chromen työpöytäalustaversiossa on hyvät työkalut web-sisällön rakenteen ja toiminnan tutkimiseen, ja ne sisältävät myös JavaScript debuggerin. Näistä työkaluista on kuitenkin tavallista vähemmän hyötyä verrattuna vahvasti tyypitettyihin perinteisempiin ohjelmointikieliin, ja henkilökohtainen kokemus JavaScript ohjelmien
vianetsinnästä onkin, että se vie verrattain paljon aikaa ja saattaa siksi väliaikaisesti pysäyttää koko sovelluksen kehitysprosessin, mikäli virheen vaikutukset ovat laajat.
7.3
Jatkokehitysajatuksia
Tietosisällön laajentaminen. Sivusto tarjoaa nykyisessä muodossaan hyvän pohjan
kattavan tietopaketin luomiselle sääasemajärjestelmästä. Kandidaatintyön puitteissa on
sisällöstä toteutettu kuitenkin vain lyhyt yleistason esitys. Käytännössä tietosisällön laajentaminen tarkoittaa tietosivujen laajentamista sanoin, kuvin, taulukoin, linkein ja niin
edelleen riittävän kattavalle tasolle. Erityisesti järjestelmän ohjelmistot ja niiden rajapinnat ovat selvittävän sisällön tarpeessa, jotta sivustosta olisi todellista hyötyä.
3D-näkymän ulkoasun parantaminen. Nykyinen 3D-näkymä sisältää tarkat ja
teksturoidut mallit fyysisistä komponenteista, mutta etenkin valaistus ja käytetyt tehos-
34
teet kaipasivat vielä jatkokehitystä. Ottamalla käyttöön esimerkiksi, Three.js-kirjaston
suoraan tukemat, heittovarjot voisi näkymän yleisilmeestä saada heti mielenkiintoisemman. Lisäksi Three.js:n kanssa on mahdollista käyttää kehittyneempiä tehosteita
kuten pikselivarjostimia. Etenkin värikorjaus-, heijastus- ja SSAO (Screen Space Ambient Occlusion)-varjostimet ovat tutkimisen arvoisia. Näiden käyttöönottoa tutkittiin
toteutusvaiheessa, mutta päädyttiin versioristiriitoihin käytettyjen kirjastojen kanssa.
Vaihtamalla Three.js:n uudempaan versioon, ja korjaamalla vaihdoksesta aiheutuvat
ongelmat, on näiden tehosteiden käyttö kuitenkin mahdollista kohtuullisella vaivalla.
Tietoyhteyksien parempi kuvaaminen 3D-mallissa. Järjestelmän tietoyhteydet
ovat luonteeltaan hyvin erilaisia, mikä olisi hyvä saada kuvattua paremmin myös visuaalisesti. Toteutettu AnimatedDataLink-luokka mahdollistaa monipuoliset objektien
liikkeeseen perustuvat animaatiot, mutta myös muita tapoja kuvata tietoyhteyksiä voitaisiin soveltaa. Tiedon kulkutiheydelle, välitettävän tiedon tyypille sekä yhteyden nopeudelle ja kapasiteetille tulisi kehittää paremmin kuvaavat visuaaliset keinot.
Sääaseman mittaustietojen reaaliaikainen haku ja esitys. Järjestelmä on toistaiseksi tietosisällöltään staattinen, mutta käyttäjien mielenkiintoa voisi lisätä sen toiminta
käyttöliittymänä mittaustietoihin. Kunkin anturin viimeisimmät mittaustiedot voidaan
hakea JavaScriptillä AJAX:ia ja järjestelmän tarjoamaa WebServiceä käyttäen, sekä
esittää 3D-mallissa antureiden vieressä esimerkiksi tietolaatikon muodossa. Tietojen
lataaminen kerran samalla sivuston kanssa olisi myös hyväksyttävää, sillä sääasemajärjestelmän tiedot päivittyvät vain viiden minuutin välein.
Sivuston latauskoon optimoiminen. Optimoimattomana sivuston etusivun lataaminen vaatii noin 7 megatavun siirtämistä verkkoyhteyden yli. Tästä suurin osa muodostuu
3D-näkymän staattisen mallin Collada-tiedoston lataamisesta, mikä on käytännössä
pakkaamatonta XML:ää. Konfiguroimalla sivustoa tarjoava palvelin lähettämään tiedosto pakattuna ja selaimen purkaessa sen automaattisesti voidaan verkkoyhteyden yli siirrettävää tietomäärää supistaa merkittävästi.
Parempi tuki kosketusnäytöllisille laitteille. HTML5 mahdollistaa kosketustapahtumien erottelun hiiritapahtumista (events). Nykyisessä muodossaan sivustoa on mahdollista käyttää kosketusnäytön avulla, mutta etenkin 3D-näkymän käyttöä helpottaisi
erillisten käsittelyrutiinien luominen kosketustapahtumille. Käytännössä tämä vaatii joitakin melko yksinkertaisia lisäyksiä ja muutoksia 3D-näkymän kameraohjainluokkaan.
Sivuston vaihtoehtoinen koko-näytön asettelu. Erillisen paremmin koko näytön
pinta-alaa käyttävän asettelun luominen tukisi sivuston käyttöä esittelykäytössä. Asettelu voisi asettaa 3D-näkymän koko näytön korkuiseksi ja tuoda aktiivisen tietosivun yhtä
korkeana, mutta kapeampana, näytön oikeaan laitaan. Tällöin sivustoa käytettäisiin 3Dnäkymän käyttöliittymän avulla ja 2D-linkkipalkki voitaisiin jättää kokonaan pois. Sivuston 2D-elementtien ulkoasun (ja samalla asettelu) ollessa erotettu sisällöstä ja määritettynä CSS:llä, tarvitsee tämän kokoruudun asettelun toteuttamiseen vain luoda uusi
CSS-tyylimäärittelytiedosto.
35
LÄHTEET
[1]
TTY - Systeemitekniikan laitos. ASE - Kandityöt - Automaation tietotekniikka.
[WWW].
[viitattu
15.7.2013].
Saatavissa:
https://wiki.ase.tut.fi/courseWiki/index.php/ASE_-_Kandityöt__Automaation_tietotekniikka.
[2]
Vaisala. ROSA Surface analyzer for roads and runways User's Guide. 1998.
[3]
Salonen M. Vaisala Rosa -sääaseman etäkäyttö Telit GE863-GPS moduulin
avulla. Tampere:; 2009.
[4]
Oetiker T. RRDtool - About RRDtool. [WWW]. [viitattu 9.3.2013]. Saatavissa:
http://oss.oetiker.ch/rrdtool/.
[5]
Vaisala Oyj. HMP45A&HMP45D Humidity and temperature probes Operating
manual.; 1997.
[6]
Vaisala Oyj. WM30 User's guide.; 2002.
[7]
Vaisala Oyj. DRI521 and DRI511 Intelligent Road/Runway Sensor Interfaces.
Helsinki.
[8]
Ubiquiti networks. PicoStation M2-HP Datasheet. San Jose.
[9]
W3C World Wide web Consortium. HTML5 Introduction. [WWW]. [viitattu
13.4.2013]. Saatavissa: http://www.w3schools.com/html/html5_intro.asp.
[10]
W3C World Wide web Consortium. HTML5 differences from HTML4.
[WWW].; 2012 [viitattu 13.4.2013]. Saatavissa: http://www.w3.org/TR/html5diff/.
[11]
Richard Clark OSCMDM. Beginning HTML5 and CSS 3: Apress; 2012.
[12]
Mike Murach ZR. murach's JavaScript and JQuery Fresno: Mike Murach &
Associates, Inc.; 2012.
[13]
Mozilla Developer Network. JavaScript Guide - JavaScript | MDN. [WWW].
[viitattu
13.5.2013].
Saatavissa:
https://developer.mozilla.org/enUS/docs/JavaScript/Guide.