Tuesday 31 December 2013

Eräänlainen vuosikertomus

Eräänlainen vuosikertomus

On taas tullut tämä vuoden hienoin aika, tässä vaiheessa vielä joulu, mutta kun tämä on luettavissa, uusivuosi. Kuten olemme tottuneet, pitää tällaisina aikoina kertailla kuluneita tapahtumia. Viimeksi hehkutin kuinka kulunutta vuotta pystyi kuvaamaan sanalla "loistava". Tällä kertaa tämä sana olisi enemmänkin "hämmentävä". Kertaillessani tuota edellisen vuoden postia hymisen hiljaa. Hehkutan tekstissä lispejä, emacsia, C#:tä ja kaikkea tavoin, joiden vuoksi olettaisin ihmisten miettivän että mikähän noobi tämänkin tekstin on kirjoittanut. Todennäköisesti katson myös tätä tekstiä vuoden päästä samoin. Ilmiö näkyy myös ohjelmoinnissa: ohjelmoijaystävistäni jokainen tietänee sen ihmetyksen, jota kokee lukiessaan yli vuoden vanhaa koodiaan. Tämä ihmetys kertoo jotain siitä, että on kasvanut ja oppinut jotain kirjoittamisen jälkeen.

Onneksi en ole sama hölmö kuin 5 vuotta sitten

Mikä on muttunut? Miten olen kasvanut?

Emacs on selkein esimerkki. Clojure-juttujen, blogin kirjoittamisen, sekä yleisluontoisten konffausharjoitusten avulla olen monta kertaa tehokkaampi editorin kanssa tuohon verrattuna. Viimevuotisessa tekstissä kirjoitan kuinka "rivit ovat Lisp-puussa, jonka Emacs muuttaa edellämainitulla html:ksi ennen bloggeriin siirtoa.". Tämä lausahdus edusti vaihetta, jota ymmärtääkseni tavataan uusilla lispereillä usein. Heidän mielestään kaiken voi tiivistää s-expreihin. Blogitekstin kirjoittaminen lispinä tuntui todella hyvältä verrattuna kahteen aiemmin oppimaani tapaan: bloggerin graafisen postihärpäekkeen käyttäminen, ja HTML:n käsinkokoaminen Notepad++lla. Kirjoita posti, hallitse dokumentin omituisuuksia hiireen koskematta, ja lopulta C-x C-e:llä generoi HTML, jota blogger syö. Valitettavasti jokaisesta ohjelmointikielestä tutut escape-ongelmat, sekä yleisluontoinen tönkköys pyörivät tämänkin metodin ympärillä. Lopulta löysin kuin löysinkin ideaalin kirjoitustavan, millä tietysti yritän sanoa että opettelin käyttämään Emacsin html-modea, joka hoitaa xml-tason escapet, tagien automaagisen sulkemisen, ja omaa pikanapit kaikkiin tavallisimpiin muotoiluihin, ja mikä tärkeintä, toisin kuin Wordissä, nämä napit toimivat deterministisesti.

Huhtikuussa aloin projektin, joka tulisi muuttamaan vielä kaiken. Maaliskuun loppupuolella olin hakenut Kotkaan inssikouluun, jossa oli suunnitteilla opiskella pelien tekemistä ja muita ohjelmistoinssijuttuja, ja huhtikuussa aloitettu projekti muutti, Applen hokemaa lainatakseni, taas kaiken. Kyseessähän oli MERPG, joka teknisesti ottaen on ollut meneillään yli puolena tämän blogin näkemistä vuosista, mutta nyt se otti aivan uuden suunnan. Kun olin edellisenä jouluna rakentanut Clojure-ympäristön parillekin koneelle, sekä lukenut muutaman kirjan aiheesta, oli nyt, kun löysin lopultakin ylimääräistä aikaa, aika tutustua ympäristöön käytännössä, ja ratkoa sillä käytännön ongelmia, ja millainen matka siitä tulikaan. Sanotaan, että Lisp-valaistuminen muuttaa tapaa, jolla ohjelmoit muita kieliä. Vaikka edellisessä vuosipostissa hehkutinkin että PHP-koodini (jolle minulla oli suuret suunnitelmat, mutta joka ei ole saanut rakkautta sitten toissalokakuun, ja joka pitäisi pelastaa kuolevan Viuhka.fi:n alta...) luonnetta, se sai minut lähinnä tajuamaan kuinka suurin osa maailmasta elää jotain ohjelmoinnin pronssikautta. Muutama harva on jo antiikissa ML:ien ja Lispiensä kanssa. Itse siis uskon ja toivon että imperatiivinen (olio-)malli katoaa suleutettujen järjestelmien ja systeemiohjelmoinnin ulkopuolelta lähivuosina.

Tämän ajatuksen ongelma on, että piireissäni olen aika pitkälti ainoa, joka siihen uskoo, lukuunottamatta ehkä Tässiä, jolta kyllä löytyy tälle alalle tarvittavaa hulluutta, mutta joka suuntaa sen aivan muihin juttuihin, ja Alpia, joka palloilee (netti-)ohjelmoinnin parissa välillä, ja jolta löytyy ehdottomasti edellämainittua hulluutta, mutta joka keskittyy muihinkin juttuihin. Hän mainitsi jotain jonkinlaisesta vaalikoneprojektista, ja udeltuani vähän tarkemmin, hän yllätti minut kertomalla kuinka oli miettinyt jonkin algoritmin vektoriaritmetiikan ympärille. Aluksi se kuulosti nimenomaan edellämainitulta hulluudelta, tarkemmin ajateltuna se kuulosti esimerkiltä mitä matemaagisesti orientoitunut persoona voi tuoda ohjelmointiin, kolmannella kerralla se kuulosti esimerkiltä siitä miten erilaisin tavoin java-ohjelmoija, lisp-ohjelmoija, ja matemaagisissa piireissä aloittanut ohjelmoija lähestyvät samaa ongelmaa.

Olen siis ainoa siihen uskova, täysipäiväinen ojelmoija. Edellämainitut saattaisivat uskoa, jos keskittyisivät ohjelmointiin, eivätkä herranjumalasentään, siihen mihin itse haluavat. Suurin osa ihmisistä on tyytyväisiä kieliin, jotka oppivat 10-20 vuotta sitten, tai joita opettaja ja internetin kaikkitietävät1 tunkevat kurkusta alas. Minä en, ja tämä on tuottanut minulle tänä syksynä paljon päänvaivaa. Aikoinaan, kun sain työpaikan, oli hyvän tuurin (ja sen kuuluisan kutinan aivojen pohjalla) syytä että lähdin pääasiassa C#:tä tekevään taloon, sillä C# on imperatiivisen maailman tuotantokielistä vähiten huono. Se kuitenkin alkaa... noh, tuntua ympäristöltä, joka ei ole luotu ihan minua varten, jos näin voi sanoa :) Tämä tunne on niin voimakas, että tuskin maltan odottaa koulun C#-tunneille paluuta tämän joululoman jälkeen. Tämä tunne myös on saanut minut mietiskelemään että nyt, kun olen MERPG-clj:n kanssa löytänyt suurimmat yllätykset Clojuresta2, mitä jos aloittaisin startupin tämän ympäristön ympärille? Mitä jos rakentaisin oman Viawebbini, pelien, mikä antaisi kiksejä sekä kouluni peliopettajille, että suomen pelihuumasta humaltuneille, tai yleissoftan ympärille? Mitä jos lakkaisin hokemasta "Mie oon nero!"a, ja sen sijaan todistaisin tämän faktan teoillani?

Lisp on tyhmää. Etkö muusta osaa puhua?

En. Voin silti yrittää. Maaliskuussa sijoitin muutaman euron Macbook Prohon. Yksilöhän oli retinallinen yksilö, joten kauneimmillaan tämän koneen DPI on naurettavan suuri (ja teksti täten lukukelvotonta <3), ja SSD:n ja puuttuvan optisen aseman vuoksi koneen ohuus on lähes naurettava, akkukesto kiva windowskoneisiin tottuneelle, ja mikä tärkeintä, OS X, toisinkuin eräs toinen kaupallinen järjestelmä, ei käyttäydy huonosti. Eikä myöskään yritä toteuttaa nelituumaisilla näytöillä hyväksitodettuja ideoita 24-tuumaisilla näytöillä huonosti. Sen sijaan OS X:ään on tuotu parhaimpia omituisuuksia vapaista ympäristöistä, ja kauneimmillaan jopa paranneltu niitä. Hyvänä esimerkkinä tästä Mission Controllin (Exposen?) virtuaalityöpöydät, ja se, miten näiden välillä voi hyppiä touchpadin avulla. Näitä on vaikea tuoda Gnomeen, koska PC:n touchpadit ovat hirveää roskaa, rottien kanssa vaihtosysteemi ei vain toimi, ja PC:n näppikset ovat täysin epäyhteensopivia Macin layoutiltaan kauniin näppiksen kanssa.

Käyttis ei kuitenkaan ole yhtä juhlaa: CMD-Tab sallii vaihtaa vain sovellusten välillä, sovellusten ikkunoihin ei pääse käsiksi niinkuin Gnomen Ctrl+Tabilla. Finder ei kaadu ja hidastele hölmöistä syistä, kuten muuan Explorer, mutta muuten on täysi susi: tiedostojen hallinta on jopa bashin komennoilla helpompaa kuin Finderilla. Explorerista soisin Applen ottavan mallia terveellisissä määrin, muttei liikaa. Alt-F4:n kaltaista "tapa ikkuna, mutta jätä prosessi" - pikanappia itse en ainakaan ole löytänyt, ja ajatus siitä että CMD-Q:n tulkinta prosessien totaalitaposta on parempi, on absurdi. Kokeilkaa suunnitella Clojurella ikkunoita, ja kärsikää kun tapatte vanhaa ikkunaa alta CMD-Q:lla, aikeena avata uusi ikkuna erikseen koska Swing ei ymmärrä dynaamista REPL-työskentelyä, ja huomaatte REPLin kaatuvan koska CMD-Q ei tuhonnutkaan vain ikkunaa, vaan koko java-prosessin taustalta.

Koneen suurin rautaongelma on näppäimistö. Älkää ymmärtäkö väärin, tämän koneen näppis on paljon parempi kuin yhdenkään alle kymmenvuotiaan PC-läppärinäppäimistön, mutta Ctrl ja Fn - napit ovat aivan väärinpäin, fn tuntuu olevan aivan hajalla, ja en ole vieläkään varma tykkäänkö napeista, joiden ympärillä on näin paljon tilaa. Miltei täydellisen näppäimistön olen asentanut pöytäkoneeseeni, ja tuohon verrattuna ainoat hyvät mitä Macin näppiksestä voi sanoa, on paljon parmpi merkkikartta, paremmat pikanapit poppiohjelman hallintaan, ja taustavalaistus.

Silti, kun ohjelmoin Emacsilla JVM:n päälle, ei alla olevalla käyttöjärjestelmällä ja raudalla ole niin paljoa väliä.

Jos seuraavaksi yrittäisin päästä tietokoneiden ulkopuoliseen maailmaan?

Viime tammikuussa kävin etelässä, muistaakseni Egyptissä. Se oli loistava reissu, Lomaproosa (alkuperäisten MERPG-suunnitelmien pohjalta alkanut proosaprojekti, joka vaikuttaa pahasti määrittelevän suunnitelmien kanssa pahasti ristiriidassa olevan kaanonin. Noh, jos Doctor Wholle se sallitaan, sallittaneen se minullekin) edistyi siellä melkoisesti, ja kun kotimatkalla keskustelin tuttavaperheen kanssa siitä kuinka "olin kirjoittanut kymmenisen tuhatta sanaa matkan aikana", minulta totuttuun tapaan kysyttiin että enkö ollut etelässä lomailemassa. Tietysti olin lomalla, ikäänkuin minulla olisi arkena aikaa tehdä mitään noin tuottavaa.

Tammi- ja helmikuu menivät matikkaa opiskellen. Syksyllä 2012 aloin siis lukea pitkää matikkaa aikuislukiossa, ja viime maaliskuussa kirjoitin sen kuuden hyväksytysti suoritetun kurssin voimin. Kuten odottaa saattoi, lopputulos oli että pääsin kokeesta läpi pisteellä \o/. En osaa (vai kehtaa?) sanoa mikä minut ajoi hosumaan tuon kirjoituksen kanssa, mutta sain siitä taas yhden tarinan kerrottavaksi.

Maaliskuussa kävin myös tutustumassa Porin rataan välillä Tampere-Vammala-Tampere. Valitettavasti siitä ei ole niin paljoa sanottavaa, joten vain näyttelen siitä kuvia

Huhtikuu oli MERPGin aikaa, siitä kerroin jo. Toukokuu meni elämästä nauttien, ja muistaakseni päätin toukokuussa saattaa ensimmäisen Lomaproosan loppuun. Kuukausi myöhemmin se oli lopussa, editoin sen .txt:stä takaisin .docx:ksi fiksuja muotiluja varten, ja tulostin Tässille kappaleen. Hän tahri kyseisen kappaleen punakynällä, palautti sen minulle, ja siitä asti on ollut työn alla korjailla kyseistä tekstiä tahrituista kohdista. Tuosta tapauksesta en oppinut paljoakaan kielestä tai kirjoittamisesta, mutta opin että minun on kirjoitettava Lomaproosa2 org-mode:n syntaksilla tai opeteltava käyttämään TeXiä. Word ja Libreofficen kirjoitussofta ovat aivan hirveitä työkaluja kirjoittamiseen.

Kesäkuussa, kesälomani aikaan, vasta innostuinkin tekemään MERPGiä. Huhtikuulta Google Coden repo näyttää 4 committia, toukokuulta ei yhtään, ja kesäkuulta sitten 15. Kesäkuuhun osui myös parhaat yökättelyajat Tässin saunalla, sekä retki Hankoon. Heinäkuun ensi viikolla kävin pohjoisessa, tutustumassa Rovaniemen kauniiseen kaupunkiin. Ainoa pärstäkirjasta löytynyt kuva on tässä. Näiden kahden tapahtuman väliin sijoittui Tuska + Rock the Beach, joissa todistin Wintersunin, Kotiteollisuuden, Rammsteinin, Amaranthen ja Nightwishin loistavia livevetoja. Tuskassa järjestettiin Nightwishiltä nimmarisessio, jonne keskivertokansa vei levykansia ja sellaisia signeerattavaksi. Minä vein Don Rosan Sammon Salaisuus - opuksen, ja sain palkkioksi niin hassuja hymähdyksiä, että sisäinen faniteinini on tyydytetty taas vuosiksi eteenpäin.

Elokuussa oli aika muuttaa Kotkaan. Ostin sinne uuden polkupyörän, jolla suunnittelin hiihtävänipolkevani kouluun kesät talvet. Suunnitelmassani olen myös pysynyt, lukuunottamatta yhteensä kolmea viikkoa edeltävältä syksyltä, joiden aikana joko ei kroppa kestänyt, ei pyörä kestänyt, tai oli typerä sää. Koulumatkani ei ole mikään kovin valtava, reilu 5km, ja maasto on todella helppoa asfalttia, joten jos tämä lumeton talvi on lumeton toukokuuhun asti, alan todella miettiä että oliko maastopyöräni vähän liioiteltu hankinta kaupunkimaastoon. Haaveilen tosin ensi kesänä kurittavani kyseistä fillaria Nuuksion metsissä, tai ehkä matkustavani sen kanssa pohjoiseen.

Vaikka yksiöni ikkunasta katsoen Kotka vaikuttaa rumalta betonihelvetiltä, polkupyörää luovasti soveltaen olen todistanut tämän käsityksen vääräksi. Junaharrastukseni on tosin näivettynyt, kun paikallisen henkilöliikenteen diversiteettiä ei voi verrata Pasilan ja Helsingin vastaaviin, mutta kantasataman ja rautatieaseman ratapihoilla pörräävät seeprat ja rantarataan verrattuna ääretönkertainen rahtiliikenne ovat pakottaneet kameran, joskin lumian eikä pokkarini, laulamaan. Pokkarikin on yhä olemassa, mutta se tuntuu olevan varattu suuria tapahtumia, kuten viimeisintä Turku-Uusikaupunki-Turku - lättäajelua, varten, ja tällaisiä ei kauhesti ole kiikarissa.

Lokakuussa oli ensimmäiset suuremmat tapahtumat koulupiireissä: NGS2013 ja GSGDC. Global Student Game Developer Competitionin idea oli hakkeroida yksinkertainen peli erään kuvan pohjalta. Tästä ei jäänyt käteen valmista peliä; muutama ajatus sen sijaan jäi:

  • Java (ja sen sisaret) on hirveä kieli jos projektin pitää valmistua seuraavan 365 päivän sisään, puhumattakaan seuraavasta 24 tunnista
  • Mergeen kykenevät hajautetut versionhallinnat ovat ehdottoman kriittisiä, eikä niitä voi korvata millään Dropboxin kaltaisella roskalla (vaikka Db onkin aika oleellinen jos yksi koodari työstää projektia useammalla koneella...)
  • Usean kokinkoodarin ympäristöt epäilyttävät minua. Pariohjelmoinnilla voi olla teoreettisia pohjia toimia, mutta liian monta samanaikaista koodaria saman projektin kimpussa kuulostaa vaikeammalta kuin monisäikeistys C++ssa.
  • Minun pitäisi tutustua Unityyn, vaikka se tarkoittaisikin C#:tä ja hiiren käyttöä.

Northern Game Summit taas... siellä oli esityksiä pelikehityksestä, pelistartuppien pitsauskisa (hirttäkää minut, finglishkriitikot \o/), ja verkostoitumista. Minä tykkäsin esityksistä, näin syyn startuppikisoille, ja vihasin verkostoitumista. Verkostoitumisella tarkoitan niitä juhlia siellä baarissa keskellä kajaania. Vaikka olisin edellisenä yönä herännytkin ihmisten aikaan, enkä jo viideltä, on meluisa baari typerä ympäristö. Lisäksi, ymmärsin että suurin osa joi viinaa/olutta, jotka maistuvat pahalta, jakelivat käyntikorttejaan, mille voin ehkä pitkin hampain myöntää olevan perusteita, ja harrastivat smalltalkkia, toisinsanoen puhuivat merkityksettömiä, mikä on typerää, koska se on merkityksetöntä. Lähtöni kyseiseen baariin oli ehkä hieman väärin laskelmoitu ajatus kokeilla tätä verkostoitumista, josta kaikki niin meuhkaavat, mutta pohjimmiltaan... se oli oikea valinta. Sillä jos olisin jäänyt hotellille koodaamaan, voisinko nyt kirjoittaa tätä kappaletta? :)

Suurin, mitä matkalta jäi käteen, oli vahvistus siitä että olen oikealla tiellä. Hakkeroituani MERPGiä ensin 7 tuntia bussissa Kotkasta Kajaaniin, ja seuraavana päivänä 7 tuntia Kajaanista Kotkaan, sain krapulaa kärsivältä toveriltani kommentin kuinka mie oon ihan hullu, kun ensinnäkin pystyn keskittymään siinä metelissä koodaukseen, toisennakin en käytä C++aa (joka kuulemma on tosi makee kieli) enkä Javaa, kolmantenakin koska ruudulla ollut testitilesetti oli niin hassun värinen.

Sitten tuli marraskuu. Tapahtuiko silloin muuta kuin Doctor Whon 50-vuotisjakso?

Joulukuu oli kiva. Alkukuusta stressi/epätoivo paistoi läpi, ja kirjoitin muutamankin tekstin purkaakseni pahaa oloani, mutta puolivälissä, kun koulu alkoi rauhoittua, ja ne vähät koulutuntini alkoivat puolenpäivän pintaan, ei minulla ollut mitään syytä mennä yhdeksältä nukkumaan, vaan sain työskenneltyä aamuyhteen kauneimmillaan. Seuraava tällainen jakso tulee uskoakseni aikaisintaan toukokuussa, mutta en usko tämän haittaavan, sillä luulen koulusta tulevan tänä keväänä mielenkiintoisia projekteja. Mielenkiintoiset projektit ovat kivoja syistä, joiden luulisi olevan ilmiselviä, mutta joista minun pitää varmaan jossain välissä kirjoittaa jotain.

Nyt, kun kaikki on sanottu, on aika nauraa, sillä mitään ei ole sanottu. Sanoa ei voi ellei koe, ja sen vuoksi odotan ensi vuotta innolla. MERPG näyttää ja tuntuu nyt paremmalta kuin vuonna 2011, jolloin viimeksi se on ollut tällä tasolla, ja minulla on taas jonkinlainen ajatus siitä mitä hittoa olen tekemässä. Pitäisi kerätä koulusta pieni tiimi tekemään grafiikkaa, kommentoimaan suunnitelmia, ja yleisesti olemaan tiimi, jonka kanssa pallotella näitä konsepteja. Tässi on loistava tiimiläinen, mutta kahden miehen, joista kummallakin on vain hämyisä käsitys mitä ollaan tekemässä, tiimi on melko pieni, vaikka jätettäisiin huomiotta Espoo - Kotka välimatkan suuruuden tuomat ongelmat.

Mitä odotan ensi vuodelta? En tiedä. Tähän mennessä minulla on ollut jokaiselta vuodelta jonkinlainen käsitys tulevasta, mutta nyt en todellakaan osaa sanoa, ja tämän voin tunnustaa hieman ahdistavan. Jos alkuvuonna saan MERPGin kartat viimeisteltyä (enää pitäisi optimoida piirtorutiineja niin ettei jokaista kartan layeriä piirretä minuuttia), sekä IO-rutiinit luotua, sekä räkäisen karttaprimitiiveihin siirtymävektorit kiinni, on minulla maaliskuuhun mennessä vanhan javakoodin kanssa feature-compatible versio, paljon kauniimmalla pelimoottorilla, joten jos aikataulu sallii, voisi minulla olla toukokuussa valmis pelinpuolikas placeholder-graffoilla. Tämän voisi sitten antaa graafisille tiimiläisille paranneltavaksi, ja alkaa itse kirjoittaa edes jollain tasolla lomaproosan kanssa yhteensopivaa toista puolikasta. Tällä demolla voisin sitten lähteä tavoittelemaan startuppikonseptia, josta kirjoitin aiemmin. Puhunko järkeä vai hulluja? Harva osaa sijoittaa puheitani näihin kasteihin, mutta normaalisti ainakin minä kykenen siihen. Nyt en, ja tämä hämmentää.

Joka tapauksessa, Feuer kiittää tästä vuodesta, ja toivoo seuraavalle vuodelle hämmennystä ja loistavuutta riittävästi jokaiselle. Kiitos, maailma.

Ducere me in lucem
Liberare me a tenebris, salva me

Alaviitteet

  1. Tämä blogi on internetissä, ja repertuaariini kuuluu keskimääräisen neron rooli. Laskenko siis itseni tähän netin kaikkitietävien joukkoon? Todellakin! Ainoa, mitä varmasti ja ehdottomasti tiedän, on etten tiedä mistään mitään, ja tämän vuoksi opin päivittäin paljon mielenkiintoisia asioita. Välillä huomaan myös että vaikken tiedä mistään mitään, moni muu tietää vielä vähemmän, ja moni muu vaikuttaa tietävän paljon enemmän, ja ihmettelen kumpi suunta olisi parempi, ja miten sinne pääsee.
  2. Typerät nimiavaruudet, työkalujen newbie-vihamielisyys, ja katkeransuloiset dynaaminen tyypitys, java-interop, sekä tilanhallinta, jos muutaman voin nimetä.

No comments:

Post a Comment