Sisällysluettelo
Esitutkimusraportti
Esitutkimusraportti
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.
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.
- - 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
- luoda käyttötiedon pohjalta WWW-browserilla luettavassa muodossa olevia aikasarjoja ja piirakkadiagrammeja reaaliaikaisesti
- olla helppokäyttöinen ja kaunis katsella.
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.
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.
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.

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.
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.

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.

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.
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.
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:
- TKK, opiskelija
- TKK, henkilvkunta
- VTT
- VTKK
- Innopoli ja teknologiakylä
- Tekniska lärovärket, studerande
- Tekniska lärovärket, personal
- Vapaavalintainen muu merkkijono
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.
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.
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ä.
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.
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.
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
- työasema
- autentikoitu käyttäjätunnus
- aika
- protokollan komento
- tiedosto
- käytetty protokolla
- palautekoodi
- siirrettyjen tavujen määrä
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ä.
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.
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.
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.
GIST toteutetaan UNIX-ympäristöön, eli se on varsin laiteriippumaton.
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:
- LEDA - tietotyyppejä ja algoritmeja kombinatoriseen laskentaan. LEDAssa on toteutettu tietotyyppi graafi ja siihen useita eri käsittelyalgoritmeja.
- YACL - Yet Another Class Library Sisältää useita tietotyyppejä, kuten linkitetyt listat, b-puut, merkkijonot, päiväyksen, kellonajan...
- Types 1.0 Sisältää tietotyyppejä, kuten linkitetyt listat, pino, b-puu, merkkijonot.
- Aisearch-kirjastossa on hakualgoritmejä ongelmanratkaisuun.
- CNCL sisältää tietotyyppejä ja sumeaa logiikkaa.
- InterViews InterViews on graafisten käyttöliittymien toteutukseen tarkoitettu luokkakirjasto. Jos teemme käyttöliittymän JAVAlla, InterViews ei tule kyseeseen.
- 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.