Aika tiukka viikko takana. Tosin ei tullut tehtyä kuin kaksi isompaa harkkatyötä. Tänään sain graafisten käyttöliittymien ensimmäisen (ainoan pakollisen) harjoitustyön tehtyä. Vielä yksi (sama aihe, eri kieli) niin opintopisteitäkin saa 2 enemmän kuin yhden harkan versiossa.
Grakon aiheena oli kiintolevyn vapaan tilan visualisointi, toteutuskielenä C#. Kiitos tässä Microsoftille varsin toimivasta Visual Studio 2005 Express:sta. Ilmainen ja melko toimiva kokonaisuus, käyttölisenssikin taitaa olla aika vapaamielinen. Sharpdevelop:lla pääsi alkuun, mutta VSE se vasta helpotti ohjelman kirjoittamista automaattisella jäsenfunktioluonnilla ja refactorointikaluilla (muuttujan/funktion esittelyn uudelleennimeäminen muuttaa nimiä kaikissa tarpeellisissa paikoissa, helpottaa mm. fingelskan poistamista koodista).
Edellisen kappaleen 'melko' ja 'varsin' johtuvat yksinkertaisesti siitä että tuoolla pienelläkin ohjelmalla kirjoittaminen hidastui päivän lopuksi, editori lagasi silminnähden sitä kun kommentoin koodia. En tiedä mitä se siinä teki, mutta.. Yksi vähän outo ominaisuus on helppien (msdn-online) heikko latausnopeus, jokainen sivu latautui vähintään 10s ja alapalkki näytti tuhatta ja sataa erillistä latausta. Niinpä sitä ohjetta ei tullut käytettyä kuin koemielessä, google löysikin ohjeita paljon paremmin.
Itse C# -kielestä jäi vähän kaksijakoinen mielikuva. Yleisellä tasolla ihan kiva, melkein skriptimaisen helppo, joskaan en tarvinnut enkä kokeillut säännöllisten lausekkeiden tukea. Pythonista ja jopa C:stä jäätiin kauas mm. merkkijonomuotoilussa. Microsoftin vastine näille on käsittämättömän rujo (tai vaihtoehtoisesti en ymmärtänyt sitä, kyllä printf(3):n parametrien tajuamiseen meni oma tovinsa, enkä sitä tuohon kuluttanut). Funktiomaiset getteri/setterit olivat ihan hyviä ominaisuuksia, näiden käyttö ei vain ollut virtaviivaista automaattisen täydennyksen kanssa sillä näiden käyttö on erilaista kuin funktioiden. Olisikin ehkä ollut toimivampaa sallia näiden käyttö myös tyhjän parametrilistan (esim. Foo.Bar() <=> Foo.Bar ) kanssa. Kaunista näissä oli tavallaan se että täydennyksessä ei ollut tuplalistana getteri/settereitä eikä järjetöntä listaa samalla sanalla alkavia funktioita.
Nyt viikonloppuna viritin myös sisäverkon verkkolevypalvelimen toimimaan. Käytössä on samba linuxin päällä, sillä Tanju käyttää sitä Windosistaan (kuin myös välillä minä). Siirsin sinne dataa, olosuhteiden pakosta ensin Windowsista. 10-megaisesta putkesta dataa tuutin täydeltä ja muutaman gigan siirtäminen kesti pari tuntia. Nykyisestä kovalevystä kirjoitusnopeuden tiputus on noin 50-kertainen. Kokeilin samaa sitten Linuxista ja ainakin palvelimen käppyrät näytti että putki oli entistä enemmän tukossa, siis melkein teoreettisella kantorajalla. Välissä on kuitenkin yksi hubi, joten jonkin verran dataa ihan varmasti joutuu tippumaan. Kaiken lisäksi kaiken aikaa toimi hyvin, hyvin sulavasti ssh-yhteys palvelimelle. Olin tästä oikeasti tosi yllättynyt.
Tänään oli myös isänpäivä. Sain lahjan, söpön mukin Aksulta, siinä on
semmosta tuhrittua maalia, aika taiteellista. Tanja uhkaili että pääsen
heräämään aamuviideltä, palkintona äitienpäivästä, mutta näytti sitten
heltyneen ja armahtaneen. Tehtiin ja syötiin suklaakakkua (Tanja teki
taikinaa, minä popsin suklaata ja voitelin vuokaa..). Oli grakon takia vähän
kiire olo, mutta käytiin kuitenkin vielä ulkonakin kävelemässä. Pitäisi
tehdä sitä useammin.
Pääsin tänään eroon puolikkaasta työläästä kurssista. Tai en tiedä kuinka työläs se toinen varsinainen tehtävä siinä on, tämä oli kaikkiaan noin 18 tunnin työn takana.
Kyseessä siis testauskurssin yksikkötestaus-osio. Testattiin Mozillan URL-parseria, sen muutamaa funktiota. Tarkoituksena oli (päällepäin) saada ohjelmavuo kulkemaan jokaisesta mahdollisesta koodissa olevasta ehdosta.
Meidän ratkaisu oli käyttää perustestejä ja sen lisäksi permutoida muuttujia (funktiot palauttavat tiettyjä arvoja muuttujiin jos niille annetaan sopivat parametrit). Tämä osuus 'räjähti käsiin'.
Vähän lukuja. Testataan 8:aa funktiota. Skripti joka generoi testit on 600 riviä pitkä, pythonia. Perustestejä joita varioidaan on 45. Generoituja testejä on yhteensä 7216. Generoidun koodin koko on 6Mt, siis 4:n korpun verran. Käännöksen jälkeen itse ohjelma joka suorittaa testit on 21Mt:n kokoinen. Koulun tarjolla oleva quota ei oletuksena riittänyt sen kääntämiseen niin että kaikki testit olisivat olleet kerralla mukana.
Näin jälkeenpäin ajateltuna muutama tarkemmin suunnattu testi hyvin
pienellä permutoinnilla olisi ajanut aivan samaa tarkoitusta, pienemmällä
vaivalla. Tässä tapauksessa itse testien kääntäminen muodostui
pullonkaulaksi, niiden ajaminen ei ollut kuin parin sekunnin homma.
Toisaalta tuo toteutustapa oli vaan niin pirun hauska.
Nyt alkaa sitten N:s vuosi koululla. Viikot ylibuukattuna, mutta mitäs jätin kursseja kesken niin paljon, pitää nyt reipastaa tahtia entisestään. Tein kalenterin koulukursseista (kun siitä oli sen verran paljon hyötyä viimekin vuonna) KOrganizerilla, ja kun sitä olisi mukavaa katsoa muualtakin kuin omalta koneelta, käytin PHPiCalendar:ia kalenterin esittämiseen. Nyt olisi vielä hakusessa joku webikilke jolla saisi myös lisättyä tapahtumia kalenteriin, niin ei olisi niin riippuvainen omalla koneella olosta.
Tein viikonloppuna kaavion siitä miten suoritettujen opintoviikkojen määrä on kasvanut ajan suhteen. Käppyrä oli eksponentiaalinen.
Aksullakin alkaa pian 'koulutie'. Tai ainakin yhteiskuntaan
muljuuttaminen. Viime viikolla käytiin päiväkodissa tutustumassa, Tanja on
siellä sitten käynyt päivisin Aksun kanssa totuttautumassa. Torstaina
mennään sitten yhdessä Aksun kanssa ja vain toinen tulee ulos.
Vihaan näitä puoli vuotta kerrallaan jatkuvia työpäiviä. Jos on oikeassa
työssä, työpäivä loppuu kun lähdet töistä, tai sinulle maksetaan
loppuajastakin. Opiskelijana pääset tekemään hommaa jatkuvasti, käytännössä
taukoamatta ja kun otat breikkiä, mietit vain että olisi voinut tehdä
tuotakin pidempään.
Sitten on näitä ääliöitä jotka luulevat että opiskelijalla ei saisi olla elämää, kaikki aika pitäisi pyhittää opinahjolle ja valmistua mahdollisimman nopeasti. No haistakaa tuore paska. Jeesuksen perkele kun tekisi mieli ostaa jotain joutumatta miettimään kuinka monen viikon ruuat siinä menee.
'Laina on hyvä tapa rahoittaa elämää, sillä minäkin pärjäsin N vuotta sitten'. Ja se näkyy. Maksoit sitä mahalaukku haava-arvilla pois, söit tonnikalaa makarooneilla, sitä samaa paskaa mitä opiskelijanakin, sen 15 vuotta, onnittelut. Menepä nyt kertomaan psykiatrillesi kuinka elämä on niin suorituskeskeistä ja kuinka tekisi mieli muuttaa maalle hakkaamaan halkoja. Mutta älä tule minulle tyrkyttämään tuota samaa hirttosilmukkaa.
Kevyttä liioittelua, tietenkin. Tulipa miettineeksi että asiat voisivat
olla huonomminkin. Pankissa viiskyt tonnia lainaa, vakuuttamaton talo
palamassa, itse juuri valmistunut udmurtian kielen asiantuntijaksi,
kaksikymmentä allergiaa ja puoluekannaltaan perussuomalainen. Ehkäpä tämä
tästä.
Eilen (jos lasketaan heräämiset, kellon mukaan toissapäivänä) oli kaksi tenttiä. Tänään oli kaksi. Huomenna on kanssa kaksi tenttiä. Ylihuomenna on yksi ja ensi maanantaina taas kaksi. Hyvin suunniteltu tenttilukkari mulla.
Jäljellä olisi enää yksi harjoitustyö, tietokonegrafiikka. Valitettavasti se on 'hyvällä alulla', ts. siinä on ongelma jota en kevyellä pähkäilyllä saanut auki ja nyt koodin kirjoittamisen uudelleen-aloittaminen on mäkilähtöistä.
Toinen ongelma sen kanssa on se että minulla ei ole tällä hetkellä
toimivaa 3D -rautaa. Tai rauta toimisi, mutta ajurit eivät, ainakaan siinä
ympäristössä jossa on mahdollista ohjelmoida. Tietysti voisi käynnistää
windowsiin, asentaa siihen vmwaren+linuxin, ohjelmoida siinä ja ajaa 3D
GLX:n yli itse windoesissa. God bless my convoluted mind.
Kirjoittelen tässä maanantaiksi esseetä aiheesta 'Mieliohjelmointikieleni sisältämät ominaisuudet'. Kohteeksi valitsin pythonin, tietenkin.
Aihetta 'avatessani' en voi kuin muistella venäläisen kirjailijan, Sergej Dovlatovin, esittämää anekdoottia.
Jutun juoni on siinä että Dovlatov käy katsomassa kielitieteellisellä osastolla tenttiä valvovaa kaveriaan ja kysyy siltä: "Kuinka kauan sinulla menee että avaat Pushkinin alkukauden tuotannon kielikuvien kehittymistä?" (tmsv.), kaveri vastaa että siihen mennee puolisen kuukautta. Tähän Dovlatov: "Ja näiltä tyypeiltä se sujuu vähän alle kolmessa tunnissa".
Kovin laajasti en siis aihetta pysty käsittelemään, mutta esseen
tehtävänannon päätarkoitus lienee saavutettu jo sillä että saadaan
ajattelemaan yksittäisten ominaisuuksien vaikutusta ympäristöön.
Ajattelemaan kokonaisuutta ja sitä ohjaavaa kättä (harva ohjelmointikieli on
muotoutunut täysin sattumanvaraisesti, ilman yksittäisen instanssin
suurempaa näkemystä).
Hitaaksi kävi minunkin koneen prosessori kun jauhoi oheista kuvaa. Kuva
on tulos tietokonegrafiikan harjoitustehtävänä olleesta POVRay -osiosta.
Edellinen osio, algoritmit, meni kannaltani huonosti; palautin kolme työtä, sain läpi vain kaksi. Virhe oli pieni, mutta olin jo saanut tilaisuuden korjata työtä (ja korjasinkin sen ongelman), mutta en huomannut siihen jäänyttä virhettä. Aluksi ketutti jumalattomasti, kuitenkin asiaa ajateltuani ymmärsin että turhaan. Ei se ole henkilökohtainen loukkaus vaikkei assari aja kaikkia testejä ja kerro kaikki näkemänsä ongelmat. Koulutus on kuitenkin diplomi-insinöörin tutkintoon tähtäävä ja siinä hommassa on osattava tehdä asiat kunnolla eikä sinnepäin.
Eihän sitä sillanrakennustakaan yritetä virhe kerrallaan; rakentaen aina
uusiksi pienin korjauksin. Sellaisessa hommassa työ tehdään kerralla hyvin.
Softan kirjoittaminen (tässä siis algoritmin toteutus) on ihan yhtä tärkeää
tehdä kunnolla.
Yliopistossa ohjelmointia/tietotekniikkaa opiskelemisessa on mielestäni erityisen hyvänä puolena se että ohjelmistaan saa palautetta. Työssä koodistaan ei oikeastaan voi saada kunnolla palautetta. Ehkä jotain 'kylläpäs sä olit taas kännissä kun tuon väänsit' -läppää erityisen kulmikkaasta pätkästä, mutta mistään syvällisemmästä on isommassa paikassa turha unelmoidakaan.
Vai pystyykö joku kuvittelemaan tilanteen jossa peri kuukautta projektin parissa viettänyt tyyppi kutsutaan pomon boksiin ja kerrotaan että 'nyt sulla on tyyli ollut vähän hukassa, kokeile käyttää enemmän välilyöntejä if() -lauseissa ja koodilohkojen alussa'. Eihän tämä palaute yliopistollakaan ole ihan sellaista, mutta likelle liippaa ainakin 'alkeis' -kurssien kanssa.
Tämän kevään/talven kurssit ovat tässä mielessä olleet minulle haastavia. Jo useampaan kertaan olen saanut palautetta että koodini ei vastaa laitoksen 'tyyliä'. Kohtuullisen pitkään (8v) C -sukuisten kielten kanssa pelehtineenä on hyvin vaikea oppia käyttämään jotain muita konventioita kuin niitä mitä on itse hyväksi havainnut. Töissä oli helppo kirjoittaa sen tyylin mukaista koodia, koska siellä enimmäkseen lisäili valmiiseen koodiin. Uusi koodi olikin sitten helposti vanhan tyylin mukainen. Täällä joutuu sen sijaan kirjoittamaan ohjelmat enimmäkseen uusiksi alusta asti ja siten noudattamaan tyyliä ilman vertaisesimerkkiä.
Ongelmallisinta onkin ollut hyväksyä ylipäätään kritiikkiä
koodistaan. Tänäänkin onnistuin meuhkaamaan asiasta aivan liian pitkään
ennen kuin paksuun kalloon upposi että 'hei, assari oli ihan oikeassa, tuo
koodi on tyylillisesti sheissea, jopa minulle'.
Tajusin mikä on minua niin pitkään matematiikassa ja fysiikassa hämännyt. Pohja on siinä että näen kaiken ohjelmoijan silmin, iteroitavana ja laskettavana. Sen takia matemaattiset tarkkojen ratkaisujen keinot ovat näyttäneet hyvin vetoavilta, nehän ovat suorat vastaukset, ilman pitkällistä iteraatiota.
Kuitenkin matematiikassa on se rajoite ettei se voi kunnolla esittää
iteraatiota. Jonot näyttävät olevan vähän sinne päin, mutteivät ihan kaikkea
mitä toivoisin niiden olevan. Matematiikan syntaksi ei palvele minua niin
hyvin kuin ehkä voisi. Matlabin syntaksi näyttää syntyneen lähinnä
matriisioperaatioiden tietokoneellistamisesta, eikä ole mitenkään
luonnollisen tuntuinen, Mathematican ohjelmointisyntaksiin en taas ole vielä
ehtinyt pahemmin perehtymään.