Kurki-järjestelmän jatkokehitys
Pauli
Kujala
Erikoistyö
29.09.1999
Jyväskylän
yliopisto
tietotekniikan
laitos
Tiivistelmä
Jyväskylän
yliopiston matematiikan laitokselle toteutettiin keväällä 1998 työprojektina
WWW-ympäristöön Kurki-kurssikirjanpitojärjestelmä. Työprojektina aikaansaatua
versiota järjestelmästä on edelleenkehittänyt ja korjannut Pauli Kujala.
Lisäksi Kurki on muutettu alkuperäisestä yksikielisestä järjestelmästä
monikieliseksi. Tämä erikoistyöraportti kertoo Kurki-järjestelmän kehityksen
vaiheista aina työprojektin päättymisestä monikielisyyden toteuttamiseen asti.
Avainsanat
Kurki,
kurssikirjanpitojärjestelmä, Kurki-jatkokehitys, Kurki-monikielisyys
Sisältö
2.1. Jatkokehitys syksyllä 1998
2.1.2. Laitteisto- ja ohjelmisto-ongelmia sekä
-uudistuksia
2.1.3. Tenttiin ilmoittautuminen osaksi
Kurki-järjestelmää
2.2. Jatkokehitys keväällä 1999
2.3. Monikielisyyden toteuttaminen kesällä 1999
2.3.1. Syyt monikielisyyden toteuttamiseen
2.3.2. Suunnitelma ja sen toteutus
2.3.3. Parempi suunnitelma ja sen toteutus
2.4. Monikielisyyden tehostaminen syksyllä 1999
2.4.2. Ratkaisu muistinkulutukseen
Tämä
erikoistyöraportti kuvaa Kurki-kurssikirjanpitojärjestelmän kehitysvaiheita
Kurki-työprojektin päättymisestä monikielisyyden toteuttamiseen asti. Tämä
tarkoittaa aikaa kesäkuusta 1998 syyskuuhun 1999.
Kesäkuussa 1998
työprojektin juuri päätyttyä suurimpina ongelmina olivat järjestelmän
käyttöönottamisessa ilmenneet puutteet ja ongelmat. Näihin kuuluivat mm.
salasanatarkistuksen täydellinen puuttuminen. Kesän ja syksyn 1998 aikana
ongelmia ja puutteita korjattiin sekä lisättiin uusia ominaisuuksia, jotka
helpottivat käyttöä. Tuotantokäyttöön Kurki saatiin syksyllä 1998, josta
lähtien se on ollut toiminnassa.
Toukokuussa 1999
nousi esille idea muuntaa Kurki-järjestelmä monikieliseksi. Tähän asti
järjestelmää oli kehitetty pelkästään suomenkielisille käyttäjille, joka rajasi
täydellisesti pois kaikki sellaiset käyttäjät, jotka eivät suomea osanneet.
Kesäkuussa 1999
monikielisyyden toteuttaminen nousi tärkeimmäksi tavoitteeksi. Kesän ja syksyn
1999 aikana toteutus saatiin valmiiksi erinäisistä ongelmista huolimatta.
Syyskuun lopussa vuonna 1999 monikielisyys oli vihdoin toteutettu viimeistä
piirtoa myöten.
Luvussa 2
esitellään jatkokehityksen eri vaiheet yksityiskohtaisemmin. Jaottelu on tehty
vuodenaikojen perusteella, jotka suurin piirtein noudattavat jatkokehityksen
erilaisia isoimpia vaiheita.
Syksyllä 1998
tärkein tavoite oli saada Kurki-kurssikirjanpitojärjestelmä tuotantokäyttöön.
Tietotekniikan laitoksen eriydyttyä matematiikan laitoksesta elokuussa 1998
muutamat tietotekniikan laitoksen luennoitsijat alkoivat käyttää Kurkea
kokeilumielessä.
Ongelmia esiintyi
heti alusta alkaen. Toistaiseksi Kurki-järjestelmään hyväksyttiin
opiskelijoiksi vain ne, joilla oli sähköpostiosoite Jyväskylän yliopiston
ATK-keskuksessa. Nyt opiskelijoiksi täytyi käytännön pakosta hyväksyä myös ne,
joilla ei ollut tunnusta ATK-keskuksessa. Aluksi opiskelijoiden
sähköpostiosoitteista hyväksyttiin vain .jyu.fi-loppuiset, mutta edelleen käytännön pakosta myös
tästä luovuttiin syksyn aikana. Tämän jälkeen opiskelijat voivat siis käyttää
mitä tahansa kelvollista sähköpostiosoitetta.
Myös opettajan
käyttöliittymän puolella esiintyi ongelmia. Työprojektin aikana opettajiksi
hyväksyttiin kaikki ne, joilla oli tunnus matematiikan laitoksen tarzan.math.jyu.fi-palvelimella. Tämä tuotti ongelmia
tietoturvan suhteen, koska ko. palvelimella on lukuisa määrä myös tavallisia opiskelijatunnuksia.
Näillä ei ole oikeutta päästä Kurki-järjestelmän opettajan käyttöliittymään.
Ongelma ratkaistiin sillä, että käyttöoikeuden omaavista opettajista
muodostettiin lista, ja vain tällä listalla olevat pääsevät kirjautumaan
opettajan käyttöliittymään.
Laitteisto- ja
ohjelmistoepäyhteensopivuudet muodostivat syksyllä 1998 osan ongelmista.
Kurki-palvelin jouduttiin mm. asentamaan täysin uudestaan parikin kertaa
syys-lokakuun aikana. Windows NT:n korjauspakettien toimimattomuus NT
Serverissä olivat jatkuva ongelma. Näiden lisäksi NT Server Option Packin
käytössä oli ja on jatkuvia ongelmia. Sitä jouduttiin kuitenkin käyttämään,
koska NT:lle ei löydetty kunnolla toimivaa SSL-salauksen sisältävää
WWW-palvelinta. Option Packiin sisältyvän IIS:n eli Internet Information Server
–WWW-palvelimen toimivuus oli välillä suorastaan surkea.
Ajan myötä
ongelmat kuitenkin ratkottiin, vaikka parempaa WWW-palvelinta etsittiinkin koko
ajan (mm. Unix-maailmasta tuttu Apache on edelleen harkinnan alla – siitä ei
ole kuitenkaan vielä olemassa kunnollista Win32-versiota, jonka kanssa Borland
IntraBuilder –WWW-kehitysympäristö toimisi).
Ei myöskään sovi
unohtaa Borlandin IntraBuilderin aiheuttamia ongelmia. Vanhana, jo tukensa
menettäneenä tuotteena se ei ole enää sovelias WWW-käyttöliittymien tekoon.
Vaikka syksyllä 1998 siitä vielä ilmestyikin uusi päivitys – kaikessa
hiljaisuudessa –, se ei toiminut NT Option Packin IIS:n kanssa kunnolla, joten
päivityksestä ei ollut mitään hyötyä Kurki-järjestelmän kannalta.
Lähes ainoa
positiivinen uudistus syksyllä 1998 oli se, että Kurki-järjestelmää varten
hankittiin uusi, tehokkaampi ja nopeampi palvelin. IntraBuilderin muodostama
ohjelmakoodi on tehotonta tulkattavaa skriptikieltä, joten käyttäjien
lisääntyessä myös järjestelmän käyttö hidastui, ja entisen Kurki-palvelimen
tilalle piti hankkia suorituskykyisempi palvelin. Uusi palvelin otettiin
käyttöön marraskuussa 1998, kun yllämainitut ongelmat NT Serverin, Option
Packin jne. kesken oli saatu ratkaistua.
Sähkökatkosten
varalta Kurki-palvelin liitettiin ennen joulua vielä UPS:n (Uninterruptible
Power Source) taakse, jotta mahdolliset sähkökatkot eivät tuhoa tietoa.
Juuri ennen
joulua Kurki-järjestelmään integroitiin tenttiin ilmoittautuminen WWW:n kautta.
Tuotantokäyttöön tämä otettiin heti tammikuussa 1999 sekä matematiikan
laitoksella että tietotekniikan laitoksella.
Kevät 1999 lähti
liikkeelle työn merkeissä. Kurssien päättyessä joulukuussa 1998 ja tammikuussa
1999 uusia toteutuskelpoisia ideoita tuli esille. Esimerkiksi opintosuoritusten
siirto Kurki-järjestelmästä suoraan JOREen (Jyväskylän yliopiston
opiskelijarekisteri) oli (ja on edelleen) esillä.
Opettajien
useimmiten käyttämät toiminnot – opiskelijoiden tietojen päivitys ja raporttien
teko – miellettiin liian hitaiksi käyttää normaalilla sisäänkirjautumisella.
Tämän takia opettajan käyttöliittymään lisättiin pika-aloitusominaisuus, joka
käyttää hyväkseen selainten tarjoamia ns. kuitteja (engl. cookie). Näin
sisäänkirjautuminen saatiin nopeaksi sekä tietojen päivitykseen että raporttien
tekoon. Myös normaali sisäänkirjautuminen opettajan käyttöliittymän
päävalikkoon asetettiin haluttaessa käyttämään kuittia, joten myös tässä
nopeusetu oli huomattava.
Opastustekstit
olivat pääosiltaan vanhentuneita, joten keväällä oli opastuksen päivityksen
aika. Opastuspäivitys saatiin suoritettua loppuun maaliskuussa 1999.
Kesän tenttejä
varten tenttiin ilmoittautumiseen piti lisätä mahdollisuus käyttää normaalista
kolmesta työpäivästä poikkeavaa ilmoittautumisaikaa. Tämän toteuttaminen ja
testaaminen saatiin päätökseen maaliskuun loppupuolella. Samaan aikaan kaikki
matematiikan, tietotekniikan ja tietoliikenteen kesän tentit oikeine
ilmoittautumisaikoineen saatiin lisättyä Kurki-järjestelmään.
Toukokuussa 1999
idea monikielisyydestä nousi esille. Kurki-järjestelmä oli tähän asti ollut
suunnattu pelkästään suomenkielisille käyttäjille, mutta koska
yliopistomaailmassa on paljon myös pelkästään englannin kieltä taitavia, oli
Kurki-järjestelmänkin pystyttävä tarjoamaan palveluksiaan ulkomaalaisille
käyttäjille.
Osasyy
monikielisyyden toteuttamiseen oli myös se, että Kurki-järjestelmästä oli
kiinnostunut myös Jyväskylän yliopiston kielikeskus. Kielikeskus aikoi siirtää
oman ilmoittautumisjärjestelmänsä WWW-pohjaiseksi, joten Kurki olisi ollut
tähän käyttöön erinomainen väline. Vaatimuksena oli se, että Kurki olisi
käytettävissä vähintään suomeksi ja englanniksi.
Valitettavasti
(tai sitten ei) kielikeskus päätti kuitenkin pysyä entisessä systeemissään,
koska Kurki-järjestelmän liittäminen osaksi entistä järjestelmää olisi tuonut
liikaa töitä kielikeskuksen ATK-ylläpitohenkilökunnalle. Lisäksi ATK-keskus ei
antanut lupaa tehdä suoraan Ingres-tietokannan päälle WWW-käyttöliittymää,
joten siirto kielikeskuksen WWW-järjestelmän ja Ingres-tietokannan välillä
olisi pitänyt hoitaa siirtotiedostoilla. Järjestelmä ei siis olisi ollut enää
reaaliaikainen, eikä luultavasti enää kovin varmatoiminenkaan.
Monikielisyyden
toteuttaminen lähti liikkeelle suunnitelmasta. Sen mukaan Kurki-järjestelmän
käyttämään tietokantaan lisätään Kielet-taulu, josta löytyvät kaikki käytössä
olevat kielet. Näiden lisäksi sekä opettajien että opiskelijoiden henkilötietoihin
lisätään Kielet-tauluun viittaava kieli-indeksi. Suunnitelman mukaan varsinaiset
käännöstekstit sijoitetaan kunkin lomakkeen yhteyteen samannimiseen .LNG-päätteiseen tiedostoon.
Käännöstekstit
haetaan lomakkeiden teksti-, painike- jne. komponentteihin funktiolla, jolle
viedään parametrina lomake, funktion nimi, komponentin nimi ja tekstitunniste
(samassa funktiossa voidaan tarvita monta eri tekstitunnistetta eli monta eri
käännöstä samalle komponentille) sekä mahdolliset parametrit sisältävä
taulukko.
Käännöstyö
aloitettiin siis keräämällä jokaisesta lomakkeesta komponenttien tiedot, sekä
tarvittavat käännöstekstit. Tarvittavat tiedot näistä muotoiltiin sopivaan
formaattiin, jota myös eo. käännösfunktio osaa käyttää.
Käännöstekstien
rutiininomaisessa keräämisessä ja suomenkielisten tekstien kääntämisessä
englanniksi kului aikaa noin kuukausi. Tämä olikin suurimman työmäärän vaatima
osio monikielisyyden toteuttamisessa.
Ensimmäisessä
suunnitelmassa oli ongelmia. Jos käännöksen tunnistetiedoissa oli
kirjoitusvirhe tai koko käännöstä ei löytynyt lainkaan käännöstiedostosta,
käyttäjälle tulostettiin virheilmoitus löytymättömästä käännöksestä.
Alkuperäistäkään käännöstä ei voitu siis tässä tapauksessa käyttää, koska sitä
ei oltu viety parametrina käännösfunktiolle.
Huomattavasti
parempi lähestymistapa ongelmaan olikin viedä alkuperäiskielinen – yleensä siis
suomenkielinen – käännösteksti parametrina käännösfunktiolle, joka etsii sitä
vastaavan käännöksen oikealla kielellä. Jos käännöstä ei löytynyt, palautettiin
alkuperäiskielinen käännösteksti ja asetettiin lokitiedostoon tieto
löytymättömästä käännöksestä. Näin kaikissa tilanteissa oli aina käytettävissä
jonkinlainen käännösteksti, vaikka se ei välttämättä ollutkaan oikeakielinen.
Vaikka kaikki
käännöstekstit olikin jo kerätty ja käännetty englanniksi, ei tämä työ ollut
suinkaan mennyt hukkaan. Käännöstiedostojen sisältämien rivien formaattia
hiukan muokkaamalla saatiin helposti aikaan formaatti, jota uusi versio
käännösfunktiosta voi lukea. Lisäksi ”yleiskäyttöiset” käännöstekstit (kaikki
muut kuin lomakkeen alustusvaiheessa tarvittavat käännöstekstit) siirrettiin
omaan tiedostoonsa, joten samaa käännöstä voitiin käyttää useassa eri paikassa.
Varsinainen
käännöstiedoston formaatti muotoutui lopulta sellaiseksi, että ensimmäisenä oli
ns. peruskielinen käännös, joka vietiin parametrina käännösfunktiolle ja jota
etsittiin käännöstiedostosta. Tämän jälkeen olivat lueteltuina kaikki
käännökset, kukin omalla rivillään varustettuna kielilyhenteellä. Näiden
jälkeen oli uusi peruskielinen käännös, sen erikieliset varsinaiset käännökset
jne. Jopa eri kielten keskinäisellä järjestyksellä ei ollut väliä.
Tämä versio
monikielisestä Kurki-järjestelmästä toimikin sitten jo kunnolla, ja se voitiin
asettaa tuotantokäyttöön heinäkuussa 1999 juuri ennen Kurki-ylläpitäjän
kesälomaa.
Vaikka
olemassaoleva monikielinen versio Kurki-järjestelmästä toimikin periaatteessa
hyvin, ei se käytännössä toiminut kovinkaan nopeasti. Tämä johtui siitä, että
käännösfunktio oli toteutettu IntraBuilderin tehottomalla skriptikielellä, joka
etsi oikeaa käännöstekstiä tiedostosta rivi kerrallaan.
Ensimmäinen
ratkaisu oli ladata koko käännöstiedosto muistiin. Hitaus ei johtunut
kuitenkaan siitä, että tiedostoa luettiin rivi kerrallaan levyltä, joten
ongelma oli ja pysyi. Uutena haittana tuli se, että
IntraBuilder-palvelinagenttien vaatima muistimäärä kasvoi vähitellen, koska
jokaista yhteyttä varten ladattiin käännöstiedosto muistiin. Käännöstiedoston
koko oli noin 50 kilotavua, joten muutaman sadan käyttäjän jälkeen muistia oli
kulunut jo kymmeniä megatavuja.
Ratkaisu
hitauteen löytyi elokuussa sillä, että muistissa olevasta taulukkomuotoisesta
käännöstiedostosta etsittiin ensin oikea paikka ja vasta siitä alkaen etsittiin
entisellä algoritmilla käännöstekstiä. Haluttu teksti löytyi luonnollisesti
yhden tai korkeintaan muutaman rivin tutkimisella. Muistinkulutus kuitenkin
pysyi entisenlaisena.
Seuraavaksi oli
paneuduttava muistinkulutusongelman ratkaisuun. Kaikki IntraBuilderin tarjoamat
keinot oli jo käytetty, joten ongelma täytyi ratkaista jollakin muulla tavalla.
Optimaalinen
ratkaisu olisi se, että kaikki yhteydet käyttäisivät vain yhtä muistissa olevaa
käännöstiedostoa. Tähän päästiin sillä, että käännöksen hakeva funktio ja
käännöstiedoston lataava funktio kirjoitettiin C-kielellä Windowsin
DLL-tiedostoksi. DLL:n käyttöön ladattiin siis vain yksi globaali
käännöstiedosto erityiseen taulukkorakenteeseen, joka ei ottanut kantaa siihen,
montako eri kieltä oli käytössä.
Näin saatiin
aikaan sekä algoritmisesti nopea että muistinkulutukseltaan tehokas ratkaisu
käännöstekstien hakemiseen. Käännös-DLL otettiin lopulta käyttöön syyskuun
lopussa 1999. Samalla saatiin päätökseen koko Kurki-järjestelmän monikielisyysprojekti.
Opastustekstit
olivat luonnollisesti pelkästään suomen kielellä, joten nekin piti kääntää
englanniksi. Tämä tapahtui elokuussa 1999 muun käännöstyön ohella.
Tässä
erikoistyöraportissa on kuvattu Kurki-järjestelmän kehitystä kesästä 1998
syksyyn 1999. Työprojektin aikana toteutettua versiota Kurki-järjestelmästä on
kehitetty ja laajennettu, joten erinäisiin virheisiin ja ongelmiin on
jatkokehityksen aikana törmätty. Useimmista niistä on kuitenkin selvitty
ennemmin tai myöhemmin.
Haluan kiittää
kaikkia niitä, jotka ovat esittäneet uusia toteutuskelpoisia ideoita
Kurki-järjestelmään sekä kaikkia niitä, jotka ovat Kurki-ongelmien esiintyessä
ottaneet yhteyttä Kurki-ylläpitäjään – ilman tietoa ongelmista ei niitä voida
korjata.
Erityisesti
haluan kiittää Vesa Lappalaista ideoista ja suunnitelmasta monikielisyyden
toteuttamisvaiheessa.