Sisällysluettelo

Esitutkimusraportti
Esitutkimusraportti

Esitutkimusraportti

1. Yhteenveto esitutkimuksesta

Esitutkimuksen tarkoituksena oli selvittää, onko järjestelmä toteutettavissa ja jos, niin miten. Lisäksi tarkoituksena oli asettaa järjestelmän vaatimukset tärkeysjärjestykseen ja pohtia sen kriittisiä osa-alueita.

Tarkensimme GIST-järjestelmän rajausta (kohta 2), priorisoimme järjestelmävaatimukset (kohta 2.1) ja suunnittelimme järjestelmän toteutusperiaatteen entistä tarkemmin. Tässä esitetty järjestelmäarkkitehtuuri (kohta 4) jakaa ongelman pienempiin osaongelmiin, jolloin työnjako on helppoa.

Projekti on varmasti toteutettavissa, jos ohjelman ominaisuudet valitaan kohdassa 2 esitetyn tärkeysjärjestysjaon kohdasta 1. Projekti on todennäköisesti toteutettavissa, vaikka kaikki luetellut ominaisuudet otetaan mukaan ohjelmaan. Järjestelmän monipuolisuutta rajoittaa etupäässä aika.

Harkitsimme projektin toteuttamiseen erilaisia työkaluja (kohdat 5, 7 ja 8), joista tässä raportissa on esitelty lähinnä valituiksi tulleet.

2. Mitä GIST on ja mitä se ei ole

GIST on WWW-palvelimen käyttötiedon visualisointityökalu. Sillä pystytään esittämään palvelimen käyttötiedot graafisessa muodossa, jolloin lukijoiden lukutottumukset saadaan esiin lokitietomassasta. GISTin käyttäjä pystyy määrittämään haettavalle käyttötiedolle haluamiaan reunaehtoja, jolloin käyttötietoa voidaan rajata ja suodattaa tiettyjen piirteiden esiin saamiseksi.

GIST ei osaa analysoida käyttötietoja eikä suorittaa tilastollista laskentaa.

2.1. Järjestelmän vaatimukset ja niiden tärkeysjärjestys

GIST osaa:

  1. - lukea käyttötietoa tekstitiedostoista
    - lukea käyttötietoa objektitietokannasta
    - luoda käyttötiedon pohjalta WWW-browserilla luettavassa muodossa olevia siirtymägraafeja reaaliaikaisesti
    - rajata graafisen esityksen käyttäjän antamien ehtojen mukaan
  2. luoda käyttötiedon pohjalta WWW-browserilla luettavassa muodossa olevia aikasarjoja ja piirakkadiagrammeja reaaliaikaisesti
  3. olla helppokäyttöinen ja kaunis katsella.

2.2. Visualisointitekniikat

GISTin tärkein tehtävä on siirtymägraafien piirtäminen. Siirtymägraafilla kuvataan lukijoiden siirtymistä seurattavan palvelun (OtaOnline) sisällä sivulta toiselle. Graafissa solmut kuvaavat sivuja ja solmujen väliset kaaret lukijoiden siirtymiä sivulta toiselle. Siirtymien määrä esitetään kaaren värillä tai paksuudella. Siirtymägraafin piirtämisessä vaikein ja olennaisin osa on selkeän graafin generointi annetusta tiedosta. Käyttäjä voi määrittää visualisoitavalle tiedolle rajat, esimerkiksi käyttäjäryhmät, ajanjakson tai tietyt graafin solmut. Jos resursseja riittää, toteutamme myös piirakkadiagrammien ja aikasarjojen piirtämisen. Aikasarjoilla kuvataan eri käyttäjäryhmien hakujen ja lukijoiden maaran sekä lukukertojen pituuden kehittymistä. Piirakkadiagrammeilla kuvataan valitun käyttäjäryhmän demografisia tietoja tai käyttäjien aktiivisuutta.

2.3. Kriittiset osatehtävät

GISTissä ei näytä olevan osa-aluetta joka olisi ylen helppo toteuttaa tai joka ei olisi kokonaisuuden kannalta ehdottoman tärkeä. Erityisesti voitaisiin kuitenkin mainita kolme paljon työtä vaativaa aluetta: Tekstimuotoisen käyttötiedon analysointi on raskas ja tärkeä tehtävä. Siirtymägraafien luominen datasta on vaativaa. Käyttöliittymän toteuttamisessa Java-ohjelmointikielellä on myös haastetta.

3. Visualisointityökalujen käyttäjäprofiili

GIST visualisointityökalut ovat käytössä suhteellisen raskaat tietokantahakujen takia, joten niitä ei ole tarkoitettu ensisijaisesti kaikille palvelun lukijoille, vaan lähinnä ylläpidon ja palvelun tarjoajan, ja ylipaansa kaikkien, joita kiinnostaa lukijoiden liikkeet, työkaluksi. Toinen syy on tietysti käyttäjien tietoturva, sillä vaikkakaan työkalussa ei tule olemaan mahdollista seurata yksittäisen lukijan liikkeitä, on rajaukset mahdollista tehdä melko tarkasti esim. lukijaryhmän ja iän mukaan. Palvelun tarjoajaa, kuten OtaOnlinessä Aamulehteä, kiinnostaa varmasti mahdollisimman reaaliaikainen tieto palvelun käytöstä.

Palvelun (OtaOnline) käytöstä eli toisin sanoen lukijoiden intresseistä kiinnostuneita ovat luonnollisestikin tiedon tarjoajat ja mahdolliset mainostajat. Tiedon tarjoaja haluaa tietää, millainen tieto on kiinnostanut lukijoita, miten tieto kannattaa jäsentää, jotta sen lukeminen on vaivatonta sekä millainen tieto kiinnostaa tietynlaisia lukijoita. Mainostajia kiinnostaa luonnollisestikin, onko mainos hyvällä paikalla.

4. Järjestelmän rakenne ja toiminta yleisellä tasolla

Järjestelmän käytössä olennaisena osana on WWW. Käyttäjä hakee selaimellaan palvelimesta käyttöliittymänä toimivan Java-appletin ("GUI"; Java on esitelty tämän raportin kohdassa "Java"), jota ajetaan käyttäjän koneessa ("client"). Käyttäjä antaa käyttöliittymällä haluamansa esitystavan ja hakuehdot, jotka sitten siirretään hakuparametreina ("parameters") palvelimelle ("server").

Kaikki visualisointityökalujen käyttämä tieto tulee WWW-palvelimen tuottamasta tekstimuotoisesta lokitiedostosta. Mikäli tietoa ei ole siirretty tietokantaan, käytetään modulia joka hakee tarvittavat tiedot suoraan tekstitiedostoista ("text interface"). Muuten tieto haetaan tietokannasta ("DB interface"). Järjestelmän käyttämä hakutapa on konfiguroitavissa. Hakutapa kuitenkin piilotetaan varsinaisilta tiedonkäsittelyohjelmilta ("PAGR", "TDIA" ja "UPIE") erillisellä rajapinnalla ("data interface").

GIST käyttää rajoitusten määrittelyssä ja tiedon esittämisessä hyväkseen tutkittavan palvelun loogisesta rakenteesta tarjolla olevaa tietoa. Tämä tieto haetaan samasta tietokannasta kuin käyttötietokin tai tarvittaessa muualta ("metaknowledge interface").

Muodostettuaan annettujen rajoitusten mukaisen esityksen valittu tiedonkäsittelyohjelma palauttaa tiedot ("display data"; esim. siirtymägraafia varten solmujen koordinaatit ja niiden välisten siirtymien suunnat ja vahvuudet) takaisin käyttöliittymälle, joka esittää ne omassa ikkunassaan. Nämä erilliset tiedonesitysikkunat sisältävät valinnat esitettävän tiedon rajaamiseen.

Järjestelmä on useimpien WWW-palveluiden tapaan tilaton. Käyttäjän halutessa laajentaa edellisen haun hakuehtoja suoritetaan uusi haku kokonaisuudessaan palvelimelta - niin käyttöliittymä kuin palvelinkaan eivät siis pidä kirjaa jo suoritetuista hauista.

4.1. Rakennetieto

Termillä tarkoitetaan tutkittavan järjestelmän loogisesta rakenteesta tarjolla olevaa tietoa - mitkä sivut muodostavat yhdessä käsitteellisen kokonaisuuden ja miten nämä kokonaisuudet suhtautuvat toisiinsa. OtaOnlinen tapauksessa rakenne on vielä täsmällisesti määrittelemättä, mutta se tullee oleman alla olevassa kuvassa esitetyn kaltainen.

4.2. Siirtymägraafi ja sen esittäminen

GIST on pääasiassa tarkoitettu esittämään luettujen sivujen välisten siirtymien muodostamaa graafia, jonka OtaOnlinen tapauksessa oletetaan olevan melko monimutkainen. Realistisilla hakuehdoilla tuloksena syntyvän graafin solmujen (sivujen) ja kaarien (siirtymien) lukumäärä voi kasvaa hyvinkin suureksi. Monimutkaisten graafien solmujen ja kaarien automaattinen sijoittelu niin, että lopputulos on selkeä ja silmää miellyttävä, on kaikkea muuta kuin triviaali ongelma - ongelma, joka on graafien poikkitieteellisen hyödyllisyyden johdosta saanut paljon akateemista ja kaupallista huomiota osakseen.

Tarjolla olevista valmiista (toteutetuista) graafinpiirtoalgoritmeista osa hoitaa tehtävänsä erittäin hyvin. Valitettavasti ne ovat kaikki kaupallisia tai ainakin rajoitetussa jakelussa (esim. AT&T:n dot). Harvat vapaassa jakelussa olevat toteutukset ovat joko liian yksinkertaisia (esim. GraphPlace) tai sitten ne haluavat välttämättä piirtää lopputuloksen itse käyttäen (useimmiten) XMotifia (esim. daVinci).

GIST:n on tarkoitus käyttää hakujen rajaamisessa hyväkseen myös tutkittavan palvelun tarjoamaa rakennetietoa. Rakennetietoa käytetään myös tietoa esitettäessä: haun tuloksena löydetyt solmut järjestetään palvelun rakenteen mukaisiin ryhmiin ja paikkoihin, jonka jälkeen piirretään niiden väliset kaaret. Tämän toivotaan helpottavan graafin hahmottamista ja olennaisten siirtymien löytämistä. Alla olevassa kuvassa on hahmoteltu miltä jonkun haun jälkeinen siirtymägraafi voisi näyttää.

Siirtymägraafin pohjana olevaksi topologiaksi voidaan ajatella useita eri vaihtoehtoja, alla olevassa kuvassa esimerkkeinä puu- ja tähtitopologiat. Alustavasti toteutettaneen tähtitopologia (oikealla), koska sen toivotaan jakavan siirtymäkaaret tasaisemmin pysty- ja vaakakaariin.

5. Käyttöliittymä

5.1. Java

Java on tulkattava, objektiorientoitunut ohjelmointikieli, joka on suunniteltu käytettäväksi mm. World Wide Webissä. Käyttöliittymä toteutetaan Java-ohjelmointikiellä ja sitä ajetaan WWW-browserilla, joka hallitsee Javan, esim. Netscape 2.0:lla. Itse asiassa kyseinen Netscapen versio on tällä hetkellä ainoa joka tukee Javan API:n 1.0 Beta - versiota. Tämä versio on jäädytetty, eli sille ohjelmoidut sovellukset pitäisivät olla mahdollisimman yhteensopivia Java:n myöhempien versioiden kanssa. Sinänsä GIST ei ota kantaa siihen, millä browserilla sitä käytetään.

HTML:ään on lisätty tag <APPLET>, jonka nähdessään WWW-client hakee palvelimelta kyseisen ohjelman standardilla http-protokollalla ja suorittaa sen. Java-ohjelmia voi ajaa tämän applet-tilan lisäksi myös application-tilassa ilman WWW-browseria, mutta se ei ole tämän projektin puitteissa mielenkiintoista.

Java on C++:n pohjalta suunniteltu, joten ryhmän jäsenet omaksuvat sen helposti. C++:n verrattuna huomattavaa on mm. C++:n ei-objektiorientoituneiden ominaisuuksien puuttuminen.

Projektin kannalta Javan kiinnostavia ominaisuuksia ovat laiteriippumattomuus ja helppo tapa hajauttaa järjestelmää. Koska Java on myös suunniteltu käyttöliittymien kieleksi, on siinä sisäänrakennettuna paljon sellaisia ominaisuuksia, joita tässä projektissa tullaan tarvitsemaan. Siinä on esimerkiksi perusgrafiikkaluokka.

Java-kielinen ohjelma käännetään palvelimelle ns. tavukoodiksi, jollaisena se siirretään clientille. Beta-API:n kääntäjää ei tämän dokumentin kirjoittamisen aikaan ole kuin SUN:lle, mutta se tulee saataville vuoden 1995 aikana ainakin Win 95/NT:lle.

5.2. Käyttöliittymän näköishahmotelma

Käyttöliittymän näköishahmotelma osoittautui epärealistiseksi toteuttaa tässä vaiheessa, se kuuluu enemmänkin systeemisuunnitteluun. Seuraavassa kuitenkin kirjallista hahmotelmaa asiasta.

Käyttöliittymä siis toteutetaan Java-kielellä, tosin ryhmä on jättänyt vielä pienen varauksen Java-teknologian valmiusasteesta johtuen, eli systeemi toteutetaan tarvittaessa pelkällä HTML:llä. Tällöin graafit täytyy siirtää esim. kuvina.

Käyttöliittymässä on kolme pääosaa: hakukriteerien asetus, rakennetieto eli palvelun looginen rakenne graafina, ja haun tuloksena saatava graafi, joka voi olla joko siirtymägraafi, piirakkagraafi tai aikasarja.

Nämä kaikki voidaan esittää omissa ikkunoissaan, tosin luultavasti hakukriteerit ja rakennetieto tullaan esittämään samassa ikkunassa.

5.3. Käyttöliittymän hakukriteerit

Käyttöliittymässä voi määrittää hakukriteereitä useista eri asioista. GIST pystyy käytännössä tarjoamaan ne hakukriteerit, jotka löytyvät tietokannasta. Näitä ovat lukijaryhmä (organisaatio), ikä, sukupuoli, rakennetieto, rakennetietograafi palvelun loogisesta rakenteesta, noodit joiden kautta ollaan kuljettu. Esimerkiksi organisaatio tarkoittaa OtaOnlinessä tällä hetkellä jotain seuraavista:

5.4. Kommunikaatio Java- ja C++-modulien välillä.

Käyttöliittymä on ainoa GISTin osa, joka on toteutettu Javalla. Ohjelman muut osat kirjoitetaan C++:lla. Java ja C++-modulit viestivät keskenään WWW-palvelimen välityksellä http-protokollan mukaisesti.

Käyttöliittymä voi kysyä palvelimelta joko rakennetietoa koko palvelusta tai graafia jollain hakuehdoilla. Nämä toteutetaan esimerkiksi eri cgi-bin-ohjelmilla.

Viestintä on synkronista. Käyttöliittymä pyytää palvelinta käynnistämään tietokannasta haun ja antaa samalla kerralla kaikki hakukriteerit ja jää odottamaan vastausta. C++-modulit palvelimen päässä suorittavat haun ja suunnittelevat graafin sen pohjalta ja lähettävät graafin piirtämiseen tarvittavan datan käyttöliittymälle myöhemmin sovittavassa formaatissa. Joukossa välitetään myös jonkin verran rakennetietoa, jotta käyttöliittymä pystyy tekemään käyttäjän niin halutessa yksinkertaisia modifikaatioita graafiin, esim. poistamaan siirtymägraafista polut, joita on käytetty vain vähän. Muutoin tällaiset yksinkertaiset muutokset olisivat hitaita, sillä palvelin joutuisi tekemään haun koko tietokannasta hiukan muutetuin ehdoin.

5.5. Cgi-bin

CGI, eli Common Gateway Interface on WWW-palvelinten yhteinen tapa käynnistää palvelimella olevia ohjelmia ja siirtää dataa niiden ja WWW-clientin välillä. GIST:ssä sitä käytetään välittämään Java-käyttöliittymältä hakuehtoja moduleille, jotka lukevat tietokantaa ja suunnittelevat graafeja, jotka taas piirretään käyttöliittymän avaamissa graafi-ikkunoissa..

WWW-palvelimelle on määritelty mitkä URL:it käynnistävät ohjelmia. Voidaan määritellä, että kaikki /cgi-gist/ polun URLit käynnistävät ohjelman, jonka sijainti on joku tietty hakemisto tiedostojärjestelmässä, esim. ~gist/script. Tällöin URL /cgi-gist/gistscript käynnistää hakemistossa ~gist/script olevan ohjelman gistscript.

Cgi-bin-ohjelman voi kirjoittaa millä tahansa ohjelmointikielelle, joka tarjoaa rajapinnat standard inputiin ja outputiin ja komentoriville. Yleinen käytäntö on kirjoittaa pieni shell-skripti, joka ajaa tarvittaessa esim. C++-ohjelmia. On tietenkin täysin mahdollista kirjoittaa koko ohjelma esim. GIST:ssä käytettävällä C++:lla.

Cgi-bin ohjelma saa clientilta dataa komentorivin ja standard inputin kautta. cgiparse-ohjelma jäsentää datan ja sijoittaa sen ympäristömuuttujiin. Esim. jos WWW-sivulla on valintaruutu, joka on määritelty seuraavasti:

<FORM method="POST" action="/cgi-gist/gistscript">
<INPUT type="CHECKBOX" name="check1" value="1">
</FORM>,

saa gistscript ajettuaan cgiparse:n checkboxin arvon (0 tai 1) ympäristömuuttujassa check1. Cgiparse on WWW-palvelimen osa.

Cgi-bin-ohjelma vastaa clientille yksinkertaisesti kirjoittamalla standard ouputiin, joka välittyy suoraan muuttumattomana clientille. GIST:ssä tätä hyödynnetään mm. lasketun graafin objektien paikkojen ja tyyppien välittämiseen käyttöliittymälle.

5.6. WWW-palvelimet

Tärkeimmät WWW-palvelimet ovat CERN:in ja NCSA:n httpd:t. Molemmat tukevat cgi-bin-standardia, joten sen suhteen ei tule ongelmia. OtaOnlinessä GIST voi käyttää OtaOnlinen omaa WWW-palvelinta otaonline.hut.fi, portissa 80. Tosin se ei ole mitenkään välttämätöntä.

5.7. VRML ja kolmiuloitteinen visualisointi

Tutkimme myös VRML:n (Virtual Reality Modeling Language, kolmiulotteisen maailman mallinnuskieli mm. WWW:iin) käyttöä projektissa, mutta tulimme siihen tulokseen, että saavutetut edut ovat pienet verrattuna käytön vaikeutumiseen. Nykyisillä välineillä kolmiulotteisen maailman tutkiminen ei ole kovin kätevää, etuja saavutettaisiin jos käyttäjällä olisi käytössä datakypärää tukeva browseri.

6. Seurattavan palvelun (OtaOnline) tarjoamat tiedot

6.1. Lokitiedot

Olemme saaneet yhteistunnuksen (gist) OtaOnlinen palvelimille (max.hut.fi ja moritz.cs.hut.fi). Http-palvelin on koneella max.hut.fi ja lokitiedostot sijaitsevat hakemistossa /usr/local/etc/httpd/logs/max, johon meilla on nyt lukuoikeudet. Lokitiedostot ovat nimeltään access_log ja referer_log.

6.2. Lokitiedostojen sisältö

access_log

bela224a.bel.vtt.fi - ph [25/Sep/1995:12:10:45 +0200]
"GET /oo/ilt/etusivu.html HTTP/1.0" 304 0

mikroliitos7.hut.fi - tnykanen [25/Sep/1995:12:10:45 +0200]
"GET /oo/ilt/vak/ilt_170.gif HTTP/1.0" 304 0

referer_log

http://otaonline.hut.fi/oo/ilt/onil2509_uuLaina.html
-> /oo/ilt/uutiset.html
http://otaonline.hut.fi/oo/ota/sah/ulkomaat_h.html
-> /oo/ota/sah/ulkomaat.h= tml

Näistä meidän ei ole kuitenkaan tarkoitus käyttää referer_log:ia, koska lokitietojen vastaavuuksien etsiminen on työläämpää kuin vastaavan tiedon tuottaminen pelkästään access_log:ia analysoimalla ja sen lisäksi vielä referer_log:ssa ei ole tietoa kaikista siirtymistä.

7. Tietokanta

Projektissa ollaan ottamassa kayttoon Ode 4.0, joka on AT&T:n ilmainen objektikanta. Myöhemmin tulee mahdollisesti käyttöön jokin kaupallinen tietokanta, joista O2 on tällä hetkellä vahvimmassa asemassa, mutta ei suinkaan vielä varma valinta. Dokumentaatioon tutustumisen perusteella Ode ja O2 poikkeavat toisistaan siinä määrin, ettei tässä vaiheessa ole järkevää tehdä kovin yksityiskohtaista suunnitelmaa tietokantaa käyttävästä ohjelman osasta. Tietokanta sijoitettaneen samalle koneelle http-palvelimen kanssa.

7.1. O2 pidemmälle viety tuote kuin Ode

Ode on hyvin integroitu C++:aan ulkoasultaan ja siinä ei ole niin voimakkaasti eristetty toteutusta yksityiskohdista. O2 on kyselykielensä ulkoasun puolesta varsin samankaltainen SQL:n kanssa ja on kaikkien lisäosiensa kanssa pikemminkin ohjelmointi-ympäristö. O2 tukee myös useampaa arkkitehtuuria kuin Ode.

7.2. Ode

Joukkoja ei vielä tässä versiossa tueta, joten kyselyjen tulokset täytyy kerätä silmukassa. Toisaalta pitääksemme tietokannan muutoksen mahdollisena, emme Oden settejä voisikaan käyttää, joten tämä ei muodosta ongelmaa. Oden O++ kääntäjä toimii C++ kääntäjän päällä. C++ kääntäjälle on annettu vaatimukseksi yhteensopivuus 3.0 standardin kanssa. G++:n pitäisi täyttää tämä vaatimus.

8. Käytettävät työkalut ja ympäristöt

GIST toteutetaan UNIX-ympäristöön, eli se on varsin laiteriippumaton.

8.1. Käytettävissä olevat kääntäjät ja luokkakirjastot

GIST toteutetaan C++-kielellä. Käytettäväksi kääntäjäksi valittiin GNUn mainio g++.

Arvioimme kymmenien eri luokkakirjastojen sopivuutta projektiin, ja joukosta seuloutuivat seuraavat:

  1. LEDA - tietotyyppejä ja algoritmeja kombinatoriseen laskentaan. LEDAssa on toteutettu tietotyyppi graafi ja siihen useita eri käsittelyalgoritmeja.
  2. YACL - Yet Another Class Library Sisältää useita tietotyyppejä, kuten linkitetyt listat, b-puut, merkkijonot, päiväyksen, kellonajan...
  3. Types 1.0 Sisältää tietotyyppejä, kuten linkitetyt listat, pino, b-puu, merkkijonot.
  4. Aisearch-kirjastossa on hakualgoritmejä ongelmanratkaisuun.
  5. CNCL sisältää tietotyyppejä ja sumeaa logiikkaa.
  6. InterViews InterViews on graafisten käyttöliittymien toteutukseen tarkoitettu luokkakirjasto. Jos teemme käyttöliittymän JAVAlla, InterViews ei tule kyseeseen.
  7. libg++ Tämä on GNUn C++-kirjasto, eli varsin perustavaraa. Sisältää oikeastaan riittävästi.
LEDA on vahva vaihtoehto käytettäväksi kirjastoksi, sillä siinä on toteutettu graafi tietotyyppinä. Emme luultavasti kuitenkaan tarvitse graafeinhin liittyviä etsintäalgoritmeja joten LEDA ei ehkä vastaa tarpeitamme. Paras valinta lienee libg++, sillä se on varmasti yhteensopiva g++-kääntäjän kanssa, ja siinä on riittävästi tarvitsemiamme tietorakenteita ja algoritmeja.