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 :)