Lähdekoodimiehen ihmeelliset seikkailut

Huonontuvan muistin vastapainoksi ikääntyvä ohjelmistoammattilainen saa erinäisiä supervoimia.  En tietenkään tarkoita sitä, että koodarin ahterista löytyisi radioaktiivisen projektipäällikön puremajäljet. Tarkoitan kokemusta, sen mukanaan tuomaa viisautta ja työmäärää vähentäviä niksejä — mutta supervoima on vain niin paljon markkinointihenkisempi termi.

Kyseessä on usein hyvin yksinkertaiset konstit. Esimerkiksi:

  • logien lukeminen virhetilanteen tapahduttua tai login seuraaminen virhettä toistettaessa
  • saadun virheilmoituksen syöttäminen Googleen sanatarkasti
  • ongelman binäärihaarukointi (esim. git bisect)

Yksinkertaisuudestaan huolimatta nämä menetelmät auttavat todella, todella, todella usein.

Olen viime aikoina alkanut erityisesti arvostaa supervoimaa nimeltään “luin lähdekoodista, miten se toimii.” Olen tällä tavalla selättänyt ongelmatilanteita Firefoxin laajennuspalikassa, Django-frameworkin tietokantarajapinnassa, Eucalyptuksen komentorivityökaluissa ja monessa muussa.

Monet ajattelevat, että lähdekoodia lukeva ohjelmistoviemärisukeltaja etsii jotain bugia. Havaittu vikahan on luonnollisesti käytetyssä alustassa ja se löytyy lähdekoodia lukemalla. Tämä on kuitenkin vain osa totuudesta. Yleensä select ei ole rikki. Luen lähdekoodia siksi, että saisin paremman käsityksen siitä, miten ruuvipenkissä oleva klunssi toimii. Toisin sanoen, en etsi bugia vaan ymmärrystä.

Hyvin usein vika piilee konfiguraatiossa eikä alustassa. Dokumentaatio voi olla harhaanjohtavaa, huonoa tai puuttua kokonaan. Käyttäjä saattaa jättää dokumentaation lukematta, vaikka se olisi miten hyvää. Ohjelmistolle on voitu valita huonot oletukset toteutusvaiheessa.

Voin yrittää korjata tällaista ongelmaa kuin mustaa laatikkoa. Syöte X0, tulos Y0. Syöte X1, tulos Y1. Jatketaan, kunnes ongelma ratkeaa. Tai voin pukea trikoot ja viitan päälle, syöksyä lähdekoodin syövereihin ja repiä Ymmärryksen sen sisältä. Ymmärrys muuttaa mustan laatikon lasiseinäiseksi. Kun nenäni edessä on Y0:n palauttava rivi, voin yleensä helposti kelata ylemmälle tasolle ja löytää tilanteeseen vaikuttavat konfiguraatioparametrit.

Tehokkuudestaan huolimatta lähdekoodin läpikäynti ei ole ensimmäinen keino, jota kokeilen. Se vie aikaa, varsinkin jos ei tiedä, mitä etsii. Se vaatii huomattavan suurta paneutumista ja keskittymistä erityisesti itselle vieraan ohjelman kanssa. Tärkein syy on kuitenkin se, että lähdekoodia ei aina ole saatavilla.

// Kuva: Flickr CC, nyuhuhuu.

Langaton verkko pilvipalveluna

Codentolla on jo useampia vuosia ollut ajoittain intohimoisestikin ajettu tavoite olla halaamatta palvelimia. Tästä johtuen palveluita, joita moni ajaisi omilla palvelimilla itse ylläpidetyllä palvelinsoftalla, ei meillä tarvitse ylläpitää. Riittää, kun maksaa laskun. Esimerkiksi versionhallintaa palveluna myy github, ja hyvin myykin.

On kuitenkin joitakin palveluita, joita valitettavasti ei vielä kukaan ole ymmärtänyt myydä pilvipalveluna. Näistä yksi minua ammatillisesti eniten häiritsevistä (CIO-hattua käyttäessäni) on langaton verkko toimistolla.

Yrityksemme tarve langattomalle verkolle on melkein, mutta ei aivan, yksinkertaisin mahdollinen. Poikkeamat yksinkertaisimpaan mahdolliseen ovat: toimistomme on pitkä ja kapea, ja yhdellä tölkillä on vaikea saada luotettavaa kuuluvuutta joka kulmaan. Haluamme myöskin antaa erillisen verkon satunnaisille vierailijoille, kuin se, jota itse käytämme työntekoon. (Tähän liittyy yksi toinen palvelu, jota valitettavasti ei saa pilvipalveluna: tulostin. Avatkaapas tulostimenne avoimeen langattomaan verkkoon kokeeksi. Ja tarkoitan siis, että älkää avatko. Syyt voi pohtia itse läpi.)

Koska identiteettimme on olla yritys, jossa on jonkinlainen kulukontrolli, aina välillä innostumme tekemään asioita halvalla. Niinpä esim. wlan voidaan toteuttaa siideripalkalla, koska verkostosta löytyy asiaan harrastuneisesti suhtautunut partneri, joka heikkona hetkenä suostuu tällaiseen ehdotukseen.

Pitkäksi venähtänyt johdanto selittää, miksi torstaina viideltä korkkasimme Jessen kanssa toimistolla siideriä, ja varoitimme mattimyöhäisiä verkon mahdollisesta ajoittaisesta toimimattomuudesta. Projektiomistajalle oli annettu kahden siiderin työmääräarvio.

Neljä tuntia myöhemmin kävi mielessä, että projektiomistaja oli ammattilainen, koska siideri ei ollut vielä loppunut kesken.

Viiden tunnin kohdalla langaton verkko toimi vaatimusmäärittelyn mukaisesti. Matkan varrella suunnilleen kaikki oli mennyt eri tavalla kuin suunniteltu, ja useita komponentteja alkuperäisen laajuuskäsityksen ulkopuolelta oli päätynyt mukaan.

Aamulla palasin tapahtumapaikalle inventoimaan vahingot ja kirjoittamaan tilanteen arvokkuutta heijastelevan blogauksen.

// Kuva: Flickr CC, Steve Corey.

Tämän artikkelin on kirjoittanut Teemu Kalvas ja sitä ovat sittemmin muokanneet muut Codenton työntekijät.