OLOwiBotti

Tarina alkaa sadasta muistilopusta ja päättyy yhdeksään moduuliin. Tulos on botti, joka omatoimisesti reagoi, trollaa ja spämmää – hyvän maun rajoissa tietenkin. Mutta mitä on hämmentävien irc-kommenttien takana, ja millaista koodin tekeminen oli? Tarina sadasta yhdeksään ja sen yli alkakoon.

Aluksi oli arkkitehtuuri, luokkapohja ja Vesa

Ennen kuin oli mahdollista päästä itse botin irc-kanavalla näkyviin toimintoihin käsiksi piti laatia botille jalusta, jolla kasvaa. Oli luotava arkkitehtuuri. Arkkitehtuurin päätavoite oli pilkkoa botti mahdollisimman yksinkertaisiin palasiin, joiden avulla kukin kykenisi laatimaan oman moduulinsa. Vesa otti rohkeana tehtävän vastaan. Ohessa hänen mietteitään arkkitehtuurista: https://olowi.wordpress.com/2012/11/07/irkkibotin-arkkitehtuurin-suunnittelu/.

Lopullisessa toteutuksessa kaikki yksittäiset moduulit periytyvät abstraktista yläluokasta Moduuli. Moduuli-luokalla on useita eri metodeja, joita oman tarpeen mukaan hyödyntämällä oli helppo laatia oma moduulinsa. Niillä pääsi myös hommasta paremmin jyvälle, kuin jos olisi pitänyt laatia kaikki aina alusta alkaen uudelleen.

Kun uusi moduuli oli asetettu aktiiviseksi aktivoi()-metodilla ja metodi onAktiivinen() oli palauttanut arvon true, moduulilla pystyttiin alkaa kutsua eri metodeja. Metodit oli nimetty selkeällä ja helposti ymmärrettävällä suomenkielellä, mikä helpotti niiden käyttämistä. Esimerkiksi liityttäessä palvelimelle kutsutaan liityttiinPalvelimelle()-metodia ja eri viestejä käsittelevät metodit alkavat sanalla ”käsittele”.

Moduuli-luokan kautta moduulit saavat tiedon ajettavasta pircbotista, ja kukin moduuli ladataan yhden tiedoston kautta. Tietyt asiat on siis keskitetty ja toisto vähenee.

Moduuleita yksin yhdessä

Viikko ennen deadlinea ryhmä kokoontui laatimaan botille erilaisia toimintoja. Arkkitehtuuri oli tässä vaiheessa jo valmis, joten voitiin kääriä hihat ja ryhtyä töihin. Ennen varsinaista koodaamista oli kuitenkin kerrattava ircin toiminta. Uusien käyttäjien keksittyä itselleen osuvat nickit voitiin Eclipset avata ja perehtyä valmiiseen moduulipohjaan.

Jo alkuperäisen stormauksen yhteydessä oli päätetty, ettei botilla ole mitään tiettyä teemaa tai tarkoitusta. Tarpeeksi laajaa teemaa ei keksitty eikä sellaista haluttu jälkikäteen tökerösti tekaista. Teeman puuttuminen oli botin käytännön toteutuksen kannalta hauska ratkaisu. Sen seurauksena kukin sai käydä läpi sadan postitin pinon ja valita sieltä toteutettavaksi itseä eniten puhuttelevan idean.

Vaikka moduuleja istuttiin tekemään yhdessä, ne laadittiin yksin. Yksi moduuli oli siis vain yhden henkilön vastuulla. Ryhmätyöskentely näkyi kuitenkin avun läsnäolona ja ideoiden pommitteluna. Kaikin puolin tekeminen tuntui hauskalta ja ryhmä harmittelikin OLO-ryhmän hajoamista kurssin päättyessä.

Moduuleja syntyi moneen lähtöön. Seuraavissa kappaleissa käsitellään kukin yksityiskohtaisemmin.

Arsyttavyys-moduulin idea lähti siitä, että keskustelupalstan täyttävät yksinpuhujat ovat ärsyttäviä. Päätettiin tehdä moduuli, joka seuraa keskustelijan peräkkäisten kommenttien määrää ja tietyn määrän jälkeen sitten reagoi monologiin. Käytännössä yli kolmen peräkkäisen kommentin jälkeen moduuli lisää viimeisimmän keskustelijan ArrayList-tyyppiseen arsyttavat-listaan ja yli kahdeksan kommentin jälkeen hyvinArsyttavat-listaan. Moduulin oma reagointi riippuu siitä, mihin listaan keskustelija kuuluu.

Keskustelijalle haluttiin antaa mahdollisuus selvittää, kuinka ärsyttävä hän kyseisellä hetkellä botin mielestä on. Arvolla ”rating” botti kertoo, onko keskustelija hyvin ärsyttävä, ärsyttävä vai ei yhtään ärsyttävä.

Vaapeli-moduulin avulla ryhmän miespuoliset jäsenet pääsivät purkamaan inttipatoutumiaan. Testauksessa moduuli aiheutti sekä huvitusta että hajotusta. Vaapelia on puhuteltava oikein. Alunperin Vaapeli korjasi keskustelijaa, mikäli tämä puhutteli Vaapelia väärin, joten lopputuloksena Vaapeli reagoi aivan kaikkeen. Vaapelilla on lisäksi hieno ominaisuus: se kykenee heittämään keskustelijan ulos foorumilta. Näin ollen vaikka Vaapelin ”Mites puhutellaan?” -huutelu herätti aluksi ryhmäläisissä hihittelyä, moduuli alkoi lopulta pännimään ryhmäläisiä niin paljon, että sitä oli pakko muokata. Lopullisessa muodossaan sukupuolineutraali Vaapeli noteeraa sekä ”Herra vääpeli” että ”rouva vääpeli” puhuttelun ja vastaa sitten satunnaisella sutkautuksella, joka tulee tietyllä koodissa määritellyllä todennäköisyydellä.

EscortIrma-moduulissa hyödynnettiin ircin yksityisviestittelyä. Irma pyytää ensin yleisellä foorumilla keskustelijoita ottamaan häneen yhteyttä ja vastaa sitten yksityisviesteillä käytävään keskusteluun. Moduuli ei reagoi keskustelijan viesteihin tunnistamalla joitain tiettyjä arvoja. Ei siis ole väliä, mitä Irmalle kirjoittaa. Irma kyllä vastaa.

EscortIrman vastaukset tulevat tietyillä todennäköisyyksillä. Välillä ne ovat yhden rivin mittaisia ja välillä taas sisältävät usemman peräkkäisen kommentin. Useampi peräkkäinen kommentti tulee, kun Irma kertoo keskustelijalle kaksimielisen vitsin.

Google-moduuli vastaa keskustelijan tiedonjanoon. Kun kommentin aloittaa arvolla ”google”, moduuli katsoo sitä seuraavan merkkijonon olevan kokonaisuudessaan hakusana, jolla se sitten hakee tietoa googlesta. Haun onnistuttua moduuli selvittää, mikä hakutulos on ylimpänä ja tulostaa sitten sen kuvauksen foorumille.

Hyvan- ja PahanMielen-moduulit reagoivat keskustelijoiden mielentiloihin tunnistamalla merkkijonoista hymiöitä. Moduulit käyvät läpi kommentin merkkijonon ja, mikäli löytävät sieltä sopivan hymiön, tulostavat foorumille linkin. Jos tunnistettu hymiö on iloinen, PahanMielen-moduuli vastaa linkillä lannistajakuhaan, ja jos tunnistettu hymiö on surullinen, HyvanMielen-moduuli tulostaa linkin motivaatiovalaaseen.

UhkaVaiMahdollisuus-moduuli on perua ryhmän OLOsessioista. Moduuli tutkii HyvanMielen-moduulin tavoin kokonaisen kommentin. Se jakaa merkkijonon yksittäisiin sanoihin ja vertaa sitten sanoja kahden listansa sisältöön. Toinen listoista sisältää sanoja, jotka moduulin mukaan ovat hyviä ideoita, ja toinen sanoja, jotka ovat moduulin mukaan huonoja ideoita. Esimerkiksi jos keskustelija toteaa, että ”pitäis kyl nukkua”, moduuli tunnistaa sanan ”nukkua” ja kertoo keskustelijalle, että tämän ajatus on huono idea.

Juomapeli-moduulin idea on sen nimen mukainen. Se aloittaa ja pitää yllä juomapeliä. Moduuli selvittää, ketä kaikkia keskustelussa on mukana, ja arpoo sitten keille kolme juomaa menevät. Kun juomat on juotu, alkaa uusi kierros. Pelin voi lopettaa komennolla ”lopeta”.

Juomapeli-moduuli on jossain määrin hiomaton timantti. Se toimii, mutta siinä on pari porsaanreikää. Yhden kierroksen arvottavat juomat voivat päätyä samalle henkilölle juotavaksi, koska kukin arvotaan toisista erillisenä. Juomiskäsky saattaa tämän lisäksi kohdistua itse botille, koska moduuli katsoo itsensä yhdeksi keskustelijoista. Kierros päättyy, kun moduuli on vastaanottanut kolme ”juotu”-komentoa. Moduuli ei kuitenkaan erottele, keiltä nämä komennot ovat tulleet, joten se ei vahdi, että juoman juo tehtävän saanut keskustelija.

WA– eli WolframAlpha-moduuli. WA-moduuli on Google-moduulin tavoin tarkoitettu tiedonetsintään. Se hyödyntää WolframAlpha APIa, joten sitä tehdessä ei tarvinnut keksiä pyörää uudelleen. Perusidea on, että keskustelija voi selvittää vastauksen haluamaansa laskuun aloittamalla kommenttinsa arvolla ”wa”. Moduuli käsittelee viestin loppuosan ja tulostaa sen jälkeen foorumille saadun vastauksen. Tulostuksessa saattaa tulla myös linkki, josta keskustelija pääsee tarkastelemaan vastausta selkeämmässä muodossa.

Kun kaikki moduulit oli laadittu, ne yhdistettiin PlagiaattiBottiin. Koska arkkitehtuuri oli laadittu tarpeeksi järkevästi, tämä onnistui ilman suurta räpeltämistä.

Työnjako ja tehtyjen ratkaisujen tarkastelu

Työnjakoa oli alusta lähtien suhteellisen selkeä. Ideointi tehtiin yhdessä, ja sen jälkeen kullekin jaettiin oma vastuualue, jonka sai hyvin vapaasti valita. Vesa loi OLOwiBotin pohjan ja suunnitteli arkkitehtuurin aiemmissa olosessioissa nousseiden ajatusten pohjalta. Muuten ideana oli, että kaikki tekevät oman moduulinsa. Hanna ja Justus tekivät Hyvän- ja PahanMielen-moduulit, Jaakko laati Vaapelin ja EscortIrman, Kaisa teki UhkaVaiMahdollisuuden, Aarne WA-moduulin, Pauli Google-moduulin, Miikka Juomapelin ja Annukka Arsyttavyys-moduulin. Jäljelle jäi botin bottiseminaaria ja blogia varten dokumentointi, jonka allekirjoittanut otti vastuulleen.

Sillä, että arkkitehtuuri laadittiin ennen tietoa tulevista moduuleista, oli hyvät ja huonot puolensa. Botin pohja tuli tehtyä niin laajaksi, että sitä oli helppo jatkokehittää lähes mihin tahansa suuntaan, halutessaan bottiseminaarin jälkeenkin. Lopulliset moduulit eivät kuitenkaan hyödyntäneet kaikkia pohjan suunniteltuja ominaisuuksia. Esimerkiksi priorisointia ei lopuksi tarvittu ollenkaan. Jos moduulit olisivat olleet etukäteen tiedossa, olisi ehkä säästytty ylimääräiseltä työltä. Toisaalta voi ajatella tämän ylimääräisen työn olleen laatijalleen kehittävää.

Vaikka kukin teki oman moduulinsa itsenäisesti, oli fiksua tehdä niitä samassa paikassa samaan aikaan. Samalla, kun teki omaa moduuliaan, tiesi täsmälleen, mitä muut tekivät, ja tämä vähensi huomattavasti paineita omasta kontribuutiosta. Moduulin tekijöiden työtä helpotti moduulipohjan laatijan läsnäolo.

Lopullinen bottiseminaariesitys meni sujuvasti vaikka hieman ylittikin 15 minuutin aikarajan. Paikalla olleet ryhmän jäsenet kertoivat omista vastuumoduuleistaan ja poissaolleiden osuudet selitettiin yhdessä. Kaiken kaikkiaan ryhmätyö onnistui paremmin kuin labyrinttitehtävässä. OLOwiBotissa näkyi selvästi koko ryhmän kädenjälki.

2 thoughts on “OLOwiBotti

  1. Jee, bottia oli kyllä hauska tehdä ja samalla oppi vähän ircinkin käyttöä!🙂 Verrattuna robotin koodaamiseen, sujui botin työnjako huomattavasti helpommin, koska jokainen pystyi aidosti tekemään oman moduulin (jee hyvä Vesa, kun teit mahdollisuuden tähän!). Robotin koodaamisessa kaikkien piti melkeinpä olla paikalla samassa tilassa, kun nyt taas jokainen pystyi tekemään hommia yksin kotonakin🙂

  2. Päivitysilmoitus: Tapaus 7 – Botista, irkistä ja netistä | OLOwi

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s