This document is also available in English. Dieses Dokument ist auch auf Deutsch erhältlich.

Marko Mäkelä: ohjelmointi

Käytän mieluiten vapaita ohjelmistoja. En niinkään rahaa säästääkseni vaan siksi, että minun ja muiden on mahdollista muokata ohjelmia paremmin tarpeisiini sopiviksi. Minäkin olen kirjoittanut joitakin vapaita ohjelmia, pääasiassa C-kielellä.

Ohjelmointityyli

Kirjoittaessani omia C- tai C++-ohjelmia minulla oli tapana noudattaa Ellemtelin sääntöjä ja suosituksia (saatavilla myös PDF-muodossa) joitakin poikkeuksia lukuun ottamatta.

Nykyään lienee parasta noudattaa tuoreempia suosituksia Google C++ Style Guide ja C++ Core Guidelines sekä luottaa staattiseen analyysiin ja kääntäjiin. Clang antaa hyödyllisiä varoituksia ja tarjoaa monenlaista käännösaikaista instrumentointia virheiden löytämiseksi ajon aikana: ASAN, MSAN, UBSAN ja TSAN. Nämä työkalut yhdessä regressiotestien ja koodipeittoanalyysin kanssa mahdollistavat tehokkaan versionhallintatyökalujen käytön, kuten git bisect.

Ammattimaisessa ohjelmistokehityksessä on usein tarpeen sopeutua ennalta määrättyyn ohjelmointityyliin tai työkaluihin. Vaikka olisi mukava käyttää aina uusimpia standardeja ja työkaluja, valitut kohdealustat voivat rajoittaa valintaa. 2000-luvulla kääntäjien ja käyttöjärjestelmien kirjo on onneksi ollut vähenemään päin ja jäljelle jääneet kääntäjäperheet (pääasiassa GCC, Clang, Microsoft) ovat mukana standardien kehityksessä. Vuonna 2016 ISO/IEC 14882:2011 eli C++11 todella on käyttökelpoinen valinta. Se on selkeä parannus vuoteen 2003, jolloin silloinen viisi vuotta vanha standardi C++98 ei edelleenkään toiminut useimmissa ympäristöissä. C++14:n ja tulevan C++17:n tulevaisuus näyttää lupaavalta.

Formaalit menetelmät

Jatko-opiskelijana tein C++- ja C-kielisen saavutettavuusanalysaattorin ja mallintarkistimen korkean tason Petri-verkoille. Sillä voi paikantaa virheitä rinnakkaisista ja hajautetuista järjestelmistä. Ohjelma sisältyy Debian GNU/Linux -jakeluun.

Pidän kombinatorisista ongelmista, mutta minulla on tapana ratkaista ne raa’alla voimalla. Selvitin 6×10-kokoisen Pentomino-palapelin kaikki ratkaisut. Suunnittelin myös joitakin värikkäitä sängynpeitteitä C-ohjelmien avulla.

Kuvankäsittely

pHoToMoLo
Laadin ohjelman saadakseni hääkuvani helposti selailtavaan muotoon. Ohjelma lisää JPEG-muotoisia kuvatiedostoja sisältävään tiedostojärjestelmään halutun kokoiset pienoiskuvat sekä HTML-muotoisen hakemistorakenteen. Samaan pakettiin kuuluvat myös jpegcom, jolla voi muokata kuvatiedostojen selostuksia, exifiron, joka kääntää ja tiivistää digitaalikameralla otettuja kuvia, sekä jpegnail, joka liittää JPEG-kuviin pieniä esikatselukuvia tai poistaa niitä.
webcamfloppy
Linux-pohjainen käynnistyslevyke, jonka koostin kirjoittamani ohjelman ajamiseksi. Ohjelmani kaappaa kuvia Firewire-kameralta, korjaa linssivääristymän, pakkaa JPEG-muotoon ja lähettää kuvat putkeen, tavallisesti OpenSSH:lla web-palvelimelle.

Kokeiluja Java-kielellä

Java-kielestä kohuttiin joskus vuonna 1995. Kerran käännetty ja testattu ohjelmisto toimisi kaikissa ympäristöissä. Niin ei kuitenkaan käynyt: etenkin graafisen käyttöliittymän ohjelmointiliitynnät ovat muuttuneet lähes jokaisessa Java-ajoympäristön versiossa. Lisäksi ajoympäristö on kasvanut hyvin suureksi, eikä siitä ole kattavaa vapaata toteutusta. Näistä syistä pyrin välttämään Java-kieltä, vaikka olen sillä joitakin kokeiluja tehnytkin.

Kolmiulotteisia fraktaaleja
JDK 1.0:lle ja 1.1:lle tekemäni sovelma näyttää Mandelbrotin ja Julian joukkoja kolmiulotteisina.
Kauneuskilpailun tuloslaskentaohjelma
Ohjelmallani on laskettu Helsinki Hair Open -kilpailun tuloksia useiden vuosien ajan. Pisteiden syöttökenttä muistuttaa taulukkolaskentaohjelmaa, joten sitä on nopea käyttää. Käyttöliittymä on monikielinen. Käyttöohjeet puuttuvat, ja ohjelma kaipaa pientä viimeistelyä.

Sulautetut järjestelmät

cisp
Tämä monissa Unixin kaltaisissa järjestelmissä sekä Windowsissa toimiva ohjelma lukee ja kirjoittaa Atmel AVR® -sarjan mikro-ohjainten flash- ja EEPROM-muistia sarja- tai rinnakkaisportista SPI-liitännän välityksellä. Kirjoitin ohjelman, koska halusin, että kehittämäni C2N232-sovittimen loppukäyttäjät voivat helposti päivittää ohjelmiston. Olemassa olleet ratkaisut toimivat vain joko Unixin kaltaisissa järjestelmissä tai Windowsissa eivätkä tukeneet tarvitun kaltaista RS-232-ohjelmointiliitäntää.
Muutoksia VDR:lle
Olen rakentanut DVB-T-tallentimen ja -soittimen Debian GNU/Linuxin, VDR:n sekä liitännäisten vdr-softdevice ja vdr-subtitles avulla. Tärkeimmät tekemäni muutokset ovat saatavissa täältä.

Tutustu myös sekalaisiin apuohjelmiini, kytkentöihini ja vanhoille tietokoneille kirjoittamiini ohjelmiin.