You are currently browsing the category archive for the 'OLO-tapaukset' category.

Avaudunpa tässä vielä, kun aikaakin on monta kymmentä minuuttia.

Syksyn alussa meille kerrottiin, että luvassa olisi kahdeksan olo-tapausta. Mainittiin myös, että tapausten määrää oli vähennetty edellisvuodesta kahdella, koska viimeiset Olot oli koettu jo hieman turhiksi. Kun tämän vuoden kurssilaiset olivat kokoontuneet kahdeksan kertaa yhteen, ei lopusta ollut vielä tietoakaan. Osassa tapaamisista oli ollut vain pelkkä purkusessio ja vastaavasti näitä seuraavissa tapauksissa pelkkä uuden aiheen avaus, mistä johtuen  kokoontumisien määrä kasvoi. Miksi näin? Miksei määrää olisi voinut vain pitää kahdeksassa ja käydä jokaisessa tapaamisessa sekä vanhan ongelman purku että uuden avaus? Hiukan kyseenalaista oli myös dialogikartan käytön opettelu olo-session aikana. Mihin kyseistä taitoa itse asiassa tarvittiin? En kokenut sen millään tavalla parantaneen aikaansaannostamme.

Vielä vaan jaksaa kysellä ja ihmetellä… Ei loppua näy

Levollisin mielin, viime keksiviikkona, ryhmä kolme istahti pöydän ääreen puimaan laivanupotusta viimeisessä olosessiossaan. Jo edellisellä viikolla päivänvalon nähnyt Compendium dialogi-karttame laajeni, täsmentyi ja jalostui, kun se peilasi ajatuksenjuoksuamme.

 

Oppimistavoitteisiin jaettu laivanupotuspelin ohjelmointi -tehtävä kasattiin pala palalta. Ensimmäinen pala oli nimeltään JButton, joka soveltui koko ryhmän mielestä hienosti laivanupotuspelin taulokon ruutuihin. Svante kertoi, että nappeihin pystyi ujuttamaan tekstiä ja kuvia, vaikkapa uponneen laivan tai siivun aavaa merta. JButtoneista tehtäisiin puolestaan jonkinlainen ruudukko tai taulukko; GridBagLayout Managerin monipuoliset toiminnot ja sovellettavuus vaikuttivat lupaavilta nappien hallinnassa. Saimme myös vihiä, että JTablesta saisi oivan taulukon.

 

Viisastuneena poikkesimme myös alkuperäisestä luokkarakennesuunnitelmastamme: yhden, minimalistisen luokan taktiikka heitettiin tylysti yli laidan. Pelin tarpeiden pelkistyminen ja grafiisen käyttöliittymän implementointi vaatii ainakin muutaman luokan. Pelin laajentaminen olisi myös helpompaa. Laivalle, graafiselle käyttöliittymälle, pelaajalle jne. kannattanee tehdä näin omat luokkansa.

 

Kaikestä tästä oli varmasti antamaan rohkeutta seuraavalle urakalle, eli, kuten Tiina OLO 8 -avauksessa jo mainitsikin, ajatukset suuntautuvat ohjelmointiprojektiin. Eväät projektin ideointiin ja toteutukseen on annettu. On hyvä muistaa, että hyvin suunniteltu on puoliksi tekemättä.

 

(tässä vielä laivanupotus dialogikartta t: Svante)

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

Kahdeksannessa OLO-tapaamisessa aiheena oli laivanupotuspelin suunnittelu. Hyvin nopeasti ideoita alkoi tulvia taululle. Jokainen oli joskus pelannut laivanupotusta ja muodostanut pelistä itselleen jonkinlaisen kuvan. Löytypä netistä äkkiä malliesimerkki javalla tehdystä laivanupotuspelistä.

Ideointi ei ottanut loppuakseen ja eteenpäin pääsy oli hankalaa. Laivanupotukseen olisi hienoa kehittää vaikka minkälaisia animaatioita ja taustoja. Emme siis päässeet pelin suunnittelussa kauhean syvälle. Mietimme hieman sitä minkälaisia luokkia peliin tarvittaisiin ja miten mikäkin pelin osa tulisi toteuttaa. Muta yhä edelleen ajauduimme näistä pohdinnoista yleiseen ideointiin.

Tehtävän tarkoituksena oli varmaankin valottaa hieman tulevaa ohjelmointiprojektia. Siinä joudumme aivan itse määrittelemään sen millaisen ja kuinka laajan projektistamme teemme. Suunnitelmasta tulee helposti liian laaja ja sitten toteutus jääkin puolitiehen. Tärkeää varmasti olisikin aloittaa aivan perusteista, joita ilman projekti ei toimi. Perusteissa olisi hyvä mennä tarpeeksi alas, eli aivan yksittäisiin metodeihin asti. Tämän jälkeen voi vielä ideoida uudelleen sitä, mitä projektissa voisi muuttaa ja kehittää.

Vaikka java-tehtäviä on vielä muutama jäljellä ja yhden teoriatehtävän palautuskin on vielä tulossa, karkaa ajatukset jo tulevaan projektiin. Ainakin itse olen jo päässäni alustavasti hieman kaavaillut sitä, mitä tekisin ja millaiselta lopputuloksen tulisi näyttää. Ehkä ennen varsinaisen projektin aloitusta olisi kuitenkin hyvä miettiä muutamia käytännön asioita omaan projektiin liittyen; aikatauluja, työtapoja jne. Tässäkin työssä maltti on varmasti valttia.

Käytimme tehtävän pohdintaan dialogikarttaa. Kartta selkiytti jonkin verran ajatuksia. Toisaalta karttaan oli myös helppo eksyä, ja samoja asioita tule helposti moneen paikkaan. Kuitenkin projektia ideoidessa on hyvä pitää kysymykset mielessä; mitä oikeastaan tarvitsen, miten sen toteutan, mitä tarvitsen toteuttamiseen jne. Näihin vastatessa myös hyvät ja huonot puolet on syytä ottaa huomioon, kuten kartassa.

Oppimistavoitteiksemme asetimme monia swingin käytännön toteutukseen liittyviä asioita ja laivanupotukseen tarvittavien luokkien uudelleen organisoinnin. Luulenpa, että näiden kautta pääsemme purkusessiossa paremmin perille, siitä, miltä pelimme tulisi oikeasti näyttää. Otetaan siis sama käytäntö omiin projekteihimmekin, ensin rohkeaa ideointia ja sitten paluu ruohonjuuritasolle. Eiköhän siinä saa loman kulumaan :)

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

6. sessioiden tärkein anti taisi olla se; mihin, miten ja miksi rekursiota voidaan käyttää.

Sofin kanssa kerroimme, rekursion olevan keino pilkkoa suuri ongelma pienemmiksi osaongelmiksi, jotka ovat alkuperäisen ongeman kaltaisia. Pilkkomista jatketaan kunnes ongelma on suoraan ratkottavissa. Selvitimme myös miten JavassaRecursion metodit voivat tosiaan kutsua itseään.

Olli ja Sanna olivat pohtineet, miten selvitetään onko kaupunki valmis vai ei. He kertoivat, miten rekursiivisesti edetään aina viereiseen sektoriin ja tarkistetaan onko vierellä kaupunkia. Kysely jatkuu palojen vaihtumisesta huolimatta aina eteenpäin, kunnes kaupunki loppuu tai vieressä ei ole palaa.

Moona ja Antti kertoivat, miten kaikki metodikutsut, parametrit ja paluuarvot tallennetaan pinomuistiin. Pinomuisti voi käytännössä täyttyä vain päättymällä rekursiolla.

Sokerina pohjalla oli Sunin ja Oulan kirjoittama vaihtoehtokoodi mysteerimetodille, jonka huomasimme avauksessa kalauttavan lopulta siihen syötetyn luvun kertoman. Metodi laski loopilla kertomansa eikä enää ollut siis rekursiivinen metodi.

Taas kerran sessiot taisivat pohjustaa ohjelmointitehtäväämme.

Viikko sitten meillä oli 6. OLO-session avaus, joka sai nimekseen Ohjelmointitehtävät. Meidän piti käsitellä useampaa osatehtävää, joista suurimman osan hoidimme sessiossa. Nämä käsittelivät rekursiota, ja niistä mahdollisesti syntyviä loppumattomia looppeja.

Täytyy myöntää, että henkilökohtaisesti olin ajoittain enemmän tai vähemmän pihalla. Johtuiko se sitten yllätyksestä, että OLO alkoikin pari tuntia luulemaani aikaisemmin vai tehtävien vaikeudesta ja omasta ymmärtämättömyydestäni niitä kohtaan… Joka tapauksessa kaksi tehtävistä ratkesi helposti ja kolmaskin tuli suht koht sujuvasti. Neljäs jäi oppimistavoitteeksi. Ehkä aiempiin OLO-sessioihin verrattuna syntyi vähemmän keskustelua ja muutenkin asiat olivat epäselvempiä ja vaativat enemmän selittämistä. Mutta tietenkin aina oppii jotain uutta!:)

Hämmentävästi toiseen ajankohtaan siirretty sessiomme alkoi entistä hämmentävämmin, kun Petri tuli poimimaan meidät oman vakioluokkamme edestä kuljettaen meidät täysin uuteen tilaan jonnekin kauas yläkerroksiin. Tämä uusi sijainti oli kuulemma ilmoitettu samassa viestissä, jossa oli kerrottu ajankohdan muuttumisesta, mutta yksimielisesti totesimme, ettei niin paljoa informaatiota voi ottaa vastaan yhdessä viestissä. Vielä uuteen tilaan siirryttyämmekin saimme soitella muutaman eksyneen lampaan perään ja ohjata heidät luoksemme ennenkuin pääsimme aloittamaan varsinaisen session.

Alkuun kertasimme robottimme (joka on muuten sikahyvä) toimintaa ja päätimme, että hoidamme tällä viikolla kuntoon myös edellisen viikon hieman unohtuneen tehtävän kirjoittaa koodaamistavoistamme blogiin. Sen jälkeen pääsimme itse asiaan, joka koski virheitä ja niiden välttämistä javaa koodatessa. Kuten aina tähän mennessä, myös tällä kertaa ensimmäisenä tajuntaamme räjähti sanat “plan B”. Varasuunnitelmaa ei korvaa mikään. Muitakin kikkoja virheiden välttämiseksi sateli tuttuun tapaamme kuin liukuhihnalta, ja esille tuli mm. kynän ja paperin käyttö kaavioiden piirtämisessä, testien tekeminen jokaisen “palikan” jälkeen sekä halutun tuotoksen ääneen sanominen. Kärsivällisyys on kaikkien mielestä välillä raastavaa, ja käännöksiä ja tarkistuksia ei todellakaan aina jaksaisi tehdä, mutta mitään niin hajottavaa ei olekaan kuin logiikkavirheet, joiden tuloa estääkseen itse kukin on valmis suuriinkin uhrauksiin. Ainakin toisinaan.

Kokonaisuudessaan purkumme oli ohi varsin nopeasti, ja sen enempää aikaa tuhlailematta käänsimme katseet kohti rekursion auvoista maailmaa.

Koska pidimme ylimääräisen OLO-ryhmämme tapaamisen liittyen robotin oppimistavoitteisiin, ei jäljellä ollut enää paljoa purettavaa. Nopeasti kertasimme vielä läpi robottimme strategian. Puhuimme myös siitä, mitä ja miten robottimme haluaa muistaa asioita.

Purku sujui paljon letkeämmin kuin jotkut aiemmat kun olimme oikeasti miettineet asioita ja vieläpä yhdessä. Yksin ei siis kannata jatkossakaan jäädä pohtimaan OLOjen oppimistavoitteita vaan miettiä niitä toisten kanssa. Aiheesta saa näin paljon enemmän irti ja oma motivaatiokin on parempi.

Tässä vielä muutaman sanan ylimääräisestä tapaamisestamme. Sen lisäksi, että saimme robotillemme hienon strategian paransimme mielestäni myös roimasti ryhmähenkeämme! Kaikki olivat innolla mukana ideoimassa. Samalla mietimme myös tapoja hyödyntää blogiamme paremmin ja niitäkin löytyi mukavasti. Jokaiselle löytyi jotakin kirjoitettavaa.

Sovimme vielä, että kaikki kynnelle kykenevät tapaavat keskiviikkona 10.10. klo 14.00 OLOhuonella miettien tarkemmin robottimme toteutusta, jottei perjantain robotin teko hetki mene hukkaan. Tästä on siis hyvä jatkaa eteenpäin. Toivotaan robotillemme parasta mahdollista menestystä kilpailuun!

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!