Pollen ja Racket, osa 2

Kirjoitin aiemmin julkaisutyökalu Pollenista ja ohjelmointikieli Racketista. Olen tässä vähitellen jatkanut tutustumista niihin, joten pieni päivitys on paikallaan. Aivan kitkatta homma ei ole edennyt, mutta eiköhän tästäkin ole tullut taas jotain opittua.

Olen lähestynyt aihetta kahdesta näkökulmasta. Yhtäällä aloin selvittää miten toteuttaa selainkäyttöinen online-kirja Pollenin avulla, edeten vähitellen syvemmälle kohti Racketin yksityiskohtia. Toisaalla lähdin rakentamaan tätä sivustoa uudestaan suoraan Racketin ruuveista ja muttereista, ajatuksena oppia minulle uusi kieli nopeammin ja liittää Pollen mukaan järjestelmään sisällön muotoilu- ja esitysvaiheessa.

Kaksi näkökulmaa – top-down ja bottom-up — tarjoavat eräänlaisen hampurilaislähestymisen siis. Etenen vastakkaisista suunnista kohti keskustaa, jossa toivon polkujen kohtaavan ja minulle selviävän mikä on homman pihvi.

Pollen Racketilla: Kirja

Pöytälaatikossani on pitkään ollut kirjaluonnos, jonka loppuunsaattamista olen viivytellyt jo hyvä aikaa. Sain taas hyvän tekosyyn viivytellä lisää ja alkaa sisällön viimeistelyn sijaan tehdä kirjasta selainversiota Pollenilla. Kirjan vedoksen olin tehnyt LyX-ohjelmalla. Kirjoittaessa olin vielä onnellinen, mutta tullessani muotoiluvaiheeseen koin törmänneeni seinään. Etsin vaihtoehtoista työkalua työn loppuun viemiseksi, ja tässä minulla oli uusi ehdokas.

Pollenin “kirja on ohjelma” -näkökulman mukaan jokaista (html-)sivua vastaa oma ohjelmakooditiedostonsa. Nämä ovat tallennettu tiedostojärjestelmään, hakemistorakenne vastaten url-rakennetta. Tämä tuulahdus 90-luvulta aiheutti minulle pienen kynnyksen aluksi, mutta jatkoin kuitenkin eteenpäin. Otin tekstin, pilkoin sen luvuittain Pollen-tiedostoihin ja määrittelin sisällysluettelon erilliseen tiedostoon. Kunhan niitä tiedostoja ei vain tarvitsisi siirrellä ja nimetä uudelleen kovin usein jatkossa…

Pollen-tiedostot eivät ole perinteisiä sivupohjia, vaan omia suoritettavia ohjelmiaan. Html-sivuja luodessaan järjestelmä tekee tiedostoille kaksi läpikäyntiä. Ensin käydään läpi sivuston rakenne ja metatiedot. Tämän avulla rakennetaan esimerkiksi automaattinen sisällysluettelo ja navigaatio. Sen jälkeen luodaan html-tiedostot ja homma on valmis.

Tekstisisältöä voi halutessaan rikastaa pollen-kielen avulla. Sivulla olevan sisällön voi ajaa itsemääriteltyjen käsittelyrutiinien läpi tai mukaan voi tuoda kirjan muihin osiin liittyvää tietoa ja sisältöä. Käsittelijä voi esimerkiksi muuntaa rivivaihdot kappalemerkeiksi tai rakennetiedoista voi kaivaa seuraavan luvun linkin ja otsikon.

Sain toteutettua mitä tavoittelinkin: kirja pelkistettynä websivustona. Kirjassa on yksinkertainen käyttöliittymä, jossa visuaalisuus on lähinnä typografialla pelaamista. Käytettävyyttä on lisäksi hieman höystetty Javascript-toiminnoilla, kuten kirjan selauksen mahdollisuus nuolinäppäinten avulla.

Racket Pollenilla: Blogi

Racketissa innosti yksinkertaisuus. Kun päätin kirjoittaa Clojurella toteutetun blogini uudestaan Racketilla, se onnistui varsin sujuvasti yhden lähdekooditiedoston avulla. Jaottelin sen toki myöhemmin loogisiin komponentteihin, mutta havahduin kuitenkin siihen kuinka yksinkertaista se oli. Alkuunpääsyn helppous Clojureen verrattuna oli huomattava, vaikka oli niitä turhautumisia Racketinkin kanssa luvassa aivan riittävästi.

Kirjoitin blogini sivupohjat käyttäen Racketin oman html-kirjaston template-toimintoa. Varmistin ensin, että saan tehtyä sivuston toimimaan kuten ennenkin, ja vasta sen jälkeen aloin miettiä miten Pollenin saisi tuotua mukaan kuvioon.

Pollenia ei nähtävästi ole suunniteltu käytettäväksi erillisenä kirjastona, ja sen integroiminen omaan blogiin osoittautuikin huomattavan hankalaksi Racket-tulokkaalle. Olin tottunut perinteisiin sivupohjiin, jossa sivurakenne määritellään yhdessä paikassa ja sisältö tuodaan mukaan rakenteeseen sijoitettujen muuttujien kautta. Pollen-tiedostot ovat kokonaisia suoritettavia ohjelmia, jotka pitäisi suorittaa omassa hiekkalaatikossaan. Sinänsä mielenkiintoista ja jännittävää selvitellä miten tämä käytännössä tapahtuisi, mutta tovin jos toisenkin ihmeteltyäni päätin tällä erää heittää pyyhkeen kehään blogi-integraation osalta.

Johtopäätöksiä

Tämän kokemuksen perusteella Pollenin pihvi on koko ohjelmointikielen voiman hyödyntäminen yksittäisen html-sivun latomiseen. Sivupohjansa tuntevilla saattaa tässä kohtaa nousta karvat pystyyn: eikö ole täysin vastoin parhaita käytäntöjä sallia ohjelmakoodi vapaasti sivupohjassa? Tämä oli minunkin ensireaktio, kunnes tajusin, että rajoitettujen syntaksien taustalla on muunmuassa oletus siitä, että kuka tahansa voi kirjoittaa tekstikenttään selaimen kautta sisältöä ja muotoiluja. Entä jos kirjoittaja onkin tiedossa, luotettu henkilö ja tietää mitä on tekemässä? Onko tällaisen henkilön luovia mahdollisuuksia tarvetta keinotekoisesti rajoittaa?

Järjestelmä on parhaimmillaan sisällöltään valmiin kirjan latomiseen staattisiksi html-sivuiksi. Ja siihen se ilmeisesti on tarkoitettukin. Järjestelmä ei sen sijaan ole parhaimmillaan mikäli on tarvetta sisällön jatkuvalle työstämiselle tai kirjan liittämiselle osaksi olemassaolevaa järjestelmää. Kirjan rakenne on kiinteästi sidottu tiedostojärjestelmän rakenteeseen, ja tarve parametroidun tulostamisen sijaan suorittaa sivu kokonaisena ohjelmana aiheuttaa omat mutkansa integroinnille.

Ohjelmistokehittäjänä kaipaisin monoliitin sijaan selkeätä kirjastoa, jonka voisin liittää omaan projektiini. Pollen on nyt vähän kaikkea. Oma buildaussysteemi, webipalvelin ja sivupohjasysteemi. Ymmärrän sen olevan kokonaisuus, mutta ei kuitenkaan sitä mitä haluan. Parasta siinä on nimenomaan Racketin mahdollistama oma täsmäkieli dokumenttien määrittelyyn. Muut osat jäävät vähän puolitiehen, mikä on harmi, sillä nämä ovat kuitenkin muualla jo kohtuullisen hyvin ratkaistuja ongelmia.

Kenelle sitten suosittelisin Polleniin tutustumista? Tässä vaiheessa lähinnä jos olet kiinnostunut sekä ohjelmoinnista, webjulkaisusta että typografiasta, ja mikään julkaisualusta ei ole sinulle vielä ollut riittävän hyvä. Pollen tarjoaa uutta näkökulmaa — vanhat kyseenalaistaen — ja ideoita siitä mihin suuntaan teknologiaa voisi kehittää. Minulle siihen tutustuminen on tuonut huimasti uutta näkemystä webjulkaisuun ja siihen liittyvien järjestelmien vaatimuksiin.

Taidanpa jäädä kanavalle.

Linkit

  • Mind on Maps — Online book (draft), Computer assisted thinking with mind maps, made with Pollen
  • Mind on Maps code — Mind on maps code on GitHub
  • Racket — A programmable programming language
  • Pollen — The book is a program
  • LyX — The document processor
  • Clojure — The Clojure Programming Language
comments powered by Disqus
2016-03-15