'Botti' aiheen arkisto

OLO-tapaus 7: Irkkibotti

Eräänä väsyneenä maanantaina kokoonnuimme T-talon neuvotteluhuoneeseen 7. OLO-tapauksen pariin. Avauksen aiheena oli ryhmätyönä tehtävä keskusteleva tekoäly, irkkibotti. Post-it-stormaus ei taaskaan ollut kovin hedelmällinen, joten asian ytimeen pääsimme paremmin vapaasti keskustelemalla. Assarimme Vesa, jolla oli huomattavan paljon kokemuksia erilaisista irkkiboteista, jakoi meille auliisti tietämystään ja myös mielipiteitään. Saimme siis kattavan Valinor-esittelyn. Tärkeänä vinkkinä hän sanoi, että tehkää siitä hyödyllinen, ärsyttävästä ei ole mitään iloa jälkipolville. Siispä aloimme kuumeisesti miettiä ominaisuuksia bottiimme ja kunnianhimoisesti sovimme, että jokainen kehittelee jonkin ominaisuuden ja koodaa sen.

Tapauksen avauksessa ehdotettiin mm. lämpötilan kertovaa ominaisuutta, horoskooppia, ruokalistaa ja keskusteluominaisuuksia. Lopulliseen bottiin päätyi kuitenkin suurimmaksi osaksi jotain muuta mitä aluksi oli väläytelty. Ihan hyvä niin. Tavoitteenamme oli kuitenkin OLO-sessiosta lähtien tehdä bottiin hauskoja hyöty-ominaisuuksia, joita ei aiemmissa boteissa ole. Lopullinen botti, rakas Hepalonimme, oli valmistuessaan monien suosikki, ja näillä näkymin se ei ole jäämässä tietokoneen kansioon pölyttymään. Hyödyllisyys ja hauskuus yhdistyivät botissamme ihastuttavalla tavalla, vaikka arvosana jäikin muiden, mielestäni “lelu-bottien”, varjoon.

- Asta

Mikä meni vikaan / mitä olisi voinut tehdä toisin

Näin jälkeenpäin on myös aina hyvä spekuloida mitä olisi voinut tehdä toisin.

Ensinnäkin ainakin suurin osa muista ryhmistä oli hyödyntänyt omissa boteissaan rajapintoja; meillä taas kaikki ominaisuudet sijaitsivat omissa luokissaan. Siksi aina kun haluttiin lisätä toiminto / muokata jotakin toimintoa, vaadittiin muutos myös Hepalon-luokkaan, minkä takia muutoksia ei voinut tehdä kesken kaiken. Tämä oli aika ärsyttävää etenkin testausvaiheessa.

Toinen asia, jonka olisi voinut toteuttaa toisinkin, oli alkometri-toiminnon sijaitseminen Hepalon-luokassa. Tämä ei vaikuttanut botin toimintaan millään tavoin, mutta ainakin koodista olisi tullut hieman selkeämpi jos jokainen toiminto olisi saanut oman luokan. Samoin alkometrin olisi voinut toteuttaa jonkin valmiin laskurin avulla, vaikka näin yksinkertaisessa laskussa toimi myös itse kehitelty kaava.

+ aika moni muukin juttu kusi, lisäillään niitä vielä tähän, aikaahan meillä riittää…

-Ulla

Botti Hepalonin rakenne

Toteutusalustana käytimme Paul Muttonin kehittämää PircBot-sovelluskehystä, joka tarjoaa rajapinnan IRC-protokollan ja Javan välille. Aluksi teimme erillisen HepalonMain-luokan, joka luo uuden Hepalonin, ottaa yhteyden IRC-serveriin ja joinaa Hepalonin !hepalonsorkat-kanavalle.

Luokka Hepalon, jonka periytimme luokasta PircBot, sisältää botin varsinaiset viestitoiminnot. Luontimetodi asettaa botin nimeksi Hepalon, ja onMessage-metodi tutkii kanavalle lähetettyjä viestejä. Jos viesti sisältää tietyn tekstinpätkän (esim. hevonen tai !help) metodi lähettää kanavalle määrätynlaisen viestin sendMessage-metodin avulla. Metodi ottaa parametrinaan kanavan ja lähettäjän, joten sillä voidaan “vastata” viestin lähettäjälle. Riippuen viestin sisällöstä metodi kutsuu tietyn ominaisuuden luokalta vastaukseen tarvitsemiaan tietoja.

Ominaisuudet ovat siis pääosin omissa luokissaan. Hevosiin liittyvä keskustelu ja alkometri on toteutettu Hepalonissa sendMessage-metodin sisällä, mikä ei välttämättä ollut siistein ratkaisu, mutta toimintojen yksinkertaisuuden ja koodin lyhyyden takia päädyimme tekemään niin.

- Asta

Juutupe

Botin yksi ehkä hyödyllisimmistä ominaisuuksista oli YouTube-ominaisuus, joka toimi siten, että havaitessaan kanavalla tekstin seassa youtube-linkin, Hepalon-botti haki videon otsikon sekä katsojamäärän. Tämän perusteella fiksu ihminen voi sitten päätellä, että kannattaako kyseinen linkki avata työpaikalla…

Ominaisuus oli toteuteutettu omaan luokkaansa. Konstruktorissa alustettiin url-niminen attribuutti. Sen arvoksi tallennettiin “http://www.youtube.com/watch?v=”. Otsikon ja katsojamäärän etsiminen toteutettiin omilla metodeillaan. BufferedReader reader = URLReader(url + address); Tässä määritellään url, josta haluttuja tietoja ruvetaan etsimään. Address-muuttuja liitetään urlin perään, se on tässä tapauksessa, jokin epämääräinen kasa kirjaimia ja numeroita, joka poimitaan käyttäjän pasteamasta youtube-linkistä. Oikea otsikko löydetään etsimällä yksinkertaisesti tekstinpätkä <title> ja </title> tagien välistä. Katsojamäärä toimii täysin samalla periaatteella, vain etsittävä tekstinpätkä on tällä kertaa “viewCount”. Tämän jälkeen Hepalon-luokassa etsittiin kanavan viesteistä viestiä, joka sisältää “youtube.com” Aluksi ongelmana oli viestit, jotka sisälsivät muutakin tekstiä kuin pelkän linkin. Tämä ratkesi siten että, tallennettiin kyseinen message kokonaisuudessaan taulukkoon sanoiksi splitattuna. Sen jälkeen käytiin for-loopilla taulukko läpi, etsien sanaa, joka alkaa “http://” Seuraavaksi etsittiin http://-sanasta tämä mystinen kirjain-numero-härpäke ja tallennettiin address-muutujaan. Katsojamäärän etsiminen onnistui ongelmatta. Nyt vain luotiin uusi YouTube-olio ja kutsuttiin sille näitä metodeja ja lähetettiin vastaukset kanavalle.

-Olli

Athenessa tapahtuu!

Mehän haluttiin bottiin oikeasti hyödyllisiä ominaisuuksia, jotka tarjoavat jotakin käyttistä infolaisille. Botti ei siis saanut olla pelkkä ärsyttävä toistaja, lelu tai ylipäänsä mikään turha tyhjäntoimittaja. Rakas kiltamme Athene on äärimmäisen aktiivinen lähes kaikkien jäsenten osalta, ja killan tapahtumiin otetaan aktiivisesti osaa suurillakin joukoilla. Päättelimme, että tällainen tapahtumankertoja voisi olla kaikille hyödyksi, sillä kukaan ei voi muistaa, mitä seuraavaksi tapahtuu, ja missä.

Loimme ominaisuuden !tapahtuma. Tällä komennolla botti etsii Athenen tapahtumakalenterista seuraavan tapahtuman ja kertoo sen kysyjälle. Koodiin otimme mallia Vesan toteuttamasta Mogaripostaus-etsijästä. Käytimme bufferedReader-lukijaa, joka etsi sivulta ensimmäisen tummennetun rivin, toisin sanoen koodinpätkän <br><br><b><p>, ja lopettaa kyseisen rivin lukemisen, kun vastaan tulee </b>. Tämä tekstinpätkä sitten tulostetaan kysyjälle vastaukseksi. Ominaisuus tehtiin omaan Tapahtuma-luokkaansa ja toteutettiin Hepalon-luokassa luomalla uusi olio aina kun joku lähettää IRC-kanavalle viestin “!tapahtuma”. Tämä tapahtumaolio sitten kutsuu Tapahtuma-luokan metodia, joka tulostaa tekstin kanavalle.

Samaan aiheeseen liittyen keksimme toisen ominaisuuden. Mitä kaikki Athenelaiset tekevät tapahtumien jälkeen? -No irkkaavat! Ja missä kunnossa kaikki siinä vaiheessa ovat? -No ihan helvetin moisessa kännissä!

Tämä innosti meitä tekemään ominaisuuden, joka kertoo irkissä aamuyöstä, tai milloin tahansa, oleskelevalle sankarille promillemäärän ja tämänhetkisen olotilan, jos sankarimme ei sitä itse huomaa. Ominaisuus toimii syöttämällä komento !alkometri m/n(sukupuoli) 70(paino, kg) 5(annosmäärä). Teimme toiminnolle vielä “apuviestin”, joka tulostuu, jos komento on syötetty jotenkin väärin.

Toteutimme alkometrin Hepalon-luokkaan. Perusteluja tälle ratkaisulle voisi keksiä vaikkapa millä mitalla, mutta siisteyden takia sekin olisi voinut olla toteutettuna omassa luokassaan. Alkometrin “loimme” itse. Arvoja ei siis syötetä minkään sivuston valmiiseen laskukaavaan, vaan itsekoodaamamme kaava laskee promillemäärän sukupuolen, painon ja nautitun annosmäärän perusteella. Annosmäärä on tietysti vähän kyseenalainen: kukaan ei kuitenkaan muista kuinka monta annosta on juonut, ja tuloskin on totuudenmukainen vain, jos kaikki annokset on nautittu lyhyen aikavälin sisällä. Tämä ei kuitenkaan estä toimintoa olemasta äärimmäisen hauska.

Itse toteutus sujui nopeasti ja sujuvasti. Ongelmiin ei juurikaan tarvinnut pysähtyä. Laskukaava ei ole kovin vaikea, käytimme netistä löytynyttä peruskaavaa. Ja neljännessä ohjelmointitehtävässä käytetty lauseen splittaus ja parsetus olivat avuksi, kun botti tarkistaa onko komento syötetty oikein.

Viimeisin lisäys bottikoodiin oli Matti-luokka, joka kaikille kiinnostuneille tai muuten vain tarvetta lisäsanonnoille tunteville antaa valmiin repliikin random-generaattorilla Matti Nykäsen arkistoiduista lausahduksista. Internet, tuo hyvä ystävämme, tarjosi pitkän litanian tällaisia lyhyitä ja hieman pidempiä Matin suusta tulleita pätkiä. Sieltä sitten kopioitiin luokkaan lista lauseita, joista botti arpoo satunnaisesti yhden. Tämä toiminto on hyödyllinen ja ennen kaikkea erittäin tarpeellinen siinä vaiheessa, kun kaikki on jo sanottu ja jotain kuitenkin pitäisi keksiä, ettei tuppisuina istuttaisi, edes irkissä. Matilla kun on aina jotain sanottavaa.

-Meri

Tunteiden paloa

Mistäköhän sitä aloittaisi? Takaraivossa jyskyttää päivä päivältä useammin ja kuuluvammin se fakta, etten ole kirjoittanut meidän yhteiseen blogiprojektiin mitään melkein kuukauteen. Se on fakta. Toisaalta kynnys minkään deadlinettoman tekemiseen on aina iso, kun on paljon asioita mielessä. Tästä päästään ikuiseen oravanpyörään, josta mä en edelleenkään (neljäs opiskeluvuosi) ole päässyt pois, vaikka miten tietää, etteivät ne hommat urakoimatta vähene.

Mitenköhän sitä perustelisi? Jottette kuvittelisi, ettei mua kiinnosta yhteisiin tapaamisiin osallistuminen tai projektien eteen työskenteleminen, voin avata tarinaa kertomalla, että pelkästään javasta ja koulusta ei kaikki stressi ja kiire ole viime aikoina aiheutunut. Meidän perhepiirissä on ollut todellista tragediaa tänä syksynä. On tullut useaan otteeseen muutama kyynel puserrettua, milloin mistäkin johtuen. Välillä tuntuu, että saa purra hammasta pientenkin asioiden aikaansaamiseksi, kun muut jutut painavat mielessä. Nyt viimeisenä mun rakas koira kuoli tosi yllättäen perjantai-illalla.

Zorro
* 15.3.1996
† 30.11.2007

Zorro

Onneksi jo pian tulee joulu.

Jos kiireiltänne ehditte, yritetäänkö vielä vaikuttaa positiivisesti irc-botin arvosteluun reflektoimalla tänne blogiin asiaa bottiin liittyen? Lähes kaikki bottiaktiivit ovat jo postanneet, mutta päälimmäisenä tuntemuksistaan. Itse ominaisuuksista on ollut aika vähän keskustelua, joka on ollut melko päälipuolista. Yleinen keskustelu ja ajatuksista kertominen on varmasti toki toivottua, sillä blogihan on ryhmän keino saada jokaisen ääni kuuluviin ja antaa palautetta, olkoon asia mikä tahansa.

Itse osallistuin botin toteuttamiseen suurista suunnitelmista huolimatta vain muutamaan otteeseen. OLOsession alustuksessa ja purussa, joissa alustavasti mietittiin Hepalon-botin toiminnallisuutta, ja vastuun jakamista, olin paikalla. Sesssioissa oli hyvä henki ja mietittiin, että edellisestä robottiturnauksen epäaktiivisuudesta otetaan opiksemme. Innostus jäi kuitenkin omalta osaltani melko ponnettomaksi, vaikka bottineuvontasessiossa paria viikkoa myöhemmin olinkin muun ryhmän mukana toteuttamassa botille suunniteltuja toimintoja.

Panoksekseni jäi alustaa neuvontasessiossa yhdessä Ollin kanssa Hepalonille ominaisuutta, joka hakee Athenen (välillä toimivan) kotisivun tapahtumakalenterista seuraavan tapahtuman ja tulostaa sen kiinnostuneelle. Lisäfeatureksi suunniteltiin tapahtuman lisätietojen kertomista, mikäli sellaisia olisi tarjolla. Pääsimmekin Villen ja Jannen assarointiavulla melko pitkälle, kun tapahtuman nimen tulostaminen saatiin melkein toimimaan. Myöhemmin ominaisuutta paranneltiin ilman minun apuani.

Kirjoitin tänään illalla itselleni listan kaikista kurssin suuremmista etapeista ja tapahtumista, joista aion kertoa tässä blogissa. Huomasin, että kirjoitusaktiivisuuteni loppui tuonne toisen harjoituskierroksen tienoille, joten tekemistä riittää. Vastaava lista voi olla hyvä heräte myös muille epäaktiivisesti blogiin kirjoittaville, kokeilkaa ihmeessä! Toivottavasti jo huomenna pääsen hyvään alkuun.

/Henri

Boten Hepalon

Olipa seminaari. Mahtava sorkkaeläinten kuningas Hepalon kävi vähän mittaamassa kollegojensa kisakuntoa aiemmin tänään T-talolla. Valmistautumisemme itse esitykseen ei välttämättä ollut mikään paras mahdollinen, jonkinlainen powerpoint-esitys olisi ehkä ollut poikaa, toisaalta bottimme ominaisuuksien selittäminen suullisesti sekä demonstroiminen irkin välityksellä oli varmastikin riittävän havainnollistava suoritus itse kullekin. Harmillista oli tosiaan se, että Hepalon sattui olemaan aika äksyllä tuulella, eikä näyttänyt parasta osaamistaan yleisölle.. liekö esiintymiskammoa vai mitä..

Muiden ryhmien botit olivat kieltämättä hiukan monipuolisempia, kuin meidän Hepalon. Mielestäni kuitenkin ryhmämme joidenkin henkilöiden passiivisen osallistumisen takia Hepalon oli aika samalla viivalla kilpakumppanien kanssa.. On helpompi tehdä bottiin kymmenen ominaisuutta jos tekemässä on kymmenen ihmistä, eikä alle viisi. En tiedä, oliko tiedotuksessa vikaa vai olivatko ihmiset vaan liian kiireisiä. No mennyt on mennyttä. ISO kiitos kuitenkin osallistuneille!! Hoidetaanpa botin koodin kommentointi vaan kunnialla loppuun ja muistetaan kirjotella dokumentaatio ajoissa blogiin ja muutenkin kirjoitella blogiin mitä vaan mielessä liikkuu!! niin eiköhän tästä vielä hyvä tule. :)

-Olli

Angstista valitusta + botin palautuksesta

Tänään oli bottiseminaari, jossa ryhmä esitteli Hepalon-irkkibottimme muille. Vaikka oikeastaan ei voida puhua ryhmästä, sillä puolet ei vaivautunut paikalle lainkaan. Miksi?!

Lähinnä se puolikas ryhmästä, joka tänään oli paikalla seminaarissa, myös suunnitteli ja koodasi botin. Se sama puolikas hoiti myös esittelyn, jolla on suurin painoarvo bottiseminaarin arvosanassa. Arvosanaksi tuli 3, jota voi korottaa tai laskea blogidokumentaatiolla. Meillä on viikko aikaa, joten nyt mahdollisimman paljon asiaa tänne blogiin!

Botin koodi pitää palauttaa huomiseen torstaihin klo 18 mennessä kommentoituna. Kommentointi pitää siis vielä lisätä koodiin, joten toivoisin että joku/jotkut, jotka eivät käyttäneet tuntikausia aikaansa bottiin, tekisivät sen. Tasapuolisuuden vuoksi.

Nähdään torstaina.

- Asta

Botista -sen luomisesta ja seminaarista

Bottiseminaari on sitten ohi.  Jäihän se vähän heikoksi, kun ajattelee et miten kivan keskustelun siinä ois voinu saada aikaan botin kanssa. Mut ei voi mitään, ainaki hepalonilla ois ollu mahdollisuudet vaikka kuinka hyvään suoritukseen. Harvoin liika testaus aiheuttaa harmia niinku nyt kävi.. Botin oraakkeli ominaisuus siis ei jaksanutkaan keskulla niin aktiivisesti enää seminaarissa.

Mutta botin toteutus onnistui suhteellisen hyvin, vietettiin koodaus- ja suunnitteluhetkiä ihan kivasti ja usein paikalla oli melkein koko ryhmä. Ongelmia ei erityisemmin tullut ainakaan botin koodauksessa, ehkä ongelmat liittyi enemmänkin omien aikataulujen kiireyteen. Ehkäpä olis voinu enemmän miettiä niitä rakenne juttuja, rajapintaa tai sellasta.. En tiiä, ihan hienohan se koodi on. Ominaisuusideoita syntyi hyvin ja niinpä botin ominaisuuksista tulikin aika monipuoliset, hyötyä (esim, alkometri) ja huvia (tärkeimpänä keskustelu eli oraakkeli). Eli ainakin toteutus on ihan eri luokkaa kuin esim, robotin kohdalla.. Nyt vielä dokumentaatio kuntoon niin voidaan olla tyytyväisiä.

Anu

Botti – jälkitunnelmia

Jei, nyt on bottiseminaari takana päin ja arvosanatkin julkistettu; pääsimme sentään parempaan tulokseen kuin robotin kanssa!! Hyvä niin, vaikka varmasti parantamisen varaa olisi ollut!! Ja tosiaan homma ei ole vielä kasassa, vielä puuttuu ainakin mahtava blogi-dokumentaatio sekä koodin kommentoiminen. Voitaisiin yrittää panostaa ainakin blogiin, jos vaikka saataisiin hilattua arvosanamme yhtä pykälää ylemmäksi!!

Seminaarista jäi hieman nihkeät tunnelmat – en tiedä oliko syynä melko monen ryhmäläisen puuttuminen vai se, että Hepalon oli suorituspaineiden takia aika ärtsyllä päällä eikä oikein suostunut yhteistyöhön. Ongelmaksi siis koitui kai liiallinen testaaminen :)

Jep mutta, nyt vaan jonkinnäköistä dokumentaatiota kehiin, lisäilin jo tuohon Astan artikkeliin nuita Hepalonin toimintoja, jos jotakin jäi poies niin lisäilkää lisää!! :)

-Ulla

Seuraava sivu »


 

marraskuu 2009
ma ti ke to pe la su
« tam    
 1
2345678
9101112131415
16171819202122
23242526272829
30