Tämä asiakirja on saatavilla myös suomeksi. This document is also available in English.

Marko Mäkelä: Programmieren

Ich bevorzuge freie Software. Nicht nur, weil es Geld spart, sondern auch, weil ich und andere die Programme anpassen können, so daß sie mein Bedarf besser füllen. Ich habe einige freie Programme geschrieben, meist in der Programmiersprache C.

Programmierstil

In meinen eigenen C- oder C++-Projekten Anfang der 2000er Jahren hatte ich versucht, den Regeln und Empfehlungen von Ellemtel (auch in PDF verfügbar) zu folgen, mit einigen Ausnahmen.

Heutzutage sieht es so aus, dass man am besten Google C++ Style Guide und C++ Core Guidelines folgt und sich an Werkzeuge für statische Analyse verläßt. Der Clang-Kompilierer erzeugt nützliche Warnungen und bietet unterschiedliche Sanitizer an, die die Fehlersuche in der Laufzeit erleichtern: ASAN, MSAN, UBSAN und TSAN. Diese zusammen mit Regressionstesten und Ananlyse der Code-Überdeckung ermöglichen einen effizienten Einsatz von Versionsverwaltungssysteme und Werkzeuge wie git bisect.

In professioneller Software-Entwicklung sind die Randbedingungen oft im Voraus festgelegt. Während es schön wäre, immer den neuesten Programmierstil oder Werkzeuge einzusetzen, könnte die Verfügbarkeit durch die Auswahl von Zielsystemen beschränkt werden. Zum Glück ist in der 2000er Jahren die Auswahl von wahrzunehmender C- und C++-Kompilierer und Betriebssysteme geringer geworden, und die verbleibenden Kompilierfamilien (hauptsächlich GCC, Clang, Microsoft) folgen der Entwicklung der Standards. In 2016 ist es tatsächlich denkbar, ISO/IEC 14882:2011 bzw. C++11 einzusetzen. Dies ist eine klare Verbesserung von 2003, als der damals 5 Jahre alter C++98 Standard noch nicht ganz praktisch verfügbar war. Die Zukunft sieht gut aus auch für C++14 und für den künftigen C++17.

Formale Methoden

Als Doktorand schrieb ich einen Erreichbarkeitsanalysator und Modellprüfer für höhere Petrinetze in C++ und C. Er kann helfen, Fehler in nebenläufigen und verteilten Systemen zu finden. Die Software ist in der Debian GNU/Linux Verteilung enthalten.

Ich mag kombinatorische Probleme, aber wenn möglich, löse ich sie mit roher Gewalt. Ich habe die Lösungen des 6×10 Pentomino Puzzle berechnet. Ich habe auch einige farbige Bettdecken mit hilfe von C-Programmen entworfen.

Bildverarbeitung

pHoToMoLo
Ich habe das Programm entwickelt, um meine Hochzeitsbilder in ein Format umzuwandeln, das einfach zu blättern ist. Für ein Dateisystem von JPEG-Bildern erzeugt das Programm kleine sogenannte Thumbnail-Bilder in den gewünschten Größen und erzeugt eine HTML-Dokumentstruktur zum Blättern. Das Softwarepaket enthält auch jpegcom zum Ändern der Anmerkungen zu Bildern, exifiron zum Rotieren und Komprimieren der Bilder von einer digitalen Kamera und jpegnail zum Einbetten oder Entfernen kleiner Vorschaubilder in JPEG-Bildern.
webcamfloppy
Eine Linux-basierte Boot-Floppy, mit der ein Programm von mir ausgeführt werden kann. Das Programm empfängt Bilder von einer Firewire-Kamera, korrigiert Verzeichnung, komprimiert mit JPEG und sendet die Bilder in eine Pfeife, normalerweise per OpenSSH zu einem Web-Server.

Experimente mit der Programmiersprache Java

Für die Programmiersprache Java wurde 1995 viel Werbung gemacht. Wenn eine Anwendung einmal kompiliert und getestet worden sei, werde sie in allen Bedienungsumgebungen funktionieren. Das war doch nicht der Fall: besonders die Programmschnittstellen von graphischen Bedieneroberflächen sind in nahezu allen Versionen des Java-Laufzeitsystems verändert worden. Außerdem ist das Laufzeitsystem sehr groß geworden, und es gibt keine komplette freie Implementierung. Für diese Gründe versuche ich die Programmiersprache Java zu vermeiden, obwohl ich damit einige Experimente gemacht habe.

Dreidimensionale Fraktale
Meine Applets für JDK 1.0 und 1.1 zeigen die Mengen von Mandelbrot und Julia in drei Dimensionen an.
Wertungsprogramm für einen Schönheitswettkampf
Mit dem Programm ist Helsinki Hair Open mehrere Jahre bewertet geworden. Die Schnittstelle zur Eingabe der Punkte ist ähnlich wie Tabellenkalkulation und ist dadurch schnell zu bedienen. Die Bedieneroberfläche ist in mehreren Sprachen verfügbar. Die Bedienungsanleitung fehlt, und einige Kleinigkeiten könnten in dem Programm verbessert werden.

Eingebettete Systeme

cisp
Dieses Programm für mehrere Unix-ähnliche Systeme und Windows liest und schreibt den Flash- ja EEPROM-Speicher von Atmel AVR® Microcontrollern über die parallele oder serielle Schnittstelle per SPI. Ich schrieb das Programm, um den Benutzern meines C2N232-Adapters es zu ermöglichen, die Firmware leicht zu aktualisieren. Vorhandene Lösungen funktionierten nur entweder auf Unix-ähnlichen Systemen oder Windows und unterstützten nicht derartigen RS-232-Schnittstellen, die benötigt wurde.
Veränderungen für VDR
Ich habe ein Aufnahme- und Abspielgerät für DVB-T aus Debian GNU/Linux, VDR und den Zusatzmodulen vdr-softdevice und vdr-subtitles eingerichtet. Die wichtigsten Veränderungen, die ich gemacht habe, sind hier verfügbar.

Schauen Sie sich auch meine gemischte Hilfsprogramme, Schaltungen und Programme für alte Rechner an.