Peliohjelmointia osa 0 - taustatarina

Olipa kerran nuori koululaispoika, noin 9 tai 10 vuoden ikäinen sellainen, nimeltään Taneli. Tämä koulupoika oli siinä mielessä onnekkaassa asemassa, että hänen koulussaan oli kirjasto.

Kotona hän räpläsi tutustui mikrotietokoneiden maailmaan vihermusta-näyttöistä PC:tä käyttäen. Tietokone ei ollut nykymittapuulla mikään tehomylly, mutta siitä huolimatta siitä löytyi erilaisia ohjelmia ja Basic-ohjelmointikielen tulkki.

No. Sattuipa sitten eräänä päivänä koulun kirjastossa Tanelin silmiin ohjelmointia käsittelevä kirja. Nokkelimmat varmaan jo keksivätkin mitä tästä seurasi...

Ensimmäinen peliprojekti oli jotain outoa. Tai ainakin 9-10 vuotiaan lapsen tekemäksi. Se oli jonkinlainen valtakuntasimulaattori, jossa pelaajan valintojen perusteella valtakunta joko menestyi tai menehtyi. En muista mistä moinen aihe. Yksi mahdollinen vaikuttava tekijä on vuonna 1991 julkaistu Civilization. Periaatteessa joo, voisi sopia kuvioon.

Pikakelataan eteenpäin vuoteen 2014:

Hyvin usein, vähintään pari kertaa vuodessa, tulee mieleen jokin peli-idea, mikä olisi mukava prototypoida testattavaksi. Tai vaikkapa tehdä uusintapainos Wiikin Esan loistokkaasta MG-42:sta.

Tämä kuulostaa aiemmilta bloggauksiltani blogisoftasta, mutta tässäkin tapauksessa kaipasin jotain alustariippumatonta. Jotain sellaista mikä kääntyy helposti HTML5, Android, iOS, OS X, Windows ja miksei myös Flash -alustoille.

Pienen selailun jälkeen vastaan tuli HaxeFlixel: yhdistelmä Haxe-ohjelmointikielestä sekä OpenFL- ja Flixel- kirjastoista. Sama koodi kääntyy tällä paketilla kaikille yllä mainituille alustoille. Ja luonnollisesti tämä projekti on open sourcea.

Seuraavassa bloggauksessa, jos projektini etenee ja muistan blogata siitä, kerron hieman tarkemmin peliprojektista.

Pixelmator - kuvankäsittelyä Macilla

Kuvankäsittelyohjelmistojen de facto valtias lienee Adoben Photoshop. Sitä en ala kiistämään, enkä muutoinkaan Adoben tuotteiden laatua.

Ainoa este on tähän saakka ollut hintalappu. Tarpeeseen nähden useamman satasen (edu-versio) hintalappu on ollut liikaa. En kuitenkaan - tällä hetkellä - tee työkseni mitään jatkuvaa kuvankäsittelyä vaativaa vapaa-ajalla. Työajalla tarjolla on juurikin Adoben tuotteet.

Sumo Paint oli ihan riittävä vaihtoehto pikaiseen ja pieneen kuvankäsittelyyn. Se ei kuitenkaan lopulta riittänyt ja päädyinkin etsimään kevyempiä vaihtoehtoja Photoshopille.

Hyvin pienellä haulla vastaan tulikin Pixelmator. Kokeilu todisti Pixelmatorin kevyeksi, mutta riittävän monipuoliseksi softaksi. Hintalappu on normaalisti $29,99. Tällä hetkellä, tulevan version 3.2 kunniaksi, sitä kuitenkin myydään puoleen hintaan!

Illustratorin korvikkeeksi olen miettinyt Sketchiä, mutta toistaiseksi se on vielä hankkimatta...

Ghost-teeman customointi

Oman sivuston teeman viilaaminen ja virittely on kivaa. Siitä olemme varmasti kaikki samaa mieltä. Itselläni on se huono tapa, että tartun mitättömän pieniin yksityiskohtiin ja siinähän ei se itse kokonaisuus välttämättä kehity mihinkään.

Näin kävi myös tällä kertaa. Tuskastuin Ghostin oletukseen, jossa otteesta (engl. excerpt) poistetaan kaikki muotoilut eikä näytetä kuvia.

Ratkaisu oli kuitenkin helppo ja löytyi noin parissa minuutissa Ghostin dokumentaatiosta. Nopealla silmäilyllä huomataan, miten excerpt poistaa tekstistä kaikki muotoilut, toisin kuin content. Output-helperin vaihtaminen excerptistä contentiin siis ratkaisi ongelmani:

<div class="post-content">
  <p>{{content}}</p>
</div>

Halutessaan näytettävien merkkien määrää voi rajata, aivan samoin kuin excerpt-helperilläkin:

Options: words (number), characters (number) 
         [defaults to show all]

Seuraavaksi törmäsin teemassa käytettiin vanhaan helperiin, joka rikkoi etusivun, kun artikkelimäärä ylitti määritetyn rajan sivutuksen käynnistämiseen:

Teeman partilas/pagination.hbs paljasti vian:

<nav class="pagination" role="pagination">
    {{#if prev}}
        <a class="newer-posts" href="{{page_url prev}}">&larr; Newer posts</a>
    {{/if}}
    {{#if next}}
        <a class="older-posts" href="{{page_url next}}">Older posts &rarr;</a>
    {{/if}}
</nav>

page_url-helperin korvaaminen pageUrl-helperillä korjasi vian.

Ghost -blogisofta

Ghost on avoimen lähdekoodin blogisofta, jonka taustalta löytyy aiemmin WordPressin parissa vaikuttanutta väkeä. Ghost piti olla vain kevennys WordPressin suht jykevään pakettiin, sillä harvemmin "tavallinen" bloggaaja tarvitsee koko WordPressin tarjoamaa mahdollisuuspakettia. Ghostista kuitenkin tuli Kickstarter-rahoituksen jälkeen ihan oma projektinsa.

Ghost - Logo

Ghost pyörii Node.js-alustalla. Tietokannaksi riittää - kuten oletuksena on - SQLite. Toki myös muille kantatyypeille löytyy tuki. Artikkelit kirjoitetaan Markdownina.

Ghost - artikkelimuokkain

Oma blogini käyttää Ghostia ja on ajossa RedHatin OpenShift-pilvessä. Tätä tarkoitusta varten maksuton palvelu. Asennus ja ylläpito oli todella yksinkertainen prosessi. Suurempi haaste tuli teemaa muokatessa ja muussa vähemmän olennaisessa...

Seuraava haaste on käännöstyöhön tarttuminen. Kokonaisuutena, eri ohjesivuineen, todella laaja projekti.

Ikuisuusprojektina oma blogisofta, osa II

Lopulta oma blogisoftani oli jo melkein toimiva kokonaisuus. Blogiartikkelit synkattiin Dropbox-hakemistosta, Markdown-formaatissa, suoraan blogin tietokantaan. Blogiin pystyi lähettämään myös kuvia. Nämäkin Dropbox-hakemiston kautta. Kuvien exif-tietojen perusteella luotiin tarvittava sisältö.

Eräänä talvipäivänä - opintoihin liittyviä tehtäviä tehdessä - tuli mieleen vielä jotain: miten olisi omien twiittien automaattinen haku blogiin? Joo! Tämä ajatus ja sen toteutusyritys johti jälleen kerran valmiiden ratkaisujen googlettamiseen.

Eräs löytö oli Medium. Asiallisen näköinen, helppo käyttää, mutta hetkinen - en minä halua näin helppoa ratkaisua, että sen kun vain "sign up" ja menoksi. Mediumia muistuttavia ratkaisuja löytyi useita.

Mielestäni paras niistä on Ghost. Tämäkin sivu tulee Ghostin kautta. Ghost pyörii Node.js:n päällä ja on jakelussa MIT-lisenssin alaisena. Tarkemmin Ghostista hyvin pian.