Tampereen yliopisto

Hypermedialaboratorio

Syksy 2006, Hypermedian toteutus

 

Paavo Toivanen

paavo.toivanen@uta.fi

opiskelijanro 65617

 

 

 

 

 

 

 

Lauseita yksinäisyyden laidalta

 

 


 

2. Työn päälause

Mitä kuulisimme, jos kieliopit puhuisivat?

 

 

3. Alkuperäinen suunnitelma

 

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

 

 

4. Vuokaavio

 

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.

 

 

5. Kuvasuunnittelu

 

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.

 

6. Flash-toteutus

 

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

 

9,  Pohdintaa harjoitustyön prosessista

 

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.