sunnuntai 10. toukokuuta 2009

Tänään on äitienpäivä


Tänään, kaunina aurinkoisena sunnuntaina, on sitten äitienpäivä, jonka kunniaksi liputetaan Suomen lipulla ja joka on, huolimatta normaalista kesän sunnuntaiaukiolosta, korotettu sellaiseksi juhlapyhäksi, että se muodostaa poikkeuksen poikkeuksen ja suuret kaupat joutuvat kuitenkin pitämään ovensa kiinni. Tässä tapauksessa ratkaisu on hyvin järkevä, kun ottaa huomioon päivän arvokkaan tarkoituksen ja luonteen.

Onnea äidilleni ja kaikille Suomen äideille, jotka epäitsekkäästi kantavat osaltaan vanhemmuusvastuuta ja huolehtivat tulevasta sukupolvesta!

lauantai 9. toukokuuta 2009

Vaaliuudistus

Viime aikoina on taas pulpahtanut pintaan keskustelu vaaliuudistuksesta. Nykyisen vaalijärjestelmän ongelmana on pidetty pienten vaalipiirien korkeaa piilevää äänikynnystä ja tästä syystä vaalijärjestelmää halutaan uudistaa käsittämään laajempia vaalialueita, siirtöpaikkoja niiden välillä ja valtakunnallisen äänikynnyksen, johon kuitenkin RKP:tä varten on esitetty aluekohtaisia poikkeuksia.

Ei liene yllätys, että vastustan vaaliuudistusta tällaisessa muodossa. Syitä on useita ja niistä tärkeimmät ovat mielestäni:
  • Äänikynnys estää uusien poliittisten ryhmittymien pääsyä eduskuntaan myös nykyisistä suurten vaalipiirien tarjoamista "henkirei'istä". On esitetty, että esimerkiksi perussuomalaiset ja vihreät eivät olisi eduskunnassa ilman, että he olisivat päässeet tuomaan itsensä aluksi tykö vain yhden tai muutaman edustajan turvin.
  • On epädemokraattista säätää vaalilakiin poikkeuksia pitämään silmällä jonkun yksittäisen puolueen (RKP) intressejä.
  • Uusi järjestelmä olisi siirtopaikkoineen niin sekava, että äänestäjien on vaikeaa ymmärtää sitä, kuinka henkilöille ja puoluelistoille annetut äänet vaikuttavat. Nykyinen järjestelmä on sentään kohtuullisen helposti koululaisille yhteiskuntaopin tunneilla selitettävissä.
Vastustan myös ns. pitkien listojen käyttöönottoa, vaikkei sitä onneksi olla tässä uudistuksessa esitettykään. Henkilövaaliaspektin mukanaolo on tärkeä osa poliittisen luottamuksen muodostumista äänestäjäkunnan ja ehdokkaiden välillä.

Johtopäätöksenä edellisestä, pitäisin parempana, että nykyinen järjestelmä perusperiaatteeltaan säilytettäisiin ja vaaliliitotkin sallittaisiin myös jatkossa. Korkeita piileviä äänikynnyksiä voisi madaltaa esimerkiksi yhdistämällä pienimpiä vaalipiirejä keskenään ja liittämällä naapurivaalipiireihin.

perjantai 8. toukokuuta 2009

Pseudotarjoukset

Kuinka moni on nähnyt "Hulluilla päivillä" tai muissa kaupan alennusmyynneissä -30%, -50% tai peräti -70% -tarjouksia? Varmasti aika moni. Mutta toinen kysymys on se, mitä tuollaiset miinusmerkkiset prosenttiluvut oikein merkitsevät? Mistä hinnasta kyseinen prosenttiosuus oli otettu pois? Oliko kyseessä todellakin edellinen, mielellään useita kuukausia voimassa ollut, käypä hinta vai jokin "virtuaalinen normaalihinta", joka tuskin koskaan oli ehtinyt olla voimassa? Valitettavasti useimmiten kysymyksessä on jälkimmäinen vaihtoehto.

Tänään näin vastaavanlaisen tapauksen eräässä Citymarketissa, jossa oli raahattu esille kokonainen savustettu sianruho, tosin räävitty jo lähes luita ja ytimiä myöden. Kauppias tarjosi maistiaisia ja "ainutlaatuista tilaisuutta" ostaa mielivaltaisia paloja "kokonaisesta porsaasta". Ainoa vika tässä oli hinta - se ei poikennut mitenkään muistakin lihatiskillä olevista leikkeleistä, pyynnöt eri osista olivat 15-20 euron välillä kilolta. Tämä on varsin paljon etenkin mahdollisesti hyvinkin rustoisista ja läskisistä sian osista. Onhan nimittäin totta, että ne lihatiskin "tavanomaisetkin leikkeleet" (joista jotkut varta vasten valittu hyvälaatuisista paisteista) ovat samalla tavalla kaupan takahuoneessa sahattuja ja pilkottuja irti kokonaisesta siasta. Tässä tulee mieleen se, että ehkä huonosti kaupaksi meneviä sian osia ja halpoja luita halutaan "nostaa jalustalle" moninkertaisiin hintoihin.

tiistai 5. toukokuuta 2009

Homoadoptiolaki on läpäissyt I käsittelyn ilman äänestyksiä

Eduskunnan sivuille on tullut tieto, että HE 198/2008 vp. eli laki, joka tarjoaisi samaa sukupuolta oleville pareille mahdollisuuden sisäiseen adoptioon, on mennyt I käsittelystä läpi yksimielisesti. Näinollen tulevassa II käsittelyssä voidaan enää äänestää lain hyväksymisestä tai hylkäämisestä. Nyt toteutunut käsittelyjärjestys osoittaa, ettei lakiin ole suhtauduttu sen vastustajien tai kriitikkojen puolella tarpeeksi vakavasti, koska sen ilmiselvän läpimenon ollessa näköpiirissä, olisi tullut punnita eduskunnan tahto sen yksityiskohtia, kuten pakkoadoption mahdollisuutta tai isyyden tunnustamisen prioriteettia koskevissa kysymyksissä. Saatan kommentoida enemmän kun näen eduskunnan sivuilta käydyn keskustelun.

lauantai 2. toukokuuta 2009

Malli - näkymä - ohjain


Monet näkevät tässä kuvassa ainoastaan aataminaikaisen elektroniikkapelin, joiden merkitys on sittemmin tietotekniikan kehityttyä vähentynyt niin, ettei tällaisia ole paljoa enää esillä. Tosiasiassa tämä alkeellisen näköinen laite kuitenkin, samoin kuin mikä tahansa taskulaskinkin, kuvastaa erästä tärkeätä ohjelmistokehityksen periaatetta: MVC, eli model-view-controller, tai suomeksi malli-näkymä-ohjain.

Elektroniikkapelissä näistä osista helpoiten nähtävissä on näkymä: se koostuu nestekidenäytöstä, jossa on useita valmiiksi painettuja kuvioita, jotka näyttävät tarvittaessa eri hahmojen (Mario, tynnyrit, palkit, Donkey Kong, nosturi) paikat sekä pistemäärän ja jäljellä olevien yritysten määrät, kertoen pelaajalle, mikä on hänen pelitilanteensa. Joissakin tapauksissa peli on pysähdyksissä sen loputtua ja uusi peli mahdollisesti aloitettava.

Toiseksi helpoiten tunnistettavissa on ohjain, eli tässä tapauksessa elektroniikkapelin painonapit, pelin aikana niistä käytetään "controller" (sic) -nappia ja "Jump"- nappia, pelin ollessa alku/välitilassa uusi peli voidaan aloittaa "game A" tai "game B" -napeista halutun vaikeustason mukaan.

Näkymättömissä on kaikkein tärkein osa, eli malli (engl. model). Se koostuu pelin sisäisestä muistista, siihen talletetusta ohjelmasta, rekistereistä ja mikroprosessorista, jotka pitävät sisällään tiedon kulloisestakin pelin tilanteesta ja huolehtivat pelin etenemisestä. Kullakin ajanhetkellä peli on tietyssä tilassa, jonka määrittävät esimerkiksi seuraavat attribuutit:
  • Onko pelaaminen käynnissä, vai onko peli "välitilassa" (esim. pelin loputtua)?
  • Marion paikka (näitä on todella rajoitettu määrä ja se voidaan identifioida tässä pelissä pienellä kokonaisluvulla).
  • Donkey Kongin paikka (vain 3 mahdollista, jos ei oteta lukuun "pelin onnistumisen animaatioita")
  • Lista tynnyreistä ja niiden paikat (jos näiden yli ei onnistu hyppäämään, niin seuraa yhden pelin yrityksen menetys ("elämän menetys", "miss", "virhepiste"))
  • Lista palkeista ja niiden paikat (esiintyy Donkey Kong-pelissä 2. rivillä alemmassa ruudussa ja ovat uhkia Marion hypyille)
  • Jäljellä olevien "koukkujen" määrä (1-4), nämä kuvastavat sitä, kuinka monta kertaa Marion on onnistuttava vielä kiipeämään ylös ennen "onnistumisanimaatiota", jossa Donkey Kong putoaa yläruudun oikeaan laitaan
  • Pisteet
  • Jäljellä olevat yritykset
  • Kellonaika (merkitystä hälytyksessä ja "välitilassa")
  • Onko hälytysaikaa määritelty ja mikä se on?
Näillä eväillä pelin kulloinenkin tilanne tiedetään (jos ei tiedetä, niin kommentoikaa virheistä ja täydentäkää!).

Seuraavana kysymyksenä on se, kuinka "malli" eli muistiin tallennettu ja prosessorin tulkitsema ohjelma huolehtii pelin etenemisestä. Se tapahtuu siten, että määritellään tietty kellojakso, jonka aikana ohjelma pysyy samassa tilassa ja kellojakson vaihtuessa tilaa muutetaan sopivasti. Kun tilaa muutetaan, voidaan käyttää esimerkiksi seuraavia "perusperiaatteita":
  • Tynnyrit ja palkit etenevät yhden askelman "alaspäin", kun ne ovat päätepisteessään, ne lakkaavat olemasta ja poistetaan listasta
  • Tynnyreitä ja palkkeja generoidaan sopiviin kohtiin (Donkey Kongin alapuolelle ja alaruudun vasempaan laitaan) satunnaislukugeneraattorin ulostulon, pistemäärän ja pelityypin (A vai B) funktiona
  • Jos tynnyri on edennyt pisteeseen, jossa edellinen Marion paikka oli sen takana, liputetaan pelaajan virhe ja yrityksen menetys, sama tilanne, jos palkin ja Marion koordinaatit olivat samoja
  • Tarkastetaan ohjaimelta, haluttiinko Marion paikkaa muuttaa, uutta peliä aloittaa tms.
  • Tietyissä "erikoistapauksissa", kuten siinä, että Mario on ollut liikkuvan tynnyrin yläpuolella (hypännyt yli), poistanut koukun tai poistanut viimeisen koukun, lisätään pistemäärää sopivalla määrällä. Kokemukseni mukaan poistetun koukun pistemäärää ilmeisesti generoidaan myös käytettyjen kellojaksojen funktiona.
  • Välitetään pyyntö uudesta näkymästä.
Nyt mainittu lista ei ole kattava. Joka tapauksessa, kaikkien pelien tapahtumat voidaan purkaa tällä tavoin diskreetin matematiikan kannalta ymmärrettäviin osiin. Lisäksi on havaittu, että mallia, näkymää ja ohjainta koskevat ohjelmakoodit on syytä pitää ohjelmassa erillään, jos halutaan, että myöhemmät kehittäjät ymmärtäisivät ohjelmarakennetta mahdollisimman helposti.