You are currently browsing Svante's articles.

Kukkalähetys Brasiliaan oli huippumenestys. Itseni lähettämä ruusukimppu saapui perille tänään – syntymäpäiväniKukkalähetys Brasiliaan onnistui!
aattona – kello 22 (uusi ikäni). Nyt voin vihdoin sanoa että Studio1 on pulkassa! Nyt vain odottelemaan lopullista arvosanaa, joka riippuu täysin projektini ja blogin arvosanasta. Tavallaan turhauttavaa, koska tein koko syksyn ja talven Studion eteen töitä niska limassa. Toki arvosanat eri ohjelmointikierroksilta ja esseetehtävistä lämmittivät mieltä, mutta harmillista on että koko pläjäyksestä annetaan lopulta vain yksi arvosana. Tärkein asia kuitenkin on jo tiedossa: olen oppinut ohjelmoimaan!

Tätä kurssia ei voi oikein kuvata millään muulla sanalla kuin loistava. Kaikkien kurssien tavoite on opettaa opiskelijalle kurssiesitteessään lupaamat tiedot ja taidot. Tässä T-106.1250 ja T-106.2001 ovat onnistuneet täydellisesti. Suuret kiitokset kanssaopiskelijoille, assareille sekä opelle!

Heti kärkeen aikataulutuksesta avautuminen. Kurssin kuluessa minulla oli monia hienoja ajatuksia ja visio täydellisestä Studio 1 kurssista – joka muuten on aikalailla nykyisen näköinen. Nyt kuitenkin ollessamme jo 2008-vuoden puolella kaikki parannusehdotukseni ovat joutuneet Javan roskankeruun – joka toimii Napolin vastaavaa paremmin – uhriksi. Eihän tässävaiheessa enää voi muistaa mitään. Mielestäni tärkein kehityskohde voisi olla kurssin aikataulutus. Esimerkiksi blogin osittainen deadline olisi ollut täydellinen ennen joulua. Nyt on todella hölmöä sanoa tyttöystävälle ja kavereille: “Joo.. mul on vähän tota studiohommaa viel”, vaikka eletään jo periodia III. Ainoastaan loppukommentit olisi voitu jättää tammikuun lopulle. Tässävaiheessa ei tosiaan enää vaan mitenkään pysty muistamaan kaikkea. Esimerkiksi ohjelmointikierroksista ja esseistä kirjoittaminenkin olisi voitu jollain konstein pakottaa kirjoitettavaksi välittömästi varsinaisen tehtävän palauttamisen jälkeen.

Aikataulutusongelma rassasi myös yhteisöllisiä ohjelmointitehtäviä. Robotti ja bottitehtävät olivat kerrassaan mahtavia, mutta yhteistyötä latisti suuresti se, että opiskelijoilla oli samaan aikaan omalla vastuullaan henkilökohtainen ohjelmointitehtävä, essee tai pahimmillaan molemmat. Olisiko mahdollista tehdä niin, ettei yhteistyöprojektien aikana olisi muita tehtäviä julkaistu? Esimerkiksi tietokoneluokassa on niin pirun helppoa avata vaivihkaa oma koodi Eclipsellä ja välillä nyökätä kun kysytään ryhmän mielipidettä projektia koskevissa asioissa.

Vaikka OLO-sessiot ja blogi saavat monelta kontollensa lähestulkoon pelkkää haukkumista, ovat ne mielestäni täydellisiä lisämausteita ohjelmointisopassa. Joku viisas filosofi voisi kyllä keksiä keinon, jolla motivaatio näitä kahta kohtaan opiskelijoilla kasvaisi. Jos opiskelija asennoituu blogiin ja OLO-sessioihin asenteella: “tämä on hanurista”, ei kyseisistä osa-alueista ole oppimisen kannalta mitään hyötyä.Studio1 pokaali

Summa summarum Studio 1 oli varsin hyvä pläjäys. En ole elämäni aikana käyttänyt mihinkään yksittäiseen kouluhommaan näin paljon resursseja, mutta palkkioksi olen saanut taidon – ohjelmoimisen taidon.

Svanten SvanteHockey2008 löytyy osoitteesta: http://svante.fi/svantehockey2008

Käynnistä SvanteHockey2008!

Sunin (kickin’ some) Ballz-pelin palloja voit potkia osoitteessa: http://users.tkk.fi/~stuomain/projekti/

Aloita Ballz-peli!

Muita en olekaan tainut vielä nähdä. Lisätkää tähän postaukseen, jos teitte appletin.

Hienoin asia Studio 1-kurssilla on se, miten ohjelmoinnin oppimista lähestytään monelta eri suunnalta. Tavoite,Java-Battle ohjelmoinnin osa-alueen ymmärtäminen, oivaltaminen ja käyttämisen oppiminen, motitetaan kunnolla ja hyökätään sen kimppuun monesta eri suunnasta. Kurssilla käytettäviä suuntia ovat kirjallisuuden lukeminen ja tekstin tai käsitetartan tuottaminen (teoriatehtävät), keskusteleminen (OLO), kuunteleminen (luennot ja OLO) sekä itse kokeileminen (ohjelmointitehtävät). Tiukka aikataulu pakottaa kaikki opiskelijat todenteolla tutustumaan jokaiseen opiskelumenetelmään ja löytämään nistä itsellensä parhaan.

Itse huomasin jo ensimmäistä Java-harjoitusta ohjelmoidessani, miten kannattaa mielummin lukea asia huolella – tai edes hutaisten – läpi ennen ongelman kimppuun hyökkäämistä. Jos aseena on vain yrittäminen, voi voiton saavuttaminen olla mahdotonta tai ainakin liian aikaavievää. Lukemiseen ryhtyminen tuntui aluksi typerältä, sillä lukiessahan koodi ei edisty yhtään eikä JAR-paketoinnin ajankohta lähesty sekunnillakaan.

Kurssin tiimellyksessä oppimisstrategiani kuitenkin selkiintyi. Uuden asian osuessa tielleni, siirsin Eclipse-ikkunan taskbariin sekä avasin Kalakirjan ja Googlen. Oivalsin, miten tietolähteiden tarjoama asearsenaali auttaa havittämään ongelman kuin ongelman. Olin löytänyt oman ohjelmoinninopiskelutyylini.

Täytyy tosin myöntää, että sotaratsu lähtee helposti keulimaan, kun ohjelmoinnin perusasiat ovat jo hallussa. Tässä asiassa oivallinen kurssisisältö pelasti kyllä hehkuttamani opiskelutyylin. En tiedä, miten kauan olisin esimerkiksi 5. ohjelmointitehtävän (swing) kanssa joutunut kamppailemaan ilman 4. esseetehtävää.

Voin lämpimästi suositella jokaiselle ohjelmoinnin opettelijalle asioiden teoriaan perehtymistä ennen koodin naputtelua. Aivan kuten kotoista ruotsia, myös Javaa oppii lopulta vain puhumalla ja kirjoittamalla, mutta ensin pitää hallita muutamia sanoja ja hiukka kielioppia.

Julkaisin eilen pelini applet-version internetissä. Muutamaa minuuttia myöhemmin hyvä ystäväni soittiCIV mokke Merihaasta. Hän ihmetteli suuresti miten voin osata tehdä tällaisen pelin. Mikä hauskinta, kaverini opiskelee Helsingin yliopistossa tietojenkäsittelyä. Kaverini syksy on myös vierähtänyt meille kaikille yhteisen ystävän, Javan, parissa.

Nyt vasta huomasin, miten paljon sitä onkaan tullut opittua tällä mainiolla kurssilla. Muistan vielä, miten ensimmäisiä Java-tehtäviä tehdessä oli kyllä niin hukassa. Nyt tuntuu että mikä vaan onnistuisi jos vaan olisi tarpeeksi aikaa muulta elämältä. Tottakai ohjelmointiammattilaiset painivat omassa raskaassa sarjassa, mutta pikkuohjelmien tekeminen tuntuu nyt aika helpolta.

Nyt on kyllä tyhjä olo kun sain Studio1:ltä sähköpostiviestin otsikolla: Viesti vastaanotettu: projekti, 69007A (numero muutettu;)). Nyt pitäisi vielä raapustella se loppuraportti

Täytyypä sanoa että tentin sisältö oli positiivinen yllätys. Nippelitiedot oli (mikäli nyt en missannut mitään kompaa) luovutettu Javan roskiskuskille ja keskityttiin melkolailla keskeisiin asioihin. Isot pointsit kokeen suunnittelijalle. Taitaa olla vaikein tehtävä suunnitella koetta ohjelmointikurssille. Toinen vaihtoehto olisi ollut laatia kynäkoodaustentti, mikä olisi ollut erittäin typerää.

Ensimmäinen tehtävä keskittyi keskeisiin termeihin Java-ohjelmoinnissa. Luokat ja oliot keskeisimmistä keskeisimpänä. Aavistuksen ottaa päähän kun ei muistanut:
protected String = "se yks näkyvyysmääre";

Toisessa tehtävässä oli koodipätkiä, joita tuli tutkiskalla ja parustella olivatko niistä annetut väittämät true vai false. Taas onnistunut, olennaisiin asioihin keskittyvä tehtävä.

Kolmosessa mietin pitkään miten ali- ja yliluokat tiesivätkään toisistaan yms. Hyppäsin 4. tehtävään ja jätin kolmosen hetkeksi hautumaan. Palatessa leikin kynäsauhuten virtuaalimasiinaa ja vedin rekursiot läpi. Tämän tehtävän arvostelu taitaa olla aika kinkkistä. Huolimattomuusvirheiden esiintymistodennäköisyys taitaa olla melko suuri ja säälipisteiden antaminen vaikeaa.

Virheenetsintätehtävä (4.) oli jännä tutkimusmatka koodin syövereihin. Tätä tehtävää varten olen ainakin itse harjotellut koko syksyn. Virheitä on todellakin tullut etsittyä. Nyt vaan ei käytössä ollut ihaana sysout ctrl+space:a.

tenttiVaikka tentti oli todella hyvä, on vaikea asettaa tenttiä sinänsä minkään muun studio 1:n osa-alueen yläpuolelle. Ymmärrän toki, että tentti on miltei pakko järkätä, koska sehän voi käytännössä olla ainut todellinen yksilösuoritus.

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

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

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.

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