Heii oisko aika kirjoittaa toinen julkaisuun asti päätynyt posti tänä vuonna
Ois toki. Nyt on aika kysyä:
Miten meni, mitä opit, miksi teit
Koodasin lähinnä. Työhommat olivat alkuvuodesta clojurehommia, sekä edessä että takana, ja jonkin verran javascriptia. Siviilihommat sen sijaan olivat lähinnä melkoinen työmaa. Helmikuussa mietin että oispa kiva juttu jos qmapperiin olisi mahdollista toteuttaa Ctrl+Z tai sellainen ominaisuus että pelin pelaaminen pelausikkunassa ei tuhoaisi editorin tilaa. Propertylispin tuottamat luokat olivat jokseenkin imperatiivisia ja täysin heap-allokoituja. Jos peliä alkoi pelata skriptillä, jossa esimerkiksi pääloopissa määritellään olioiden koordinaatteja uudelleen näppissyötteen pohjalta, olisi editorin tila pitänyt syväkopioida johonkin talteen, jotta imperatiivinen koodi olisi voinut tuhota oman tilansa. Ei onnistunut. C++:lla deep copy mielivaltaiselle oliopuulle -algoritmi, joka osaa ottaa huomioon heap- ja stack-olioiden erot, saattaa olla triviaali ongelma, mutta itseni kaltainen lisp-koodari ei ratkaisua sille löytänyt.
Minulla oli projektissa jo kiinni libguilen kautta scheme-tulkki. Schemelle immutable-rakenteet, ne joiden deep copy on triviaalia ja joita tyhmä, imperatiiviinen pelisilmukka ei pysty sotkemaan vaikka kuinka yrittäisi, ovat helppoja. Poistin propsulispin ja sen tuottamat koodit, uudelleenkirjoitin defcppclassin define-macrolla uudestaan niin että scheme pystyi syömään samoja koodeja kuin propsulisp, ja kirjoitin scheme-domainille vähän c++-liimaa jotta qt<->domain<->opengl - rajapinnat onnistuivat. Teoriassa se toimi, käytännössä c -> scheme - ffi:ssä oli jokin dokumentoimaton vika, joka dumppasi coreja, joista en saanut mitään selkeää irti.
Sen jälkeen kokeiltiin ECL:ää. Tämä ratkaisu on pitänyt tähän asti, ja olen saanut editorin jopa piirtämään asioita joiden struktuuri on määritelty lispillä. OpenGL:n, Qt:n ja lisp-funktioiden paritus ei ole ollut helppoa. Ratkaisuni toimii niin että tekstuurien latausfunktio rakentaa opengl-neliön tekstuureineen valmiiksi, dumppaa sen std::string->renderable - hashmappiin (missä string tulee muistaakseni lispin gensymiltä) ja palauttaa avaimen. Qt:n opengl-härpäke iteroi ::paintGL():ssä piirtojonon, joka koostuu näistä avaimista, ja piirtää jokaisen takaa löytyvän olion ruudulle.
Mielenkiintoinen spesiaalitapaus on kartan piirtoon tehty piirtojono lispin lambdoille. Piirtopinta iteroi senkin jonon läpi, kutsuen jokaista jäsentä, ja ainoa joka käyttää tätä hyödykseen on kartan funktio, joka looppaa omat layerinsä ja tilensä läpi, kutsuen jokaiselle erikseen tilen piirtofunktiota (joka dumppaa itsensä aktiivisena olevaan opengl-kontekstiin, rukoillen tilan olevan oikein.
Tiivistettynä tekemistä on riittänyt, projekti on hyödyllisyysarvoltaan mennyt lähinnä taaksepäin, enkä ole todistanut että tämä kaikki johtaa siihen että saan Ctrl+Z:n ja erilliset tilat toteutettua. Luotto on kova, kun tällä projektilla ei ole juuri vastuita mihinkään suuntaan.
Puhu tuhmia epäteknistä
Okei sit
Keväällä myö muutettiin Tampereelta Tampereelle. Se jokseenkin hidasti oikeita töitä. Harrastin musiikkia, sain kulutettua 400€ kulttuurisetelibudjetin täysin omalla käytölläni pois. Luin jotain kirjojakin, mutta koska en pidä lukupäiväkirjaa niin en voi jakaa niitä. Keväällä muistaakseni viimeistelin "Rob Hobbin" Fitz-kirjat. Kun löytäisin tarpeeksi aikaa, lukisin myös fitzittömät väliosat. Tänä vuonna luin myös Eddingsiä, T. Pratchettiä (lopultakin) ja Stephen Kingiä.