Kaikki alkoi Jouluna 2024, kun olimme porukalla kokoontuneet viettämään Joulua äitini luokse. Näihin Jouluihin kuuluu olennaisena osana yhdessä oleminen ja lautapelien pelaaminen. Nuoremman siskoni miehen Ollin myötä oli Dominion syrjäyttänyt Menolipun suosikkipelinä, ja uusina lisäosina oli Joulupukin tuoma Keisarikunta ja siskoni ja Ollin saama Nousukausi.
Kun ensimmäiset esimerkkipelit oli pelattu, alkoi korttien valinta seuraaviin peleihin muuttua aikaavieväksi. Tässä vaiheessa päätin, että äkkiäkös sitä koodataan 'arvontaohjelma', joka arpoo meille satunnaiset kortit. Ei muuta kun tuumasta toimeen...
Vanha viidakon sanonta sanoo - jos sinulla on vasara, kaikki ongelmat muistuttavat nauloja. Teen työkseni Linux-kernel ajureita, ja olen koodannut 20-vuotta C-kielellä. Ei siis liene vaikeaa kuvitella, mikä minun vasarani on ;) Kovin montaa tuntia siinä ei vierähtänyt, kun koodi jo haki kortit ja korttien hinnat tekstitiedostosta - ja arpoi kortit.
Kyseinen C-koodi löytyy yhä git repositorystani.
Laiskalle ihmiselle ongelmaksi muodostuikin se, miten nuo kortit, hinnat ja lisäosat oikein saadaan sinne tekstitiedostoon. Lisäksi Linux-läppärin ottaminen mukaan pelipöytään arvontaa varten ... Noh, se nyt ei vaan ole käytännöllistä.
Niinpä oli aika loikata teknologioissa eteenpäin ja korvata kortit sisältävä tekstitiedosto MySQL tietokannalla. Tavoilleni uskollisena, koodailin tähän konvertointiin sopivan työkalun - milläpä muullakaan kuin C:llä. Näin sai alkunsa työkalu nimeltä 'dice-admin'. Ensimmäinen dice-adminin git-repooni tuonut committi löytyy täältä.
Dice-admin sai vielä monta päivitystä. Lopulta se toteutti ncurses-formeilla ja -menuilla, lomakepohjaisen UI:n, jossa tietoja oli esitäytetty tekstitiedostosta, ja katselmoinnin / mahdollisten muutosten jälkeen tiedot syötettiin MySQL-tietokantaan. Ikävä kyllä, dice-adminin muutoksia en koskaan tullut vieneeksi versionhallintaan, ja niinpä iso osa muutoksista on kadonnut historian hämärään.
Se Joulu tuli ja meni, mutta Dominion-kuume jäi kytemään. Lisäosia tuli hankittua lisää, ja MySQL:n kanssa puuhastelu oli herättänyt muistoja 1990-luvun lopulta ja 2000-luvun alusta, kun yliopiston koneella istuessani koodailin harrastuksen vuoksi forum-softaa php:llä. Ja niin pitkästä aikaa asentelin koneelleni Apachen ja PHP:n MySQL:n lisäksi - ja jätin C-kielen tästä projektista... Tai, no melkein.
Pitihän minun jollain keinolla valmistautua tulevaan ja koettaa saada lisää tietoa korteista tietokantaan. Mielellään kaikki kortit kerralla. Pienen haeskelun jälkeen löysin netin syövereistä sivun, jolla oli (muun tekstin seassa) myös tietoja Dominion-korteista taulukossa! Vielä kerran setti C-koodia, bash-skriptejä ja reg-expejä, jotka hakivat tiedot verkosta ja poistivat HTML-muotoiluita yksi kerrallaan. Lopulta C-koodini sai ongittua kaikkien korttien nimet ja tekstipohjaisen kuvauksen tietokantaan, 'parsed_cards'-nimiseen tauluun. Jonkinlainen PHP-pohjainen 'dice-admin' oli syntynyt,
Tämän jälkeen alkoikin varsinaisen arvontasivun ja sille soveltuvan tietokantarakenteen kehitys. Seuraavan Dominionin-lisäosan hankittuani teinkin uuden PHP-pohjaisen 'admin'-sivun, joka luki 'parsed_cards'-taulukosta uuteen lisäosaani kuuluvien korttien tiedot. Löytyneiden avainsanojen perusteella, PHP esitäytti HTML-pohjaisen lomakkeen. Tarkistettuani uuden lisäosan korttien tiedot (ja korjattuani/lisättyäni muutamia tietoja), PHP täytti tiedot formista uuden arvontasivustoni tietokantarakenteeseen. Helppoa ja mukavaa, eikö :)
Nälkä kuitenkin kasvaa syödessä, ja jokainen lisäosa tuntui tuovan jotain uutta. Velkarahat, Suomen- ja Englanninkieliset kortit ("Katovuosien" myötä kun tarvitsin korttien nimet myös englanniksi; "Katovuodet"-lisäosaa kun en ole mistään suomenkielisenä löytänyt!), Maamerkit ja Tapahtumat, Potionit, sekä Omenit ja Prophecyt... Kaikki vaativat lisää tietoja tietokantarakenteeseen. Lopulta sain "äkistettyä" myös erilaisia ikoneita sekä korttien kuvat. Koodin historiatietoineen löytää tietystikin jälleen gitistä, minne tämäkin sivu päätynee :)
Moni muu ammattilainen vannoo modernien IDE:jen (Integrated Development Environment) kuten Visual Studio nimeen. Olen vuosien varrella koettanut tehostaa tekemistäni useammallakin työkalulla. Koodia on aikoinaan syntynyt ainakin Eclipsellä, NetBeansilla, QT-Creatorilla, Visual Studiolla ja luultavasti joillain muillakin. Silti, ennemmin tai myöhemmin olen aina palannut vim-editoriin ja ctags:iin. Nämäkin sivut on siis 100% "koodattu käsin", vimiä käyttäen.
Se vähäinen kuvakäsittely mitä olen tehnyt, on tehty GIMP kuvankäsittelyohjelmalla. Tietokantamodifikaatiot on tehty pääosin mysql-komentoriviclientillä ja PHP:lla. Toki, kuten ylempänä on kerrottu, aluksi myös C:llä. Sivujen kehitys ja testaus tapahtuu omalla koneellani, jossa käyttöjärjestelmänä on Fedora Linux. Sivut siinä Firefoxille tarjoilee Apache-palvelin.
Uutena tulokkaana kehityksessä oli minullakin nyt ensimmäistä kertaa tekoäly. Hieman enemmän siitä täällä. Mielenkiintoinen kokeilu, mutta päivätyössäni tekoäly ei ainakaan tällähetkellä koodia kirjoita.
Viimeisin, ja vielä julkaisematon kehityskulku on ollut Android-applikaatio. Olisihan se hienoa saada tämä arvontamasiina Googlen Play-kauppaan, eikö? Toisaalta, useamman eri version ylläpito yhden miehen voimin ei oikein iske. Tämän tosin voi kätevästi taklata pienellä "huijauksella" - eli Android-applikaatiolla, joka näyttää arvontakoneen täältä nettisivulta :) Saa nähdä eteneekö tämä puuhastelu vielä uusiin suuntiin, vai joko tämä on nähty...
-- Matti
Oulu, 10.01.2026