Softwareentwicklung

Technologien

In meiner Jugend beschäftigte ich mich mit vielen Programmiersprachen, chronologisch etwa Delphi, C#, C++, PHP, Ruby, Python, Prolog, Common Lisp und CLOS, später im Studium dann Java, C, JavaScript, VHDL, Groovy, Shell, Smalltalk (Squeak, VA Smalltalk). Squeak/Smalltalk ist meine Leidenschaft, im Jahre 2023 Java und C mein Brot-und-Butter-Geschäft, und Lisp hat einen besonderen Platz in meinem Herzen (und Anwendung gefunden in der absurden Kombination eines Skatspiels mit OpenGL-Grafik, Multiplayer über XMPP und eben Common Lisp…). Neben den Sprachen hat mich mein Weg an vielen Werkzeugen vorbeigeführt, wie Spring Boot, Eclipse4 RCP, Jenkins, Atlassian Bamboo, AngularJS (1), CMake, RPython, SDL, Context Oriented Programming, OpenGL, XML3D, Django, Altova MapForce, CORBA (JacORB), IBM Db2 und, last but not least, natürlich Git.

Was mir wichtig ist

…dass man Code, den man heute schreibt, auch in Zukunft noch nachvollziehen kann.

…dass Ideen und Spezifikationen auf den Punkt formuliert werden. Niemand will erst drei lange Absätze lesen, um eine Kerninformation zu bekommen, oder sich die zweite Hälfte von dem, was die Autor*innen sich gedacht haben könnten, selbst denken zu müssen.

…dass alle Beteiligten eines Projekts respektvoll miteinander umgehen, aber auch Kritik annehmen können, um die gemeinsame Arbeit zu verbessern.

…das Mandat zu haben, sich Zeit zum Aufräumen zu nehmen.

…dass Entwickler geeignete Werkzeuge benutzen können, die Ihnen das Leben leichter (und die Arbeit schneller, und somit am Ende auch günstiger) machen. Die Infrastruktur sollte den Prozess unterstützen und ihm nicht im Wege stehen.

Einige Projekte aus dem Studium

Squot – Squeak Object Tracker

Eine Versionsverwaltung mit Git Backend, die es erlauben soll beliebige Squeak-Objekte zu versionieren. Traditionell beschränken sich die Möglichkeiten zum Austausch zwischen Smalltalk-Images weitestgehend auf den Smalltalk-Quellcode (gilt zum Beispiel für File-Outs, Monticello und ENVY/Developer) oder es bedurfte eigener Anpassungen, um auch andere Artefakte in die Versionsverwaltung aufzunehmen. Dabei ist das direkte Arbeiten mit Objekten, statt nur mit dem darunterliegenden Code, in einer Smalltalk-Umgebung einer der großen Vorteile gegenüber anderen Systemen. Um Nicht-Code-Objekte (z. B. UI-Prototypen) zu versionieren, musste man bisher Workarounds bauen. Zum Beispiel musste man Dateien außerhalb von Squeak über anderen Systeme (wie Git oder Dropbox) teilen oder die Objekte/Dateien irgendwie in Smalltalk-Methoden abbilden/serialisieren (um sie dann als Code zu versionieren).

Ein weiteres Ziel von Squot ist, die Verwendung von Git-Repositories mit Squeak zu erleichtern.

ContextJS

ContextJS ist eine Implementierung von Kontextorientiertem Programmieren (COP) für JavaScript. Im Seminar „Web-based development environments“ haben wir ContextJS aus dem LivelyKernel Projekt herausgelöst, sodass man ContextJS auch ohne Abhängigkeit zu Lively in seinen Projekten verwenden kann. Dabei haben wir den Code auch auf ECMAScript 2015 aktualisiert.

RSqueakVM

Die RSqueakVM ist eine in RPython geschriebene virtuelle Maschine zum Ausführen von Squeak Object Memories (Images). RPython ist ein reduziertes Python, in dem auch die PyPy VM geschrieben ist. Das Toolset kann mit nur wenig Nachhilfe automatisch einen Tracing JIT-Compiler in in RPython geschriebene Interpreter einbauen und so große Geschwindigkeitsvorteile gegenüber Interpretern ohne JIT-Compiler erreichen. Im Seminar „Virtuelle Maschinen und Ausführungsumgebungen“ haben wir den „Objects as Methods“ Aufruf in RSqueakVM implementiert, welcher von der COP-Implementierung für Squeak benutzt wird. Im Masterprojekt haben wir die RSqueakVM für das neue Speicherformat „Spur“ der OpenSmalltalk-VM tauglich gemacht, sodass die RSqueakVM auch aktuelle Squeak-Images laden kann. Später habe ich damit begonnen, den Rendering-Code der RSqueakVM von SDL1 auf SDL2 umzustellen.

Multilevel Debugger

Für das Seminar „Programmiersprachen: Werkzeuge, Konzepte, Umgebungen“ haben wir einen Debugger gebaut, der einerseits über Sprachgrenzen (Smalltalk / Qoppa – ein Scheme Dialekt) hinweg Code steppen kann und andererseits beim Steppen innerhalb einer Sprache (Smalltalk) erlaubt, auf der aktuellen Abstraktionsebene zu bleiben (indem der Code anderer Schichten oder Pakete übersprungen wird). Nach dem Seminar wurde das Projekt von Bastian Kruck weitergeführt und stark ausgebaut. Mittlerweile kann man damit parallel den Smalltalk VM Code, den vom JIT-Compiler generierten Code und die Fallback-Smalltalk-Implementierung von Primitiven inspizieren und noch einiges mehr, was beim Entwickeln und Verstehen von virtuellen Maschinen helfen soll.

Alte Hobbyprojekte

Startup Ace

Kann den Windows-Autostart bearbeiten (getestet nur auf Windows XP) und kann einzelne Programme beim Hochfahren zeitverzögert starten lassen. Im Zeitalter von SSDs und Multicore-Prozessoren ist das nicht mehr so sinnvoll, aber früher konnte man so dafür sorgen, dass einige wichtige Programme etwas schneller verfügbar wurden.
Binaries, Source Code

Sportreminder

Lässt regelmäßig einen einstellbaren Text in sich ständig ändernden Farben den Bildschirm herunterwandern. Der Text lässt sich bis zum nächsten Erscheinen vertreiben, indem man im System Tray Icon auf „Done“ klickt. Das nervt natürlich, wie beabsichtigt. Screenshots: 1, 2, 3. Eine professionellere Alternative ist zum Beispiel Toggls Pomodoro Timer und manche Desktop UIs bringen eine Sperrfunktion mit, die zur Einhaltung regelmäßiger Pausen zwingt. Binaries, Source Code

SysIcon

Hiermit kann man viele Windows-Systemsymbole (Icons) austauschen. Nachdem ich seit der Entwicklung von SysIcon für einige Jahre auf Linux umgestiegen war, habe ich das Programm aber nicht mehr weiterentwickelt und den Anschluss an neuere Windows-Versionen verloren. Da es auch andere Programme gibt, die ähnliches leisten, sehe ich derzeit keinen Grund, das Programm auf den neusten Stand zu bringen.