Tämä asiakirja on saatavilla myös suomeksi. Dieses Dokument ist auch auf Deutsch erhältlich.

Marko Mäkelä’s software projects

I prefer to use free software. Not only to save money but because I and others will be able to adapt the programs to better suit my needs. I have written some free software as well, mainly in the C programming language.

Coding Style

In my own C or C++ projects in the early 2000s, I used to follow the Ellemtel rules and recommendations (also available in PDF) with a few exceptions.

Nowadays it would seem best to follow the Google C++ Style Guide and the C++ Core Guidelines and rely on diagnostics from static analysis tools and compilers. Clang emits useful warnings and introduced useful compile-time instrumentation, such as ASAN, MSAN, UBSAN and TSAN. These combined with a regression test suite and code coverage analysis allow efficient use of version control tools, such as git bisect.

In professional software development, one often has to adapt to predetermined programming style or tools. While it would be nice to always use the standards and tools, the choice could be limited by the selected target platforms. Luckily during the 2000s, the diversity of relevant C and C++ compilers and operating systems has been shrinking, and the remaining compiler families (mostly GCC, Clang, Microsoft) are closely following the development of the standards. As of 2016, it really is feasible to use ISO/IEC 14882:2011, also known as C++11. This is a clear improvement from 2003 when support for the then-5-year-old C++98 was still somewhat lacking. The future of C++14 and the upcoming C++17 looks promising.

Formal Methods

As a doctoral student I wrote a reachability analyser and model checker for high-level Petri nets in C++ and C. It can help locate errors in parallel and distributed systems. The software is included in the Debian GNU/Linux distribution.

I like combinatorial problems, but I tend to solve them by brute force. I enumerated the solutions of the 6×10 Pentomino puzzle. I also designed some bedspread patterns with the help of some C programs.

Image Manipulation

I developed the program in order to transform my wedding pictures into an easily browseable format. For a file system containing JPEG images, the program creates thumbnail images of desired size and generates a hyperlink document structure in HTML format. The software package also includes jpegcom for editing image comments, exifiron for rotating and compressing images taken with a digital camera, and jpegnail for removing or embedding thumbnail-sized preview images within JPEG images.
This is a Linux-based boot floppy disk, built to run a piece of software I wrote. The software captures images from a Firewire camera, corrects lens distortion, compresses to JPEG and transmits the images over a pipe, typically over an OpenSSH to a web server.

Experiments with the Java Programming Language

The Java programming language was hyped in 1995. Once compiled and tested, a piece of software would work in every environment. That turned out not to be the case: especially the program interfaces of graphical user interfaces have changed in almost every version of the Java run-time system. Furthermore, the run-time system has grown very big, and no comprehensive free implementation is available. For these reasons, I try to avoid the Java programming language, even though I have made some experiments with it.

Threedimensional Fractals
The applets I wrote for JDK 1.0 and 1.1 displays the Mandelbrot and Julia sets in three dimensions.
Scoring program for a beauty contest
The program has been used for computing the results of the Helsinki Hair Open contest for several years. The interface for inputting points resembles a spreadsheet program, so it is fast to use. The user interface is multilingual. The documentation is missing, and some small things could be improved in the program.

Embedded Systems

This program for various Unix-like systems and Windows reads and writes the flash and EEPROM memory of Atmel AVR® microcontrollers over the parallel or serial port via SPI. I wrote this program, because I wanted that the end users of my C2N232 adapter can easily update the firmware. Existing solutions supported only either Unix-like systems or Windows and did not support the kind of RS-232 programming interface that was needed.
Patches for VDR
I have set up a DVB-T recorder and player based on Debian GNU/Linux, VDR and the plugins vdr-softdevice and vdr-subtitles. The most important modifications I have made are available here.

See also my miscellanous utilities, circuits and software for old computers.