You are currently browsing the category archive for the 'Yhteisölliset ohjelmointitehtävät' category.

7. OLO-session aihe oli ihana! Muistan, miten joskus yläasteella tein botin QuakeNetin #karjaa -kanavalle, jossa oli minun liskseni myös toinen Karjaan kaupungin ADSL-yhteyden omistavista ihmisistä. Telnet-botti “Karjaa-bot” oli kanavan 3. vakiojäsen. Kopsailin Googlesta löytyviltä muilta boteilta !sää ja !telkkariohjelmat-komennot. Olin hämmentynyt, miten botti osasikin hakea jostain tietoa. Unohdin botit ja IRC-in pariksi vuodeksi, mutta NYT!

Kiinnostuin OLO-sessiossa suuresti Touringin testistä. Miten saisimme botin keskustelemaan? Oppiminen? WWW:nturing oraakkelit? Selailin Javan tutorialista keinot URL:n lukemiseen ja homma alkoi hahmottua. Saatuamme Paniikissa nasta-bottimme IRC-kanavallemme alkoi riemu, röhötys ja hekotus. Botti vastaa uskomattoman hyvin ja hauskasti sille heitettyihin letkautuksiin! Olen aivan rakastunut!

/me <3 nasta

OLOssa suunnitellessamme bottiamme, nousi sen tärkeimmäksi piirteeksi hulvaton huumori ja käyttäjiensä ilahduttaminen. Myös bottimme vitsit, sitaatit ja lait ajavat tätä samaa asiaa. Poikien tehtyä hyvän pohjatyön, oli meidän muiden helppo lisäillä omia luokkia ja komentoja bottiin. Vitseissä, sitaateissa ja laissa on kaikissa suunnilleen sama toiminta idea. Niissä on toteutettu random arpa, joka arpoo, mikä vitsi milloinkin palautetaan.

Positiivista koko botti-projektissa oli mielestäni se, että saimme melkein kaikki suunnitelmamme toteutettua ja jokainen löysi itselleen jotakin mielekästä tekemistä, myös taitojen puolesta. Toisaalta uskon meidän kaikkien saaneen myös hyvän kuvan botin perustoteutuksesta. Samalla oli mukava seurata miten jokaiselle löytyi jotakin ja miten erilaisia asioita kaikki tekivät.

Mitä esitykseemme tulee, olisi sitä varmaankin voinut hioa paremmaksi. Esitykseen käytettävä aika oli kuitenkin melko pieni ja siksi olikin tärkeää antaa nastan (bottimme nimi) puhua puolestamme, sillä sehän oli työmme tulos. Itse olen ylpeä botistamme monella tapaa; siitä mitä se tekee, mutta myös siitä millaisia perusominaisuuksia sillä on. Toivon, että nasta säilyy omalla irc-kanavallamme vielä pitkään. Tosin nastan aitouden takia, pelkään taas pikkuisen enemmän koneita

Noustessani ylös sängystä aamulla oli mielenkiintoni ryhmämme irkkibottia kohden kääntäen verrannollinen kofeiinintarpeeseeni. Tästä huolimatta lähdin kouluun, Paniikkiin, jonne olimme sopineet koodaussession. Paikalle oli jo saapunut kourallinen muita ryhmämme jäseniä, mukanaan enemmän tai vähemmän toteutuskelpoisia ideoita botin toiminnasta.

Avattuani Eclipsen ja aloitettuani koodauksen, niin ei kestänyt kauaa, kun olin yhtäkkiä botin lumoissa. Suurin syy tähän lienee se, kun lopullisesti tajusin, ettei alkuunpääseminen ole vaikeaa kiitos valmiin PircBot-rajapinnan. Aloinkin siis saman tien tutkia bottimme toimintaa ja koodata omaa “osatehtävääni”. Pienen vaivan jälkeen sain tämän henkilö-status-listan toimimaan, jonka jälkeen pohdittavaksi jäi kuinka liitän oman luokkani botin toimintaan. Tämä ei tosin ollut suuri ongelma.

Ja kun Svante ja Suni saivat botin oikeasti “keskustelemaan”, oli selvää, että ryhmämme oli taas jälleen kerran saanut jotain lähes ainutlaatuista aikaan. Tosin työmaata on edessä, sillä kaikki toiminnot pitää vielä koota yhteen. Seurauksena deadlinen siirrttymisestä torstaille, ei ole täysin varmaa, milloin botti lyödään lopullisesti kokoon. Sitä odotellessa..

Syntyykö bottimme ajoissa? Laskettu aika alkaa lähestyä. Tyylikäs runko on paketissa, mutta jokaiselle ryhmän jäsenelleStudBot

viime OLO-session lopussa jaetut osatehtävät vielä työn alla. Nyt kaikille tsemppiä.

Seitsemännen tapauksen purku jäi hyvinkin laihaksi. Allekirjoittanut ainakin myöntää, että työtä oppimistavoitteen eteen ei juurikaan tullut tehtyä, ja purkaminen ilman mitään opittua ei välttämättä ole se tehokkain toimintatapa ;) . Aikaa purkuun käytimme n. 15min, aika kauas jäi OLO-menetelmä-ohjelapun 1,5 tunnista! Muutenkin oppimistavoitteet olivat luokkaa “tarkkaile, kuinka irkissä puhutaan”, joten niiden hyöty botin käytännön toteutukseen oli tässä vaiheessa vielä melko pieni.

Nyt kun kirjoitan tätä tekstiä noin viikko session jälkeen, täytyy todeta, että käteen ei jäänyt juuri mitään. Saimme ehkä selvennettyä hieman sitä, mitä bottimme tulee tekemään, mutta erittäin vähän joka tapauksessa. Motivaatio botin tekemiseen tuntui olevan erittäin alhaalla (osittain ehkä johtuen siitä, että ainakin itse luulin bottiseminaarin olevan jo tänään, ja tiesin, että aikaa botin tekoon tällöin olisi), eikä kukaan jaksanut syventyä aiheeseen sen enempää.

Toisaalta oli ihan hauska kokea välillä tällainenkin purku, ainakin oli pää tyhjänä seuraavaa tapausta varten

Oli synkkä ja myrskyinen yö… eiku. Oli aika uuden ryhmäkohtaisen tehtävän… :D

Monille tämä OLO-sessio taisi tulla vähän puun takaa. Viimekertaisen olon jälkeen ainakin itselleni jäi sellainen käsitys, että se olisi ollut viimeinen “normaali” sessio ja että seuraava tapaaminen olisi vain joku pieni ohjeistus seuraavaa tehtävää varten (ja että siihen olisi aikaa ainakin pari viikkoa). Mutta sitten kävikin ilmi, että ihan normaali OLO-sessiohan se oli. Hyvä näin, sillä nyt saimme sylikaupalla ideoita hautumaan tulevaa varten.


äm irk

Tällä kertaa robotin sijasta joudumme suunnittelemaan ja toteuttamaan IRC-botin. Ensi töiksemme saimme eteemme kolme kappaletta virikkeitä, jotka käsittelivät IRCin bottien tarkoitusta ja toimintaperiaatetta. Virikkeet olivat mukavaa luettavaa, mutta ei niistä oikein irronnut “ahaa-elämyksiä” eikä muutakaan varsinaista hyötyä.

Virikkeet luettuamme kävimme innolla tehtävien kimppuun. Ensimmäiseksi rupesimme keksimään toimintoja, joita oma bottimme (tai botit ylipäätään) voisi mahdollisesti sisältää, ja lätkimme ne tuttuun tapaan Post-it® -lappuina taululle. Ideoita syntyi laidasta laitaan: niin hyötytoimintoja (mm. bussiaikataulujen ja Otaniemen ruokalistojen haku) kuin jotain aivan muutakin (mm. vitsien kertominen, paljaan pinnan vilauttelu). Ideat olivat hyviä ja monet niistä ovat jopa toteutettavissa. Suurin ongelma oli keksiä omaperäisiä, täysin uusia ideoita, joihin ei vielä olisi törmännyt aikaisemmin missään.

Seuraavaksi ryhdyimme pohtimaan arkkitehtuuria, jolla toiminnot saataisiin sisällytettyä bottiin jollain järkevällä tavalla. Lähtökohtana pidimme yhtä pääluokkaa, joka hallitsisi botin yleisiä toimintoja kuten IRC-kanavan ja ajan seuraamista ja kutsuisi aina haluttuja toimintoja vastaavia luokkia. Ongelmaksi muodostui se, että kenelläkään ei ollut varsinaista tietoa siitä miten homma käytännössä toimii, joten yksityiskohtaisemman ja monimutkaisemman toimintamallin suunnittelu ei oikein luonnistunut.

Aloitimme pariinkin kertaan (assarin vinkistä) toimintojen järjestelyn jonkin näköiseen järjestykseen, mutta homma tyssäsi aina ennen kuin pääsimme edes vauhtiin, sillä vastaan tuli taas oma tietämättömyytemme. Koska emme tienneet miten botti loppupeleissä toimii, oli hyvin vaikea miettiä toiminnoille ryhmitystä, josta olisi mitään käytännön hyötyä.

Keskustelu oli vilkasta, mutta se ajautui koko ajan botin keskustelukykyyn. Totesimme, että sen toteuttaminen on erittäin hankalaa, koska tekstistä on erittäin hankala poimia ns. tärkeitä sanoja (erityisesti suomen kielestä sanojen taivuttelun vuoksi) ja tehdä niistä päätelmiä. Siitä saimmekin muutaman hyvän oppimistavoitteen ensi kertaa varten.

Vaikka botin lopullinen toteutus on vielä täyttä hepreaa, jäi meille tästä sessiosta käteen iso kasa toinen toistaan parempia ideoita mitä botti voisi tehdä.

StudRobotti otti aamulla muiden ryhmien tekeleistä mittaa. Tekijänoikeuksiin ja tietoturvallisuuteen vedoten robotin synnystä ja sielunelämästä voikin kirjoittaa vasta nyt.

StudRobotti 7.0

Robottimme sai alkunsa 2.10. 4. OLO-tapaamisessa, jossa pohdittiin ryhmässä, millaiseilla algoritmeilla robotti saadaan selviytymään erilaisista labyrinteistä. Antti muisti lukeneensa Hampton Courtin palatsia ympäröivän puistolabyrintin ratkeavan oikeaa seinää seuraamalla. Itselleni ja muille tuli myös välittömästi mieleen kreikkalainen mytologia, jossa Ateenan Theseus pääsee takaisin ulos Kreetan kuninkaan Minoksen labyrintistä lankakerän avulla. Innostuttuamme oikeankädenmenetelmästä huomasimme, miten mainiosti sillä voidaan ensimmäiset labyrintit ratkaista. Viimeisessä tulikin vastaan ongelma. Maali ei sijainnut reunalla, eikä robotti osannut tutkailla ympärilleen. Pohdimme satunnaista suunnan valitsemista, mutta se onneksi hylättiin melko nopeasti tehottomana keinona löytää perille. Robotillemme tarvittiin siis lankakerän innoittamana muisti! Otimme oppimistavoitteeksemme suunnitella robotillemme jonkinlainen muistirakenne. Sovimme ekstratapaamisesta jo ennen seuraavaa OLO-sessiota.

Ekstratapaamisessa 8.10. olkkarilla puimme paikalle pääseiden Mariannen, Sannan, Moonan, Tiinan, Antin, Ollin, Sunin ja Oulan kanssa parin päivän aikana kehittyneet ideat muistin rakenteesta ja rakentamisesta. Fiksuimmaksi ratkaisuksi nousi avain-arvo-tyyppinen muisti. Senhetkisen Java-tehtävä 2:n innoittamana valitsimme Map:in toteuttavan HashMap:in StudRobottimme muistiksi. Pohdimme pitkään, millä avaimilla ja millä arvoilla muistia kannattaisi käyttää. Pläräilimme palaveria varten tulostettuja valmiita metodeita ja vinkkiluokkia ja löysimme mahtavan java.awt.Point-luokan. Päätimme, että robottimme tallentaa avaimella koordinaattipiste (x,y) kokonaisluvun, joka kertoo aikaisempien käyntikertojen lukumäärän kyseisissä ruuduissa. Sovimme seuraavaksi ensimmäisestä varsinaisesta ohjelmointitapaamisesta.

Paniikissa tietokoneiden tuulettimien hurinassa 12.10. ohjelmoimme koko joukolla valmiiksi 1. version robotistamme.1.0 version koodailua Siirtyessä uuteen ruutuun robotti tallensi muistiinsa joko uudelle pisteelle käyntikerroiksi 1 tai ennestään tutulle käyntikerrat + 1. Robotti tarkistaa kaikkien naapuriruutujen käyntikerrat ja tallentaa ne apumuuttujiin. Jos jossain suunnassa on seinä, tallennetaan kyseisen suunnan apumuuttujaksi megaiso luku. Robotti valitsee pienimmän apumuuttujan, ja etenee sen suuntaan. Tungimme StudRobotti ykkösen sekä Turnaus-ohjelman samaan zip-pakettiin, jonka siirsimme kaikkien ryhmäläisten saatavaksi IRC-kanavallamme julkaistuun internet-osoitteeseen. Sovimme, että kaikki miettii parannuksia ja vaihtoehtoja algoritmiin ja siirtää ne kaikkien saataville ennen versionvalinta deadlinea. Maanantaiaamusella

22.10. pidimme Sunin kanssa karsinnan parhaille kandidaateille. Ehdotuksista kokosimme lopullisen version 7.0, joka osallistui varsinaiseen turnaukseen. Parannuksina ensimmäiseen versioon nähden 7.0 etenee käyntikertojen tasapelin sattuessa aina oikealle. Lisäksi 7.0 merkkaa käytyjen umpikujaruutujen käyntikerroiksi 1000, eikä näin siis enää eksy niihin. Juttelimme muiden jäsenten kanssa IRC:n, SMS:n ja puhelimen välityksellä ja päätimme lähettää 7.0:n Villen pissatestiin.

P.S. Koitimme ottaa oppia tästä.

Julistan täten, että robottimme on alustavasti valmis ja toimiva!

Hyvän suunnittelun jälkeen ei tarvittu kuin pieni yhteinen koodailusessio Paniikissa, ja robo oli kunnossa alta aikayksikön.

Robo siis toimii ja löytää maaliin labyrintissa kuin labyrintissa, mutta pientä hiomista se vielä vaatii, että saadaan tyhmimmät reittiratkaisut kitkettyä pois. Irkistä löytyy ohjeet robon koodin saamiseen, joten jokainen voi myös tehdä omia innovaatioita robotin suhteen, mikäli siltä tuntuu.

Eeeexcellent

Puheenjohtaja myhäilee tyytyväisenä. Extra-OLOn tulos oli voittoisa. Sotasuunnitelmat ovat luotu. Mikään kompleksi, sokkelo tai arkkitehdin tyyliratkaisu ei kykene pidättelemään robottiamme. (Siis sitten kun se on valmis.) Enää ei voi muuta kuin odottaa aikaa iskeä… Ilahduttavaa oli, että lähes kaikki olivat päässeet paikalle. Yllättävää oli, että niinkin moni löysi paikalle. Huomenna uudestaan!

Puheenjohtajan ärähdys

 

Ensimmäinen raapustukseni (laiska?) käsittelee neljännen OLO-tapaamisen aiheita, eli pureutuu labyrinttia navigoivaan robottiin. Viime viikon maailmanpalasista piti rakentaa sokkelo, jonka sisään ujutettiin aarretta metsästävä robo. Henkilökohtaisia preferenssejäni hiveli, kun tehtävän puzzlemaisuus naamioi javan tyystin taka-alalle. Tällainen älypulma motivoi utilisoimaan pienet harmaat aivosoluni huomattavasti terävämmin kuin raaka koodaus.

 

Alussa oli hiljaista, suorastaan väsynyttä – mistä lie johtuikaan ;) . Sitten, oikealle raiteelle päädyttyämme tehtävä oli yllättävän helposti lähestyttävissä. Maailma hahmottui nopeasti ruudukoksi, jonka jokaisessa ruudussa oli neljä mahdollista kulkureittiä: eteen, taakse, oikealle ja vasemmalle. Robolla oli siis edessä valintojen, no ainakin neljän, maailma.

 

Onneksemme joku pikku koodari oli väsännyt robotille valmiiksi hyödyllisiä, suuntaa-antavia metodeja. Pohjaa rakensi myös pyrkimys sokkeloiden navigoimiseen robotin omaa muistia tarvitsematta. Yksinkertainen, mutta systemaattinen oikean polun taktiikka osoittautui voitokkaaksi ainakin kahdessä ensimmäisessä esimerkkilabyrintissa ja selvisi se myös tuutorimme Petrin asettamista haasteista. Tiinan sommittelemien Post-it -lappujen kuvaama algoritmi näytti myös erittäin selkeältä ja loogiselta. Tämän pohjalta oli hyvä lähteä soveltamaan uusia algoritmeja.

 

Havaitsimme, että seinänvierustaa kulkemisessa on ongelmansa. Minua ainakin säälittäisi tiputtaa robottimme keskelle peltoa ja katsoa, kun se pyörii onnettomasti ympyrää, vaikka maali saattaisi olla ruudun tai kahden päässä. Jos vieläkään ei haluta käyttää robotin omaa muistia, voisi koettaa jonkinlaista alueen haravointitaktiikkaa. Tätä voisi verrata vaikka jalkapallokentän nurmen leikkaamiseen; eteneminen on edelleen systemaattista.

 

Varsinaisia oppimistavotteita ei täsmennetty, mutta totesimme algoritmien vaativan lisäpohdiskelua ja sulattelua, joten päätimme järjestää ylimääräisen OLO-tapaamisen, joka sovittiin maanantaille 8.10 alkaen klo 14, siis ohjelmointiharkkojen jälkeen. Eli: mietintämyssy päähän ja maanantaina tavataan!

 

The Gist

  • hauskaa oli

  • hyvin meni

  • vielä on hommaa

  • tapaaminen ma 8.10 klo 14