-
The Big Picture: Vuoden 2008 ajankohtaiset aiheet ja tapahtumat kuvina, osa 1. (Boston.com)
-
The Big Picture: Vuoden 2008 ajankohtaiset aiheet ja tapahtumat kuvina, osa 2. (Boston.com)
-
The Big Picture: Vuoden 2008 ajankohtaiset aiheet ja tapahtumat kuvina, osa 3. (Boston.com)
Ikean tee-se-itse Bestå TV-taso
Pääsin viimeinkin viime viikonloppuna käymään Ikeassa, sillä TV-tasostani oli tullut auttamatta liian pieni kaikille vempeleille. Löysinkin muutamia potentiaalisia vaihtoehtoja, mutta kaikissa oli jotain hyvää ja jotain huonoa. Näköjään myös huonekalujen valinta voi olla vaikeaa.
Löysin kuitenkin melkein kelvollisen TV-tason, vaikka en kyllä pystynyt ymmärtämään suunnittelijan ajatuksia. Mitä tekee TV-tasolla, jossa välitasojen takaosassa ei ole aukkoa johtojen läpivientiä varten: ei sitten yhtikäs mitään. No, ainahan reiät johdoille voi tehdä itsekin.
Bestå TV-tasoon syntyikin helposti johtojen läpiviennit luikauttamalla sahalla pienet puolipyöryläiset reiät takaseinän ohueen levyyn. Työkalupakistani ei kyllä löytynyt oikein kunnollisia työvälineitä, mutta kyllä se pieni rautasahakin ”puuhun” upposi kuin sulaan voihin. Helpointa olisi ollut hurauttaa reikäsahalla, mutta paikallinen Clas Ohlson oli ilmeisesti lopettanut käsiporien myymisen, enkä tätä varten halunnut sähköporaa hankkia. No, reiät tuli kuitenkin saatua aikaan ja melkeinpä vielä pyöreät.
Ikean Bestå -huonekalusarja on muuten aika näppärä, sillä sarja on käytännössä kuin aikuisten Lego-sarja, jossa erilaisista osista rakennetaan haluttu kokonaisuus, tai ainakin melkein. Tietenkin jos haluaa huonekalunsa puusta, eikä puristetusta pahvista, kannattanee suunnata jonnekin muualle kuin Ikeaan.
Parranajo ja Gillette Fusion Power Stealth
Olen parran kasvun alkamisesta lähtien ajanut parran sähkökoneella ja partahöyliin saati perinteiseen veitsellä partakasvuston siistimiseen ei ole tullut juurikaan tutustuttua. Luotettava Braunin partakoneeni alkoi kuitenkin jo olemaan elinkaarensa päässä teränvaihdosta huolimatta, joten oli siis aika tutustua hieman tarkemmin mitä partahöylillä olisi tarjottavana.
Tekniikkaa rakastavana ihmisenä ostin kaupasta tietenkin Gilleten (flash) turuilla ja toreilla mainostettavan Fusion Power Stealth -partahöylän ja Fusion Hydra Gel -partageelin sisältävän paketin. Kyseisestä höylästä löytyy ”5 entistä lähemmäksi toisiaan sijoitettua Power Glide -terää. Tällöin yksittäiseen terään kohdistuu vähemmän painetta ja parranajo on ennenkokemattoman miellyttävää.” ”Joustavat Comfort Guard mikroliuskat (15 kpl) kohottavat partakarvat ihosta, jolloin parranajo on uskomattoman miellyttävää ja tarkkaa.” Lisäksi höylässä on E-vitamiinia, aloeta ja luonnonöljyjä sisältävä Indicator Lubrastrip voitelunauha. Kaiken lisäksi partahöylä on varustettu Power Handle -varrella, joka tuottaa hellävaraisia mikrosykähdyksiä. Vaihtoterän takaa löytyy parranrajausterä esimerkiksi pulisonkien ajoon ja parran muotoiluun.
Kaikkea ne mainosmiehet ja insinöörit keksivät, mutta korulauseista ja ominaisuuksista huolimatta, ei Gilleten partahöylien lippulaiva oikein nostattanut tunteita. Ainakaan positiivisia. Kenties en vain osaa ajaa partaa oikein partahöylällä, sillä tuntui että höylä enemmänkin repi karvoja naamasta kuin leikkasi niitä. Ainakin ajo oli takkuista. Luin kyllä partahöylällä ajon ohjeet, mutta ei se juurikaan auttanut. Kaiken kukkuraksi partahöylällä ja -geelillä lutraaminen on mielestäni aikaa vievää ja hankalaa.
Partahöylät ovat varmasti käteviä ja hyviä välineitä, mutta itselleni ne eivät oikein tunnu sopivan. Parempi siis vain pysyä partakoneiden parissa ja tilata uusi Braun lähimmästä verkkokaupasta. Partakoneita (Brauneja) kun on tarjolla liikkeissä rajoitetuin valikoimin ja ikävän ylihinnoiteltuina. Onneksi Koneboxissa sattuikin sopivasti olemaan tarjouksessa Braunin 9585 -partakone Clean & Renew -latausasemalla. Siinä vasta hieno laite onkin.
No, pitänee kuitenkin joskus viikonloppuisin ajaa välillä parta myös höylällä ja siten voi vaikka vertailla leikkausjälkeä.
Versionhallinnan parhaat käytännöt koodaajalle
Versionhallinnasta ja siihen liittyvistä asioita on kirjoitettu paljon, mutta useissa kirjoituksissa on keskitytty lähinnä teknisiin asioihin ja eri versionhallintajärjestelmien mahdollistamiin asioihin. Harvat kirjoitukset keskittyvät käytännön asioihin ja niin sanottuihin parhaisiin käytäntöihin, joita soveltamalla versionhallinnan käytöstä saa paljon enemmän irti.
Muutamia käteväksi todettuja ja omasta mielestäni ”parhaita käytäntöjä” koodaajan näkökulmasta ovat muun muassa:
- Työn kulku
- Vie koodi versionhallintaan usein ja aikaisin
- Vie yhtenäisiä kokonaisuuksia
- Kirjoita järkeviä commit-viestejä
- Tee koodaustyylin muutokset erillään oikeista muutoksista
- Älä vie tiedostoja, jotka muuttuvat dynaamisesti
- Älä vie koodia, joka ei käänny
1. Työn kulku
”Version Control with Subversion” -kirja selvittää normaalin työn kulun, joka on hyvä omaksua versionhallintaa käytettäessä (hieman sovellettuna):
- Hae koodista tuorein versio versionhallinnasta
- Toteuta koodiin tehtävät muutokset
- Hae tuorein versio ennen koodin vientiä versionhallintaan
- Aja testit uudestaan ja varmista, että tekemäsi muutokset toimivat
- Vie koodi versionhallintaan yhtenä kokonaisuutena
- Selvitä konfliktit
- Tarkista, että versio kääntyy myös build-palvelimella
- Korjaa virheet tai palauta
2. Vie koodi versionhallintaan usein ja aikaisin
On suositeltavaa toteuttaa Check In Early, Check In Often -periaatetta. Tällöin muut näkevät mitä olet tekemässä ja koodi on muidenkin käytössä.
”If the code isn’t checked into source control,
it doesn’t exist.” – Coding Horror
Lisäksi jos piilottelet koodia omalla koneellasi, etkä synkronoi sitä versionhallintaan pitkään aikaan, voi muutosten yhdistämisestä tulla erittäin työlästä. Pieniä kokonaisuuksia on helpompi verrata ja saadaan aikaan vähemmän konflikteja.
Vaikka idean järkevyys ja käytännöllisyys on helppo ymmärtää, on käytännön toteutus usein jotain muuta. Itse olen ainakin huomannut, että omaa koodia tulee helposti pantattua levyn nurkalla, kunnes kyseinen ominaisuus on ”valmis” ja testattu.
”Hiding your code until it’s ”done” may feel safer, but it isn’t. Sharing your ongoing code with your coworkers is scary, much less the world — but it also results in feedback and communication that will improve your code and draw you closer to the project you’re working on.” – Coding Horror
3. Vie yhtenäisiä kokonaisuuksia
On suositeltavaa viedä versionhallintaan loogisesti yhtenäisiä kokonaisuuksia. Tämä tekee versiohistorian seuraamisesta huomattavasti hyödyllisempää, etenkin jos muutokset käsittelevät useita eri tiedostoja.
Eli, jos teet useita yhtäaikaisia muutoksia, jaa ne useampaan loogiseen kokonaisuuteen ja vie ne osissa. Näin yksittäisten muutosten historiaa on helpompi seurata ja nopeuttaa mahdollisten bugien metsästystä myöhemmin. Jos siis teet ominaisuutta A, B ja C sekä korjaat bugeja 1, 2 ja 3, pitäisi niistä muodostua vähintään kuusi committia. Vastaavasti, jos teet suuria muutoksia tai toteutat itsenäisiä muutoksia useisiin loogisiin moduleihin, vie muutokset erikseen, vaikka ne olisivatkin osa isompaa kokonaisuutta.
Käytännössä sitä kuitenkin usein huomaa koodaavansa hieman sieltä sun täältä sitä ja tätä, ja lopulta järkevän yhtenäisen kokonaisuuden vieminen versionhallintaan on käytännössä mahdotonta.
Tietenkin tätä periaatetta on helpompi noudattaa sovelluksen ylläpidossa kuin sovelluksen kehittämisessä, jossa puutteellisia ja koodausta kaipaavia asioita on paljon. Teoriassa järkevä ”commit”-tapa on helppo omaksua, mutta käytännössä yhtenäisen kokonaisuuden siirtäminen versiohallintaan vaatii itsekuria ja koodauksen suunnittelua.
4. Kirjoita järkeviä commit-viestejä
Kirjoita aina jokin kommentti viedessäsi koodia versionhallintaan. Kommentin tulisi olla lyhyt ja ytimekäs, ja kertoa mitä muutettiin ja miksi. Jos teit useita muutoksia, kirjoita ne omille riveilleen.
On myös kätevää lisätä kommentin eteen jokin tunniste kuten Fix tai Add, viitaten minkä tyyppisiä muutoksia teit. Tämä myös helpottaa sisällön filtteröintiä myöhemmin.
Korjatessa jotain tiettyä bugia tai pyydettyä ominaisuutta, on suositeltavaa lisätä bugin tai issuen numero commit-viestiin.
”If the changes you made are not important enough to comment on, they probably are not worth committing either.” – loop label
5. Tee koodaustyylin muutokset erillään oikeista muutoksista
Koodaustyyli voi kokea muutoksia ja kehitysvälineessä voidaan esimerkiksi ottaa käyttöön automaattiset koodimuotoilut. On erittäin suositeltavaa, että koodin muotoiluun vaikuttavat muutokset tehtäisiin erillään oikeista muutoksista.
Jos koodimuotoilut ja muutokset sekoitetaan keskenään, on muutosten jäljittäminen ja kohdistaminen käytännössä mahdotonta.
6. Älä vie tiedostoja, jotka muuttuvat dynaamisesti
Versionhallinnassa olevien tiedostojen olisi hyvä olla sellaisia, joiden sisällöstä valta on käyttäjillä eikä esimerkiksi kehitysympäristöllä. Esimerkiksi ei kannata viedä Eclipsen asetuksia tai projekti-tiedostoa, jotka muuttuvat riippuen kehittäjän haluamista asetuksista. Kyseiset tiedostot eivät varsinaisesti liity projektin koodiin ja aiheuttavat vaan turhaa synkkaamista. Myös projektin binäärit ja Javadocit voidaan mieltää turhiksi versionhallinnan näkökulmasta.
(via Perforce)
7. Älä vie koodia, joka ei käänny
Ei ole suositeltavaa viedä versionhallintaan koodia, joka ei käänny ja hajottaa projektin myös muille kehittäjille. Toisaalta, ideaalissa tilanteessa, ei pitäisi koskaan lähteä toimistolta viemättä koodia versionhallintaan.
Jos teet muutoksia, jotka vaikuttavat muihin, harkitse koodin branchaamista muutoksen toteuttamiseksi ja yhdistä koodi, kun olet valmis. Toisaalta, toimimaton koodi ei ole syy olla viemättä sitä versionhallintaan.
”It’s better to have a broken build in your working repository than a working build on your broken hard drive.” – loop label
Yhteenveto
Versionhallinnan käyttö on omaksuttu osaksi sovelluskehitystä ja toivottavasti edes osa yllä olevista periaatteista on jo useimpien kehittäjien käytössä. Ellei käytössä olevia työvälineitä hyödynnetä kunnolla, jää paljon etuja saavuttamatta. Edes muutaman yllä olevan käytännön omaksuminen kuten ”loogiset kokonaisuudet” ja ”commit-viestit”, helpottaa jo kummasti.
Versionhallinta on käsitteenä laaja ja sen käyttöön liittyy paljon muitakin asioita, joista voidaan määritellä niin sanotut parhaat käytännöt. Tälläisiä ovat muun muassa koodin hallintaan liittyvät asiat, versionhallinnan soveltaminen ja toimintojen laajentaminen, mutta ei niistä sen enempää.
Valinnan vapaus ei ole vapautta valita
Useat etenkin viihde-elektroniikka- ja tietoteknisten tuotteiden valmistajat tuntuvat olevan sitä mieltä, että enemmän on paremmin. Samaan tuotekategoriaan laitetaan tarjolle useita hieman erilaisia, mutta ominaisuuksiltaan melkein samanlaisia tuotteita, jotta ostajilla olisi varaa mistä valita. Tätä ilmeisesti kutsutaan valinnan vapaudeksi, mutta tosiasiassa se ei ole vapautta valita.
Barry Schwartz kertoo TEDin ”The paradox of choice” -videossa valinnan monimutkaisuudesta. Psykologi Schwartz käsittelee läntisen yhteiskunnan perimmäistä uskomusta, valinnan vapautta. Schwartin arvion mukaan valinta ei tee meitä vapaammaksi vaan lamauttaa, eikä onnellisemmaksi vaan tyytymättömämmäksi. Jokainen, joka joskus on ostanut jotain hieman enemmän teknistä asiaa, voi varmasti yhtyä Schwartzin arvioon. Miten hankalaa onkaan valita se ”hyvä” tuote kymmenien samankaltaisten tuotteiden joukosta.
Esimerkiksi:
Taulutelevision ostaminen
Harkitsin viime talvena taulutelevision ostamista ja vertailin tietenkin eri vaihtoehtoja. Laskeskelin, että samalla valmistajalla oli samassa kokoluokassa jopa parikymmentä eri mallia, joista useiden mallien ominaisuudet olivat liki toisiaan ja hankalasti vertailtavissa. Kun tuohon vielä lisätään eri valmistajien tuotteet samassa tuoteryhmässä, oli valinnan vapautta enemmän kuin tarpeeksi. Onneksi pystyin rajoittamaan valmistajien listaa DVB-C -vaatimuksen avulla, jolloin päästiin jo paljon mielekkäämpään lähtöasetelmaan.
Muutamia testejä ja ahkeraa Internet-selailua myöhemmin, päädyin lopulta Sonyn 40″ w3000 -malliin, joka oli sekä hinnaltaan, ominaisuuksiltaan että testimenestykseltään oiva valinta. Miettiessäni sopivaa tuotetta, oli Sonyn tuotemallisto kuitenkin ehtinyt jo ”vanhentua”, ja koska uusia malleja oli tulossa parin kuukauden sisällä, ei haluamaani mallia enää saanut mistään. Kaiken lisäksi uusi vastaava malli, on muotoilultaan jotain kauheaa. En täten ole vieläkään päässyt itseni kanssa oikein yhteisymmärrykseen, mikä olisi hyvä taulutv.
Applen tuotelinjat
Apple herättää monissa vahvoja tunteita sekä hyvässä että pahassa. Vaikka en ole aivan yhtä mieltä Applen vetämästä linjauksesta, on Applen tuotemallisto selkeydessään erittäin onnistunut: valittavana on muutamia selkeästi erilaisia vaihtoehtoja muutamassa hintaluokassa erilaisiin käyttötarpeisiin kohdistettuna. Tämä toistuu Applen kaikissa tuoteryhmissä tietokoneista musiikkisoittimiin ja käyttöjärjestelmään, ja ostajan on suhteellisen helppo tehdä valintansa. Applen tuotteet ovat jopa niin yksinkertaistettuja, että kaikkia ostajia tuotteet eivät tyydytä.
Vastaavasti PC-maailmassa valinta on vapaata ja erilaisia, mutta melkein samanlaisia PC-koneita löytyy vaikka miten paljon. Koneet on varustettu kaikilla mahdollisilla hilavitkuttimilla ja kustomointimahdollisuudet ovat lähes rajattomat. Yritä siinä sitten valita juuri se oikea ja ”paras” laite.
Myös käyttöjärjestelmien osalta Apple kulkee omia linjojaan, kun taas Microsoft ja Linux panostavat valintaan. Esimerkiksi OS X:n Leopardia on tarjolla kaksi versiota, yksi perusversio (plus 5 kpl:een perhepaketti) ja yksi palvelinversio, kun vastaavasti Vistaa on saatavana kolme perusversiota, kaksi yritysversiota ja yhdeksän palvelinversiota (Windows Server 2008). Lisäksi Windowsista on vielä eri versiot 32-bittisille ja 64-bittisille prosessoreille. Vastaavasti Linuxin eri distribuutioiden osalta voidaan puhua sadoista ellei jopa tuhansista eri vaihtoehdoista.
Ratkaisu
Onneksi valinnan vaikeuteen on helppo ja yksinkertainen ratkaisu: älä mieti liikaa, tai välitä vaikka tuote ei olisikaan se ”paras”. Etenkään jälkeenpäin ei kannata pohtia, että tuliko nyt varmasti ostettua hyvä tuote parhaimmalla mahdollisella hinnalla. Tästä ei seuraa kuin pahaa mieltä.
Tietenkään asia ei ole aivan noin yksinkertaista. Etenkin insinööreillä voi olla hankaluuksia kieltää tosiasioita ja olla vertailematta eri tuotteita maailman tappiin asti.
Onneksi kaikkien asioiden ostaminen ei ole hankalaa ja usein valintaa helpottaa niin sanottu merkkiuskollisuus, kuten keväällä hankkiessani uutta polkupyörää. Valintaa ei juurikaan tarvinnut tehdä muulla kuin lompakon paksuuden perusteella ja lopulta silläkään ei ollut merkitystä. Tietenkin merkkiuskollisuutta oli helppo perustella kyseisen merkin takajousitukseen liittyvällä keksinnöllä, jota ei muilta merkeiltä löytynyt.
Välillä valintaa helpottaa myös sisäinen insinööri, joka haluaa mahdollisuuden leikkiä tuotteilla. Kesällä ostin uuden digitaalikameran, jonka ostamista mietin ja tutkin muutaman päivän. Loppupeleissä valinta oli suhteellisen helppoa, sillä Canonin vain tiettyihin kameroihin saatava CHDK-ohjelmisto ratkaisi asian. Kyseinen malli ei ollut ”paras” tai edullisin, mutta täytti perusvaatimukset ja tarjosi lisäksi mahdollisuuden laajentaa kameran toimintaa ominaisuuksilla, joita ei vastaavan hintaluokan malleista löytynyt.
Odotankin aina yhtä innokkaasti uusien enemmän tai vähemmän teknisten vempeleiden ostamista. Valinnan vapauteen saa helposti kulumaan useammankin viikon, ellei ostoksella ole kiire, jolloin pitää vain toivoa osuvansa ”oikeaan” ja jälkeenpäin olla lukematta testejä ja arvosteluita.
Päivän linkit 21.11.2008
-
Maven on melkein kätevä työkalu J2EE-projektin kasaamiseen.
-
Rajoita kaupallista puhelintarjontaasi palvelunumerossa 0600 13404 ma–pe klo 8.30–18 (0,39e/min +pvm), johon ilmoitetaan nimi, numero ja osoite.
Kuvakkeiden vertauskuvat sovelluksissa: WordPress
WordPressin seuraavaa 2.7 versiota varten on käyttäjiltä pyydetty muutamaan otteeseen kommentteja ja arvioita, mihin suuntaa WordPressin hallintapaneelia pitäisi kehittää. Äskettäin kysyttiin mielipiteitä erilaisista kuvakkeista, joita tuleva versio mahdollisesti käyttäisi. Vertaillessa useita hieman erilaisia vaihtoehtoja samalle toiminnolle, huomasi helposti, miten eri kuvakkeet toimivat paremmin kuin toiset kuvaamaan tiettyä toimintoa.
Kojelauta (dashboard) -kuvaketta hahmoteltiin tutuilla ideoilla: talo, mittaristo, sivu. Itse pidin eniten ”talo”-metaforasta, joka siis viittaa kotiin. Kojelauta on WordPressin hallintapaneelissa saman arvoinen, kuin muun muassa web-selaimista löytyvän ”talo”-kuvakkeen idea.
Kirjoitukset (posts) -kuvake tarjosi aika tuttuja ideoita: taulunasta, muistilappu, kappalemerkki. ”Neliön sisällä oleva kappale-merkki” -kuvake lämmitti teknistä ajatusmaailmaani, mutta muistilaput ja taulunasta ovat kyllä selkeämpiä.
Mediaan (media) viitattiin perinteisellä kuvalla ja kameralla, mutta oivaltavin idea oli yhdistää kamera ja nuotti, joka kuvaa hyvin median monimuotoisuutta.
Linkkejä (links) kuvattiin totuttuun tyyliin ketjun linkeillä ja hieman harvemmin nähdyllä maapallolla. Sydämen muotoon yhdistetyt linkit olivat mainio idea ja viittaavat blogien keskinäiseen linkittämiseen (link love).
Sivuja (pages) kuvaava idea ei tarjonnut juurikaan juhlimisen aihetta.
Kommentteja (comments) hahmoteltiin puhekuplien ympärille ja hyvä idea oli liittää puhekuplaan myös henkilö. Kommenttien määrän ahtaminen puhekuplan sisään ei oikein tunnu loppupeleissä hyvältä idealta.
Ulkoasu (appearance) -kuvake-ehdotelmat tarjosivat hyvin vaihtelevia ideoita. Mielestäni silmä ja pensseli olivat ovelia, mutta kameleontin ja pönttömacin ideat eivät oikein auenneet. Monitori ja kaksi ikkunaa tarjosivat tuttua ja turvallista.
Lisäosat (plugins) -kuvakkeessa näkyy hyvin englannin vaikutus ja englanninkielisenä ideana töpseli toimii hyvin. Idealtaan legopalikka toimii hieman paremmin myös muilla kielillä, mutta olettaa kaikkien tietävän, mikä legopalikka on. Kuvalistan viimeinen kuvake viitannee hieman palapeliin, jota on käytetty esimerkiksi Firefoxin laajennukset-kuvakkeena. Akkupariston ajatus jäi hieman arvoitukseksi.
Käyttäjä-tietoja (users) kuvattiin perinteisesti henkilö-kuvilla ja ilmeisesti osoitekirjan sivuna.
Työkalut (tools) viittasivat loogisesti työkaluihin. Tarjolla oli jakoavainta, työkalulaatikkoa ja jakoavainta ruuvimeisselin kanssa.
Asetukset (settings) -kuvakkeet ehdottivat erilaisia säätövipuja ja ratasta, jotka ovatkin yleisesti käytettyjä, mutta ilmeisesti tarkistuslistaa kuvaava idea jäi aika heikoksi.
Oivaltavia kuvakkeita WordPressin kuvakeideointiin suunnittelivat Ben Dunkle, Verena Segert, Guillaume Berry, Open Source Design class at Parson’s in New york City ja Luke Smith. Sekä yllä olevat kuvakkeet että tekijät ovat järjestetty kuvake-kokonaisuuden äänten mukaan. Dunklen ideoimat kuvakkeet saivat 35% prosenttia äänistä ja Segertin kuvakkeet saavuttivat 29% prosenttia äänistä.
Kyselyn vastaukset julkistettiin eilen ja tulokset nojaavat myös omiin mieltymyksiini. Lisäksi voittaneita ja toiseksi tulleita kuvakkeita vielä tarkennetaan kyselyn mukaisilla tuloksilla muutamien kuvakkeiden kuten ”kojelauta” ja ”työkalut” -osilta. Eri kuvakekokonaisuudet ja WordPress-tiimin kommentit löytyvät kyselyn tuloksista, joka kannattaa vilkaista.
Pienillä eroilla esimerkiksi sovelluksen kuvakkeiden valinnassa on suuri ero käyttäjien kokemassa sovelluksen selkeydessä ja käyttäjäystävällisyydessä. Valitettavan usein ne pienet mutta merkittävät asiat ovat juuri niitä asioita, joita ei aina ehditä miettiä ja suunnitella kunnolla. Tietenkin, hyvä suunnittelija tekee samalla työmäärällä hieman paremman ja tähän pitäisikin pyrkiä. Jotta hyvän lopputuloksen suunnittelu ei olisi liian helppoa, eivät asiat koskaan ole yksiselitteisiä ja ongelmaan on harvoin vain yksi oikea ratkaisu.

