Viimeistä kesälomaksi luokiteltavaa päivää vietetään. Ei se koulunpenkki kuitenkaan aivan piinaten ala, joten leppoisa elo jatkuu vielä hyvän aikaa. Viime hetken “tahdon tehdä jotain järkevää” -puuhailuihin kuuluukin hitaasti käyntiin lähtevän MPD-kirjaston suunnittelu.
Luin varsinaista MPD-dokumentointia, ja havaitsin, että kyseessä on varsin mallikas tekstipohjainen protokolla. Ja kun olenhan minä käynyt aiheeseen liittyvän kurssin, homma kuulostaa nopeasti ajatellen aika helpolta. Siis poistaisin ruman C-kirjaston välistä, ja tekisin suoran C++-toteutuksen MPD:n ja tulevan klienttini välille. Sellainen oikeaoppinen MPD-koodikirjasto olisi poikaa: std::string
toimisi merkinantajana tällä kertaa loppuun asti (jos vaikka boost::asio hoitaa itse tiedonvälityksen) ja kaiken pitäisi olla vedenpitävää. Nimittäin on tuo libmpd aika sekava esitys, vaikka se helpottaisikin joitakin asioita tiedonkulussa — esimerkiksi tapahtumiin heräämisen ilman jatkuvaa pollausta.
Huomasin, että kyseinen toiminto on toteutettu protokollatasolle niin helpoksi, ettei tosikaan. Vietin puolisen tuntia puhellessa telnetin kanssa MPD:lle, ja kaikki on selvää. Kyllä noita tekstiprotokollia pitää vain rakastaa. Boostin kirjastoa käyttämällä saa alustariippumattoman ja täysin C++:aa olevan sokettikirjaston avukseen. Tosin, MPD ei ole aiemminkaan taipunut Windowsille helposti, joten ehkä murehdin suotta tämän asian kanssa. Riittäisi, että char*
-taulukoita ei tarvitsisi käsitellä missään vaiheessa kirjastoa.
Haskellista
Puhuin aiemmin siitä, että kirjailisin Haskellia käyttäen uuden lukujärjestysohjelman. Homma ei ole edistynyt juuri lainkaan, vaikka alustavasti homma on tosi helppo kirjoittaa: syntaksi on kiinteästi määrätty, joten puhdas matematiikka ei mene edes syventäviin aiheisiin. Olen kauhulla katsellut parsereiden toteuttamista Haskellilla, mutta nyt selvitään vähemmällä. Otetaan esimerkiksi sanoittainen jako splitWords :: String -> [String]
, ja sitten tutkitaan ensimmäistä sanaa, jonka perusteella määrätään toinen funktio laskemaan asiaa. Vaikka se olisi ehkä vähän ruma ja delegoiva ratkaisu, on se kuitenkin tiukan täsmällinen ja yksiselitteinen.
Pitäisi vain löytää nyt aikaa sille. Mutta kun huomenna jo alkavat luennot, taitaa prioriteetti kääntyä niihin.