Sunday 30 December 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!

Friday 28 December 2012

MERPGin kässärin ensimmäinen julkinen versio


Vuosi sitten päätimme Tässin kanssa Merpgtarina - blogin olevan kamala. Niinhän se olikin, mutta opin siitä paljon. Opin miten tiimin sisäistä dokumenttikiertoa EI pidä toteuttaa :) Tarinankerrontaan blogiformaatti on nimittäin aivan kamala; tekstit näkyvät uusimmasta vanhimpaan, mutta tekstien sisällä aika kuitenkin kulkee kronologisesti. Tämä tappaa luettavuuden. Lisäksi osa noista tekstuaalisista ratkaisuista ko. blogissa on vähintäänkin luovia, joten teksti piti kirjoittaa puhtaaksi.

Päätin että MERPG1 täytyy jakaa kahtia, jotta jonkinlainen peli saadaan ulos ennen vuotta 2020. Se ei ollut ainoa syy, mutta niiden tarkempi analysointi vaatisi oman tekstinsä (jota ette minut tuntien tule saamaan :) en minä osaa kirjoittaa mistään yleishyödyllisestä). Nyt, vuosi hidastahtisen puhtaaksikirjoittamisen aloituksen jälkeen ensimmäinen puoli kässäriä on valmis, ja pian pitäisi siirtyä taas koodin kimppuun. Tässi voisi ehkä harkita karttasuunnittelua kun ehtii ;) ja kun olen varmistanut ettei karttaohjelma ole mädäntynyt rikki

tl;dr

Merpg.websiin(minun piti jo vuosi sitten siirtää tuo viuhkaan wordpressille...) on ilmestynyt uusi sivu: Dokumentit. Sinne on julkaistu kässärin julkaisukelpoinen, mutta vielä muuttuva versio sekä odt:nä että docx:nä. Jos ette jaksa etsiä sivustolta, suorat linkit ovat tässä:
Sivistyneistä kommenteista ei ole mitään haittaa :)

Wednesday 26 December 2012

MERPG-runo

Huomasinpa kirjoittaneeni MERPGin ensimmäisen osan loppupuolelle paikallisen ilkimyksen lausuman runon. Jaanpa sen nyt suurelle yleisölle ennen varsinaista kässäriä:

Kellojen soidessa kaupungin yllä
Taivaiden hämärtyessä tähtien alla
He huomasivat ajan liekeissä olevan

Vuorella makaa pelastus
Horisontissa lähestyy kuolema
Raukat pelkäävät, heikot vihaavat
Vahva on vain syytös

Kuka meidät synkästä yöstä pelastaisi?
Kuka vuorelle muurin rakentaisi
Kuka Samettitakin lunastaisi?

Ettekö te tyhmät huomaa
verta, jolla kirjanne on kirjoitettu
hikeä, jolla muuri suojaksenne on rakennettu
kyyneliä, jotka vuodatan tämän maailman vuoksi

Laulakaa turhasta toivosta
Kertokaa tarinoita viattomuudesta
Lukekaa sanoja kauneudesta
Lausukaa säkeitä tuhosta

Olette taistelussa, jota teidän ei ole tarkoitettu voittavan

Ja jos jollekulle tulee olo siitä, että tätä kirjoittaessa on kuunneltu Sonata Arctican Wildfire-trioa, olo on aivan oikea.

Saturday 8 December 2012

MEsEstä tietoa


Mese taas toiminnassa.

Viritin viuhkaan ikivanhan tomcat 7.16:n (nykyversio on joku 7.33, 7.16 oli uusin versio silloin kun viuhkassatoimimisen mahdollistavat kustomisaatiot tehtiin tomcatin tiedostoihin, ja nämä kustomoidut tiedostot ovat hajonneet uusien versioiden myötä), ja asensin MEsErverin sinne. Käänsin MEsE-clientistä uuden version, ja heitin sen ME-säilöön, eli se ei ole vielä julkisessa jakelussa. Minun pitäisi päivittää heinäkuista speksiä, sekä rakentaa lopultakin jokin jakelutoteutus, sekä bugiseuranta, mutta nyt tämä posti saa toimia MEsEn/yool-messengerin bugiseurantamediana. Tässä tunnetut "ominaisuudet":
  • Käyttöliittymä vastailee etenkin käynnistyessään tuplaklikkeihin vähän huonosti, ja keskusteluikkunoita aukeaa helposti neljäkin kappaletta
  • Timeout-uloskirjautumisessa KESTÄÄ, joten älkää kaatako niitä clienttejänne. Ikkunan sulkemisen pitäisi lähettää palvelimelle logout-signaali
  • Kohtasin clientillä kummallisen kaatumisen. Jos saat "{exception-message} unhandled. Application closing." - viestin, jonka jälkeen ohjelma sammuu, ole hyvä ja hihku minulle.
  • Pääikkunan sulkeminen tappaa client-prosessin (kauniisti), joten ÄLÄ SULJE SITÄ, ellei tarkoituksesi ole kirjautua ulos
  • Spämmit kulkevat, mutta jos palvelin kaatuu, varastoon menneet spämmit katoavat. Spämmit eivät siis ole luotettava viestintätapa tiedolle, jonka on pakko päästä perille
  • Kuvan ja näyttönimen vaihto ei tällä hetkellä onnistu kuin tietokannasta käsin. Näille pitänee rakentaa joku UI.
  • Puolet speksatuista ominaisuuksista puuttuvat :)
Jos olet Tässi, MEsE:n asennusohjelma on ME-säilössä, olettaen palvelimen kestävän tämän illan stressitestit, ja tunnukset ovat samat kuin Pröngiin. (olettaen ettet ole salasanaa muuttanut puoleen vuoteen.... Voiko sitä muuttaa Pröngissä?). Jos et, saat odottaa hetken MEsEä :P

Jos kohtaatte hassuja ominaisuuksia, keksitte kehitettävää, tai kohtaatte Application closing - viestin, kommentoikaa tämän tekstin kommentteihin

Saturday 3 November 2012

Se pidempi teksti Pröngistä

Pröng on julkaistu

Muistaakseni lupasin laajemman tekstin Pröngistä tälle viikolle. Saa nähdä ehdinkö ihan tavoitteeseeni, viikko lähentelee hälyttävästi loppuaan, ja toivon etten kirjoittele ensi viikolla ennen sunnuntaina kuin kaksi kertaa: matkalla tampereelle ja matkalla sieltä kotiin. Muuten suunnitelmananani on olla olematta kovin aktiivinen ensiviikolla internetissä syistä, joista voisi joskus olla jännä kirjoittaa. Ei kuitenkaan ensi viikolla. Ensi viikolla olen kirjoittamatta syistä, joista en halua kirjoittaa ensi viikolla, koska haluan kirjoittaa niistä ensi viikolla. Lupaava alku tekstille: tietäkää takana olevan tehokas MERPGinkehityssessio, mikä ei koskaan lupaa koherenttia tekstintuottoa. Tästäkin sen näkee: otsikko kertoo Pröngistä, ja nyt olen lähinnä mussuttanut siitä, miten en halua haluta olla haluamatta.

Julkaisin siis uuden koodin tiistaina Pröngissä. Eilen, kun Pröng joutui kehittelyjen ja saunonnan vuoksi tosikäyttöön, selvisi kaksi asiaa, jotka olemme listanneet edellisen postin kommentteihin: Luonnoksen lisäys oli rikki, ja rivinvaihtoja järjestelmä tukee taas miten jaksaa. Vanha koodi muutti luonnos-lomakkeelta saamastaan luonnoksesta \n - merkit <br> - merkeiksi, eli html-rivinvaihdoiksi, ja sen jälkeen se poisti tekstistä kaikki pelottavat html-merkinnät ja tallensi sen kantaan. Näinhän tätä ei todellakaan olisi kannattanut tehdä: mitä jos datasta ollaan kiinnostuneita Pröngin ulkopuolella? Mitä jos joskus tehdään esim. WPF-ohjelma, joka on kiinnostunut datasta, mutta ei todellakaan osaa käsitellä HTMLää. Oikea paikka pelottavien html-merkintöjen siivoamiselle olisi ollut esityskerros, eli ne olisi siivottu juuri ennenkuin ne echotetaan selaimelle.

Tästä voidaan päätellä että kannassa on rivinvaihtoja monenlaisissa muodoissa. Tästä näette oireen huonosti kohdellusta tietokannasta. Ensi viikon jälkeen pitäisi läpikäydä luonnokset käsin ja korjata tuollaiset poikkeamat. Toinen toteuttamista odottava projekti on säätää luonnoksen esittävä proseduuri muuttamaan \n - rivinvaihdot <br> - merkinnöiksi. Tallennusproseduuri tietääkseni tallentaa rivinvaihdot ihan validisti kantaan asti, mutta en ole vielä testannut, ja pyydän ettei kukaan muukaan menisi testaamaan.

Luonnosten rikkonaisuudesta vielä. Yritin lisätä Pröngiin Luonnosta 519, "Voi hitsi kun voikukkia ei voi syödä", kun kohtasin yllättävää käyttäytymistä: Se ei lisäytynyt kantaan. Ihmettelin minuutin että mitä hittoa, sitten tajusin ongelman. Joku viisas joskus kertoi miten historiaa tuntemattomat ovat tuomittuja toistamaan sitä. Olin ilmeisesti unohtanut oman historiani, sillä kuten ainakin Tässi muistaa, vanhassa Pröngissä oli koko elämänsä ajan sellainen ongelma, että kaikki LID-linkit osoittivat devpröngin puolelle. Nyt oli käynyt samoin: luonnostenlisäysformi osoitti devpröngiin! Yllättäen sessio, joka oli olemassa osoitteessa prong.viuhka.fi, ei enää ollutaan olemassa feuer.viuhka.fi:ssä, jolloin autentikointikoodi ilmoitti että tähän kantaanhan ei sitten kirjoiteta mitään.

Arkkitehtuurista

Nyt taas tuntuu siltä, että tällä arkkitehtuurilla päästään pitkälle. Perusrakenne on lopultakin aitoa MVC:tä. Frontcontroller valitsee cmd-urlparametrin perusteella asianmukaisen controllerin, joka hakee tietokannasta tarvittavan datan ja lähettää sen vapaasti valitsemalleen näkymälle. Muistaakseni haukuin PHP:n erilaisten model/ORM - toteutusten tasoa blogissa aiemmin, ja selitin suunnittelevani omaa mapper-toteutusta. Noh, minähän kirjoitin sellaisen. Pröngissä kaikki domain-oliot periytyvät Entiteetti-luokasta, joka sisältää ison mapin, johon olioiden ominaisuudet tallennetaan. Entiteetti-luokassa on myös ylikirjoitettu set() ja get() - metodit, joita kutsutaan jos PHP ei löydä oliolta sellaista kenttää, jota ohjelmoija yrittää käsitellä. Nämähän sitten asettavat ja hakevat datansa tästä mapista, jolla myös tietokannan ja XML:n teko tekeminen helpottuvat.

Tietokanta on myös kiva. PDO:n vuoksi mallikerros ei tiedä mitään käytössä olevasta tietokannasta. Olioilla on ApplyToDatabase() - metodi, joka tarkistaa löytyykö olio kannasta, ja tuloksen mukaan ohjaa sisäisen datamappinsa joko Database::Insert()ille tai Database::Update()lle. Hakuproseduurit taas ovat lispihtäviä. Database-luokalla on metodi SelectAll(), jolle annetaan tyhjä, hakukohteen tyyppinen olio parametrina, ja se hakee kaikki oliot parametrin nimeämästä taulusta. Database::SelectAll(new Luonnos()); siis palauttaa kaikki luonnokset, Database::SelectAll(new Kommentti()); kaikki kommentit, ja niin edespäin. Toinen hakuun liittyvä metdoi, Database::SelectWhere() ottaa tauluparametrin lisäksi predikaattifunktion, jonka avulla se sitten suodattaa palautettavan joukon. Esimerkiksi Database::SelectWhere(new Luonnos(), function($luonnos) {return $luonnos->LID > 300;}); palauttaa kaikki luonnokset, joiden LID on yli 300.

Näitä metodeja käytän koodissa melko vapasti. Kuten kukin voi arvata, jos jokaisen luonnoksen latauksessa läpikäydään koko tagien- ja kommenttien joukko, lähentelee operaation big-O - lukema kompleksisuutta O(MG). Sen kanssa on vain pakko elää, kunnes alan jäädyttää koodin ominaisuuksia korvaamalla Database::Select*() - kyselyjä joihinkin optimoidumpiin, ei niin dynaamisiin toteutuksiin. Kompleksisuus ei ole kuitenkaan itsessään pullonkaula. Pullonkaula on tietokanta: Arkiston lataus tuotti kuusi TUHATTA "select * from tagit" - kyselyä, mikä meni läpi kehitysserverillä juuri ja juuri naurettavien vasteaikojen kanssa, mutta jolle piti kehittää ratkaisu kun viuhkan PHP ilmoitti ettei onnistu. Helppoa: Kakutetaan ensimmäisen SELECT * FROM T - kyselyn tulokset, ja palautetaan ne, ellei parametrilla spesifioida että halutaan päästä kakun ohi kantaan. Tämä toimii, koska PHP-sivujen elinaika on sellainen, että joka sivunlatauksella aloitetaan alusta.

Nyt on pakko kyllä lopettaa. Tämä teksti vaikuttaa niin sekavalta, etten uskalla jatkaa enempää, ja alkaa muutenkin peti kutsua. Nähdään taas joskus.

Tuesday 30 October 2012

Pröngissä tapahtui jänniä

Heitin vajaan vuoden ikäisen koodin, jota työstin puoli vuotta, pois ja korvasin sen koodilla jota on työstetty noinsuunnilleen kaksi viikonloppua. Seuraavaksi pitäisi lätkiä samalle pohjalle pieni bugtracker, mutta sitä odotellessa tämä posti toimii bugiraporttien keräämisessä hyvin.

Laajempi teksti Pröngistä tullee tällä viikolla, nyt voisin siirtyä tutimaan.

Sunday 14 October 2012

Muutama sana Pröngistä

800-luvun Englanti

Väitänpä villillä arvauksella, että kukaan yoolblogin lukija ei ole perehtynyt Bernard Cornwellin Saxon Stories - kirjoihin. Kerran Coolbasic-laudalla joku kehui kirjoja, mutta en tiedä tuleeko sieltä kuinka paljon lukijaliikennettä. Oikeassa elämässä tuntemani ihmiset ovat vain katsoneet hassusti aina kun olen hehkuttanut kyseisiä kirjoja. Eivät yhtä hassusti kuin hehkuttaessani Emacsia, mutta hassusti kuitenkin, etenkin Tässi. Muistan toki aina katsoa häntä hassusti hänen hehkuttaessaan sitä kirjailijaa, jonka nimi ei tule mieleen pitkän yön jälkeen. Hassusti katsomisen jälkeen sitten käsken häntä lainaamaan kyseisen kaverin tuotoksia minulle, jos vaikka ehtisin aloittaa uusia kirjoja ennen vuotta 2015.

Niin, Cornwellin kirjoista olin kertomassa. Kirjat kertovat alaotsikonmukaisen maan luonnista otsikonmukaiseen aikaan. Alkutilanteessa Britannia koostuu skottivaltakunnista, walesilaista valtakunnista, sekä anglosaksien valtakunnista: Northumbriasta, Merciasta, Itä-Angliasta ja Wessexistä. Tarinain päähenkilö, Uhtred, on northumbrialaisen linnanherran poika. Uhtred joutuu kuitenkin tuuliajolle kotoaan tanskalaisten tullessa. Isänsä kuolee taistelussa heitä vastaan, ja setänsä haluaa tappaa Uhtredin, jottei tämä voi viedä häneltä suvun linnaa.

Uhtred kuitenkin kasvaa suhteellisen turvallisesssa ympäristössä tanskalaisten parissa. Elämä on iloista. Tanskalaiset kaatavat englantilaisista kunigaskunnista kaikki paitsi Wessexin. Länsisaksit pistävät vastaan, aluksi koska tanskalaiset ovat varomattomia, myöhemmin koska engelsmannit oppivat käyttämään miekkaa. Ikävä kyllä Uhtredin tanskalaisen perheen viholliset tappavat heidät. Uhtred, joka on kasvanut miltei-parikymppiseksi miehenaluksi ja melko tanskalaiseksi, joutuu pakenemaan Wessexiin, koska muut tanskalaiset eivät katso saksinulikkaa kovin hyvällä. Sitten tarina vasta alkaa...

Uhtredista kasvaa englantilaisten terävin miekka. Opittuaan pitämään huolta itsestään hän haluaisi palata tanskalaisten pariin, kostamaan kasvattiperheensä, tappamaan setänsä, ja viettämään hyvää elämää kasvattiperheen taposta selvinneen ystävänsä kanssa. Valitettavasti höntti vannoi Wessexin kuninkaalle, Alfredille, valan. Valoja arvostetaan, sillä ne ovat ainoita asioita, joihin kaoottisessa, muuttuvassa maailmassa, voi luottaa. Jos herralleen vannotun valan rikkoo, ei todennäköisesti kukaan pidä valanrikkojalle vannottua valaa. Uhtred siis haluaa tanskalaisten pariin, mutta universumi potkii häntä päähän, ja aina kun hän tarinassa pääsee pohjoiselle kotiseudulleen, jokin epäonninen tapahtuma pakottaa hänet takaisin etelään.

Minun on helppo samaistua häneen.

Taitajuus

Worldskills-karsintojen web-designin karsintojen ohjelma julkistettiin tällä viikolla. En tiedä laitettiinko sitä laisinkaan julkiseen internetiin, mutta kilpailijoille tuli sähköpostilla yllättävä tieto että "Kannattaa osata kuun lopussa käyttää PHP:tä, XMLää, HTML5:ttä ja CSS:ää!". Kuulostaa hyvältä, muuta ei keskivertonettisivun tekoon tarvitse. XML tosin sattuu aivoon, koska sille on vaihtoehtoja, jotka eivät tunnu samalta kuin jääpuikko poikittain silmässä, mutta ei voi mitään. Sille on kirjastoja, jotka yrittävät lievittää tätä kipua. HTML5 on muutaman vuoden ikäinen muotisana, mutta sen alla olevat jutut ovat oikeasti kivoja. CSS on yleissivistystä. PHP taas... on tämän illan tekstin aihe.

Minulla on historiaa kyseisen kielen kanssa. Historia alkoi siitä kun 2010, muistaakseni, pohdin että mites Yooliin saisi saman taustasivun sisällytettyä jokaiselle sivulle, jolloin esim. taustakuvaa ei tarvinnut joka sivulle käsin muuttaa. Siihen riitti muutos yhteen tiedostoon. Yool oli ja meni, ja sitten tuli Pröng. Pröng oli alunalkaen aito bisnes-sovellus, jonka tehtävä oli tallentaa ja esittää dataa. Helppoa teoriassa, mutta käytännössä tähänastiset Pröngit ovat olleet koodin tasolla kamalia. Myönnän että tähän saattaa vaikuttaa se, että ohjelmistokehityksen kultaiset kirjoittamattomat säännöt eivät olleet minulla hallussa vielä pari vuotta sitten, mutta tekemällä olen oppinut. Osan vastuusta kuitenkin jakaa PHP, joka on kielenä on... eriskummallinen, mahtava, kamala ja loistava. Eniten kielessä ärsyttää tulkinta dynaamisista tietotyypeistä. Muuttuja voi sisältää MITÄ TAHANSA ja tulkki saattaa yllättäen, täysin varoittamatta muuttaa primitiivimuuttujan tyyppiä lennossa. Onneksi tilanteita joissa näin käy ei ole paljon, joten ne on helppo oppia.

Oliomalli on myös häiritsevä, mutta se johtuu Java-juuristani. Muutamankin kerran olen yrittänyt tehdä vahvasti tyypitettyä kokoelmaa, johon olen laittanut tietystä luokasta perittyjen luokkien olioita, ja lopulta olen herännyt ajattelemaan että hittoakohan olen taas tekemässä. Ehkä seikkailuni Common Lispin ja Clojuren kanssa helpottavat PHP:n kanssa työskentelyä, ehkä eivät.

Joka tapauksessa, olin keväällä, Taitajien jälkeen, niin täynnä PHP:tä, että vannoin etten halua enää ikinä kuulla koko kielestä. Pröngien koodit olivat olleet naurettavia, taitajista oli tullut php-hommista heikosti pisteitä, ja olin lopultakin tutustunut serverijavaan, joka tuntui tekevän serverikoodista taas hauskaa. Hienosti olin kuitenkin unohtanut että taitajien pisteet jaettiin enemmän ulkoasun kuin koodin perusteella, ja serverijava ei ole hopealuoti: se tuo mukanaan paljon omia haasteitaan, kuten ylenpalttinen XML:llä leikkiminen, sekä hitonkokoiset frameworkit. Nyt lausun jotain, joka kuulostaa samalta kuin Hynynen ja runokirjat: jos joskus en osaa kirjoittaa nettisivua ilman frameworkkejä, olen liian vanha nettisivujen tekemiseen.

En halunnut kohdata PHP:tä enää ikinä, mutta tässä minä taas olen. Lähdössä mittelemään taitojani PHP:llä. Tämä toivottavasti selittää edellisen otsikon viimeisen kappaleen. Uhtred halusi juhlimaan tanskalaisten kanssa, mutta universumi piti hänet Wessexissä, kristittyjen seurassa. Hän ei pitänyt tästä. En tykkää minäkään! Ellen sitten tykkää, en tiedä.

PHP:ssa on nimittäin muutama aivan loistava ominaisuus. Esimerkiksi seuraava PHP-koodi on aivan validi:

;pdo

>?php function HelloWorld() { Echo "Hello world!"; } $funktio = "HelloWorld"; $funktio(); ?<

Kokeilin äsken myös "HelloWorld"(); - kutsua, joka sentään tuotti errorin. Silti, yrittäkäpä C#ssä tai Javassa kutsua scopen sisällä olevaa funktiota merkkijonon perusteella. Arvaanpa ettei tule onnistumaan ilman ainakin kymmenen rivin reflektio-noitumista. :)

Okei, avasin Visual Studion ja kokeilin toteuttaa sitä C#:llä. Tässä toimiva tulos:

static void Main(string[] args) { Type type = typeof(Program); var Methodinfo = type.GetMethod("HelloWorld"); Methodinfo.Invoke(null, new object[]{}); } public static void HelloWorld() { Console.WriteLine("Hello world!"); Console.ReadLine(); }

Tuosta saisi itse asiassa helposti yksirivisen ohjelman (+ HelloWorld-funktion määritys), kun PHP vaatii funktiomäärityksen lisäksi vähintään kaksi riviä, mutta staattiset tyypit ja reflektointi tuovat silti mukanaan oman painonsa.

PHP:n tietokantakerros, PDO, on myös mukavin tietokantarajapinta, jota olen käyttänyt. Voittaa JDBC-toteutukset ja .NETin suoran SQL:n API:t joka päivä. Ikävä kyllä, kun peliin tuodaan ORMit tai työpaikkani sisäiset C#- ja Java-mapperit, PDO ei olekaan enää kiva. Kunhan ehdin, täytynee toteuttaa vastaava PHP:lle. Sen luulisi jopa olevan kivaa, koska ei tarvitse riidellä tyyppijärjestelmän kanssa. Siitä kuitenkin pian lisää...

Huomaan itsessäni pingpong-pallo - syndrooman. En tiedä johtuuko se Lisp-seikkailuista, vai vain yleisesti siitä että kieliä, joita katson tuntevani, on yli kaksi, mutta tämän tekstin voisi tiivistää näin: "Minä haluan 800-luvun englantiin! Lukeminen on kivaa! XML on perseestä! XML on kyllä kivaa. Lispii! PHP on perseestä! Java on kivaa! PHP on kivaa! Java on perseestä! Lispii! C#stä ei kyllä ole mihinkään! C# on kivaa! Lispi on muuten mukavaa!". Puhumattakaan siitä miten rönsyilevää tämäkin teksti on ollut...

Pröng

Miten tämä kaikki liittyy Pröngiin, jolla tämän tekstin kuitenkin - toivottavasti - otsikoin? Läheisesti. Olen kesästä saakka hokenut, kuinka aion kirjoittaa sen uusiksi Javalla, kunhan MEsE/yool-messenger on saatu pois alta. MEsE on yhä työn alla, joten Pröng pyörii koodilla, jonka julistin jo huhtikuussa olevan perseestä. Samoihin aikoihin, ensimmäisten plussakelien aikaan, työstin PHP:llä uuden pohjan, jota pystyi jo oikeasti sanomaan kauniiksi. Se ei ollut perinteistä PHP-sillisalaattia, vaan siinä seurattiin hyviä käytäntöjä, joita tällä kertaa pystyn jopa esittelemään. Näkymät rakentuvat kuten JSP: näkymien ainoa logiikka koostuu controllerin täyttämän taulukon täyttämisestä, sekä tämän taulukon perusteella HTML:n tulostamisesta. Controller taas toimii, noh, niinkuin MVC:ssä yleensä. Se omaa bisneslogiikan, jolla se sitoo tietokannan ja näkymät yhteen. Tiivistäen controllerit toimivat kuin servletit javamaassa. Ainoa jota en siihen pohjaan saanut aikaiseksi oli malli-abstraktio. Mikään PHP:lle valmiinaollut ORM ei vaikuttanut siltä, että jaksaisi opiskella, ja oman tekemiseen ei kärsivällisyys silloin riittänyt. Nyt, kuitenkin, kun olen vähän työssä tutkinut miltä ORM, jollaisen haluan, näyttää, pystyn sen miltei porttaamaan valmiista javakoodista.

Voisin ensi viikon viettää world-skills karsintoihin harjoitellen. Viikolla kun työstän PHP-mapperin ruokatunteina, tai hätätapauksessa abstraktoin suoraa PDO:ta, jonka myöhemmin korvaan asianmukaisella mapperilla, ja viikonloppuna teen ensin pohjat uudelle Pröngille (eli luonnosten syöttö- ja hakuAPI:t, sekä käyttäjäapin), sitten sivun, joka generoi XML:ää luonnoksista. Sen jälkeen on vuorossa sivuston tekeminen, ja jos hyvin käy, meillä on ensi viikolla uusi Pröng olemassa. Jos minulla ei ole ensi viikolla näytettäviä tuloksia tästä projektista, tiedätte ettei kisa tule menemään hyvin. Jos on, kaikki, sekä Pröngin käyttäjät (siis Tässi) ja kehittäjä (minä :P), voittavat. Toivottakaa onnea projektille!

Sitäpaitsi, loppuun haluan vielä sanoa nykyisen Pröngin laudan olevan kaikkein eniten pielessä ko. koodissa. Lupasin heittää phpBB3:n tai javafoorumin seuraavaan Pröng-iteraatioon, mutta nyt olen tullut ajatelleeksi yhtä asiaa. Luonnoksia, jotka tagaa "Keskustelu" - tagilla, voi pitää keskustelujen otsikkoina, ja niihin tulevia kommentteja viesteinä. Eikö? :)

Saturday 6 October 2012

Pohdintaa junamatkalta



Tyylisuuntia oikealla ja vasemmalla

Olin joskus koulussa. Siellä oli muuan kurssi, jossa tarkasteltiin suomalaista kulttuuria ja taidetta, ja se oli ilmeisesti pakollinen kaikille suomalaisille, alaikäisille toisen asteen opiskelijoille. Kurssi oli mielenkiintoinen, vaikka sen läpikotainen osaaminen ei ilmeisesti ollut aivan täysin vaadittavaa datanoideille. Kyseessä oli kuitenkin mukavan yleissivistävä kurssi, juuri sillee sopivan lukiomainen, ettei kukaan yleissivistystä pelkäävä, itseäänkunnioittava ammattikoululainen pitänyt siitä.

Kurssilla opimme monia, hienoja sivistyssanoja. Oli romantiikkaa, oli funktionaalisuutta, ja mikä tärkeintä: oli realismia. Tässä vaiheessa on hyvä huomauttaa mahdollisesti samalla kurssilla mukanaolleille lukijoille, että en oikeasti muista puoliakaan siitä mistä kurssilla puhuttiin; vedin nuo käsitteet hihasta. Joka tapauksessa, realismi jäi kurssilta päälimmäisenä mieleen, koska opettaja naurahti kun ilmoitin että minä en tykkää realismista - ainakaan maalaustaiteessa, josta silloin puhuttiin. Myöhemmin, kun saman kurssin vuoksi kävin ensimmäisen (muistaakseni), ainoan ja viimeisen kerran Ateneumissa, muistin olevani oikeassa. Söötit, värikkäät, romanttiset taulut-joiden-nimiä-ei-nyt-muistu-mieleen hivelivät sisäistä snobiani, kun taas harmaat, 1800-luvun suomalaisten arjesta kertovat taulut eivät olleet laisinkaan kivoja.

Nightwishin uusimmalla levyllä, Imaginaerumilla, löytyy kappale nimeltä Song of hyihit... Myself. Kappaleen viimeisiin säkeisiin kuuluu seuraava: "Careless realism costs souls". Kappaleesta löytyy paljon muitakin kivoja säkeitä, mutta tuo hivelee sielua syvältä joka kerta kun kappaleen kuulen. Lisäksi se pitää täysin paikkansa. Varomaton realismi on jotain, mitä jokaisen kannattaa varoa!

Varomattomia unelmia

Tässillä on mielenkiintoinen hokema. Se kertoo surullista tarinaansa ihmiskunnasta. Se kertoo kyynisyydestä, ja samalla haavoittuvuudesta. Se kuuluu näin: "Pessimisti ei koskaan pety". Kun ajatukset seuraavat tämän hokeman logiikkaa, ei junamatkalla odota näkevänsä Seepra-vaihtovetureita, ainoastaan linjamarsuja (Sr2) ja ehkä muutaman sudenkin (Sr1), kun niitä vielä on vielä olemassa reiluvajaa 110. Tällainen pessimisti ei odota kuulevansa Wildfire IIa Sonata Arctican keikalla, vaan on iloinen jos kuulee Only the Broken Heartsin, josta on ymmärtääkseni tullut tämän kiertueen aloituskappale. Hän ei hae töitä eikä koulua, kun ei kuitenkaan pääse mihinkään.

Myönnetään, realismi ja pessimismi eivät tarkoita täysin samaa asiaa, mutta silmissäni assosioituvat täysin samaksi.

Kaikilla on unelmia... tai ehkei kaikilla. Suurimmalla osalla? Minulla ainakin niitä löytyy muutama takataskusta. MERPGin unelmoin joskus valmistuvan, ja sen jälkeen unelmoin siitä, kuinka joku muukin kuin minä ja Tässi pitävät pelistä. Toinen blogissa paljonpuhuttu unelmankaltainen on lähteä britteinmaalle ylioppimaan. Tarkemmin sanoen skotlantiin, Dundeen Abertey - yliopistoon. Minulla on ohjelman tarkka nimikin jossain kotikoneella kirjoitettuna, mutta kotikone ei sattunut tänne Oulun pendoon mukaan :P Joka tapauksessa ohjelma liittyi pelien tekemiseen.

Yritänpä roolileikkiä: miten tätä unelmaa katsoisi hahmo, joka pelkää pettyvänsä? Skotlantiin pitäisi mennä? Nehän puhuu siellä englantia? Kieltä, jota minä luen ja kirjoitan joka päivä töissä, mutta jota ymmärrän korvillani korkeintaan keskinkertaisesti, olettaen aksentin olevan englantilaista tai amerikkalaista. Minähän katson Doctor Whot ja suomessa-julkaisua-odottavat Houset tekstit päällä. Tennantista ei ymmärrä mitään korvakuulolla, kun hän avaa suunsa skotlantilaisesti. Koulussa sitten opiskeltaisiin C:tä ja DirectXää, sekä konsoleiden SDKita? Apua! Siinähän pitäisi sitten oikeasti ymmärtää mitä tekee!

Yritänpä ajatella asiaa niinkuin itse ajattelen, ehkä vähän kliseisesti, mutta jos välttelisin kliseitä, ei MERPGiä olisi ja nämä blogit olisivat kuolleet jo 2010. Skotlannissa puhutaan englantia aksentilla, jonka ymmärtäminen saattaa olla haasteellista, mutta joka kuulostaa erittäin hyvältä. Lisäksi siellä pitäisi opiskella C:tä ja teollisten pelien vaatimia kirjastoja ja menettelytapoja. Loistavaa! Pääsenpä yrittämään Lomaproosan pelimuotoon sovittamista kolmannessa ulottuvuudessa!

Toivon todella että jokainen huomasi eron. Realistisesti ajateltuna juuri ja juuri ammattikoulun ja puoli lukiota lyhyellä matikalla käyneen nuoren on vähintäänkin hassua ajatella pelien tekemistä, koska (lukuunottamatta yhtä erittäin kivaa kurssia) tutkintoon kuuluu aika vähän mitään, minkä pohjalta tuonne kannattaisi lähteä. Toki koulutus bisnesohjelmien tekoon tarjoaa paremman pohjan kuin ei laisinkaan ohjelmointikokemusta, ja yhdestätoista englanninkurssista (Kaksoistutkinto <3) ei myöskään haittaa ole, mutta fysiikastakin kannattaisi ymmärtää jotain muuta kuin miltä näyttää voimanuoli, ja lyhyessä matikassa tutkitaan geometriasta juuri ja juuri ympyrät ja trigonometria. Hitot mistään vektoreista! Matriiseista puhumattakaan!

Nyt kun sain ilmaistua mikä minua kaksoistutkinnossa häiritsee, voinen rakentaa aasinsillan illan aiheeseen!

Onko tässä MITÄÄN järkeä?

En nyt muista kuinka paljon olen blogissa hehkuttanut noin kuukausi sitten alkanutta iltalukiotani. En myöskään konsolitason Emacsista jaksa lähteä lunttaamaan. Vaikka olisinkin hehkuttanut, tässä hieman kertausta: minulla on maanantaista torstaihin joka ilta, töiden jälkeen, oppitunteja töölössä. Päättyneellä jaksolla kursseina oli Pitkä Matikka ykkönen ja Saksa ykkönen. Alkavalla jaksolla kursseina on matikat kaksi ja kolme, sekä saksa kakkonen, jonka ottaminen on kyllä alkanut epäilyttää minua. En todellakaan osaa sanoa jatkanko saksaa kakkoskurssin jälkeen, mutta siitä lisää myöhemmin.

Keskimääräinen päiväni siis koostuu heräämisestä, tunnin-puolentoista työmatkasta, 8 tunnin koodinhakkauksesta, vähintään puolentoista tunnin opiskelusta ja tunnin-puolentoista kotimatkasta. Päivä pituus sellainen lähemmäs 10 tuntia. Kotona kun tekee kaiken, mitä kotona on tehtävä, jää tutimointiin äkkiä alle 8 tuntia aikaa. Ei kovin paljon juu, ja viikon loppua kohden alkaa kyllä päässä hiukan pyöriä.

Tässi naurahti kun ajattelin jossain tilanteessa ääneen, että hitto ku nykyään ei ole aikaa tehdä mitään ylimääräistä. Ilmeisesti suurin osa ihmisistä ajattelisi samaa pelkästä 8 tunnin työpäivästä ja paljon lyhyemmistä matkoista. Tämä aloitti tämän pienen pohdintaketjun, jota olen tässä jo muutaman tunnin ajan yrittänyt muotoilla. Vietänkö kaupungilla työskentelemässä ja opiskelemassa puolikkaita päiviä vain huvin vuoksi? Onko tässä touhussa mitään järkeä?

Tässä kuukauden sisään olen juossut, Doctor Whota lainatakseni, enemmän kuin koskaan ennen. Kun ajatustyöni tulos on valmis, pitäisi liukuhihnan seuraavan ongelman tulos olla selvillä. Kun työpäivä päättyy, pitäisi olla jo lukiossa. Kun lukio päättyy, pitäisi olla jo kotona nukkumassa. Onko tämän ketjun päässä muuta kuin loppuunpalanut nörtti?

On! Kuten olin sanomassa, saksa saattaa tippua opinnoistani jossain vaiheessa yksinkertaisesti siksi että en pysty irroittamaan sille niin paljon aikaa pitäisi. Se ärsyttää. Saksa on kiva kieli, opettaja on mahtava, eikä minulla ole aikaa katsoakaan kirjaa päin tuntien ulkopuolella. Ykköskurssi meni aika kivasti tehden läksyjä peruskoulupohjalta lennossa niitä tarkastaessa, mutta kun päästään aiheisiin joita ei peruskoulussa käsitelty, mistään ei tule mitään ellen saa aikaa opiskella.

Miksi kuitenkin olen hylkäämässä saksaa, enkä matikkaa? Helppoa, saksaa opiskelen koska se on kiintoisaa, kun taas matikkaa opiskelen koska se on kiintoisaa, Abertey tulee vaatimaan jonkinlaista yo-arvosanaa pitkästä matikasta, ja matikkaa voin soveltaa jokapäiväisessä työnteossani paljon enemmän kuin saksaa. Saksa on - valitettavasti - helppo priorisoida alemmaksi.

Tarina, jota olen tässä tekstissä yrittänyt kertoa, kierrellen sitä välillä läheltä, välillä erittäin kaukaa, on kuitenkin nyt tuleva. Eilen kuljin töistä rautatieasemalle syyssateessa ja -tuulessa, pää ja niska tulessa, pohtien kuinka illalla menee taas myöhäiseksi, kun edessä oli vielä Tässilläsaunomista ja pakkaamista tämän päivän Oulun-matkaa varten. Aamulla sitten olisi seiskalta herätys, joten yöunet eivät olisi pidempiä kuin viikolla nähdyt. Pohdin kysymystä, jota olen tässä tekstissä jo ehtinyt hokea monia kertoja: Mitä järkeä tässä on? Silloin tajusin sen. Realistisesti, tässä ei ole mitään järkeä! Käytännöllisesti, onko sillä mitään väliä!? Tämä on tajuttoman hauskaa!

Hitto ku minulla on vielä harjoiteltavaa tekstien koherenttiudessa. Tämäkin teksti lähti loppua kohden rönsyilemään viiteentoista suuntaan hallitsemattomasti, mikä toisaalta tekee hyvää kirjoittajan ajatukselle ja pohdinnalle, mutta on haastavaa lukijalle. Ehkä minä joskus opin suunnitelemaan näitä. Nyt, loppuilta koostuu junien harrastamisesta, hotellin ja ruoan etsinnästä, konsertista ja hyvistä öistä :P

Tuesday 25 September 2012

Aikaa ei ole - tarina erään nuoren syksystä


Minä olen kyllä aivan sekaisin - Kertaus ja historiikki

Neljäs yritys herättää Dreamerandthewine kesähorroksestaan. Jos tällä kertaa ei tähtäisi Yeggehtävään 10 sivun esseeseen, sillä vaikka tykkään kaverin kirjoitustyylistä ja siitä, miten hän sanoo kaiken mitä on sanottavana, vanhojen blogitekstidraftien kimppuun on hemmetin vaikea palata, eikä niin pitkiä voi kirjoittaa yhdellä istumalla. Nyt yritän siis kertoa julkaisukelpoisesti miten keväisiin pohdintoihini on löytynyt ratkaisu, ja kuinka kaheli se on.

Kuten kaikki toivottavasti muistavat, keväällä vietin viikkoja kiroten kuinka mistään ei saa työtä, kaikki koulut ovat pelottavia ja mistään ei tule mitään. Lopputuloshan oli, että sain töitä (Pharmadatalta, hieno paikka, hienoja ihmisiä, hyvänä esimerkkinä minä), ja hakemistani kouluista {Metropolia@Leppävaara, Laurea@Leppävaara, Helsingin Yliopisto} vain helsinkiläiset tykkäsivät että parempi onni ensi kerralla. Ammattikorkeisiin pääsin heittämällä sisään. Päätin kuitenkin työskennellä välivuoden verran, ja ilmoitin metropoliaan että katotaan jos ensi vuonna tulisin opiskelemaan. Lisäksi minulla heräsi viime tammikuussa himo lentää pesästä. Koska persoonani on eriskummallinen, ei pesästälento tässä tapauksessa tarkoita sitä että hankkisin kämpän lähempää koulua/duunia, vaan pitkää lentoa, jonka päätepisteenä olisi opiskelupaikka Brittein saarilla.

Ratkaisuja

Kesällä päässäni naksahti. Päivät menivät C#:tä ja Javaa kirjoittaen, illat tein mitä tein. Riittikö se? No ei tietenkään! Soitin kaksoistutkintolukioni, TYKin, kansliaan ja kerroin tilanteen. Oli päästävä opiskelemaan (pitkää) matikkaa! Otin siihen rinnalle myös saksan, jota en kyennyt amiskassa lukemaan, mutta jota olin lukenut 2/3 yläasteestani. Nyt päivistäni oli tullut sellaisia, että aamulla kun lähti töihin seitsemältä, oli hyvällä tuurilla kahdeksalta kotona. Nyt ihmiset katsoivat minua kuin hassua, ehkä ansaitusti, ja ihmettelevät miten jaksan tätä. Vakio vastaihmettelyni on, että kuinka ihmeessä jaksaisin kotona homehtua kaikki illat.
Kuitenkin tähän saakka saksan ja matikan opiskelu oli päämäärätöntä "opiskelenpa tätä kun en muutakaan tehdä osaa" - tyyppistä opiskelua. Viikonloppuna kävin Tässin kanssa pitkällisen keskustelun siitä, kuinka suomalaiset kolmannet asteet ovat tylsiä ja tavallisia, mutta voisimme mennä Skotlantiin, Dundeen yliopistoon opiskelemaan matikkaa ja pelien tekemistä. Minä matikkaa, Tässi pelejä, tietysti :P Vai olikohan se toisinpäin?

Pelien tekeminen on kuitenkin hiukan naurettavaa lyhyellä matikalla ja peruskoulufysiikalla. Lisäksi yliopiston nettisivulla oli hieman vaatimuksia, joita en kuitenkaan osannut suomeksi tulkata, kummastakin. Mutta mikä ettei, minähän olin jo pitämässä välivuotta-opiskeluilla, joten samalla vaivalla voisin pitää kaksi, ja kirjoittaa sekä opiskella kunnolla sekä pitkän matikan että fysiikan, jolloin jo kehtaan hakeakin yliopistoon.

Eli loppuvuodeksi ja seuraavaksikin kalenterini on täysi. MERPG kehittynee perinteisellä yököttelytahdilla, kunhan sekin saadaan potkittua liikkeelle vuotuiselta kesälomaltaan. MEsE pitäisi joku viikonloppu kirjoittaa valmiiksi, ja Pröngin Java-(Clojure?)toteutus pitäisi aloittaa. Kiirettä pitää.

Loppuun vielä ilmoitus. Koska Taitajakisoista en stressannut laisinkaan, ja ne olivat niin kevyet (vai mitensenytoli?), ilmoitin juuri ex-maikoille että ellei työpaikalla ole jotain todella hyvää perustetta, kuten esimerkiksi se että olen työsuhteessa, yritän päästä ensi kesänä Saksaan WordSkillsseihin.

Minä tykkään kirjoittaa emacsilla <3

Sunday 2 September 2012

Noulife-statusta metsästämässä

Kesän aikana on tapahtunut paljon kaikenlaista. Olen uiskennellut, olen ollut sosiaalinen (hyh meitä nykynuoria), ja kuten olen täälläkin hehkuttanut, olen löytänyt uusia blogeja, joita olen sitten lukenut ja analysoinut tarkemminkin. Eräs näistä blogeista, Yeggen Steven sellainen, on hehkuttanut Emacsia ja Lispejä niin paljon, että kiinnostukseni heräsi.

Emacs

Latasin siis Emacsin, sekä tutustuin ja rakastuin sen kirjoittamisominaisuuksiin. Alkuun ohjelman kuuluisissa pikanapeissa ei ollut mitään järkeä, mutta jo toisena päivänä, jona tein duunissa erästä XML-projektia Emacsilla, olin oppinut kuinka avataan- tai tallennetaan tiedosto, miten haku-ominaisuudet toimivat, miten päästään käsiksi komentoriviin, ja mikä tärkeintä, miten suoritetaan Lispiä.

Avaus- ja tallennuspikanapit (C-x-f ja C-x-s) ovat ihan yhtä hyviä kuin Windows-kulttuuriinkin pesiytyneet (C-o ja C-s), mutta jo ees- ja taaspäinetsintä oli tehty paremmin kuin Windows-tekstinkäsittelijöissä yleensä. C-S antaa kirjoittaa ikkunan alalaitaan hakusanan, jota sitten haetaan kursorin jälkeisistä sijainneista. C-r taas hakee hakusanaa kursoria ennen sijaitsevasta dokumentista. Hakiessa ei tarvitse koskea laisinkaan hiireen, mikä voittaa mm. Visual Studiossa löytyvän hakuhärpäkkeen, jossa ei toki hyvinä päivinä tarvitse koskea hiireen, mutta jolla on tarve esitellä itseään graafisesti ja viedä näyttötilaa :P

Emacsin komentoriviominaisuudet ovat MAHTAVAT! M-! (missä M viittaa Altiin tai Esciin) tuo ikkunan ala-laitaan kyselyn, jonka tulos ohjataan järjestelmän shelliin, mikä Windowsin tapauksessa on cmd.exe. Eikö kuulostakin kivalta? Ai että mihin sitä voisi käyttää? Noh, ainakin Mercurial - versionhallinnan kanssa on usein pidettävä IDEn ohella komentoriviä auki, koska IDE:n Mercurial-integraatio on huono, ja graafisen TortoiseHg:n opiskelu oli paljon raskaampaa kuin komentoriviloitsujen. Jos IDE:n korvaa e-tiedätte-kyllä-millä-macsilla, voi kömpelön alt+tabaamisen sijaan painaa M-! ja kirjoittaa hg - komentoja suoraan emacsista. Näin voimme integroida emacsin kaikkiin versionhallintoihin, joissa on komentoriviliittymä, eli joukkoon, joka käsittää jotain Visual Studioon kolvattuja sourcesafeja lukuunottamatta kaikki käytetyt versionhallinnat.

Lisäksi, jos jollakulla sattuu olemaan emacs juuri nyt ladattuna, kokeilkaapa painaa ensin C-u, sitten M-! ja kirjoittaa komeentokehotteeseen "ECHO Hello World!". Ai mitä? Tuloste, jonka olisi pitänyt ilmestyä Shell Command Output - bufferiin, ilmestyikin auki olleeseen dokumenttiin? Kai ymmärrätte tämän tarkoittavan sitä, että C-u M-! - näppäinyhdistelmän avulla millä vain kielellä toteutettuja toimintoja voi hyväksikäyttää emacsissa?

Lisp

Sanokaa mitä sanotte, en ole kovin hyvä Lispissä, ja olen mahdottoman laiska lukemaan internetissä sijaitsevia "kirjoja". Siksi en jaksanut opiskella Elispiä, vaan sen sijaan menin ja ostin Amazonilta Peter Seibelin kirjan Practical Common Lisp, joka on puolen viikonlopun lukemisen jälkeen saanut minut näkemään ohjelmoinnin uudessa valossa. Tietysti olen oppinut kieltä vasta sen verran, että osaan toteuttaa CL:llä juuri ja juuri keskinkertaisia komentoriviohjelmia, jotka vaativat Lispboxin alleen runtimeksi, mutta kirja on ehtinyt näyttää lispistä puolia, joista saa muualla vain haaveilla. Makrot mahdollistavat kielen kustomoinnin tavalla, joka saa Java- ja C# - ohjelmointiin tottuneen pään pyörälle... tai sitten se on tämä syysnuha, jota olen kehitellyt viikonlopun aikana.

Toinen kirja, jonka ostin samalla, oli O'reillyn kustantama Clojure-kirja, joka ei ole tässä käden ulottuvilla, joten en voi luntata siitä yksityiskohtia. Kunhan saan Common Lisp-kirjan siihen pisteeseen, että voin myöntää itselleni osaavani jotain (katsotaan siinä 2030 uudelleen), opiskelen Clojurea ja todennäköisesti pyrin siirtämään ainakin kotijavaprojektini sille. Jos joku on elänyt tynnyrissä, Clojurehan on kieli, joka tarjoaa paljon Lisp-herkkua, Java-luokkakirjaston ja Javan alustariippumattomuuden samassa paketissa. Taivaassa tehty tulitikku siis.

Kuten sanoin, siirrän todennäköisesti vain kotiprojektini Clojurelle. Syy siihen on, että ihmiset ilmeisesti eivät tykkää opiskella uusia asioita, joten suhtaudun epäillen siihen että töissä koodipohjiani sörkkivät arvostaisivat minua lispin valinnasta. Jännä nähdä, sillä en omaa kokemusta siitä miten ihmiset reagoivat C-murteiden ulkopuolelta tuleviin kieliin, vaan perustan sanomani Yeggen Steven kokemuksiin.

Linux

Tämä on viimeinen pisara, jolla virallisesti möin sieluni "normaalien ihmisten" ulottumattomiin. Olin äärettömän kyllästynyt pikkuläppärilläni olleeseen Windows XP:hen, jossa ainoat käyttämäni non-portaappelit ohjelmat olivat Office ja Visual Studio, joiden toiminnallisuus tippuisi rajusti jos asentaisin taas raudan tehoja syömään seiskan. Lisäksi Lisp-maailmaan sukeltaessani olin huomannut kuinka Lispereille(kin) asiat olivat paremmin vaihtoehtokäyttisten maassa, ja Windowsia tuettiin jos ja kun jaksettiin.

Kokemukseni Linux-maailmasta olivat kuitenkin keskinkertaiset. Aina kun olin kokeillut distroja, oli joko jotain hajonnut, moni asia oli ollut huonommin kuin Windowsilla, tai tilanteessa ei ollut mitään syytä siirtyä Windowsilta pois. Nyt kuitenkin sain työkavereilta suosituksen kokeilla CentOSää. Viime kappaleen perustelut tuovat monia syitä tuoda vaihtoehtokäyttis vähintään Windowsin rinnalle, ja korvattavien nonportaappeleiden ohjelmien vähyyden vuoksi en nähnyt mitään syytä potkia terästankoa, joten tyhjensin pienpäpän kovalevyn täysin ja asensin CentOS kuudennen sille.

Tähän mennessää tämä vaihto on vaikuttanut erittäin hyvältä. Emacs korvaa hyvin raskaat IDEt, Java- ja Lispit toimivat, ja vaikka Pidgin onkin pikaviestimenä heikko esitys verrattuna Livemese -09iin, työn alla oleva MEsE/yool-messenger korjannee kyseisen ongelman. Toivottavasti. Joskus.

Metabloggausta

Tätä tekstiä ei ole kirjoitettu bloggerin selainnäkymässä, vaan päätin kokeilla Yeggen strategiaa kirjoittaa näitä emacsilla. Asiaa/pituus - suhde, sekä silkka pituus, vaikuttavat tässä tekstissä melko hyviltä. Pääsen myös soveltamaan skriptejä tämän toteuttamisessa. Ainoa skripti, jota käytin, lisää </p> \n <p> - merkit puskuriin aina painaessani returnia. Tämä johtuu siitä, että tässä pikkukoneella taginapit ovat erittäin pöljässä paikassa, ja kirjoitan tätä html:nä, joten tuollainen skripti säästää aikaa ja vaivaa. Jos jotakuta kiinnostaa miltä tämä koodi näyttää, niin olkaa hyvä: (defun insert-paragraph () (interactive)(insert "</p> \n <p>")) (global-set-key (kbd "<RET>") 'insert-paragraph)

Ensi kertaan! Silloin minulla saattaa olla asiaa MEsEstä/yool-messengeristä, tai mahdollisesti emacs-blogger - integroinnista, jota suunnittelen tutkimatta onko sitä jo toteutettu. Nähdään!

Friday 10 August 2012

MERPG-musiikkeja

Allekirjoittanut ei ole mikään musiikillinen ihminen. Okei, kuunneltavan musiikin kanssa olen melko tarkka, mutta soittaa en osaa kuin suutani... tai näppäimistöäni. Olen siis tammikuusta 2011 pelännyt sitä hetkeä jolloin MERPGiin pitäisi suunnitella ja toteuttaa musiikkeja. Viime syksynä tajusin että Nightwishin Song Of Myselfin nelososan musiikkia pitää soveltaa, olettaen että uskallan kysyä ja saan luvan käyttää sitä.

Tänään eksyin Tässin kanssa kuuntelemaan youtubesta Imaginaerumin kasibittisiä sovituksia (suosittelen etsimään esim. "Nightwish Song Of Myself 8-bit" - hakusanoilla videoita, jaksa kaivaa linkkiä :P), ja muutamasta osasimme nimetä suoraan mihin tilanteisiin ne sopisivat taustamusiikeiksi. Tässä lista näistä:

Storytime - Hoputusmusiikki tilanteisiin, joissa tapahtuu pian jotain suurta ja ihmeikästä
Ghost River - Citymusiikki
I Want My Tears Back - Suuren Lopputaiston taustamusiikki
Last Ride of The Day - Tallustelumusiikkia kaupunkien välille
Song Of Myself - Traileria, routea, bosseja... Sillisalaattia :)

Monday 23 July 2012

MEsE - työnimi

Pärstäkirjan puolella minulta kysyttiin MEsEstä, kun esittelin yhtä ruutukuvaa projektista. Tämä innosti minut julkaisemaan koko projektin. Kirjoitin projektista speksin, ja heitin sen Dropboxiin.

Eli:

Te, jotka olette kiinnostuneita tästä eriskummallisesta MEsE-projektistani, lukekaa tämä dokumentti! Jos on kysyttävää tai kommentoitavaa, blogiin voi kommentoida ja pärstäkirjakin ymmärtääkseni sallii sen. Jos kysymys on kiva, se tulee löytymään speksistä, joka tulee vielä elämään vaatimusten ja tavoitteiden mukana.

Sunday 15 July 2012

Dynaamisia poroja skriptattuna ilmaan

Tästä tuli taas pidempi ja rönsyilevä teksti. Lopusta löytyy tl:dr - osio yhteenvetoineen.

Olen hämmentynyt. Tutkiessani blogosfääriä tässä eräänä päivänä, tutustuin Steve Yeggeen. En lähde antamaan tarkkoja linkkejä, vaan referoin häntä kuten olen tekstejään ymmärtänyt, ja miten ne ovat jääneet päähäni. Kyseinen kaveri on siis nyt Googlella töissä, ja on viettänyt vuosia myös Amazonilla. Kiinnostavan hänestä tekee se, että hän on blog(e)issaan kumonnut nykyisen ohjelmointimaailmankuvani - vuosia ennenkuin se on syntynytkään.

Tärkein teesi, joka blogeistaan löytyy, on että Java/C++ ei ole parasta mitä ohjelmointimaailma on tuottanut. C++n hän lyttää, ehkä ansaitusti, suoraan, mutten silti lähtisi toteuttamaan 3D-pelejä millään muulla. C++n käyttäjänä kannattanee muistaa konteksti: Yegge on server-browser - arkkitehtuuria noudattavan softan ohjelmoija. Siellä C++lle on paljon siistimpiäkin vaihtoehtoja. Javasta hän lausuu kauniitakin sanoja, minkä ymmärrän, sillä minulle vasta kirkastuu parhaillaan millaista serverimahtavuutta Servletit sisartekniikoineen (tyyppiturvallisuus, JPA/Hibernate, SOAP muutama mahtavuus nimetäkseni) tarjoavat suhteessa PHPhen, mutta Yegge tuo myös esiin Javan ongelmia. Näistä ongelmista kirkkain on se, että Javan vaatiman boilerplate-koodin osuus järjestelmän koodin rivimäärästä nousee, jos ei nyt eksponentiaalisesti niin ainakin melko jyrkän lineaarisesti, suhteessa järjestelmän kokoon. (Örf, en tiedä millaista käyrää se oikeassa elämässä noudattaa. Boilerplaten osuus koko koodista ei nimittäin voi nousta kovin lähelle 100%. Muuta Javalla edes keskikokoisia systeemejä tehneet ymmärtänevät mistä puhun, ja korjannevat minua)

Yeggen tekstien perusteella allekirjoittaneen pitäisi tutustua mm. johonkin Lispiin ja pariin skriptikieleen, joista seuraavaksi lisää.

En muista paljonko Yegge hehkuttaa Rubyä blogspot-blogissaan, mutta sieltä löytyvän Stevey's Drunken Blog RantsTM - linkin takaa (Blogger kopioi muotoilutkin O.o Kivaa) löytyvässä vanhassa blogissa hän on pyhittänyt useamman teksin Rubylle. PHP jätti minulle erittäin huonon maun suuhun "dynaamisesti tyypitetyistä", eli tyyppiturvattomista, skriptikielistä. Pythonia kokeilin tässä keväällä, mutta en nähnyt syytä tutustua siihen tarkemmin. Yegge kuitenkin tuo tällaiset kielet niin hyvässä valossa, että jos en opiskele tekemään keskikokoista softaa Pythonilla/Rubyllä/Lualla, soveltanen jotain näistä väihntään MERPGissä.

Mistä pääsemmekin seuraavaan asiaan: mm. Javascript hyödyntää prototyyppeihin perustuvaa perintää, kuten tietänette. Javascriptissa ei siis ole luokkia, mikä on oikeastaan ihan hyvä juttu, kun katsoo miten kiva niitä on PHP:ssa käyttää. Dynaamiset tyypit ja luokat eivät, kokemukseni mukaan, toimi samassa kontekstissa. Jos jokainen muuttuja voi sisältää mitä vain, mitä järkeä on esimerkiksi polymorfmismissa, eli siinä että eri olioilla sama metodikutsu voi suorittaa aivan erilaista koodia, kun jokainen muuttuja voi sisältää mitä vain!?

Prototyypeistä olin kertomassa. Allekirjoittanutta häiritsi pitkään Javascriptin luokattomuus. Samaa näkee ympäri nettiä, miltei kaikkien juuri Javascriptilla aloittaneiden koodeissa. Hitto, katsokaa Pröngin Javascripteja, ja tuntekaa koodeja kirjoittaneen epätoivo, joka huokuu noista riveistä, jotka ovat kuin C:tä JQueryllä. Vaikka JQuery ($("#id").olehassu().teejotain() - syntaksi) helpottikin logiikan kirjoitusta, näin jälkeenpäin väittäisin sen vaikeuttavan koodien ylläpitoa ja lukemista. Toisaalta, eipä se kyllä JQueryn vika ole. Ilman sitä logiikka olisi vielä epäselvempää.

PROTOTYYPEISTÄ PITI KERTOMANI! Javascriptin luokattomuus siis häiritsee uusia koodareita, jotka eivät vielä tiedä prototyyppiajattelusta. Tunnustan kuuluneeni tähän samaan joukkoon, kunnes luin tämän. Ideanahan on, että jokaisella oliolla on oma Map - tietorakenne, jonne tallennetaan ominaisuuksia avain-arvo - pareina. Kun uusille olioille annetaan prototyypiksi joku olemassaoleva olio, jolla on ominaisuuksia määritelty jo iso läjä, tämä uusi olio saa nämä samat ominaisuudet käyttöönsä. Yksinkertaisimmillaan kyseessä on, Yeggen analogiaa lainaten, samanlainen perintätilanne kuin, pyydän anteeksi luovuuden puutettani, sanoisi: "Feuer kirjoittaa kuin Yegge!". Tällöin minä olen oliomallinnuksen tasolla vai klooni Yeggestä, ja perinnän riemut tulisivat esiin kun minulle annettaisiin omia ominaisuuksia toteamalla "...mutta..."

Onneksi minun ei tarvitse lukea tätä tekstiä. Se vaikuttaa tähän mennessä erittäin rönsyilevältä, mutta toisaalta minulla onkin paljon sanottavaa. Ehkä opin jonain päivänä suunnittelemaan näitä?

MERPGiin palatakseni. Aloin pohtia, että moottoriin voisi joko raa'asti kolvata valmiin JSON-parserin, tai rakentaa itse parserin JSON:n perustuvalle merkintäkielelle. Pelin hahmoluokista voisi sitten tehdä dynaamisempia, niin hieno muotisana kuin se onkin, ja toteuttaa ne Java-luokkien sijasta tekstitiedostoina, jotka moottori lataa, ja joista se parsii lopullisten hahmoluokkien ominaisuudet. Tämä toki avaisi pelin huijauksille, mutta helpottaa myös sen laajennusta ja modailua, ja koska kyseessä ei ole moninpeli, ei huijaukset haittaa oikeasti ketään.

Toinen mitä pohdin, on että jos kenttälogiikkaa ei toteuttaisi Java-mottoriin, vaan iskisin Python-/Ruby-/Lua - tulkin moottoriin kiinni, ja kenttälogiikka pääsisi myös tekstitiedostoiksi moottorin rinnalle. Tämä tarkoittaisi että kentät pääsevät hyödyntämään sitä, mikä ihmisiä noissa kielissä viehättääkään, kenttien testailusta tulisi helpompaa kun moottoria ei tarvitse tappaa kenttien muuttelun välillä, ja moottorista tulee luonnollisesti pienempi ja yksinkertaisempi.

tl;dr

Yhteenvetona sanoin siis seuraavaa: Elämää on olemassa Javan ja C++nkin ulkopuolella, Prototyyppi- ja property - patternit ovat vähintäänkin kiehtovia, niitä voisi soveltaa MERPGiin, ja MERPG tarvitsee jonkin skriptimoottorin itseensä.

Milloinkohan konseptart ja kartat ovat sillä tasolla että kässärin ensimmäisiä sivuja pääsee toteuttamaan? :P

Thursday 31 May 2012

Se oli sit siinä

Eletään vuotta 2009. Eletään kesää. Eräs nuori mies istuu autossa, matkalla jostain johonkin. "Mitä odotat uudelta koulultasi?" Häneltä kysytään. Hän on juuri päässyt yläasteelta, ja hänellä on koko elämä edessään. Mitä hän tekee tällä elämällään? Minne hän päätyy vuosien kuluessa? Tuleeko hänestä jotain suurta, vai jääkö hän mitättömyydeksi? Huomaako kukaan häntä? "Koulultani..." Hän aloittaa. "En tiedä, ekan vuoden opin koulun tapoja, tokana vuonna sovellan oppimaani, kolmantena vuonna hallitsen koulua." Hän pohtii. Tämä arvio perustui hänen ylä-asteen oppeihinsa, ja toteutui paremmin kuin kukaan olisi ymmärtänyt.

Eletään vuotta 2012. Ilmaan Jeepin jarruja ja kirjoitan Dreamer&Wineen pohdintaa elämän hassuudesta. Ensimmäisen kappaleen tilanteesta on kolmisen vuotta aikaa. Kolme vuotta, lyhyt aika. Mitä niin pienessä ajassa tapahtuu? Ei mitään, kuulen jonkun lausuvan. Tämä on väärin: kolmessa vuodessa koko maailma kääntyy ylösalaisin.

Yläasteella tämä päähenkilö oli tunnettu. Hänellä ja ystävillään oli tapana istua portaiden alla, juoda vadelmamehua ja tutkia maailmaa sanallisesti. Heillä oli tapana päivystää pimeässä välikössä koulun viimeisimmässä nurkassa. Kielitalon portaat olivat myös suosittu maailmantutkimuspaikka. Näissä paikoissa mikään ei ollut turvassa, mitään ei säälitty, kaikki tutkittiin ja analysoitiin. Lisäksi koulussa tuli välillä myös opiskeltua, niin hassulta kuin se kuulostaakin.

Puolen tunnin sisään minun pitäisi lähteä Messukeskukseen valmistujaistilaisuuteen, jossa saan ilmeisesti todistuksia parillekkin tutkinnolle ja stipendin tai kaksi. Jos en ole sitä maininnut täällä, valmistun datanomiksi ja ylioppineeksi. Lisäksi minun pitäis erota parista radeon-näytönohjaimesta, sanoa Taitaja-porukoille terve ja saada ikuistettua muutama juna.

Ensimmäisenä vuotenaan tarinamme nuori mies kohtasi paljon vanhaa ja oppi hieman uutta. Matikkaa tuli opiskeltua, enkussa tuli pärjättyä, ja ruotsikin meni. Ensimmäisenä vuotena hän myös verkostoitui. Jokaisesta ensimmäisenä vuotena hänen kanssaan aloittaneesta ei tule jotain suurta, osasta ei tule oikeastaan mitään, mutta muutamalla hahmolla ryhmästä olisi potentiaalia suuriin tekoihin.

Tämä kolmas opiskeluvuoteni oli samalla melko lyhyt että erittäin pitkä vuosi. Oli Taitajia, oli työssäoppimista, oli koulun mielenkiintoisimmat kurssit... oli kaikenlaista. Koulun ulkopuolellakin tapahtui: MERPG alkoi LOPULTAKIN muotoutua. MERPGin ensimmäinen vuosi oli vähän muodon hakemista ja uuden oppimista, nyt meillä alkaa vähitellen olla koossa selvä paletti siitä, miltä pelin hahmot näyttävät, hyvä karttamoottori, ja käsitys pelimoottorin toiminnasta. Lisäksi kässäri on teoriassa valmis, ja sitä on puhtaaksikirjoitettu wanhasta blogista monta sivua.

Ensimmäinen vuosi oli ja meni. Arvosanat olivat kivoja, ja vaikka päähenkilöllämme oli riittämätön fiilis, hänestä tuntui että pitäisi pystyä tekemään enemmän koulun hyväksi, opettajat jaksoivat hokea kuinka hyvin hän opiskeli. Ensimmäisen vuoden ongelmana oli myös että hän oli mielestään tullut opiskelemaan ohjelmointia, mutta ensimmäisenä vuonna siihen liittyviä kursseja nähtiin jopa... kaksi. Nämä olivat kuitenkin hyviä kursseja: tietokantakurssilla perehdyttiin tietokantoihin niin syvemmälle kuin hän olisi ikinä yksin jaksanut. Opettaja oli välillä helvetin pelottava, mutta loistava: järjestys pysyi yllä, ja kukaan ei uskaltanut keskittyä opetuksen ulkopuolelle. Lisäksi se oli fiksu opettaja, Dreamincodesta saa useain lukea kuinka "ne jotka osaa, tekevät; ne jotka eivät osaa, opettavat", ja tämä ei pätenyt häneen.

Viimeisenä vuotenani olen tehnyt tärkeitä kontakteja: työssäoppimispaikkani mukanaantuomat naamakirjakaverit ja kontaktit, Taitajaporukat (= kanssakilpailijani Lauri ja Joukkueen(minkä? O.o)johtaja Juha) ja sellaiset. Hienoja ihmisiä jokainen, ei voi valittaa, ja suurimmasta osasta tullee olemaan hyötyä henkilökohtaisen maailmani valloituksessa.

Toinen loistava opettaja, johon tässä tarinassa seikkaileva hahmo tutustui, oli ohjelmoinnin opettaja. Kuten olen blogissa ennenkin puhunut, hänestä oli paljon apua MERPGin käyntiinsaannissa. Lisäksi vaikken opiskellutkaan kursseillansa oikeastaan mitään mitä hän opetti, sain silti häneltä hyviä arvosanoja, koska kursseillansa eri oppilaiden huomiointi toimi. Minun ei tarvinnut miettiä int- ja float - avainsanojen eroja, vaikka jollakulla muulla saattoikin olla näiden ymmärtämisessä ongelmia. Okei, ei nykyajan datanomit ihan niin pihalla olleet, mutta muutamilla muilla kursseilla kuulin koulun aikana sillti aivan käsittämättömiä juttuja ryhmäläisiltäni: "Mihin me matikkaa muka tarvitaan?"

Viime syksy oli pohjimmiltaan aika kiva. Yläastetta kertailevat kurssit ja ne, joista en pitänyt, olivat loputalkin loppu. Enää oli jäljellä OPSin korkeimmat java-kurssit, sekä dokumentointiin ja kehityskäytäntöihin liittyviä kursseja, sekä MAB 6,7, 9 ja YH 3,4,5. MAB6:sta taisin saada matikankurssien kovimman arvosanan, kympin. Tykkäsin, kolmas vuosi oli loistavin kolmesta tuohon laitokseen käyttämästäni, vaikka toisenkin vuoden kevät oli melko hauska.

Eka vuosi oli, eka vuosi meni. Toinen vuosi oli loistava(mpi kuin ensimmäinen). Kun toisesta vuodesta oltiin nähty ensimmäiset kolme jaksoa, joiden aikana opiskeltiin kaikenlaisia puolikiinnostavia kursseja, sekä enkkua ja äikkää, tuli työssäoppiminen. Sen jälkeen alkoi Java - kurssi, juuri sopivasti MERPGin inspiroineen etelänmatkan jälkeen. Toisen vuoden kevättä tulen muistelemaan vielä vuosien päästä. Siinä keväässä oli samaa viattoman tekemisen tunnetta, mitä löytyy Nightwishin parilta ekalta kiekolta.

Kuten joku voi päätellä, tätä tekstiä on tehty viikonlopun yli, ja teksti on sopivalla tavalla omahyväisen itsekeskeinen: se kertoo vain minusta itsestäni. Nauttikaa elämästä :P