Tapaus 7

Tapaus 7

Virike 1

Kuten tiedämme, IRC eli irkki on reaaliaikainen keskustelupalvelu, jossa kommunikointi tapahtuu tekstipohjaisesti. Irkki on jaettu erityisiin kanaviin, joille lähetetyt viestit näkyvät kaikille kanavalla olijoille. Myös käyttäjien välinen viestintä on mahdollista.

Koska irkki on tekstipohjainen, siihen on helppo tehdä automaattisia asiakasohjelmia, ns. botteja. Botteja on lukemattomia erilaisia: ne voivat vartioida kanavia, tuottaa jonkin palvelun, pyörittää jotakin peliä, olla hauskoja tai ärsyttäviä tai mitä tahansa.

00:53 <@olut_> !sivsan http://www.suklaatupakka.com 
00:53 <@iluBOT> Lucky Strike on parasta tupakkaa 
00:53 <@suffeli> suffeli on parasta suklaata 
00:53 <@RaunoP> http://www.suklaatupakka.com : ei löytynyt 
00:53 <@iluBOT> olut_: WANHA! 
00:53 <@suffeli> suffeli on parasta suklaata 
00:53 <@iluBOT> Lucky Strike on parasta tupakkaa 
00:53 <@suffeli> olutta!! 
00:53 <@iluBOT> RaunoP: WANHA! 
00:53 <@RaunoP> iluBOT: Jos ystäväsi ei halua puhua ongelmastaan, kerro hänelle
                tilanteista, joissa sinullakin on ehkä ollut samantapaisia huolia 
00:53 <@olut_> 9 \o/ 

Virike 2

Turingin testi on tietojenkäsittelytieteen pioneerin Alan Turingin ehdottama koejärjestely, jolla voitaisiin testata koneen älykkyyttä. Kokeen tuomari keskustelee samanaikaisesti ihmisen ja koneen kanssa – kumpikin näistä yrittää vaikuttaa ihmismäiseltä. Jos tuomari ei pysty päättelemään, kumpi keskustelukumppaneista on kone, sanotaan koneen läpäisseen Turingin testin.

Jotta kokeessa todella testattaisiin vain koneen keskustelukykyä, se tehdään siten, että tuomari ei näe kumpaakaan keskustelukumppania. Keskustelu käydään pelkän tekstiyhteyden – esimerkiksi irkin – välityksellä.

(Bonuspisteitä saa, jos saa tuomarin vakuuttuneeksi siitä, että hän on kone.)

Virike 3

Oletetaan, että on käytössä IRC-bottikirjasto, joka piilottaa ohjelmoijalta IRC-palvelimen kanssa kommunikoinnin ja IRC-protokollan muut yksityiskohdat – ohjelmoija voi esimerkiksi tehdä metodikutsun this.join("!studio1");, ja kirjasto hoitaa loput.

Bottikirjastossa käytetään tapahtumapohjaista ohjelmointia. Perusideana on se, että ohjelmoija toteuttaa omaan bottiluokkaansa metodeita, joita kirjasto kutsuu tietyn tapahtuman sattuessa. Otetaan esimerkiksi metodi onMessage, jota kutsutaan aina, kun botti näkee jonkin viestin.


  public void onMessage(String sender, String channel, String message) {

	if (message.startsWith(this.getName()) {

		this.send(channel, sender + ": " + message);

	}

  }

Yllä kuvattu metodi tarkkailee kanavalle tulevia viestejä, ja jos jokin viesteistä alkaa botin omalla nimellä, botti toistaa viestin kanavalle. Samantyyppisiä metodeita on useimmille kuviteltavissa oleville tapahtumille, esimerkiksi:

  • Joku käyttäjä (tai botti itse) liittyy kanavalle tai poistuu sieltä
  • Kanavan topic vaihdetaan
  • Joku poistetaan (kick) kanavalta
  • Botille lähetetään yksityisviesti
  • Yhteys palvelimelle katkeaa

Tehtäviä

  1. Keksikää erilaisia toimintoja, joita irkkibotti voisi suorittaa.
  2. Suunnitelkaa arkkitehtuuri, jonka avulla botin eri toiminnot voitaisiin jakaa ryhmän kesken siten, että kukin toiminto olisi omassa Java-luokassaan, ja kutakin luokkaa voisi kehittää muista riippumatta. Myös uusien toimintojen lisäämisen tulisi olla helppoa.
  3. Ideoikaa muutama toimintamalli, joita käyttämällä botti voisi yrittää selvittää Turingin testin. Miten botti voisi osata puhua? Entä miten sen voisi opettaa puhumaan?

TYÖOTSAKE:

OPPIMISTAVOITTEET:

LÄHTEET: