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

No comments:

Post a Comment