Tampereen yliopisto
Hypermedialaboratorio
Syksy 2006, Hypermedian toteutus
Paavo Toivanen
paavo.toivanen@uta.fi
opiskelijanro 65617
Mitä kuulisimme, jos kieliopit puhuisivat?
Keskeisiä alkuperäisiä ideoita olivat:
-
toteutetaan
yksinkertainen kielioppi server side skripting –tekniikalla (PHP tai Perl, joista valittiin PHP) sekä sille
o
rajapinta
xml-tiedostoihin, joka mahdollistaisi
§
kieliopin
instanssien lataamisen ja
§
niiden tallentamisen
sekä
§
satunnaisuuden
avulla koostettujen lauseiden haun näistä instansseista
o
tulostusfunktio,
joka mahdollistaisi
§
lauseiden
lähettämisen ulkoiselle sovellukselle
-
toteutetaan
käyttäjärajapinta (Flash), joka
o
esittäisi
käyttäjälle kieliopin tuottamia satunnaisia lauseita
o
liittäisi
kieliopin instansseihin fiktiivisiä hahmoja (kuvat)
-
tutustutaan
Flash-ohjelmointiin
-
kehitetään
muutamia urnohahmoja ja ideoidaan monimutkaisempia
kielioppeja sekä kyseisen kieliopin mahdollisuuksia
-
yritetään
julkaista urno jollakin foorumilla
Nimitän paremman nimen puutteessa työssä käytettyä
kielioppia seuraajakieliopiksi (tai englantilaisittain successor
grammar, SG). Seuraajakielioppi
perustuu muutamaan yksinkertaiseen sääntöön.
Kukin kieliopin instanssi rakentuu fraasilistoista, joilla kullakin on seuraavat
ominaisuudet:
-
nimi
-
todennäköisyys
-
lista
fraaseista
-
lista
seuraajista
-
valinnainen
tieto siitä, voiko kieliopin lause loppua tähän fraasiin.
Instanssin ensimmäinen fraasilista aloittaa
jokaisen instanssiin sisältyvän lauseen.
Sen sisältämistä fraaseista valitaan satunnaisesti yksi ja se liitetään
tulosteen alkuun, mikäli samalla arvottu todennäköisyys alittaa fraasilistan sisäisen
todennäköisyysarvon (tämän ollessa 1 sana siis lisätään joka tapauksessa). Mikäli arvottu todennäköisyys ylitti
fraasilistan sisäisen todennäköisyysarvon ja fraasilistassa on tieto siitä,
että instanssin lause voi loppua tähän fraasilistaan, tulosteen muodostus
lopetetaan. Muussa tapauksessa seuraavaksi
valitaan satunnaisesti uusi fraasilista ensimmäisen listan seuraajien joukosta. Seuraajan sisältämistä fraaseista valitaan
yksi kuten edellä, ja tämä liitetään tulosteen loppuun ehtojen täyttyessä, ja
siirrytään taas satunnaisesti valittuun seuraavaan fraasilistaan. Tätä toistetaan, kunnes jonkin fraasilistan,
johon suoritus voi päättyä, kohdalla arvottu todennäköisyys ylittää listan
sisäisen todennäköisyysarvon. Tällöin
tuloste muotoillaan ja lähetetään mahdollisesti eteenpäin.
Seuraajakieliopin tietyllä tapaa rakennetut
instanssit voivat tuottaa äärettömiä lauseita (pysähtymättömyys), koska ne
voivat sisältää seuraajaviittauksen itseensä tai alempana hierarkiassa olevaan
fraasilistaan. Hyvin suunniteltu
rekursio kasvattaa lauseiden monimuotoisuutta ja mielenkiintoisuutta. Kunkin fraasilistan sisältämien lauseiden
keskinäinen koheesio ja yhdenmuotoisuus on täysin urnoilijan vastuulla.
Työn ideasta johtuen kuvituksen tehtävänä oli
luoda puitteet hahmojen esittämiselle: synnyttää hahmojen identiteetti yksinkertaisten
kuvallisten vihjeiden ja tekstien yhteisvaikutuksessa pikemminkin kuin loppuun
asti viilattujen animaatioiden avulla. Tällaiset saattaisivat mielestäni, tai ainakin
asiaa suunnitellessani näin ajattelin, johtaa lukijaa pois henkilöhahmon ideasta.
Tuotin kuvat eräällä toisella
vektorigrafiikkasovelluksella (www.inkscape.org)
ennen kuin kurssilla tutustuttiin Flashin
piirto-ominaisuuksiin, mikä oli harmi jatkoa ajatellen, sillä Flash ei osaa lukea Inkscapen svg-tiedostomuotoa. Voimatta hyödyntää jo suunniteltuja
vektoreja Falshin sisällä päädyin vain tuomaan
grafiikan sisään png-muodossa. Kuvat kehittyivät jo PHP:n
koodaamisen yhteydessä luomieni testikielioppien pohjalta ja yhdessä niiden kanssa. Kaikkiaan ohjelma tuli sisältämään neljä tyyliteltyä
hahmoa (en panostanut tietoisesti tyylien yhteensovittamiseen, mutta käytetyn
työkalun jälki erottuu selvästi jokaisesta).
Työnimi
”Passiivi” karrikoi vallankumouksellisen hahmoa. Vastaavan kieliopin (passv.xml)
fraaseissa on vaikutteita Alexandr Soltšenitsynin teoksen Lenin Zürichissä keskushenkilön
retoriikassa, joskin kielioppi on muokattu lähteeseen mitenkään liittymättömän idean
− hahmon
staattisuuden kontrasti toistuviin toimintakehotuksiin − pohjalta.
Työnimi
”Romanttinen robotti” on yksinkertaistettu lego- ja hymiökonsepteja imitoiva
figuuri, jonka poskille lisäsin sinistä tunnevaikutelman takia. Vastaava kielioppi (robo.xml)
hahmottui melko suoraviivaisesti lastenkirjallisuudestakin (sekä Stanislaw
Lemiltä) tutun romanttisen peltiveikon identiteetin ympärille: olen käyttänyt arkaismeja ja vanhan
mitallisen runokielen parodiaa taiteellisesta uskottavuudesta juurikaan
huolehtimatta. Romanttinen tunteilu
asettuu hahmossa mielestäni ihan humoristiseen ja lämpimään sävyyn.
Työnimi
”Upsa” on urnona kokeileva
pikemminkin kuin autenttisuuden vaikutelmaan tähtäävä, päinvastoin kuin edellä
esitellyt hahmot, ja siis lähempänä perinteistä urnoa. Tätä kuvastanevat sävytys ja tile clones –työkalulla
tuotettu lentoon lähtevä tukka. Kielioppi
(jubb.xml) muodostuu vain viidestä fraasilistasta ja
kahdesta mahdollisesta polusta. Näistä
jälkimmäinen perustuu puhtaasti rekursioon yhden fraasilistan {”poika”,”potkii”,”palloa”}
kutsuessa itseään rekursiivisesti 90 %:in todennäköisyydellä. Ehkäpä yksinkertaisuudessaan tämä onkin tavallaan
urnona onnistunein neljästä hahmosta.
Työnimi
”Avustan taiteen tulkinnassa” muodostaa arvostelmanomaisia ja kuvailevia
lauseita kuvataiteellisesta sanastosta.
Alkuperäinen idea oli muodostaa blondin arkkityypin urno,
mikä kuvan piirtämisen myötä alkoi vaikuttaa yhä hankalammalta. Kriitikkona urno sai
enemmän luonnetta.
Alkuperäisessä suunnitelmassa hahmot tuli
asettaa erilliseen valikkoon, josta niistä valittaisiin yksi kerrallaan, ja
tämä (isompana) sylkäisisi lauseitaan ruudun oikealle laidalle kallistuvaan
puhekuplaan. Toteutuksessa (teknisten
ongelmien takia, jotka tosin ratkesivat myöhemmin) yksinkertaistin rakennetta
ja sijoitin kaikki tapahtumat yhden näkymän (scene)
sisälle rinnakkain, mikä oli alkuperäisen valikon rakenne, mutta kuitenkin
niin, että epäaktiiviset hahmot on himmennetty miltei näkymättömiin ja
puhekuplan sijasta lauseet ilmestyvät keskitetysti ruudun yläosaan, jolloin syntyy
vaikutelma yhteisestä virtuaalisesta areenasta, vaikkapa virtuaalikapakan
ilmatilasta. Tämä onkin lopputulosta
katsellessani ehkä parempi ratkaisu kuin hahmojen erotteleminen valikosta omaan
tilaansa, joka loisi liian pelimäisen mielleyhtymän. Oheisnappulat äänen säätelyyn sijoitin
suunnitelmien mukaan näyttöalueen nurkkiin.
Hahmojen esittämisen takia katsoin alusta
lähtien parhaaksi käyttää valkoista taustaväriä, joka näyttää miltei
standardilta Flash-sovelluksissa muutenkin.
Flash-sovellus on jaettu kahteen näkymään (scene): ensimmäinen esittää hahmot rinnakkain ja panee käyttäjän pyynnöstä ne lausumaan uusia lauseita. Tässä päänäkymässä on kysymysmerkki-nappulaan asetettu siirtymä toiseen näkymään, jossa kerrotaan lyhyen hieman maalailevan tekstin avulla sivuston ideasta − eli myydään tarjottua sisältöä lukijakunnalle.
Suuri osa sivuston toiminnasta on yksinkertaista tunnilla käytyjen esimerkkien soveltamista. Kapeahko äänimaisema on luotu omasta suusta äänitettyjen urahdusten pohjalta. Sen tehtävä on lähinnä korostaa ruudulla olevien muotokuvien vuorovaikutuksellisuutta. Äänimaailman tueksi on liitetty kaiutin päälle ja kaiutin pois –nappulat.
Halusin tutustua hieman myös ActionScriptin mahdollisuuksiin. Niinpä mukana pyörii ActionScriptin ja MovieClip-luokan avulla tuotettu hiiren liikkeitä pakeneva tähtianimaatio. Sen varsinainen tehtävä on kohdentaa käyttäjän huomiota hiiren kursorin ympärille syntyvään tyhjään tilaan. Tähdet oli välttämätöntä häivyttää miltei näkymättömiin alpha-arvoltaan. Missä määrin liike edelleen on häiritsevää, arvostelija arvostelkoon! Animaation pitäisi joka tapauksessa innostaa tutkimaan ruudun eri alueita, erityisesti himmeänä esitettyjä hahmoja, jotka voivat ponnahtaa esiin kursorin alla, ja innostaa painelemaan näitä, jolloin sovellus alkaa tuottaa lauseita. Lisäksi tähtianimaatio toimittaa koristeen ja huomion ylläpitämisen virkaa siinä mielessä, että lauseiden lataamiseen palvelinpuolelta oli jätettävä Flashille sekunnin verran aikaa, jona aikana ei ilman animaatiota tapahtuisi mitään, mikä voisi puolestaan alkaa hermostuttaa käyttäjää. Tähtiä tematisoidaan ehkä hieman läpinäkyvästi esittelynäkymän tekstissä.
Kirjoitin suurimman osan toteutuksen toiminnallisuudesta (tekstien lataaminen ja päivittäminen palvelimelta, äänen soittaminen ym.) funktioiksi, jotka on kätevyyden vuoksi sijoitettu omalla layerilleen päänäkymän ensimmäiseen frameen. (Tätä ratkaisua ennen ensimmäinen versioni työstä päätyi täyteen kaaokseen − varmasti osaltaan ActionScriptien organisoimattomuuden vuoksi.)
Vuorovaikutuksellisuuden osuus on työssä melko vähäinen. PHP-puolelle ehdin kirjoittaa ja testata metodit kieliopin instanssien tallentamiseen XML-tiedostoiksi sekä lauseiden ja fraasien lisäämiseen niihin, mutta en ehtinyt tuottaa Flash-sovellukseen käyttäjärajapintaa näille toiminnoille (suunnitelmissa oli lisätä mysteerinen varjohahmo omaan näkymäänsä, johon käyttäjät voisivat vapaasti käyde tekemässä lisäyksiään). Jos vuorovaikutus tässä toteutuksen vaiheessa on siis liian vähäistä kurssin vaatimuksiin nähden, niin pyydän jatkoaikaa työn kehittämiseen! Sinänsä ideassa on potentiaalia, sillä ”opettamalla” saataisiin aikaan parasta kieltä puhuvia koneita – kielioppia pitäisi tosin myös monimutkaistaa huomattavasti, jolloin pitäisi taas tuottaa uusi PHP-kirjasto jne...
Paitsi hypermedian tuottamista, työssä tutkitaan
hypermediaan pohjautuvan digitaalisen runon eli urnon
toteutusta − tämähän oli se alkuperäinen idea, joka minut sai työhön
liikkeelle. Nykyurno
(esim. suomalainen nokturno.org) näyttää jatkaneen enemmänkin perinteisen
lyriikan kuin proosan perinnettä. Edellisen tehtäväksi ei ole hahmotettu esimerkiksi
henkilöhahmojen kerronnallista esittämistä.
Työn tarkoitus on tutkia tätä aukkoa urnon
profiilissa luomalla urno-persoonallisuuksia. Näin piti kommentoida osaltaan 1970-luvulla
luodun sähköisen psykiatrin Elizan perinnettä. Elizan ohjelmoijia
kiehtoivat haasteet, joita tietokoneen älylle oli esitetty, esimerkiksi
kuuluisa hypoteettinen koe, jossa haastateltavien pitäisi arvioida,
keskustelivatko tietokoneen välityksellä oikean ihmisen vai ohjelman
kanssa. Sääntöpohjainen Eliza hyödynsi englanninkielisten lauseiden sanaston ja syntaksin
tunnistuksen pohjalta tiettyä vastausrepertoaaria ja piti näin yllä keskustelua,
joka toimi vastaanotosta päätellen melko hyvin, ilmeisesti kiinteiksi jähmettyneiden
psykiatri-potilas-suhteen roolien pohjalta: itse Elizaa
kokeillessani ärsyynnyin jo kolmannella repliikillä, mihin osaltaan lienee
vaikuttanut tietokoneiden ympärillä vallinneen mystisyyden sädekehän
rapiseminen, siis taustatietojeni suurempi määrä 1970-luvun potilaisiin
verrattuna.
Kielen ymmärtämisen kannalta ovat sittemmin kontekstuaalisuus ja merkitysten riippuvaisuus yksilöllisestä
ja yhteisöllisestä kokemuksesta sekä viestinnän roolittuneisuus
(mukanaan yhtäältä roolien ja toisaalta niihin liittyvien puhelajien
monimuotoisuus) tulleet yhä paremmin ymmärretyiksi − vanhastaan
tietokoneen älylle asetettuihin haasteisiin vastaaminen on siirtynyt taas
kauemmas tulevaisuuteen. Tämän työn päämäärä
onkin vähemmän kunnianhimoinen kuin Elizan ehkä oli: auttaa
hahmottamaan tapoja, joilla persoonallisuuden illuusiota (fiktiivistä
henkilöhahmoa) voidaan jatkaa yksinkertaisten kielioppien puitteissa. Lukuisissa murtumakohdissaan, mutta myös
onnistumisissaan esimerkkiurnot valottavat
mielenkiintoisella tavalla myös ihmisajattelun toimintaa, alituista hyväuskoista
paluuta hahmon fiktioon.
Pahin ongelma työprosessissa oli katkonaisuus. En voinut tehdä työtä kuin laitoksen
mikroluokassa ennen kuin keksin asentaa Flash 8:n kokeiluversion vaimoni läppärille
− omallani ilmeisesti jokin sovellus esti ohjelmaa toimimasta.
Koska en ollut juuri ennestään tuttu Flashin kanssa ja suunnitelma sisälsi joitakin kriittisiä
elementtejä − erityisesti tekstin tuominen ulkoisesta sovelluksesta Flashiin, jota ei mainita kovin yhteistyöintoiseksi
tässä suhteessa − törmäsin pian ”etenemättömyyden ongelmaan”. Sittemmin selvitin sen ajan kanssa useiksi
pieniksi virheiksi, kuten tavanomaista. Skandimerkkien (ä, ö) tuominen HTML-rajapinnan kautta
onnistui minulta vasta koodaamalla ne numerokirjainyhdistelmiksi ja muuntamalla
nämä manuaalisesti takaisin ääkkösiksi Flashin puolella, joka sisällään kylläkin käsittelee Unicode-merkistöä.
Mahdollisesti Flashin uusimmissa versioissa
olisi jo kehittyneempiä ratkaisuja ongelmaan, mutta tämäkin toimi.
Aivan viimeistelyvaiheessa huomasin työn grafiikoissa
epäpuhtauksia, joita ilmaisesti Inkscape oli niihin png:ksi tallentaessaan jättänyt, ja tämä jäi hieman
harmittamaan. Myös äänimaailmaa olisi
ollut ajan salliessa mukava kehittää eteenpäin.