sunnuntai 30. joulukuuta 2012

Uusi vuosi, uudet junat


Vuosi on taas lopuillaan. Kaikki numerollisesti lahjakkaat toivottavasti tietävät tämän tarkoittavan pientä yhteenvetoa ja ehkä kuvakollaasiakin. Viime vuonna näihin aikoihin pohdiskelin että olipa -11 hieno vuosi, onkohan tuosta seuraavasta mihinkään sen rinnalla. Nyt tiedän vastauksen: Oli! Tämä oli upea vuosi, vaikka tähän ei kuulunutkaan mitään eriskummallisia ruotsinmatkoja. Tämä vuosi oli työtä, työtä ja työtä. Vähemmän yllättäen sitä tarvitaan tässä maailmassa.

Viime Tammikuussa aloin työssäoppia. Puolen vuoden PHP-hommien jälkeen sitten valmistuin. Tässä välissä näin PHP:n kauneimmat ja kauheimmat puolet. PHP on kiva kieli, ei ehkä kaunis, mutta oikein käytettynä sillä saa hyviä nettisivuja aikaiseksi. Pröng olisi elävä esimerkki siitä, jos jaksaisin toteuttaa sinne puoliakaan siitä mitä olen suunnitellut, ja olisin julkaissut sen avoimena. Tunteeni PHP:tä kohtaan eivät kuitenkaan olleet näin positiivisia työssäoppimiseni jälkeen. Työskenneltyäni phpBB3:n kaltaisten hirvitysten kanssa, ja pärjättyäni Taitajien PHP-hommissa vähintäänkin keskinkertaisesti, olin sitä mieltä etten halunnut kuullakaan koko kielestä enää. Voinette arvata että Java-ohjelmoijaksi koulutettuna käytin kieltä kuin Javaa, ja sitten suutuin sille kun vähemmän-yllättäen (ehkä jopa onneksi) se ei taipunut samoihin muotteihin kuin työpöytäjava. Myöhemmin, lueskeltuani serverijavapatterneista taitajia varten, aloin tekemään pohjatyötä omalle MVC-kehykselleni. Kesään mennessä olin kuitenkin jättänyt tuon projektin innostuttuani jostain muusta. Myöhemmin, opiskeltuani Common Lispiä ja Clojurea, päässäni naksahti jotain: dynaamiset kielet voivat olla kivoja. Tämän todistaakseni kirjoitin PHP:lle keväällä aloittamaani MVC-härpäkkeeseen M-kirjainta edustamaan tietokantarajapinnan, jonka kirjoittaminen olisi ollut mahdollista staattisesti tyypitetyssä ympäristössäkin, mutta jonka kirjoittamista helpotti dynaamisuus. Tietokanta-entiteettien ominaisuuksia ei määritelty luokkatasolla, vaan yläluokan property-mapissa, jonka kanssa interaktoitiin __get() ja __set() - metodien läpi.

Kun kehys oli olemassa, ja olin päättänyt jo keväällä vanhan Pröngin kuolemasta, oli pieni vaiva rakentaa Pröng käyttämään tätä kehystä, jolla se toivottavasti on vielä vuoden päästä, ellen sitten innostu Clojurella leikkimään palvelimella. Fakta on, että nämä viime vuosien uudelleenkirjoitusrumbat ovat tappaneet innovaation Pröngistä. Yritän ensi vuonna saada aikaiseksi luonnosten ympärille uusiakin ominaisuuksia. Kalendaari pitäisi toteuttaa, ja tutkia miten tagisysteemin ympärille saa toteutettua keskustelulaudan. Lautoja on Pröngissä nähty muutamakin, mutta ne ovat joko koostuneet litteistä, peräkkäisistä viesteistä, tai olleet rikki.

Jättäkäämme Pröng. Taisin mainita Jyväskylän taitajakisat, joissa olin keväällä. Se oli hauska matka: maanantaina junalla ensin tampereelle "bongaamaan lentokoneita", kuten kerroin mukana kulkeneille opettajille, jotka ihmettelivät että mitä sinä siellä laiturilla juoksentelit kameran kanssa vartin mittaisen veturinvaihdon aikana. Oriveden kohdalla sitten kysyttiin että missä minä niitä lentokoneita oikein näin. Helppoon kysymykseen helppo vastaus: tässä:
Lentokone Tampereella
Kisat olivat myös kivoja: minä en osaa sanoa ei tuntien mittaisille koodausmaratoneille. Valitettavasti kisoissa arvioitiin runsahalti graafista silmää, joten voitte Pröngin ulkoasua tarkkailemalla päätellä kuinka hyvin pärjäsin. Koulustani oli muuan toinenkin opiskelija kisaamassa, ja vaikka hän "ei kyllä oikeastaan osaa PHP:tä käyttää", hän sai eniten pisteitä näissä kisoissa. En tiedä täysin mihin se perustui, mutta väittäisin että hänellä oli silmää designille, hän osasi käyttää css:ää, eikä keskittynyt yli-insinörisöimään (to over-engineer på english) logiikkaa sivujen taustalla. Onneksi kisoissa oli myös Windows Phone - tehtävä, niin hassulta kuin se Verkkosivusarjassa kuulostaakin. XAMLilla minäkin sain aikaiseksi ulkoasun, joka näytti yhtä hyvältä kuin 27-sarjalainen Dv12 (toisinsanoen Ruotsinlaiva) Jyväskylässä. Alla referenssikuva. Lisäksi (siihen aikaan) C# oli paljon fiksumpi kieli kuin PHP, joten logiikan aikaansaanti ei vaatinut itkua, kiroilua eikä hammasten kiristystä. Kisojen loputtua, ennen pisteiden julkistusta, minulla oli kaunis Metro-app, jolla pääsin kuudennelta sijalta kolmanneksi. Se oli kivaa.
Ruotsinlaiva ja rapuvaunuja

Kesä ja muut

Tästä oli aika ohjelmointipainotteinen alaotsikko. Kannattaa hypätä seuraavaan otsikkoon, ellette ole kiinnostuneita Lispistä ja Emacsista.
Ksältä ei kyllä ole paljoa tarinoita kerrottavana. Emme käyneet Kemissä, emme Ruotsissa, emme missään. Vietimme aikaa lähinnä järvellä - ja kautta hiljaisen blogini millainen paikka tuo lähijärvi onkaan. Niin pitkälle kuin muistan, emme kehittäneet siellä yhtään mitään, vaan sosialisoimme ja tuhlasimme aikaa, kuten normaalit myöhäisteinit. Se tuntui hyvältä.
Teineilyn lisäksi aloin myös palkkatyöt kesän myötä. Toukokuun viimeisenä kävimme Tässin kera tutkimusmatkalla Kauniaisissa. Kesäkuun ensimmäisellä viikolla juoksin pääsykokeissa, joista kummatkin pääsin yllätyksekseni läpi, mutten lopulta mennyt kumpaankaan... vielä. Sinä viikonloppuna kävimme Tässin ja kumppaneiden kanssa Saaristo Open Airissa tutustumassa suomirockin hassuimpiin nimiin ja kertaamassa edellisen syksyn kokemuksia Within Temptationista. Seuraavana tiistaina astuin sitten palkkatyöhön, joista minua ei todennäköisesti saa irti kuin opiskelupaikka Skotlannissa. Töissä olen päässyt käyttämään ympäristöä, joka on hieman niinkuin Java, mutta ei onneksi sinne päinkään: C#tä nimittäin. C#n ohella sain myös Java-hommia, ja pääsin tutustumaan Linuxiin. Lisäksi kokeilin emacsia, jolla tätäkin kirjoitan, mikä johti elispin, Common Lispin ja Clojuren opiskeluihin ja tekstiin Yool-blogissa.
The Grani
Tuolle tekstille pitänee kyllä joskus kirjoittaa jatkoa. Emacs on editori, joka muka-aukeaa hetkessä, kun ymmärtää ettei keskustele perinteisen tekstieditorin vaan lisp-ohjelman kanssa, mutta aito aukeaminen kestää paljon pidempään. Tuolloin olisin tehnyt java-ohjelmani mielelläni Netbeansilla, mutta nyt kun lopultakin asensin kotikoneeni Archin Emacsiin asianmukaisen Clojure-kehitysympäristön, en mielelläni palaa Javaan. Kieleen toki saatan palata, etenkin koska töissä kieli kuuluu vakioituun työkalupalettiin, toisinkuin Clojure (mikä on sääli), mutta Netbeansista haluan päästä eroon mahdollisimman pian. Tapa, jolla Emacs ja Clojure-runtime mahdollistavat interaktiivisen kehityksen, on vain uskomattoman kaunis.

Hitto soikoon, opinpa tässä tätä kirjoittaessani komennosta M-x htmlfontify-buffer. Sitä pitää soveltaa seuraavan blogitekstin kanssa.

Lisp noudattaa samaa kaavaa: pinta näyttää yksinkertaiselta, mutta alla on paljon kivaa, mikä pitää vain löytää. Clojuren Seesaw yhdistää Swingin ja WPF:n parhaista puolista suurimman osan, Lispit toimivat myös XML:n korvikkeena, ja makrot. Makrot ovat kauniita, vaikka laiskuudessani en ole niitä vielä päässyt soveltamaan. Kuvitellaan että meillä on kertomafunktio. Matemaattisesti kertoma merkitään huutomerkillä parametrin perässä, eikö? Miten tämä sitten normaaleissa kielissä merkittäisiin? kertoma(luku); - muodossa todennäköisesti. Sitä ei voisi merkitä edes muodossa !(luku), koska ! on negaatio-operaattori. Noh, Lispeissä ei ole mitään syytä sille ettei funktion nimi voisi olla !. Kokeilkaa vaikka: seuraava koodi menee läpi Clojure-kääntäjästä:

(defn !
"Laskee luvun kertoman :)" [luku]
 (if (number? luku)
(if (= luku 1)
 luku
(* luku (! (- luku 1))))
 -1))

Anteeksi huono muotoilu.

Tuo on yksinkertainen rekursiivinen kertoma, joka palauttaa -1:n jos parametri ei ole luku. Tätä sitten kutsutaan näin: (! 3). Tämä palauttaisi kuuden. Helpolla makrolla voimme kuitenkin tehdä tästä vielä matemaattisemman näköisen: (matikka (3 !)) palauttaa myös kuuden, mutta nyt ! - operaattori tuleekin parametrin jälkeen. Jätän yleisön tehtäväksi arvata mitä matikka-makro tekee.

Jos olette kiinnostuneita XML:n korvaamisesta Lispillä, lukekaa hieman Yeggeä, ja sen jälkeen googlatkaa xmlgen-kirjastoa Emacsille. Sillä tämäkin teksti on kirjoitettu: nämä rivit ovat Lisp-puussa, jonka Emacs muuttaa edellämainitulla html:ksi ennen bloggeriin siirtoa. Tällä hetkellä html on siirrettävä bloggeriin käsin, mutta sinä hetkenä kun innostun rakentelemaan, rakennan todennäköisesti Clojurella blogger-java-apia hyödyntävän palikan, jolle emacs lähettää html:n, ja joka lähettää sen eteenpäin bloggerille.

Linux-kokemuksistani yoolblogin teksti antaa myös huonon kuvan. Lokakuussa asensin pöytäkoneelleni Arch Linuxin, mitä suosittelen jokaiselle, joka luulee ymmärtävänsä Linuxeista mitään. Sitähän minä en tee, mutta onnistuin Archin kanssa yllättävän hyvin. Minulla on KDE päällä, graafisessa tilassa, ja 2 kolmesta näytöstänikin näyttää kuvaa. Tätä liittoa ei ole ihan taivaassa tehty, mutta ohjelmoijana pidän tästä ympäristöstä. Shelli on kiva Windowsin komentoriviin verrattuna, virtuaalikonsoleita olen usein kaivannut Windowsiin, ja esimerkiksi Clojuren Lein - projektinhallinta oli paljon helpompi asentaa tänne kuin Windowsiin. Lisäksi focus-follows-mouse-ominaisuutta ilman on hankala elää, kun siihen on kerran tutustunut.

Syksy ja muut

Elokuu oli kiva. Silloin oli puolivuosittaisen Hyvinkään Rautatiemuseo-reissun aika. Edelliset reissuthan olivat viime vuoden syyskuussa, Riihimäen asematapahtuman yhteydessä, ja viime-maaliskuussa, kun rautatiemuseolle pääsi ilmaiseksi museon synttäreiden vuoksi. Tällä kertaa oli vuorossa yhdistetty VR:n 150-vuotisbileiden juhla-/rautatiemuseoviikonloppu. Olin siellä valitettavasti vain lauantaina, joten en ulkotapahtumien ja sellaisten vuoksi ehtinyt käydä tutkimassa oliko hallien sisältö muuttunut sitten viime näkemän, enkä ehtinyt myöskään matkustaa lätällä, mutta pitäähän ensi kertaankin jotain jättää. Mitä ehdimme tuona lauantaina mukana olleiden ihmisten kanssa tehdä, oli tutustuminen paikalliseen konepajaan, ulkona olleeseen kalustoon tutustuminen (o/ eka kerta Dr16:n hytissä), sekä jotain, mitä kovin moni kasarin alun jälkeen syntyneistä ei välttämättä voi väittää tehneensä: matkustimme Hyvinkäältä Karjaalla alla olevan Hr1:n vetämänä.
Pekka-ukkonen Hyvinkäällä
Ensimmäinen Dr16 - "Isovaalee", jonka olen luonnossa kohdannut.
Ensimmäinen luonnossa kohtaamani Dr16 kesältä -11 Kemistä


Syyskuu oli töitä ja koulua. Pitkän matikan opiskelu tekee jokaiselle ohjelmoijaksi itseään kutsuvalle hyvää. Tekee pahaa ajatella että on olemassa ohjelmoijia, joilla on pohjalla vain lyhyt matikka, tai mikä kamalampaa, vain ammattikoulun matikka. Ei sitä matikkaa tarvitse missään käyttää, geneerisessä SYÖTÄ-LUE-MUOKKAA-POISTA - ohjelmassa, kuten Pröng, ei välttämättä tarvitse matemaagisuutta mihinkään, mutta hyvcässä ympäristössä opiskeltu matikka auttaa ajattelemaan. Lisäetuna selviää, jos saa tehtäväkseen tehdä datan visualisointia firman oman ohjelman sisällä. Sen voi nimittäin visualisoida kahdella tavalla: joko toivoo että käyttöympäristö omaa excelin, ja winapilla yrittää kolvata sen ikkunan sisään, mikä on vaikeaa, vaikkei välittäisi ohjelman vakaudesta yhtään mitään. Vaikeustaso moninkertaistuu jos haluaa että ohjelma ei selviää tästä ilman hassuja bugeja. Toinen vaihtoehto on piirtää tilastot käsin datan pohjalta GDI+lla (tai Swingillä, tai mitä piirrintä ympäristö käyttääkään), mikä ei C#llä ole ennenkuulumatonta tai haasteellista. Haaste tulee siitä jos yrittää jotain viivadiagrammia monimutkaisempaa piirtää ilman edes lyhyttä matikkaa.

Lokakuu oli pimeä. Se koostui samanlaisesta työstä ja koulusta kuin syyskuukin. Sen lisäksi tuolloin oli karsinnat Worldskillseihin, jonne minut tiestysti kutsuttiin, koska olin pärjännyt NIIN hyvin Taitajissa. Vähemmän yllättäen karsinnoissa pisteet jaettiin lähinnä ulkoasun pohjalta, ja minun ulkoastaitoni tunnetaan. Ei tullut Saksanmatkaa minulle, ei. Sen sijaan marraskuu alkoi Tampereenmatkalla. Vietin viikon Diabeteskeskuksessa, joka on jopa pimeään vuodenaikaan suomen kauneimpien paikkojen joukossa. En tiedä voittaako Näsijärven rannan maisemat jopa paikallisen järvemme maisemat upeudessaan, etenkin kesäisin taistelu on melkoisen tiukka, mutta ainakin lähelle pääsee. Paikallinen seura oli myös mahtavaa (MOI JANI!!!). Kämppikseni oli oikein hieno mies, jonka kanssa olemme käyneet monia viisaita keskusteluja. Muutkin ihmiset olivat - ainakin osa - oikein mukavia. Yritin epätoivoisesti tutustua muutamaan heistä, mutta sitten viikkoni kaupungissa teki ilkeän tempun: se loppui.

Marraskuuhun kuului myös Nightwishin Imaginaerum - elokuva. Elokuva ei koskaan ilmeisesti saanut suurta suosiota osakseen, mutta niiden, jotka sen ovat oikeasti nähneet, keskuudessa se on melkoinen kulttielokuva, jota ainakin minä odottelen innoissani DVDlle. Koska DVD-julkaisussa kesti, hyiolkoon, yli kaksi viikkoa, piti Tässin ja velikultani (MOI EEKU!!!) kanssa käydä katsomassa elokuva myös Tennispalatsissa. Toisen kerran jälkeen pieni tauko tuli tarpeeseen: levyn ongelmana on, että kun sen on kymmenen kertaa kuunnellut läpi viikon aikana, siihen kyllästyy. Todennäköisesti elokuvakin oli sellainen, enkä halua kyllästyä siihen kuten joihinkin elokuviin (kasituntiset ja Pirates of the Caribbean, katson teitä).

Joulukuussa tapahtui hassuimmat tapahtumat ensi vuotta ajatellen: MERPG1:n ensipuolikkaan kässäri valmistui, Lomaproosa on vähitellen 60 sivullaan ja 25 000 sanallaan alkanut rullata, ja minulla on Clojure-ympäristö lopultakin valmiina MERPGiin. Lisäksi kävimme Tässin ja velikultani (MOI EEKU!!!! (Hmh, deja vu)) kanssa katsomassa Hobitin, joka tarjosi taas paljon uutta inspiraatiota Lomaproosalle. Jos olisin hyvä ihminen, avaisin kirjat Hobitti ja Sormusten herrat, joista toisen luin ja toista aloitin viimeksi kymmenisen vuotta sitten (hyi että kuinka aika kulkee), mutta ongelmia on, kuten aina. Minulla on aivan liian paljon luettavaa nytkin. En tykkää yhtään.

Lomaproosaa, ja kirjoitusta yleensä, pitäisi joku päivä oikeasti analysoida blogiin. Mielenkiintoinen ominaisuus proosateksteissä on, että niiden kirjoittaminen on haastavaa aluksi, 20. sivulla (kun aloitusajatukset on käytetty loppuun, ja, hyi olkoon, pitäisi oikeasti keksiä uutta sisältöä), ja välillä myös 40. sivun paikkeilla. Sen jälkeen tarina vyöryy eteenpäin omalla painollaan, ja tarina luo sisäisiä ristiriitoja aivan itsenäisesti, aivan kuten monisäikeiset Java-ohjelmat.

Nyt jää mm. Lahden ja Oulun Sonata-keikoista kirjoittamatta, mutta sen kanssa on nyt pakko elää, koska minä en jaksa. Suunnitelmana oli tehdä tänään vielä muutakin kuin tätä...

Mitä ensi vuonna?

Otsikon kysymys vaivaa minua joka vuosi. Jos tämä vuosi oli näin loistava, voiko ensi vuosi olla edes yhtä hyvä? Vuosi sitten vielä epäilin tätä, mutta nyt tiedän paremmin. Ensi vuonna lähden mahdollisesti Skotlantiin opiskelemaan pelien tekoa (Comp. Sci:n pelientekoon liittyvät osa-alueet + opiskelua jokaisen konsolin sdk:n kanssa, sekä median tuottoa afaik.), julkaisemme toivottavasti MERPGin ekan puoliskon, ja elän elämääni. Tällä hetkellä ajatuksenani on kirjoittaa pitkä matikka maaliskuussa, mutta ellen oikeasti jatka matikan kertailua pian, saatan jänistää siitä, etenkin kun jätin (tyhmänä ihmisenä) mainitsematta kirjoitusaikeistani skottikoulun hakupapereissa, eli minulla ei ole minkäänlaista pakkoa päästä sitä läpi. Ellei tietysti lasketa sitä, että haluan näyttää Tässille ja muille, että olen ns. "kaheli" :)

Kiitos kaikille vanhoille tutuille, kuten Tässille ja Sonjalle (joka tarvitsee blogilempinimen! Karkuzhan ei vain toimi!), puoli-uusille tutuille, kuten Alpille ja Vohvelieläimelle (Siinä vasta hyvä ja toimiva blogilempinimi), sekä vuoden aikana tulleille täysin uusille tuttavuuksille, kuten Taitaja- ja Työporukoille, sekä Tampereella tavatuille, ja kaikille. Työ olette parhaita. Hyvää uutta vuotta, ja toivottakaa onnea MERPGin tuotantoonsaattamiseen! En tykkää itsestäni yhtään jos sitä ei ole julkaistu kun menen skotlantiin!