Timantti-sovellusprojekti: sovellusraportti
Miika Kujala
Topi Latva-Salo
Tuomas Porvali
Marja Similä
Versio 1.0.0
Julkinen 8.12.2017
Jyväskylän yliopisto
informaatioteknologian tiedekunta
Jyväskylä
Hyväksyjä | Päivämäärä | Allekirjoitus | Nimenselvennys |
---|---|---|---|
Projektipäällikkö | Miika Kujala | ||
Tilaaja | Vesa Lappalainen | ||
Ohjaaja | Jukka-Pekka Santanen |
Tietoa dokumentista
Tekijät:
- Miika Kujala (MK),
miika.m.kujala@student.jyu.fi
- Topi Latva-Salo (TL),
topi.h.latva-salo@student.jyu.fi
- Tuomas Porvali (TP),
thetupo26@gmail.com
- Marja Similä (MS),
marja.j.k.simila@student.jyu.fi
Dokumentin nimi: Timantti-sovellusprojektin sovellusraportti
Tiivistelmä: Timantti-projekti kehitti kevään ja kesän 2017 aikana TIM-järjestelmään dokumenttien tulostustoiminnon. Sovellusraportissa käsitellään projektin tavoitteita ja niiden toteutumista kehityksen sovelluksen osalta. Raportissa käydään läpi projektin taustat ja kehitetylle sovellukselle asetetut tavoitteet ja kehitetyn sovelluksen kahden eri osan – TeX-tulostuksen ja CSS-tulostuksen – toteutusratkaisut. Lisäksi tarkastellaan valikoitujen toteutusratkaisujen motiiveja ja arvioidaan niiden onnistumista erityisesti sovellukselle asetettujen tavoitteiden toteutumisen kannalta.
Avainsanat: TIM, Timantti, sovellusprojekti, sovellusraportti, tulostaminen, dokumenttimuunnos
Muutoshistoria
Versio | Päivämäärä | Muutokset | Tekijät |
---|---|---|---|
0.0.1 | 27.6.2017 | Dokumentti luotiin ja kirjoittaminen aloitettiin. | TL |
0.0.2 | 20.7.2017 | Dokumentin laatimista jatkettiin. | TL |
0.0.3 | 1.8.2017 | Dokumentin laatimista jatkettiin. | TL |
0.0.4 | 16.8.2017 | Sovelluksen rakenteen kuvaamista. | TL |
0.0.5 | 23.8.2017 | Sovelluksen rakenteen kuvaamista. | TL |
0.0.6 | 24.8.2017 | Sovelluksen rakenteen ja tavoitteiden kuvaamista. | TL |
0.0.7 | 25.8.2017 | Yhteenveto kirjoitettu. | TL |
0.1.0 | 25.8.2017 | Ensimmäinen versio dokumentista valmiiksi. | TL |
0.1.1 | 10.9.2017 | Korjauksia dokumenttin alkupuolelle. | TL |
0.1.2 | 21.9.2017 | Korjauksia sovelluksen rakennetta ja toimintaa käsitteleviin lukuihin. | TL |
0.1.3 | 22.9.2017 | Korjauksia dokumenttiin ja rakenteen muokkausta. | TL |
0.1.4 | 24.9.2017 | Dokumentin rakenteen muokkausta. | TL |
0.1.5 | 25.9.2017 | Lisäyksiä CSS-tulostuksen käsittelyyn. | TP |
0.2.0 | 26.9.2017 | Toinen julkaisuversio valmiiksi. | TL |
0.3.0 | 28.10.2017 | Korjauksia dokumenttiin ja kolmas versio julki. | TL |
1.0.0 | 8.12.2017 | Dokumentin hyväksytty versio julki. | TL |
Tietoa projektista
Timantti-projekti kehittää Jyväskylän yliopiston informaatioteknologian tiedekunnassa kehitettyyn TIM-järjestelmään tulostustoiminnon, joka mahdollistaa yksittäisten dokumenttien tulostamisen sekä koostamisen luentomonisteeksi.
Kehitetyssä sovelluksessa on kaksi osaa, jotka ovat suunnattu erilaisiin tulostustarpeisiin. Kehitetty CSS-tulostus mahdollistaa helpon ja nopean sekä suhteellisen hyvälaatuisen tulosteen saamisen TIM-dokumentista hyödyntäen internet-selaimen omaa tulostustoimintoa. TeX-tulostus puolestaan tähtää painokelpoisen materiaalin tuottamiseen suoraan TIM-järjestelmästä hyödyntäen LaTeX-ladontajärjestelmää.
Tekijät
- Kujala Miika (MK),
miika.m.kujala@student.jyu.fi
- Latva-Salo Topi (TL),
topi.h.latva-salo@student.jyu.fi
- Porvali Tuomas (TP),
thetupo26@gmail.com
- Similä Marja (MS),
marja.j.k.simila@student.jyu.fi
Tilaaja
- Lappalainen Vesa,
vesa.t.lappalainen@jyu.fi
Ohjaajat
Lehtinen Mika,
mika.k.lehtinen@student.jyu.fi
Santanen Jukka-Pekka,
santanen@mit.jyu.fi
Yhteystiedot
Sähköpostilistat
timantti@korppi.jyu.fi
timantti_opetus@korppi.jyu.fi
1. Johdanto
Timantti-projekti kehitti Sovellusprojekti-kurssilla keväällä ja kesällä 2017 Jyväskylän yliopiston informaatioteknologian tiedekunnassa kehitettyyn TIM-oppimisympäristöön dokumenttien tulostustoiminnon. Toiminto mahdollistaa dokumenttien tulostamisen kolmella eri tavalla. Yksinkertaisin tulostustapa on hyödyntää yksittäisen TIM-dokumentin tulostukseen CSS-tyylimäärittelyitä ja selaimen omaa tulostustoimintoa. Jatkokehitykseen sovittu Advanced CSS -tulostus mahdollistaa TIM-dokumentin interaktiivisten liitännäisten (nk. pluginien) ajon, josta toteutettiin projektin aikana muutama ominaisuus. Kolmas tulostustoiminto hyödyntää Pandoc-muunto-ohjelmaa ja TeX-ladontajärjestelmää, ja sillä on mahdollista muodostaa painokelpoisia PDF- ja LaTeX-dokumentteja.
Sovellusraportin toisessa luvussa käydään läpi tärkeimmät raportissa käytetyt käsitteet. Kolmannessa luvussa tarkastellaan lyhyesti sovelluksen kehitysprojektin synnyttäneitä tarpeita ja niiden edelleen asettamia tavoitteita kehitetylle sovellukselle. Lisäksi esitetään pintapuolinen katsaus sovelluksen rakenteeseen, jota käsitellään sen jälkeen sovelluksen kahden eri osion osalta luvuissa neljä ja viisi.
Raportin lopussa arvioidaan valittujen toteutusratkaisujen onnistumista. Lisäksi sovellusraportissa tarkastellaan projektin onnistumista peilaten projektissa kehitetylle sovellukselle asetettuja vaatimuksia niiden täyttymiseen.
2. Käsitteet
Luvussa kuvataan tärkeimmät dokumentissa käytetyt, sovelluksen kohdealueeseen sekä käytettyihin kehitysvälineisiin ja muihin ohjelmistoihin liittyvät termit.
2.1 Kohdealueen käsitteet
- Advanced CSS -tulostus on TIMiin kehitettävä tulostustoiminto, joka hyödyntää JavaScriptiä ja CSS-tyylejä. Tulostustoiminto osaa mm. ajaa plugineja.
- CSS-tulostus on TIMiin kehitetty tulostusominaisuus, joka hyödyntää selaimen omaa tulostustoimintoa.
- Inline-elementti tarkoittaa rakenteisen merkintäkielen elementtiä, joka on samassa tasossa sitä ympäröivän sisällön kanssa, mutta jossa käytetään erilaista esitystyyliä. Esimerkiksi tämä kursivoitu alue on samassa tasossa suhteessa sitä ympäröivään sisältöön, mutta on esitetty eri tavalla ja on siten inline-elementti.
- Plugin tarkoittaa TIM-järjestelmässä dokumentteihin lisättäviä interaktiivisia liitännäisiä. Esimerkiksi koodipluginilla voi kirjoittaa ja ajaa koodia.
- Skripti on komentosarja, jolla voidaan automatisoida tehtäviä.
- Template tarkoittaa tietotekniikassa yleisesti jonkinlaista pohjarakenteen kuvausta, jota ei esitetä missään sellaisenaan, vaan sisältö sijoitetaan siihen dynaamisesti templaten kuvaamalla tavalla sen määräämiin kohtiin. Käytännössä kaikki modernit käyttöliittymien tekemiseen tarkoitetut kehykset (nk. frameworkit) käyttävät jonkinlaista template-järjestelmää sisällön dynaamiseen rakentamiseen.
- TeX-tulostus on TIMiin kehitetty tulostustoiminto, joka hyödyntää Pandoc-muunto-ohjelmaa ja TeX-ladontajärjestelmää. Tulostustoiminnolla voidaan muodostaa laadukas PDF-tuloste.
- TIM on Jyväskylän yliopiston informaatioteknologian tiedekunnassa kehitetty interaktiivinen oppimisympäristö.
- Tulostetiedosto on kehitetyllä tulostustoiminnolla muodostettava tulostuskelpoinen versio dokumentista.
- Tulostusasetukset mahdollistavat muodostettavan dokumentin ulkoasun asetusten säätämisen.
- Tulostus-template tarkoittaa Pandoc-muunto-ohjelman hyväksymää pohjatiedostoa, johon kohdemerkintäkielelle muunnetun dokumentin sisältö sijoitetaan. Tulostus-templatessa kuvataan yleisesti dokumentin asettelun säännöt.
- Whitelist tarkoittaa tietotekniikassa yleisesti rekisteriä, jossa määritellyt tahot saavat käyttöönsä joitain määriteltyjä erityisoikeuksia.
2.2 Sovelluksen kehitysvälineet ja muut ohjelmistot
- AngularJS on alunperin Googlen kehittämä ja pääosin Googlen ylläpitämä avoimen lähdekoodin käyttöliittymäkehys web-sovelluksia varten. TIM käyttää AngularJS:ää asiakaspuolella tapahtuvaan käyttöliittymän renderöintiin.
- Blueprint on Flask-ohjelmistokehykseen kuuluva rakenne, joka on kokoelma näkymiä, templaatteja, staattisia tiedostoja ja muita ohjelmaan kuuluvia elementtejä.
- CSS (Cascading Style Sheets) on tyyliohje, jota käytetään erityisesti WWW-dokumenteissa tyylimäärittelyyn.
- Flask on Python-ohjelmointikielellä kirjoitettu WWW-ohjelmistokehys.
- HTML on hyperlinkkejä sisältävän tekstin merkintäkieli, jolla voidaan kuvata tekstin rakennetta.
- JavaScript on ECMAScript-standardin toteuttava dynaaminen ohjelmointikieli, jolla lisätään WWW-sivulle toiminnallisuutta. WWW-selaimissa on JavaScript-moottori, joka suorittaa automaattisesti HTML-sivulle linkitetyn JavaScript-koodin.
- Jinja2 on TIMissäkin käytössä oleva template-järjestelmä (ks. template) Python-ohjelmointikielelle. Se mahdollistaa käyttöliittymän osien dynaamisen renderöinnin palvelimella.
- LaTeX on TeXin laajennos. LaTeX-muoto on käyttäjälle selkeämpi kuin TeX, ja TeXiä käytetäänkin nykyisin lähinnä LaTeXin kautta.
- Markdown on TIM-oppimisympäristössä käytössä oleva merkintäkieli, jolla on yksinkertainen tekstimuotoinen syntaksi.
- OpenOffice on avoimen lähdekoodin toimisto-ohjelmistoperhe, joka sisältää mm. tekstinkäsittelyohjelman.
- Pandoc on ohjelma, joka muuttaa tekstidokumentteja merkintäkielestä toiseen.
- PDF on ohjelmistoriippumaton tiedostomuoto, jota käytetään pääasiassa tulostamisessa ja sähköisissä julkaisuissa.
- PyCharm on integroitu kehitysympäristö, jota käytetään Python-kielisen koodin laatimiseen ja ajamiseen.
- TeX on tekstin ladontajärjestelmä, joka mahdollistaa painokelpoisten dokumenttien muodostamisen ja samanlaisen lopputuloksen kaikilla tietokoneilla.
3. Lyhyt katsaus sovellukseen ja sen kehityksen syihin
Sovelluksen toiminnan hahmottamisen kannalta on olennaista ymmärtää se tarve, josta sovelluksen kehittäminen on lähtenyt. Toisaalta on luonnollisesti yhtä lailla merkittävää ymmärtää sovelluksen toteutusratkaisut ja arkkitehtuuri. Tässä luvussa käsitellään edellämainittuja asioita.
3.1 Tausta ja tarpeet
Jyväskylän yliopiston informaatioteknologian tiedekunnassa on laadittu luentomonisteita pääosin LaTeXilla, Microsoft Wordillä ja OpenOfficella. Ohjelmistokursseille OpenOfficella laadituista oppimateriaaleista muodostettiin staattinen HTML-versio hyödyntämällä erilaisia skriptejä. HTML-dokumentti haluttiin muodostaa PDF:n sijaan, koska se skaalautuu eri laitteilla luettaessa. Näin luentomonisteen lukeminen onnistui myös tabletilla ja älypuhelimella. Opiskelijoille pystyttiin näin tarjoamaan oppimateriaaleihin pääsy sekä paperiseen PDF-versioon että elektroniseen HTML-versioon.
Edellä mainitulla tavalla laadittua luentomonistetta oli kuitenkin vaikea ylläpitää, sillä muutosten tekeminen oli hankalaa ja hidasta. Ongelmaa helpottamaan kehitettiin TIM-järjestelmä. TIMin ja Markdown-merkintäkielen ansiosta HTML-dokumentteja oli helppo muodostaa. Luennoitsijat kaipasivat TIM-dokumentteihin vuorovaikutteisuutta, jotta esimerkiksi ohjelmakoodia voisi ajaa suoraan TIMissä. Pikkuhiljaa TIMin interaktiiviset ominaisuudet alkoivat lisääntyä.
Ajan myötä TIMistä on laajennuksineen kehittynyt erittäin monipuolinen alusta oppimateriaaleille. TIM-dokumentit hyödyntävät monella tavalla WWW-ympäristön mahdollisuuksia ja luovat siten oppimateriaaleihin huomattavasti enemmän vuorovaikutteisuutta kuin perinteisillä paperisilla materiaaleilla on mahdollista saavuttaa.
Toisaalta valitusta oppimateriaalin muodosta on syntynyt uudenlainen ongelma. Osa opiskelijoista ja muista materiaalien käyttäjistä lukee materiaaleja edelleen mieluummin paperilta kuin tietokoneen ruudulta, ja toisaalta TIM-dokumenttien muuttaminen paino- ja tulostuskelpoiseksi on ollut hankalaa. Timantti-sovellusprojektin kehittämä sovellus pyrkiikin ratkaisemaan ongelman siitä, miten TIM-dokumentin voisi muuttaa paperille tulostettavaan muotoon helposti ja mahdollisimman automaattisesti.
3.2 Sovellukselle asetetut tavoitteet
Projektin tavoitteena oli kehittää TIMiin dokumenttien tulostustoiminto, jonka avulla mikä tahansa TIM-dokumentti olisi mahdollisimman helppo muuttaa paperille tulostettavaan muotoon. Sovelluksen toimintoja suunniteltaessa päädyttiin lopulta kolmeen erilaiseen mahdolliseen toteutustapaan: CSS-tulostukseen, TeX-tulostukseen ja nk. Advanced CSS -tulostukseen.
Ensimmäinen ja palvelimen kannalta vaivattomin toteutustapa oli kehittää tulostukseen vaikuttavia CSS-tyylisääntöjä siten, että TIM-dokumentista saisi siistin tulosteen suoraan selaimen omalla tulostustoiminnolla. Toinen tapa oli muuntaa dokumentin Markdown-merkintäkielen mukainen kuvaus palvelimella LaTeXiksi ja siitä edelleen PDF-tiedostoksi. Kolmas tapa oli ikään kuin näiden kahden välimuoto. Siinä selaintulostusta varten kehitettäisiin JavaScriptillä toiminnallisuuksia, joilla dokumenttia voisi valmistella CSS-tulostusta varten, jotta selaimessa tapahtuvalla tulostuksella saavutettaisiin entistäkin parempi lopputulos.
Advanced CSS -tulostus sovittiin lopulta nopeasti jatkokehitysideaksi, mutta osa sen alle kaavaillusta toiminallisuudesta tuli lopulta kuitenkin toteutettua projektissa.
CSS-tulostuksen ominaisuuksiksi määriteltiin seuraavat:
- Tulostuksen tulee käyttää selaimen omaa tulostustoimintoa.
- Linkin URL-osoiteen tulee tulostua vain kerran.
- Käyttäjän tulee voida halutessaan tulostaa TIM-dokumenttiin kirjoitetut kommentit.
- Tulostukseen tulee voida lisätä manuaalinen sivunvaihto.
- Tulosteessa tulee pakottaa sivunvaihto sivun lopun yksinäisten otsikoiden eteen.
TeX-tulostuksen ominaisuuksiksi määriteltiin seuraavat:
- Markdown tulee muuntaa palvelimella LaTeX- tai PDF-muotoon.
- Tulostettavaan dokumenttiin tulee halutessaan saada kansilehti, sisällysluettelo ja takakansi.
- Tulostettava PDF-tiedosto tulee voida tallentaa TIMiin.
- TIM-dokumenttiin tulee voida lisätä sisältöä, joka näkyy tulostettavassa tiedostossa, mutta ei näy tarkasteltaessa TIM-dokumenttia verkossa.
- TIM-dokumenttiin tulee voida lisätä sisältöä, joka näkyy tarkasteltaessa TIM-dokumenttia verkossa, muttei tule tulosteeseen.
- Pluginien tulee antaa itsestään oletustulostusmuoto Markdown-muodossa.
- Plugin-kappaleeseen tulee voida määritellä, miten pluginin halutaan tulostuvan.
- Pluginin tilalle tulee voida määrittäää sen paikalle tulosteeseen automaattisesti asetettava kuva.
- Tulostusasetukset määritellään TIM-dokumentissa.
- Henkilökohtaiset tulostusasetukset tulee voida tallentaa TIMiin.
- Dokumenttikohtaiset tulostusasetukset tulee voida tallentaa TIMiin.
Advanced CSS -tulostuksen ominaisuuksiksi määriteltiin seuraavat:
- TIM-dokumentin pluginit tulee pystyä ajamaan automaattisesti tulostettaessa.
- TIM-dokumentin pluginista tulee tulostettaessa generoitua automaattisesti sen sisältöä vastaava kuva, joka voidaan sijoittaa sitten sijoittaa kyseisen pluginin paikalle tulostettavaan tiedostoon.
Käyttöliittymän ominaisuuksiksi määriteltiin seuraavat:
- TIMin käyttöliittymässä on elementti, josta tulostustoiminnon voi käynnistää.
- Tulostustoiminnon käyttöohje on saatavilla vasemman reunan valikosta.
- Käyttöliittymään tulee lisätä tulostusasetusikkuna.
- Tulostettavasta tiedostosta tulee linkki tulostusikkunaan.
- Tulostustoiminnossa syntyneiden virheiden virheilmoitusten tulee näkyä käyttäjälle.
3.3 Sovellus pääpiirteittäin
Sovellus koostuu kahdesta erillisestä tulostustoiminnallisuudesta, joista toinen hyödyntää TeX-ladontajärjestelmää ja toinen tulostukselle asetettavia CSS-sääntöjä ja JavaScriptiä. Nämä kaksi osaa ovat toisistaan käytännössä täysin erilliset, sillä TeX-tulostuksessa kaikki prosessointi tapahtuu palvelimella ja CSS-tulostus taas nojaa puhtaasti käyttäjän selaimessa tapahtuvaan prosessointiin. Osa asetuksista kuitenkin molempiin tulostustoimintoihin. Esimerkiksi tietyn kappaleen piilottaminen TIM-dokumentin verkkoversiosta tai tulosteesta on määritettävissä kappalekohtaisesti, ja sen vaikutusalue ulottuu molempiin tulostustapoihin.
CSS-tulostus pohjautuu siihen, että käyttäjän selaimen palvelimelta vastaanottamaa HTML-dokumenttia manipuloidaan selaimen omaa tulostustoimintoa varten erilaisilla tulostukseen vaikuttavilla CSS-säännöillä sekä tulostettaessa ajettavalla JavaScript-koodilla.
TeX-tulostuksessa palvelin muuttaa pyydetyn dokumentin Markdown-kuvauksen käyttäjän valinnan mukaan joko LaTeX-tiedostoksi tai suoraan PDF-tiedostoksi. Karkeasti TeX-tulostuksessa palvelimelle lähetetään siis tieto tulostettavasta TIM-dokumentista, tieto käytettävästä, tulosteen ulkoasun muotoiludokumentista (nk. template-dokumentti), sekä tieto kohdetiedostomuodosta. Palvelin vastaanottaa pyynnön ja luo Pandoc-muunto-ohjeman avulla pyydetyn käännöstiedoston. Lopuksi palvelin lähettää tiedon onnistumisesta tai syntyneestä virhetilanteesta käyttäjän selaimelle, jossa käyttöliittymä näyttää käyttäjälle joko linkin syntyneeseen tulosteeseen tai ilmoituksen virheestä.
Näiden kahden tulostustoiminnon tarkempi kuvaaminen käydään läpi seuraavissa luvuissa 4 ja 5. Tulostustoiminnon käyttöliittymä on puolestaan kuvattu tulostuksen käyttöohjeessa [3].
4. TeX-tulostuksen rakenne ja toiminta
Luvussa kuvataan tarkemmin projektissa kehitettyä TeX-tulostustoimintoa toteuttamisen näkökulmasta.
4.1 Sovelluksen rakenne ja toteutusratkaisut
Tiivistetysti sovelluksen TeX-tulostuksesta vastaava osa rakentuu käyttöliittymästä sekä palvelinpuolen sovelluksesta. Käyttöliittymä on asiakkaan tietokoneen eli päätelaitteen selaimessa ajettava AngularJS:llä rakennettu dialogi-ikkuna, jonka voi käynnistää TIMin asetusvalikkoon sijoitetusta painikkeesta. Palvelinpuolen sovellus on Pythonilla kirjoitettu ja Flask-sovelluskehystä sekä Pandoc-muunto-ohjelmaa käyttävä sovellus, jonka tehtävä on vastaanottaa ja käsitellä määriteltyihin URL-reitteihin saapuvia tulostuspyyntöjä. TeX-tulostusta hoitavan sovelluksen karkea rakenne on esitetty kuvassa 1.

Lisäksi sovellusta varten laajennettiin TIMin tietokantaa yhdellä lisätaululla, jotta tulostustoiminnon luomista dokumenteista voidaan pitää kirjaa. Tätä tietokantataulua käytettiin dokumenttien välimuistitoiminnallisuuden rakentamiseen. Koska pitkien TIM-dokumenttien tulostaminen PDF-tiedostoiksi on palvelimen kannalta työlästä puuhaa, täytyi palvelimen tekemän turhan työn osuutta minimoida. Tietokantaan lisätty taulu on kuvattu luvussa 4.8.
Käytännössä sovelluksen toimintaa lienee helpoin kuvata seuraavalla työnkulkukaaviolla (kuva 2).

TeX-tulostuksen toteuttaminen oli huomattavan paljon suunnittelua, analysointia ja erilaisia kokonaisuuksia sisältävä prosessi, minkä johdosta myös toteutuksen tarkastelu onkin jaettu pienempiin palasiin.
Projektin alussa suunniteltiin, että käyttäjä voisi suoraan sovelluksen käyttöliittymästä yksinkertaisilla valinnoilla säätää mm. fonttikokoa ja kirjasintyyppiä, sekä halutessaan liittää tulosteeseen kansilehden ja sisällysluettelon. Lopulta erilaisia mahdollisia valintoja todettiin olevan kuitenkin niin paljon, että tulostetiedoston ulkoasun muotoilu hoitaa pandocin käyttämien template-tiedostojen kautta. Käyttöliittymästä siis valitaan lopulta käytännössä vain tulostukseen käytettävä template-dokumentti, haluttu ulostuloformaatti (esimerkiksi LaTeX tai PDF), ja se, halutaanko TIM-dokumentin plugineista tulosteeseen oletussisältö vai käyttäjän itse plugineihin laatima sisältö (ks. tulostustoiminnon käyttöohje).
4.2 TeX-tulostuksen tiedostorakenne
Seuraavassa on esitelty sovelluksen konkreettiset osat eli ohjelmakoodin sisältävät tiedostot jaoteltuna sovelluksen osien mukaan (polut alkaen sovelluksen juuresta eli alkaen kansiosta <PROJEKTIN_JUURI>/timApp
).
Käyttöliittymän osalta olennaiset tiedostot ovat seuraavat:
static/templates/printDialog.html
sisältää käyttöliittymän HTML-merkkauksen.static/stylesheets/printDialog.scss
sisältää käyttöliittymäikkunan tyylimääritteet.static/scripts/controllers/printCtrl.js
sisältää käyttöliittymän AngularJS-kontrollerin, jolla käyttöliittymän vuorovaikutteinen toiminnallisuus on rakennettu.
Palvelimen osalta olennaiset tiedostot ovat seuraavat:
routes/print.py
vastaa palvelimen TIM-sovellukseen ohjaamiin erilaisiin tulostukseen liittyviin HTTP-kutsuihin.documentprinter.py
määrittää luokan, jonka metodeilla dokumentin tulostaminn hoidetaan.pandoc-imagefilepathsfilter.py
muuttaa dokumentin kuvien URLit sellaisiksi että ne saadaan PDF:ään asti. TIMissä on useampi erilainen mahdollinen esiintymismuoto järjestelmässä oleville kuville. Filtteri siis tutkii kuvaelementtien URLeja ja muuntaa erimuotoiset URLit yhdenmukaisiksi niin että LaTeXista PDF:n tekevä pdflatex löytää ne TIM-palvelimen levyltä. Lisäksi filtteriin rakennettiin toiminnallisuus, jonka ansiosta se voi ladata kuvia TIM-palvelimen ulkopuolisista URLeista ja korvata sitten kuvan URLin LaTeX-käännöksessä ladatun kuvan levyosoitteella. Kuvien latausta ohjataan nk. whitelist-tiedostolla, johon kirjatuista URLeista kuvien lataaminen on "turvallista".pandoc-headernumberingfilter.py
sisältää Pandoc-filtterin, joka prosessoi otsikoiden numerointia. Filtteri yhdenmukaistaa tulosteeseen tulevaa otsikkonumerointia vastaamaan TIMin sisäistä otsikkonumerointia.pandoc-inlinestylesfilter.py
sisältää Pandoc-filtteri, joka kirjoitettiin vastaamaan pandocin Markdownista LaTeXiksi –muunnoksessa tapahtuneeseen inline-tyylien häviämiseen. Filtteri muuttaa Markdown-merkinnässä inline-elementeille määritellyt tyyliluokat käännöksessä samannimisiksi LaTeX-makroiksi. Esimerkiksi Markdown-merkinnästäviimeinen sana on [punainen]{.red}
seuraa käännösviimeinen sana on \red{punainen}
.timdb/models/printeddoc.py
sisältää dokumenttitulosteen ORM-mallin (object relational mapping). Kuvaa siis oliona tulostusta varten TIMin tietokantaan lisätyn taulun yhden tietueen sisällön.pluginOutputFormat.py
sisältää enumeraatioluokan, jota käytetään sovelluksen sisällä kuvaamaan tulosteen haluttua kohdetiedostomuotoa.
Timantti-projektissa TeX-tulostuksen osalta täydennettyjä TIM-järjestelmän tiedostoja ovat seuraavat:
templates/partials/side_menu.html
on Jinja2-template, joka sisältää TIM-ikkunan vasemmassa reunassa näkyvän valikon kuvauksen. Sivumenuun lisättiin tulostuksen käyttöliittymän käynnistyspainikkeet.static/scripts/sidebarMenuCtrl.js
sisältää sivumenun AngularJS-kontrollerin. Lisättiin toiminnallisuus sivumenuun lisätyille painikkeille.templates/view_html.html
toimii pääluokkana TIMin eri näkymille. Lisättiin linkitys kirjoitetulle uudelle AngularJS-kontrollerille.static/stylesheet.css
sisältää osan koko TIMin tyyleistä. Lisättiin käyttöliittymään vaikuttavia muotoilusääntöjä.pluginControl.py
sisältää plugineita käsitteleviä funktioita. Muokattiin siten, että pluginien sisällön voi pyytää myös Markdown-muodossa.containerLink.py
sisältää plugineihin liittyivien ohjelmien kutsumiseen liittyviä funktioita. Muokattiin siten, että pluginien sisällön voi pyytää myös Markdown-muodossa.utils.py
sisältää yleisiä apufunktioita, mm. pluginien virheilmoituksiin liittyviä funktioita (joita tässä muokattiin). Muokattiin siten, että pluginien virheilmoitukset voi pyytää myös Markdown-muodossa.initdb2.py
luo tietokannan. Muokattiin alustamaan lisätty tietokannan taulu.timdb/timdb2.py
alustaa tietokannan ohjaimet. Lisättiin rekisteröinti tietokantaan lisätyn taulun ohjaimelle.tim.py
sisältää mm. koodin, joka rekisteröi käytössä olevat reitit. Lisättiin rekisteröinti uudelle tulostuksesta vastaavalle kontrollerille.
4.3 Markdownin kääntäminen LaTeXiksi Pandocilla
TIM-dokumentit ovat tallennettuina palvelimen levylle kappaleittain Markdown-muodossa. Kun palvelin saa käyttöliittymältä pyynnön dokumentin tulostamisesta, se hakee dokumentin koko sisällön Markdown-muotoisena, sekä kääntää sen sen jälkeen LaTeXiksi ja edelleen PDF-tiedostoksi käyttäen Pandoc-dokumenttimuunninohjelmaa.
4.4 Pandocin filtterit
Pandocille on mahdollista antaa ajettaessa parametrina sille kirjoitettuja nk. filttereitä, joilla käsitellään Pandocin lähdetiedostosta parsimaa JSON-muotoista dataa ennen kuin Pandoc kääntää sen valitulle kohdemerkintäkielelle. Dokumenttimuunnoksessa tapahtuva dokumentin elementtien sisällöllinen käsittely on järkevää tehdä tässä vaiheessa, sillä parsiminen tapahtuu joka tapauksessa. Koska Pandocin käännettävästä sisällöstä rakentamaa JSON-muotoista representaatiota on nopea käsitellä, on lisäkäsittely tässä vaiheessa vaaditun prosessoinnin kannalta siis lähes "ilmaista".
4.5 Tulostetiedoston ulkoasun ohjaaminen Pandoc-templateilla
Pandoc-dokumenttimuuntimen template-ominaisuudella käännetty dokumentti sijoitetaan annettuun template-dokumenttiin samaan tapaan kuin HTML-sivun sisältö sijoitetaan sivun rakenteessa <body>
-elementin sisään. Template-dokumentti on käytännössä LaTeX-muotoinen dokumentti, jota pandoc käyttää valmiin käännöstiedoston tekemiseen.
Tällaisten muotoiludokumenttien tarjoaman käytännössä rajattoman muokkausmahdollisuuden kautta projektissa päädyttiin lopulta siihen, että tulostustoiminnon tuottaman tulostetiedoston ulkoasua on järkevintä ohjata rakentamalla mahdollisuus kirjoittaa pandoc-template suoraan TIM-dokumenttiin. Timantti-projektin kehittämä sovellus käy TIM-dokumentista tulostetiedoston muodostaessaan hakemassa parametrina annetusta toisesta TIM-dokumentista kaikki kappaleet, joiden on merkattu sisältävän tulostusmuotoiluja. Sen jälkeen se kokoaa ne yhdeksi muotoiludokumentiksi, jonka se kirjoittaa väliaikaisesti tiedostoon palvelimen levylle ja käyttää sitten tuota näin syntynyttä muotoiludokumenttia dokumentin Pandoc-käännöksessä.
4.6 Pluginien tulostaminen
Pluginien tulostaminen oli sovelluksen toteuttamisessa suuri haaste. Koska TIM-dokumentit ovat luonteeltaan lähtökohtaisesti vuorovaikutteisia, dynaamisesti rakentuva sisältö täytyi saada mukaan myös TIM-dokumentista tehtyyn tulosteeseen. Vuorovaikutteisuus TIMissä tapahtuu pääsääntöisesti erilaisten liitännäisten (nk. pluginien) avulla, jotka voivat olla käytännössä mitä tahansa kuvasta interaktiiviseen piirrokseeen tai ajettavaan ohjelmakoodiin.
TIM-pluginia edustaa TIM-dokumentissa periaatteessa tavallinen kappale, jonka metatietolohko sisältää kyseessä olevan pluginin tyypin ja pluginkappaleen yksilöivän tunnisteen sekä pluginin mahdolliset attribuutit, jotka eri plugineilla ovat erilaisia. Esimerkiksi kuvan attribuutteina saattaa olla näyttöleveys ja -korkeus, kun taas videolle voi olla pluginissa merkattu vaikkapa haluttua alkuajankohtaa edustava attribuutti.
Koska pluginit ovat erilaisia, mutta tarjoavat toisaalta jo lähtökohtaisesti yhtenäisen käyttörajapinnan, päädyttiin projektissa jättämään plugineista tulostuva sisältö pluginien kirjoittajien tai TIM-dokumentin laatijien vastuulle. Projektin osalta päädyttiin siis tyytymään siihen, että tulostettaessa TIM-dokumenttia kultakin sen sisältämältä pluginilta käydään kysymässä, mitä se haluaa itsestään tulostettavan. Jos plugin ei osaa antaa itsestään tulostetta, sen paikalla näytetään dokumentin tulosteessa virheilmoitus puuttuvasta sisällöstä.
Pluginien tulostaminen nojaa siis siihen, että pluginin kirjoittaja on osannut määrittää (ja myös tehnyt niin) pluginin tulostusmuodon. Siten on mahdollista, että dokumentin tulostetiedostoon tulee pluginien paikalle virheilmoituksia. Tämä ei ole välttämättä sovelluksen käyttäjän näkökulmasta kovin toivottua. Toisaalta käyttäjä ei välttämättä ole tyytyväinen siihen, miten plugin itsensä tulostaa, ja haluaa sen sijaan tulostaa sen paikalle jotain muuta. Niinpä pluginien tulostamiselle toteutettiin myös vaihtoehtoinen tapa. Siinä käyttäjä voi määrittää pluginin tulosteen kirjoittamalla plugin-kappaleen metatietolohkoon alilohkon print
, johon hän voi kirjoittaa haluamansa pluginin paikalle tulostuvan sisällön Markdown- tai LaTeX-muodossa.
Monet TIM-pluginit ovat luonteeltaan interaktiivisia. Esimerkkejä tällaisista interaktiivisista plugineista ovat vaikkapa ohjelmakoodipluginit tai piirrospluginit. Interaktiivisten pluginien idea on, että käyttäjä voi tallentaa oman syötteensä (eli esimerkiksi kirjoittamansa koodin tai piirtämänsä kuvan) "ajamalla" pluginin. Koska dokumentin tulosteessa voi perustellusti haluta käytettävän tällaisista plugineista joko alkuperäisiä oletustulosteita tai dokumenttia tulostavan käyttäjän itse luomia sisältöjä, tehtiin tulostukselle tätä varten valitsin. Käyttöliittymässä tämä näkyy valintaruutuna Show user answers in plugins
.
4.7 Tulostetiedostojen säilytys välimuistissa
Tulostetiedoston muodostaminen TIM-dokumentista on palvelimen kannalta resurssi-intensiivinen ja siten aikaavievä toiminto. Siksi tulostetiedostoille oli tärkeää kehittää välimuistitoiminto, jolloin saman TIM-dokumentin samasta versiosta pyydettyä tulostetiedostosa ei tarvitse joka kerta erikseen muodostaa.
Käytännössä välimuisti toimii siten, että TIM-dokumentin tulostetiedostoa muodostettaessa sovellus tallentaa tapahtumasta tietokantaan rivin, jossa on alkuperäisen TIM-dokumentin ja tulostetiedoston muodostamisessa käytetyn templaten sisältävän TIM-dokumentin tunnisteet, sekä niiden lisäksi tulostetiedoston versionumero. Versionumero on tiiviste (engl. hash), joka lasketaan tulostettavan TIM-dokumentin tunnisteesta, templaten sisältävän TIM-dokumentin tunnisteesta ja näiden dokumenttien viimeisimmistä muokkaushetkistä. Lisäksi tiivisteen laskemisessa huomioidaan dokumenttia tulostavan käyttäjän käyttäjätunnus, mikäli tulostuksessa on valittu plugineista tulostettavaksi käyttäjän itse niihin laatimansa sisällöt.
Välimuisti toimii siis siten, että tuo tiiviste käydään laskemassa tulostuksen parametreilla ennen tulostamista, ja tietokannan tietueita tutkimalla selvitetään, onko identtinen dokumentti jo tulostettu. Mikäli dokumentti on jo tulostettu, haetaan se ja näytetään suoraan käyttäjälle. Mikäli ei ole, tulostetaan dokumentti normaalisti.
Mikäli käyttäjä on sovellusta käyttäessään valinnut plugineista tulostettavaksi käyttäjän itse niihin laatimansa sisällöt, tulostetiedostoa muodostettaessa ei käytetä välimuistia vaan luodaan aina uusi tuloste. Tulostettava sisältö muuttuisi tässä tapauksessa liian usein, jotta välimuistia käyttämällä saavutettaisiin mainittavaa hyötyä. Lisäksi plugineja sisältävän TIM-dokumentin sisällöllinen tarkastelu välimuistin käytöllä saavutettuun hyötyyn nähden on TIMissä olemassa olevilla rakenteilla työlästä. Aikaa tuntui kokeiluissa kuluvan tulostettavan TIM-dokumentin ja olemassa olevan tulostetiedoston sisällöllisen vastaavuuden vertaamiseen niin paljon, ettei välimuistista olisi käytännössä hyötyä.
4.8 Tietokantaan tehdyt muutokset
Projektissa luotiin TIM-järjestelmän tietokantaan uusi taulu printed_docs
, johon tallennetaan tietoa muodostetuista tulostetiedostoista. Taulussa on seuraavat kentät:
id
on merkinnän yksilöivä tunnus.doc_id
on tulostettavan TIM-dokumentin id.template_doc_id
on tulostuksessa käytettävän templaten sisältävän TIM-dokumentin id.file_type
on muodostetun tulostetiedoston tiedostotyyppi.path_to_file
on muodostetun tulostetiedoston polku TIM-palvelimen levyllä.version
on tulostetiedoston version yksilöivä tunniste.temp
kertoo, onko tulostetiedosto tarkoitus säilyttää palvelimen levyllä vain väliaikaisesti (ei toistaiseksi käytetä vielä mihinkään).created
on aikaleima tulostuksen ajankohdasta.
5. CSS-tulostus
CSS-tulostus rakentuu suurimmaksi osaksi CSS-tyylimäärittelyjen varaan. HTML-sivun elementeille on mahdollista määrittää erityisesti tulostuksessa käytettäviä tyylisääntöjä. TIM-järjestelmässä oli erityisesti sen käyttämän Bootstrap-kirjaston kautta jo aiemmin jonkin verran tulosteen ulkoasun määreitä, mutta niitä laajennettiin tässä projektissa siten, että ne ottavat TIMin monet vuorovaikutteiset elementit paremmin huomioon.
Koska CSS on tarkoitettu nimenomaan ulkoasun määrittelyyn, oli tiettyjä asioita kuitenkin mahdotonta hoitaa puhtaasti sen avulla. Niinpä CSS-tulostukseen rakennettiin puhtaiden CSS-sääntöjen avuksi JavaScriptillä toteutettuja toimintoja, joiden avulla tulosteesta saatiin siistimpi. Esimerkiksi pluginien automaattinen ajaminen ennen tulostusta, päivitetyn datan saamiseksi tulosteeseen ja toisaalta järkevien sivunvaihtopaikkojen valinta olivat toimintoja, joita ei voinut saavuttaa pelkällä CSS:llä. Tavallaan CSS-tulostuksen toteutuksessa tuli siis toteutettua kuitenkin osa aiemmin jatkokehitykseen sovitun nk. Advanced CSS -tulostuksen toiminnallisuudesta.
CSS-tulostuksen tavoitteena oli tarjota nopea, ja palvelimen kannalta tehokas tapa saada monessa tapauksessa riittävän hyvä tuloste TIM-dokumentista. Se ei kilpaile laadulla TeX-tulostuksen kanssa, vaan tavoitteena oli nimenomaan viilata selaimen oman tulostustoiminnon tuottaman tulosteen laatu mahdollisimman hyväksi.
5.1 CSS-tulostuksen tiedostorakenne
CSS-tulostuksen keskeiset tiedostot ovat seuraavat:
static/cssPrint.scss
sisältää tulostuksen CSS-säännöt.static/scripts/CssPrint.js
sisältää tulostuksessa käytettävän JavaScript-koodin.
Projektissa tehtiin muutoksia lisäksi seuraaviin tiedostoihin:
modules/cs/js/dir.js
määrittää csApp-AngularJS-moduulin sekä siihen liittyvän toiminnallisuuden. Lisättiin uusi toiminto, jolla voidaan muuttaa dokumentin editorit pre-elementiksi.static/all.css
kokoaa TIMin CSS:n importtaamalla pienempiä CSS-tiedostoja. Lisättin cssPrint -ohjeet.static/scripts/editmode.js
näyttää ja piilottaa dokumentin edit-tilan toimintoja. Laajennettiin kattamaan dokumentin page-break -ominaisuus.static/scripts/pareditor.js
sisältää TIMin tekstieditoriin liittyvän koodin. Lisättiin koodi 'Page Break' -painikkeelle.static/scripts/sidebarMenuCtrl.js
sisältää sivumenun AngularJS-kontrollerin. Muokattiin lisäämällä 'Browser Print' -painikkeelle toiminto, joka aktivoi verkkoselaimen tulostustoiminnon.static/templates/parEditor.html
sisältää TIMin tekstieditorin käyttöliittymän kuvauksen. Lisättiin 'Page Break' -painike 'Insert'-välilehdelle.templates/settings.html
on Jinja2-template, joka sisältää TIMin dokumenttiasetusvalikon kuvauksen. Laajennetiin lisäämällä alustavat CSS-asetukset.templates/view_html.html
on Jinja2-template, joka sisältää TIMin perusnäkymän kuvauksen. Lisättiin koodi, joka lataa 'CssPrint.js'-tiedoston.templates/partials/side_menu.html
on Jinja2-template, joka sisältää TIM-ikkunan vasemmassa reunassa näkyvän valikon kuvauksen. Lisättiin 'Browser Print' -painike.
5.2 Toteutusratkaisut
CSS-tulostuksen osalta toteutusratkaisut olivat melko suoraviivaisia. Tulostuksen ulkoasua pystyy kontrolloimaan kirjoittamalla HTML-sivulle liitettyyn CSS-tyylitiedostoon tulostusta varten nk. media query –lohkon. Sen sisään laitetaan ne säännöt, joita halutaan selaimen käyttävän sivua tulostettaessa. Koska TIMin kehityksessä on jo muutenkin käytössä SCSS-niminen CSS-esiprosessori, tarkoitti tämä käytännössä sitä, että kaikki TIMin eri CSS-tiedostot sisällyttävään all.scss
-tiedostoon lisättiin import-rivi uudelle cssPrint.scss
-tiedostolle, joka puolestaan sisältää projektin laatimat tulostustyylit.
Tulostustyylien säätäminen toimiikin tämän jälkeen käytännössä samoin kuin HTML-sivun ulkoasun säätäminen CSS-tyyleillä muutenkin toimii. Suurin osa työstä oli tutkimustyötä liittyen siihen, miten TIMin käyttäjälle näyttämät HTML-dokumentit rakentuvat, ja minkälaisilla CSS-valitsimilla sivun sisällöstä pääsee käsiksi juuri niihin elementteihin, joiden tulostusulkoasua on tarve säätää.
Läheskään kaikki perinteiseen painomateriaaliin liitettävät elementit ja ominaisuudet eivät CSS-tulostuksessa ole mahdollisia. Esimerkiksi sivunumerot sisältävän sisällysluetteon laatiminen on pelkällä CSS:llä mahdotonta, koska HTML-sivut ovat luonteeltaan jatkuvia, ja kaikenlainen tulostettaessa esiintyvä sivutus on vain selaimen rakentamaa pseudotoiminnallisuutta. Niinpä sisällön ei voi sanoa olevan tietyllä sivulla, koska HTML-dokumentissa ei ole käsitettä sivu.
Kaiken kaikkiaan CSS:n avulla on mahdollista tuottaa yksinkertaisesta sivusta (jossa ei vaadita edellämainitun kaltaisia elementtejä) laadukas tuloste. Projektin tavoitteena CSS-tulostuksen osalta olikin riittävän laadukas tuloste, jolla suurimmasta osasta TIM-dokumentteja saa nopeasti selkeän näköisen tulosteen.
6. Tavoitteiden toteutuminen
Projektilla tai ainakin projektiryhmällä oli projektin alkuvaiheissa suuria "käynnistymisvaikeuksia". Lopulta ensimmäisissä palavereissa kaavaillut keskeiset toiminnalliset vaatimukset saatiin toteutettua, ja lisäksi toteutettua tuli myös suuri määrä projektin edetessä vastaantulleista toiveista tai vaatimuksista.
Projektin aihe oli luonteeltaan sellainen, että aluksi yksinkertaisilta vaikuttaneet asiat sisälsivätkin lopulta melkoisen määrän erilaisia reunaehtoja. Niiden johdosta myös rakennettavia tai viilattavia toiminnallisuuksia tuli lopulta melko paljon. Niinpä, vaikka kaikki keskeisimmät vaatimukset saatiin toteutettua, sovittiin toisaalta melkoinen määrä vaatimuksia jatkokehitysideoiksi. Keskeinen haaste projektin onnistumisessa olikin vaatimusmäärittelyn kangertelu, jota käsitellään enemmän sovellusprojektin projektiraportissa [5].
Projektin vaatimukset sekä niiden prioriteetit ja tilat on kuvattu projektin vaatimusmäärittelyssä [2]. Projektissa kirjattiin kaiken kaikkiaan 47 vaatimusta, joista välttämättömiksi merkattiin 11, tärkeiksi 5 ja mahdollisiksi 5 vaatimusta. Jatkokehitysideoiksi kirjattiin projektin vaatimuksista 26 kappaletta.
6.1 Vaatimusten toteutuminen
Projektin aikana toteutettiin kaikki välttämättömiksi, tärkeiksi ja mahdollisiksi merkatut vaatimukset. Jatkokehitysideoiksi sovitut vaatimukset olivat enimmäkseen tulostustoiminnon käytön ja toiminnallisuuden hiomiseen liittyviä vaatimuksia.
TeX-tulostuksen osalta toteutettiin ydintoiminnallisuus eli TIM-dokumentin tulostetiedoston muodostaminen sovelluksella. Jatkokehitykseen sovitut toiminnallisuudet liittyvät enimmäkseen tulostustoiminnon hienosäätöön.
CSS-tulostuksen osalta toteutettiin kaikki keskeiset toiminnot. Toteuttamatta jäivät mahdollisuus kontrolloida tulosteeseen tulevia fonttivärejä sekä tekstialue-elementin (engl. text area) sisällä tapahtuvan sivunvaihdon estäminen.
Myös käyttöliittymän osalta toteutettiin keskeiset vaatimukset. Jatkokehitykseen jäi tulostuksen tarkemman kontrolloimisen toteuttaminen tulostussovelluksen graafisessa käyttöliittymässä.
Yhteensä 8 vaatimusta jäi projektissa ajanpuutteen vuoksi tilaan "toteutettu", vaikka alunperin oli tavoitteena organisoidusti testata kaikki kehitetyt toiminnot. Käytännössä myös kyseisiä toimintoja testattiin niiden kehitysvaiheessa.
6.2 Heikot toteutusratkaisut
Projektin puitteissa kenties kaikkein heikoimpaan asemaan jäi käyttöliittymä. TeX-tulostuksen käyttöliittymädialogi on kyllä yksinkertainen, mutta käytännössä kaikenlainen tulostetiedoston muotoilun muokkaaminen vaatii käyttöliittymän ulkopuolella tapahtuvaa TIM-dokumentin asetusten muokkaamista. Toisaalta kustomointimahdollisuudet ovat käytännössä rajattomat, sillä käyttäjä voi kirjoittaa uuteen TIM-dokumenttiin LaTeXilla vaikka kokonaan oman pohjan tulosteelle. Toisaalta taas peruskäyttäjä ei sellaista varmasti osaa tehdä.
TeX-tulostuksen osalta ne toiminnallisuudet, jotka projektin puitteissa toteutettiin, tuli toteutettua melko järkevin ratkaisuin. Näin voinee sanoa, sillä valikoidut toteutusratkaisut tuntuvat edelleen järkeviltä. Kenties keskeisin hankaluus liittyi oikeastaan siihen, että projektiryhmän kokemattomuuden seurauksena konkreettisen tekemisen aloittamiseen kului turhan kauan aikaa. Niinpä aika loppui lopulta vääjäämättä kesken, jotta viimeisimpiä matalan prioriteetin kehitysideoita olisi voitu toteuttaa.
HUOM! Tätä helpottamaan TIMiin sijoitettuihin valmiisiin template-dokumentteihin ideoitiin muuttujia, joita voi ohjata TIM-tietojärjestelmän makroilla tulostettavan TIM-dokumentin asetusten kautta. Nämä kuitenkin tuli lopulta toteutettua tilaajan puolelta, joten projektiryhmä ei näistä voi kummoista kiitosta kerätä. Makrot ovat kuvattuina sovelluksen käyttöohjeessa [3].
6.3 Sovelluksen jatkokehitysideat
TeX-tulostuksen osalta jatkokehitysideoiksi sovittiin seuraavat vaatimukset:
- Taulukolla tulee olla viivat tulostetiedostossa.
- TIM-dokumenttiin tulee voida lisätä sisältöä, joka tulee näkyviin tulostetiedostoon ainoastaan kohdetiedostomuodon ollessa LaTeX.
- Plugineilla tulee olla reitti, josta sovellus voi käydä kysymässä, mitä LaTeX-paketteja plugin vaatii toimiakseen template-dokumenttiin ladattavan.
- Tulostimen tulee tukea täyttä unicode-merkistöä.
- Käyttäjällä tulee olla mahdollisuus luoda ladattavien kuvien URLeille oma henkilökohtainen whitelist.
- Sovellukselle tulee voida antaa parametri, jolla sovellusta voi pyytää tuhoamaan tulostetiedostojen muodostamista varten lataamiensa kuvien cachen.
- Tulostimelta tulee saada kerralla ulos kaikki dokumentin käännöksessä syntyneet virheet, ei vain ensimmäistä.
- Sovelluksen tulee huomioida lainattuja kappaleita sisältävän TIM-dokumentin muutos, jos jokin lainattu kappale muuttuu.
- Lainatun kappaleen ohessa tulee tulostetiedostossa näkyä merkintä tekijästä.
- Sovelluksen tulee huolehtia automaattisesti muodostettujen tulostetiedostojen poistamisesta palvelimen levyltä.
- Käyttäjällä tulee olla mahdollisuus pakottaa tulostustoiminto tekemään uuden version dokumentin tulosteesta.
- Sovelluksella tulee olla mahdollisuus jonkin tietylle kielelle käännetyn TIM-dokumentin version tulostamiselle.
CSS-tulostuksen osalta jatkokehitysideoiksi sovittiin seuraavat vaatimukset:
- CSS-tulostusta varten luodun Page Break -elementin tulee vaikuttaa myös TeX-tulostukseen.
- CSS-tulostuksessa tulee voida vaihtaa tekstien värejä.
- CSS-tulostuksessa näkyvämmät viivat taulukoille.
- Area-elementin sivunvaihto tulee estää CSS-tulostuksessa.
- CSS-tulostuksessa tulee muodostaa tulostusta varten pluginin paikalle sitä edustava kuva.
- Mozilla Firefoksin sivutuksen ongelmien korjaus. Usean sivun mittaiset koodipluginnit ja ylimääräiset tyhjät sivut.
- Parempi tuki Microsoft Edge verkkoselaimelle.
Käyttöliittymän osalta jatkokehitysideoiksi sovittiin seuraavat vaatimukset:
- Visible-print -tyyli näkymään edit-tilassa.
- Pluginien automaattiselle ajamiselle tulee CSS-tulostuksessa olla käyttäjän valinta.
- Käyttäjällä tulee olla mahdollisuus muuttaa template-dokumentissa määriteltyjen tulostetiedoston muotoilua ohjaavien muuttujien arvoja.
7. Yhteenveto
Timantti-sovellusprojekti kehitti kevään ja kesän 2017 aikana Sovellusprojekti-kurssilla Jyväskylän yliopiston tietotekniikan laitoksen rakentamaan ja ylläpitämään TIM-järjestelmään tulostustoiminnon, jonka avulla TIM-dokumenteista pystyy muodostamaan staattisia tiedostoja (erityisesti PDF-tiedostoja) esimerkiksi tulostus- tai painokäyttöön. Tulostustoiminto toteutettiin kahdella tavalla. Projektissa kehitettiin TIM-sivuston CSS-tyylisääntöjä tulostukseen vaikuttavien sääntöjen osalta ja kehittämällä tulostettavaa dokumenttia esikäsittelevää JavaScript-koodia. Painokelpoisen materiaalin muodostamiseksi kehitettiin sovellus, joka muuntaa TIM-dokumentin Markdown-muotoisen sisällön Pandoc-dokumenttimuuntimella LaTeX-muotoiseksi ja siitä (haluttaessa) edelleen PDF-tiedostoksi. CSS-tulostuksen tavoitteena oli, että selaimen oman tulostustoiminnon muodostama tuloste TIM-dokumentista saatiin mahdollisimman siistin. TeX-tulostuksella pyrittiin puolestaan siihen, että TIM-järjestelmästä saisi vähällä vaivalla mistä tahansa TIM-dokumentista tulostetiedoston, joka kelpaisi sellaisenaan vaikkapa painettavaksi.
Projektin luonteesta ja erityisesti projektiryhmän jäsenten kokemattomuudesta johtuen projektin alussa ilmeni sovelluksen toteutusta suunniteltaessa melkoista hapuilua. Näistä seikoista johtuen sovelluksen vaatimuksia ja erityisesti TeX-tulostuksen toteutustapaa pohdittiin ja muotoiltiin pitkään. Keskeiset vaatimukset saatiin lopulta täytettyä, mutta toisaalta projektin edetessä yllättäen ilmenneet erilaiset tulostuksen ongelmakohdat ja niiden ratkominen saivat aikaan uusia vaatimuksia, joista osa jouduttiin sopimaan projektin jälkeiseen jatkokehitykseen.
Koska peruskäyttäjä ei todennäköisesti ole kovin kiinnostunut tai kykenevä muokkaamaan tulostuksen template-dokumentteja suoraan LaTeXina, projektin loppuvaiheessa suuri osa tästä taakasta poistettiin hyödyntämällä TIMin makro-toimintoa templaten ominaisuuksien (esimerkiksi juuri fonttikoon muuttamisen tai sisällysluettelon sisällyttämisen) säätämisessä. Periaattessa nykyisen kaltaiseen järjestelmään voisi siis hyvinkin rakentaa tulevaisuudessa sen kaltaisen käyttöliittymän, mitä tulostustoimintoon projektin alussa kaavailtiin.
Kaiken kaikkiaan Timantti-sovellusprojektissa onnistuttiin kehttämään TIM-järjestelmään tulostussovellus, joka täyttää keskeiset sille asetetut vaatimukset. CSS-tulostuksen kehityksessä onnistuttiin vaatimusten osalta hyvin. TeX-tulostus kehitettiin siten, että se sallii käytännössä rajattoman tulostetiedoston ulkoasun muokkaamisen. Käytännössä parannettavaa jäi kuitenkin erityisesti käytettävyyden osalta paljon. Ennen kaikkea sovellus toimiikin helposti laajennettavissa olevana runkona jatkokehitykselle.
8. Lähteet
[1] | Miika Kujala, Topi Latva-Salo, Tuomas Porvali ja Marja Similä. Projektisuunnitelma, Timantti-sovellusprojekti. Jyväskylän yliopisto, informaatioteknologian tiedekunta. 2017. |
[2] | Miika Kujala, Topi Latva-Salo, Tuomas Porvali ja Marja Similä. Vaatimusmäärittely, Timantti-sovellusprojekti. Jyväskylän yliopisto, informaatioteknologian tiedekunta. 2017. |
[3] | Miika Kujala, Topi Latva-Salo, Tuomas Porvali ja Marja Similä. Tulostuksen käyttöohje, Timantti-sovellusprojekti. Jyväskylän yliopisto, informaatioteknologian tiedekunta. 2017. |
[4] | Miika Kujala, Topi Latva-Salo, Tuomas Porvali ja Marja Similä. Testaussuunnitelma, Timantti-sovellusprojekti. Jyväskylän yliopisto, informaatioteknologian tiedekunta. 2017. |
[5] | Miika Kujala, Topi Latva-Salo, Tuomas Porvali ja Marja Similä. Projektiraportti, Timantti-sovellusprojekti. Jyväskylän yliopisto, informaatioteknologian tiedekunta. 2017. |
[6] | Ismo Huhtiniemi, Paavo Itkonen, Joonas Lattu, Petteri Palojärvi ja Seppo Tarvainen. Sovellusraportti, Timber-sovellusprojekti. Jyväskylän yliopisto, tietotekniikan laitos. 2016. |
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.