Arkisto lokakuu, 2007:lle

RobottiHepalon (eli miten sen piti toimia)

Ryhmämme aloitti roboturnaus-haasteen lähestymisen OLOssa esiintyneen robotti labyrintissä-ongelman pohjalta. Heti alussa oli siis selvää, että robotista koodataan sellainen, että se selviytyy labyrintistä, joka on mielivaltaisen kokoinen ja muotoinen, siinä voi olla seiniä ja avointa tilaa, käytävät voivat haarautua ja johtaa umpikujiin… Ainoa järkevä keino robotin toteuttamiseen oli siis selvästi se, että esimerkiksi umpikujaan joutuessaan robotti muistaisi mistä on tullut ja pyrkisi “peruuttamaan”, sekä valitsemaan sen jälkeen suunnan, missä se ei ole vielä ole käynyt. Assistentiltamme saadun vihjeen avulla päättelimme, että käytyjen ruutujen koordinaatit pitäisi saada talletettua robotin muistiin, jotta se ei palaisi takaisin umpikujiin vaan menisi siihen suuntaan, mistä sen on mahdollista liikkua paikkaan, missä se ei ole vielä käynyt.

<Olli>Hmmh joo. Yritän parhaani mukaan kertoa robotin toimintaperiaatetta vähän tarkemmin mitä yllä on. Korjata saa ja pitääkin jos huomaa jotakin mitä en muistanut oikein.
Pääperiaate oli se, että kulkusuunnat oli priorisoitu seuraavasti: 1. pohjoinen, 2. itä, 3. etelä ja 4.länsi. Jokainen ruutu missä käytiiin tallennettiin käytyjen ruutujen listaan, tässä käytimme arrayList -toteutusta. Lisäksi jokaisessa ruudussa katsottiin erikseen moneenko suuntaan siitä olisi mahdollista kulkea. Jos ruudusta pääsi kolmeen tai useampaan ruutuun,  ruutu olisi kiinnostava myös myöhemminkin, sillä tulosuunnan ja nyt edettävän suunnan lisäksi jäisi vielä yksi mahdollinen kulkusuunta auki. Käytimme apuna pinoa, johon robotti tallentaisi kyseiset ruudut. Pinon päällimmäiseksi jäisi tällöin viimeisin kiinnostava ruutu. Mikäli robotti kohtaisi umpikujan, tarkoituksemme oli, että otettaisiin kiinnnostavista ruuduista päällimmäinen ja palattaisiin siihen. Ja siitä jatkettaisiin sitten kohti väljempiä vesiä. Ilmeisesti paluureitti kiinnostavaan ruutuun oli myös tarkoitus tallentaa pinoon. Päädyimme lopputulokseen, että tällä tavalla toteutettu robotti olisi voittamaton (ainakin melkein). Kohtasimme hienoisia aika- ja tietotaitopuutteita varsinki paluureitin toteuttamisessa, joten robotista ei tullutkaan ihan täydellistä. Noh tällä kertaa annoimme hieman tasoitusta kanssakilpailijoille, ehkä liikaakin..

sunnuntai-iltaa!!

Juu, kolmas Java-tehtävä, vaikka kolme viikkoa aikaa onkin, näyttää aika haastavalta, ja veikkaan, että Maarilla tai jo niin tutuksi tulleessa Paniikissa(<3) tulee taas useana iltana (toiset pitkään ja toiset vielä pidempään) istuttua. Paras hetki tähän asti on varmaan jo ekalla tehtäväkierroksella MaariC:ssä kokiksen ja suklaan voimalla selvityt noh, aika monta tuntia. Mutta tunnelmaa sessiossa ainakin oli! Phukseja istui samassa luokassa varmasti parisenkymmentä, ja kaikki saman tehtävän kimpussa! Ei Studio1:stä siis turhaan mainosteta ryhmähenkeä ja yhteenkuuluvuudentunnetta parantavana kurssina! Ainakin voimme aina löytää yhteisen puheenaiheen ruokapöytäkeskusteluihin.

Kolmas teoria putkahti hieman puuntakaa matikan välikokeen ja kaiken muun ohjelman painaessa päälle. Esseen kirjoittaminen ei inspannut keskellä viikkoa, joten tehtävä sai taas jäädä odottamaan iki-ihanaa perjantai-iltaa, jotka olen nyt jo useaan otteeseen viettänyt joko koodaten tai sitten vastaavasti mm. kalakirjaa lukien. Onneksi jo viime tehtäväkierroksella ihastuin käsitekartan tekoon, joten avasin taas CmapToolsin ja lähdin sijoittelemaan siihen pohjalle erinäisiä käsitteitä sisältäviä palluroita. Ja homma sujuikin hyvin niin kauan, kun niitä palluroita tosiaan sai vain heitellä sinne tänne! Jossain vaiheessa, kun käsitteitä ja ideoita oli kertynyt jo jonkin verran, näytti kartta enemmänkin epäsäännölliseltä hämähäkinseitiltä ilman mitään logiikkaa kuin selkeältä käsitekartalta Javan poikkeuksista. Ajatustauko! Ehkei kaikista käsitteistä tarvitse eikä edes voi ihan joka suuntaan nuolia vetää… Käsitekartassa ainakin minulle suurimpia ongelmia tuottavat omien ajatusten selventäminen! Mutta kun viivoja vähän karsii, ja palluroita järjestelee ja värittää, on aihe selvästi ksitettävissä, ja (toivottavasti) itsekin ymmmärtää sen paremmin.

Javan poikkeukset aiheena ei minulle ollut helpoimmasta päästä vaikkakin suhteellisen usein esiintynyt! Koodia kääntäessä on jo vähän liiankin usein saanut tulostukseen tekstin NullPointerException, ensimmäisillä kerroilla tajuamatta mitä kyseinen tulostus tarkoittaa, tai ehkä pikemminkin, että miten virheen voisi korjata. Virheitä ja virhetyyppejä oltiin käsitelty jo OLOssa, joten uutena asiana tuli poikkeusten käsittely ja oman poikkeusluokan luominen. Eli käsitekartan teon jälkeen voin todeta taas olevani ainakin hieman edellistä viisaampi, mikä tietysti olisi erittäin toivottavaa, sillä tämän kolmannen ohjelmointitehtävän loppuakin jo uteliaana vilkaisseena tiedän, että pääsemme siinä ihan itsekin aiheuttamaan poikkeuksen!!

-meri

pakko kertoa!

Päiväni alkoi tänään hyvin, sillä kuulin, että VISA on lyhenne sanoista Visa International Service Association, ja tajusin yhteyden viime OLOsessioomme ja siinä käsittelemäämme aiheeseen, rekursioon. Sitten muistin esiintyneen lyhenteen PHP, ja voin vain todeta, että voiei… Mitä ihmettä, onko näitä vielä lisää?!! Noh, googletin vähän ja löysin Wikipediastakin yhdeksän, ja vielä kaiken lisäksi listattuna otsikon Rekursiivinen akronyymi alle!!

:D Tämä oli mielestäni erittäin hauskaa!

Öitä. -Meri

ExceptionalException extends Exception

Teoriatehtävä numero 3 käsitteli Java-ohjelmointikielen poikkeuksia. Pitkällisen pohdinnan ja hapuilun jälkeen päätin valita tehtävän alustaksi esseen käsitekartan sijaan. Esseen kirjoittaminen oli ihan mielekästä – ja jopa hauskaakin. Mutta motivaatiota ei kuitenkaan tarvinnut repiä ainakaan arvosanan tuomasta houkuttimesta, sillä esseiden vaikutus on kokonaisarvosanaan täysin olematon.

Poikkeukset Javassa

[avautuminen]Yksi Java-ohjelmointitehtävä vastaa painoarvoltaan 3,3 esseetä! Koodaamaan oppii vain koodaamalla ja sitä rataa, mutta kylläpä välillä tuntuu esseen kirjoittelu pelkältä huonolta vitsiltä. Kunnollisen esseen tai käsitekartan valmisteluun kuluu kuitenkin paljon aikaa – lähteisiin tutustuminen, rakenteen suunnittelu ja varsinainen toteutus – ja se on kaikenkaikkiaan pienehkö projekti. Ja kaikki tämä palkitaan kokonaisella 2%/työ kokonaiskurssiarvosanasta. Jokin ei oikein osu kohdalleen tuossa yhtälössä.[/avautuminen]

Mielestäni onnistuin saamaan melko kattavan käsityksen Javan poikkeuksista. Aihepiiri oli tietorakenteita selkeästi helpompi ja toisaalta ehdin nyt tutustua perusteellisemmin lähdemateriaaliin. Tällä kertaa katsoin tarpeelliseksi tutustua useisiin lähteisiin – kalakirjan ja mainion HeadFirstJavan lisäksi myös satunnaisiin aihetta käsitteleviin nettisivustoihin ja Sun-tutoriaaleihin. Varsinaisen pohjatyön tein ennen kirjoitustyön aloittamista. Taaskaan en unohtanut ripotella enemmän tai vähemmän tarpeellisia kuvia tekstin lomaan.

Ensi kerralla voisi sitten vaihtelun vuoksi tutustua taas käsitekartan saloihin. Alustavissa suunnitelmissa olisi tehdä käsitekartasta edeltäjäänsä verrattuna paria astetta visuaalisempi kokonaisuus – eikä tyytyä pelkästään CmapToolsin tarjoamiin työkaluihin. Siis tämä kaikki jos onnistun jotenkin huijaamaan itseni motivoituneeksi tuosta ei-niin-maagisesta kahdesta prosentista.

– Teemu

Fiiliksiä ja kysymysmerkkejä

Tässä toista käsitekarttaa tehdessäni tulin ajatelleeksi, että ryhmämme robottiin pitäisi saada vähän vauhtia. Yksin koodaaminen kuulostaa kammottavalta, kun ei oikein tidä mitä muut ovat suunnitelleet/ajatelleet. Lisäksi omat ohjelmointikyvyt eivät vaikuta riittäviltä kodin kehittelyyn. Ehkä olisi parasta sopia kollektiivinen koodauskerta, esimerkiksi maanantaina ja tiistaina, jotta robotti saataisiin oikeasti tehtyä :) Deadline on siis jo tiistaina…

Sitten voisin turista vähän omista tehtävistäni. Poikkeukset käsitekartan/esseen aiheena tuntuu hyödylliseltä, sillä koodamisessa esiintulevat nullpointterit yms. kivat errorit ovat toisinaan aiheuttaneet ihmetystä. Jos poikkeuksia voi käyttää myös muilla tavoin hyödyksi, helpottuu ohjelman toiminnan testaus huomattavasti. Katsotaan millainen palluraverkko sieltä syntyykään…

Ohjelmointitehtävistä sen verran, että jostain kumman syystä nyt tehtävien kunnialla suorittaminen on alkanut kiinnostaa. Aiemmat kaksi tehtävää olen tehnyt juuri ja juuri valmiiksi ja hyväksyttävästi. Kolmannen kohdalla aionkin katsoa, onko mahdollista että saan koodattua ohjelman oikeasti hyvin enkä pelkästään rimaa hipoen. Käsitekarttoihin ja esseisiin panostaminen kun tuntuu hyödyttömältä niiden painoarvon ollessa niin pieni (2 % arvosanasta!). Saa nähdä miten projekti edistyy :) On tässä sentään kolme viikkoa aikaa.

Yritetään saada se robottikin tehtyä, jooko?

-Asta

Virhe! 5. OLO-tapaus

Viime viikon OLO-tapaus käsitteli virheitä Javassa, sekä niiden ratkaisemista. Javan virheisiin pääsemme paneutumaan lisää, sillä myös seuraavan viikon Essee-tehtävä käsittelee näitä elämän vaikeaksi tekeviä epäonnistumisia. Nyt ollaan siis päästy aiheeseen, joka on ainakin allekirjoittaneelle hyvin lähellä sydäntä

Tutustuimme aiheeseen koodinpätkällä, johon oli mahdutettu monenmoista pikkuvikaa. Muutaman syntaksivirheen (kieliopillinen virhe) löysimme samantien, mutta muuten homma sujui aloituksessa lähinä peukaloita pyöritellen. Purussa tilanne oli jo hieman selkiytynyt ja loputkin toiminnalliset virheet (vika on koodin “logiikassa”) saatiin Vesan kunniakkaalla avustuksella poistettua. Tapauksessa huomasimme (kuten varmaan useimmat jo aikaisemmin koodatessaan), että virheitä tulee koodiin helposti ja huomaamattomasti. Syntaksivirheitä voidaan ehkäistä, tai ainakin niiden ratkaisua helpottaa, kun käännetään koodi usein. Näin esiin tulevat virheet on huomattavasti helpompi paikallistaa. Sama pätee osittain myös toiminnallisten virheiden kohdalla. Toiminnallisten virheiden ratkaisemista helpottaa myös koodin kommentointi, ja tarkoituksenmukainen nimeäminen, jolloin jälkeenpäin pystytään paremmin selvittämään, mitä edes haluttiin tehdä. Mutta nyt paneutumaan aiheeseen lisää esseen parissa…

Ja eikun robotoimaan!

Toinen java-tehtävä on jo toivottavasti saatu palautettua, ja ajoissa, sillä minulla on teille kaikille hyviä uutisia: eli sain nyt vihdoin Unix-aapisenkin auki (ensimmäistä kertaa) ja luotua (pienellä avustuksella) kotihakemistooni oloryhmämme jäsenistä koostuvan ryhmän! Eli päästään kaikki koodaamaan Hepalonrobottiamme!

Ryhmä on siis nimellä a-hepo, nimihän piti olla “hepo” ja a-kirjain tuossa edessä tuottikin ongelmia, kun yritin lisätä loputkin ryhmästämme käyttäjiksi. Mutta nyt pitäisi toimia, eli hakemistossa nimeltä robottiturnaus/ on kaikilla kirjoitus- ja lukuoikeus! Sieltä löytyy luokka Robottihepalon.java, jota sitten ahkerasti päivitellään :)

-Meri

Uuteen viikkoon ja kohti robottiturnausta

Moikka!

Javatehtävät on toivottavasti onnistuneesti palautettu. Itse onnistuin tekemään 1,5 tuntia ennen salibandypeleihin lähtöäni yhteen if-lauseeseen muutoksen, joka kokonaan esti palojen lisäämisen Pelimaailmaan! Ei paljoa naurattanut, mutta onneksi tuntien taistelun lopputulos oli onnellinen: sain ohjelmani toimimaan haluamallani tavalla.

Toivottavasti kaikki pääsevät mahdollisimman nopeasti seuraavan teoriatehtävän kimppuun. Tuleva viikko näyttää varmasti paljon suuntaa robottiturnauksen onnistumiselle, joten toivottavasti heti alkuviikosta saadaan vauhti päälle. Ensimmäinen tapaaminen koodaamisen merkeissä sovittiin maanantaiksi, javaharjoituksen jälkeen kello 12-14. Merin nettisivuille tulee kansio, jossa meidän koodia/koodeja säilytetään. Toivottavasti saadaan muokkaaminen toden teolla käyntiin jo maanantaina.

Ylihuomiseen!

Käsitekartasta

Ensimmäinen käsitekartta tehty ja palautettu – vieläpä ajallaan, hiphei! Kartan teosta jäi ihan positiiviset fiilingit; cmapilla leikkiminen oli varsin hauskaa ja kartan teko huomattavasti esseen tekoa sujuvampaa. Hieman kiire uhkasi taas tulla deadlinen lähestyessä, ja siksi osa kartasta saattoi jäädä hieman suppeaksi/sekavaksi. Koin kuitenkin tämän kartan tekemisen opettavaisemmaksi kuin aikaisemman esseen, sillä karttaa väsätessä joutui oikeasti pohtimaan asioiden suhteita ym – esseeseen taas saattoi eksyä muutama lause, joiden merkityksestä ei ollut aivan täysin varma…

Semmoista. Huominen OLO-sessio vähän mietityttää, sillä robotti-algoritmi on vielä varsin vajavainen (ja sen piti olla se kaikein helpoin!!!),mutta ehkäpä yön aikana tulee joku kaamea valaistuminen. Toivotaan.

Ensimmäinen käsitekartta

Päätin aloittaa käsitekartan tekemisen viime kerrasta oppineena hieman aikasemmin. Sainkin sen jopa alulle alkuviikosta, mutta sen edistyminen oli jokseenkin verkkaista ja suurin työ jäi taas yllättäen lauantaille.. Pääsin hyvin alkuun tehtävässä, koska aloitin helpoimmasta alueesta, eli primitiivityypeistä. Ongelmat tulivat vastaan kun rupesin käsittelemään kokoelmia.

Luulin tietäväni kokoelmista jotain, mutta sitten vastaan rupesi tulemaan termejä, kuten kokoelmakehys, liittymä jne. Ei auttanut muu kuin avata kalakirja (jälleen kerran) kyseisestä kohdasta. Kokoelmat-luku tuli kahlattua varmaan viiteen otteeseen läpi ja ehkä siitä loppujen lopuksi jäi jotain päähänkin. Loppujen lopuksi uskoisin, että ymmärrän nyt kokoelmien perusidean. En ole vain täysin varmuudessa, sainko tuotua ideani käsitekarttaan oikein ja onko siinä kaikki suhteet oikein..

Pyrin esityksessäni havainnollisuuteen ja vältin liiallisten asioiden ja suhteiden lisäämistä karttaan, ettei siitä tulisi liian sotkuinen päällekkäisten nuolten takia. Käsitekartta jäi hieman suppeaksi, ehkä juuri kokoelma-tuskailujen takia, mutta nyt kävi näin ja olen ihan tyytyväinen karttaani. Kokonaisuutena tehtävä oli opettavainen: tutustuin Cmap-ohjelmaan, joka osoittautui varsin toimivaksi ja nyt tiedän kokoelmista enemmän, kuin viikko sitten, eli jonkin sortin oppimistakin on tapahtunut!

-Olli-

Seuraava sivu »