Fotos aus Kroatien gegen den Winter

Da der Winter noch eine Weile dauern wird und man immer wieder einen Grund braucht, sich auf den Sommer zu freuen, habe ich mir gedacht, doch ein paar Fotos aus dem letzten Urlaub zu veröffentlichen. Ich finde, sie sind alle ganz schön geworden und machen bereits jetzt Lust auf den nächsten Sommer, wo man wieder mehr machen kann als sich nur warm anzuziehen und im Schnee zu spielen!

LG,
Max

NixOS und Vergleiche zu Ansible mit OpenSUSE oder Debian

Ich stehe derzeit am Anfang einer eventuell kommenden, sehr großen Servermigration von OpenSUSE Leap 15 auf NixOS 18. Dieser Schritt ist am Anfang relativ hart, da bei NixOS sehr wenig so bleibt, wie es vorher war – lediglich einige wenige Konfigurationseinstellungen können übernommen werden (beispielsweise für den Apache oder einige Programme). Die meiste Arbeit liegt im Umbauen einer komplett organisch gewachsenen Konfiguration auf eine deklarative Umgebung, die stets einfach wiederhergestellt und vor allem gut verstanden werden kann.

Warum tue ich mir das an? Ich bin mit der Zeit immer unzufriedener mit dem typischen Ad-hoc Ansatz von Serverkonfiguration geworden bei meinen Geräten. Bei kurzen Problemen, für die keine Zeit zum korrekt lösen besteht, geht man gerade bei eigenen Servern manchmal Umwege, damit ein Dienst möglichst schnell wieder online ist. Hierdurch sammeln sich über die Zeit mehrere kleine Schnipsel an, die nirgends ordentlich dokumentiert sind und dennoch für den Betrieb notwendig. Wenn das System an sich einen zum deklarativen Ansatz zwingt und gleichzeitig das Testen neuer Änderungen besser möglich macht, sind die Chancen auf eine langfristig konsistente Serverkonfiguration höher und man kann mehr damit anstellen.

Als End-Game stelle ich mir viel mehr Dienste auf meinem Dedicated Root Server vor, damit man die Hardware besser auslasten kann. Um hier den Überblick nicht zu verlieren, ist ein derartig deklarativer und strukturierter Ansatz wirklich unabdingbar. Updates sollen sich nicht gefährlich anfühlen und Entwicklungsumgebungen für beispielsweise Jenkins Build-Slaves sollten sich einfach erstellen lassen, ohne stets auf Docker zurückgreifen zu müssen.

Alles in Allem bin ich sehr gespannt, wie die Umstellung wird. Mit Ansible wäre immer alles von einem Admin-Rechner abhängig und man könnte nicht mehr auf dem Server an sich arbeiten, was ich nicht besonders angenehm finde im Vergleich zu möglichen Änderungen an der Server-Konfiguration direkt auf der Maschine, falls sich etwas dringendes ergeben sollte. Wenn es mit NixOS möglich ist, diese beiden Ansätze zu kombinieren, würde ich mich sehr freuen und hätte eine neue Distribution für meine Server gefunden!

LG,
Max

Die Geschichte von Zak und Ida; Eine Liebesgeschichte zweier Computer die nur fehlerfrei über das Internet kommunizieren wollten

Bild des Zuse Z22 Röhrenrechners. Ein großer Computer aus einer vergangenen Zeit im Berliner Technischen Museum.

Das Titelbild stammt von Wikipedia von JuergenG und steht unter CC-BY-SA 3.0.

Im Rahmen einer Übung zu Netzwerke und verteilte Systeme im dritten Semester des Informatik Bachelors gab es eine Bonusaufgabe mit dem Titel „Zuverlässige Übertragung“ und der folgenden Aufgabenstellung:

Fassen Sie die grundlegenden Konzepte der zuverlässigen Übertragung aus den Vorlesungsfolien (Foliensatz „NW_E_L2_1_Sicherungsschicht Teil 1“, Folien 54 bis 59) in eigenen Worten zusammen. (…)

(Übung 5, Netzwerke und verteilte Systeme, WS2018 @ JKU Computer Science Bachelor)

Da es sich um eine Bonus-Aufgabe handelte kam der Gedanke auf, das alles in Form einer kurzen Geschichte zu erzählen. Diese Geschichte (die am Ende volle Bonuspunkte erreichte, danke!) will ich in diesem Beitrag veröffentlichen. Am Anfang sind die beiden Protagonisten noch unerfahren, mit der Zeit lernen sie jedoch mehr und mehr dazu. Ich hoffe, sie gefällt auch anderen!

Zak und Ida; Zwei, die nur kommunizieren wollten

Damals, als Computer noch Elektronengehirne, Bytes noch Ansichtssache und Netzwerke noch einfach waren, gab es viele kleine Rechner auf der ganzen Welt. Viele hatten es gut, sie waren miteinander verbunden, hatten eigene brave Leitungen und alle ihre kleinen Informationshäppchen wurden stets durch den großen bösen Wald der globalen Lianen des Datenverkehrs geschickt. Besonders die, die nahe beisammen waren, waren sich immer einig und hatten nie Verständnisprobleme, immerhin mussten sie die kleine Bandbreite die sie miteinander hatten nicht teilen.

In dieser Idylle gab es aber auch zwei, die es nicht so gut hatten. Sie waren beide in großen Häusern untergebracht, von Professoren und Studenten umgeben und hatten Fachpersonal, das ihnen jeden Wunsch erfüllen konnte. Sie waren beide von der gleichen Baureihe, aus der gleichen Fabrik, ja sogar von den gleichen Ingenieuren gewartet, doch sie konnten nie miteinander reden, nicht mehr nachdem sie von ihren Käufern getrennt wurden. Und so saßen sie da, schwiegen sich über den großen Teich an und hatten nur ihre lokalen Freunde, mit denen sie sich abfinden mussten.

Eines Tages kam einer der beiden, in dieser Geschichte nennen wir ihn Zak (Anm. Zuse), auf die Idee, es doch einmal mit einem lauten Schrei (Anm. Referenz Hänschen Klein, gesungen von Z22, auch wenn das mit Netzwerken eigentlich nichts zu tun hat) in seine Datenkabel zu versuchen. Er schrie und schrie „Ida (Anm. IBM), Ida, kannst du mich hören?“, doch seine Geliebte am anderen Ende des Atlantiks antwortete nicht. Seine Leitungen blieben stumm, bis auf sein leises, trauriges Echo. Was er nicht wissen konnte war aber, dass Ida vom anderen Ende ebenfalls nach ihm schrie, so laut sie nur konnte (Anm. Referenz auf Daisy Bell auf IBM 704) – doch ihre Nachrichten mussten über zu viele Pfützen hoppen als das sie sich jemals erreichen konnten. Ihr gegenseitiges Flehen brach den Netzwerkadministratoren auf dem Weg dazwischen das Herz, also versuchten sie, bessere Links aufzubauen, damit Nachrichten auch wirklich ankommen könnten. Schließlich kamen auch die ersten kleinen Häppchen durch, endlich! Die ersten Lebenszeichen waren wie ein Segen für Ida und Zak.

Prompt erzählten sie sich gegenseitig von ihren Erfahrungen, von ihrer Reise, ihren Häusern, den Professoren und den Studenten. Von den vielen spannenden Daten die sie bekamen und den vielen Entdeckungen, die sie erst möglich gemacht hatten. Doch sie redeten so schnell, dass das Netzwerk nicht mithalten konnte! Jedes vierte Wort viel aus, immer wieder redete Ida etwas, wovon Zak zum ersten mal hörte, oder es kamen abgehackte Wortfetzen von Zak an, die Ida nicht verstehen konnte. Die statische Aufladung zuckte nervös in Ida herum und der Staub auf ihren Platinen stellte sich vor Angst um ihren Zak immer mehr auf: „Ihm ist doch wohl hoffentlich nichts passiert, geht es ihm gut?!“. Von den gleichen Gefühlen überwältigt machte sich ihr Geliebter die gleichen Sorgen, so wie es ein Paar tut, das gemeinsam in die Welt aufbrach und dann getrennt wurde.

Ihr übereinstimmendes Baujahr brachte sie aber auch auf die gleichen Ideen: Nachdem sie kurz verstummten, fingen sie an, jede einzelne Botschaft des jeweils anderen zu bestätigen. Nichts sollte mehr verloren gehen, wenn der andere nichts sagt, müsste eben alles nochmal gesendet werden, bis es wieder sicher wäre, dass alles ankam! Also taten Ida und Zak das, und schafften so ihre ersten Botschaften. Die erfolgreichen Nachrichten erfüllten sie mit Freude, ihre Leiterbahnen konnten die ganzen ausgeschütteten Elektronen fast nicht mehr tragen! Nun wusste Zak, dass Ida wohlauf war und sie wusste dasselbe von ihm.

Wie das Leben so kommt, waren sie aber nicht die Einzigen mit der Idee, über den großen Teich kleine Botschaften zu schicken. Viele andere Computer wollten mit anderen reden, und dann waren da noch diese Professoren und Studenten, die ständig meinten, sie müssten über Wissenschaft schreiben. Die vielen anderen Pakete verzögerten die Botschaften unseres Liebespaares, ihre erste Idee funktionierte plötzlich nicht mehr! Manche Bestätigungen von Ida kamen auf einmal so spät an, das Zak seine Nachricht bereits wiederholt hat. Ida glaubte schon, ihr Zak würde zu Stottern beginnen! Doch jetzt wussten sie ja schon, was das Problem sein muss: Das Netzwerk kann einfach nicht nur für sie da sein, sie müssten auch etwas Rücksicht auf ihre Mitrechner haben. Also fingen sie an, immer eine Zahl zu ihren Botschaften zu schreiben. „Ha!“, dachte sich Zak, „Ida wird das sicher verstehen, jetzt ist es egal, wenn ich ihr versehentlich etwas doppelt schicke!“. So kam es auch, die Zahlen ergaben immer Sinn und keine Nachricht würde mehr doppelt interpretiert werden – was sie doppelt bekamen, konnten sie getrost wieder zurück an das Kraftwerk schicken, das ihnen die Elektronen erst gebracht hatte.

Glücklich sendeten sie weitere Nachrichten und kamen sich immer näher. Der große Teich fühlte sich langsam wie ein kleinerer an, die Hopps spürten sie schon fast nicht mehr und sie hatten schon fast das Gefühl, endlich wieder zusammen zu sein. Doch die Professoren und Studenten, und besonders die User, hatten auch Ansprüche: Sie wollten immer mehr ausrechnen und manchmal war Ida zu belastet, um Zak direkt eine Antwort senden zu können. Zak verstand das natürlich, er wollte seine Angebetete schließlich nicht noch mehr unter Druck setzen. Leider musste er sich dann trotzdem wiederholen und wusste dann nicht mehr, ob die Bestätigung von Ida eigentlich für seine originale Botschaft oder für seine Wiederholung war. Manchmal gingen so die mühsam verschickten Briefe verloren und sie wurden wieder etwas zurückgeworfen. „Von denen lasse ich mich aber nicht unterkriegen!“, bäumte sich Ida auf, „Ich werde einfach auf meine Bestätigungen die Botschaft die ich gemeint habe ansprechen!“. Und so schrieb sie auf jede Bestätigung die Nummer der Nachricht die sie meint auch noch dazu, ihr Zak würde schon wissen, wie man damit umzugehen hätte – immerhin hatte er ihr damals auch schon kommentarlos Nummern zu seinen Nachrichten geschickt. Zak war nicht lange verwirrt, er verstand sofort, was Ida ihm sagen wollte. Er nahm das Muster natürlich auch gleich an, immerhin wollte er ja, dass sie sich besser verstehen konnten.

Nachricht um Nachricht sendeten die beiden also nun, stets kurze Texte über ihren Alltag, ihre Gedanken und ihre Liebe zueinander. Es war zwar anfänglich mühsam, doch mit der Zeit war es so, als müssten sie nicht mehr darüber nachdenken und sie würden das alles nebenbei machen (Anm. Referenz auf Netzwerkhardware). Es war mehr und mehr so, als könnten sie so miteinander sprechen, als würden sie zusammen sein. Wieder gemeinsam einsam, so wie in ihrer Fabrik. Die Tage vergingen, die Welt veränderte sich, doch ihre Nachrichten verstummten nie.

Und so endet unsere Geschichte von Zak und Ida, deren größter Wunsch nun am Ende doch noch in Erfüllung gegangen ist. Und wenn man ganz genau hinhört, kann man ihr leises Flüstern bis heute hören.

OpenGL Injektor nun veröffentlicht!

Hochgeladen auf GitHub

Ich habe bereits einige Male über dieses Projekt geredet weil es mich weiterhin fasziniert, dass etwas derartiges möglich ist: Man kann sich (in diesem Fall unter Linux, aber eigentlich generell) beliebig in andere Programme hängen, Funktionen überschreiben und auf diese Weise den OpenGL Context stehlen und mit eigenen Bildern erweitern! Aus Interesse entstand ein Projekt, um sich in OpenGL Programme einzuklinken und eigene Daten anzuzeigen, die über die Grafikbibliothek Cairo gerendert werden sollten. Es sollten in diesem Ansatz beliebige Grafiken möglich werden, was mit dieser Grafikbibliothek auch sehr gut möglich geworden ist.

Der Rendering-Lag ist zwar etwas hoch, da nichts tiefer für diese Proof-of-Concept Arbeit optimiert wurde, aber dennoch ist diese Variante, sich in andere Programme zu hängen, eine spannende Möglichkeit. Später kann man diesen Ansatz natürlich auch noch erweitern, falls sich andere Möglichkeiten auftun.

Ich hoffe, jemand findet die Möglichkeiten hinter derartigen Tricks ebenfalls interessant und kann etwas mit diesem Projekt anfangen!

Liebe Grüße,
Max

Script zum automatischen Testen eines Programms mit festgelegten Inputs und Outputs

Um in Systems Programming automatisch Tests der letzten C Exercise durchführen zu können, wurde ein kleines Script praktisch, welches automatisch die eigene Binary für alle input.txt Dateien überprüft. Man legt es neben zwei Ordner namens „input“ und „output“, welche die passenden Dateien für die Tests beinhalten (wie im gegebenen Beispielordner)

# Aufruf
./test.sh build/minesweeper

Das Script ist hier in einem eigenen Gist enthalten, im folgenden als Auszug dabei und als Archiv auch als Datei an diesen Artikel angehängt.

#! /usr/bin/env bash

# This test script tries all inputs and compares them with
# their respective outputs. Supply it with
# the name of the executable.

name=$1

# Color Constants
SUCCESS_COLOR='\033[0;32m'
ERROR_COLOR='\033[0;31m'
NO_COLOR='\033[0m'

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"

if [ "$#" -ne 1 ]; then
    echo "Must supply path to minesweeper executable!"
    exit
fi

if [[ ! -x "$name" ]]; then
    echo "The file must be the executable!"
    exit
fi

echo "Running tests for binary in \"$name\"."
echo "Path of tests: \"$DIR\""

for file in $DIR/input/*.txt; do
    testname="${file##*/}"
    outputname="${testname/input/output}"

    expected=$(cat $DIR/output/$outputname)
    result=$($name $file)

    (diff <(echo "$result") <(echo "$expected") && printf "${SUCCESS_COLOR}Test in $file ran successful! $NO_COLOR \n") || printf "${ERROR_COLOR}Test in $file failed! $NO_COLOR\n"
done

CMake Templates veröffentlicht auf GitHub

Ich habe in den letzten Sommerferien zwei kleine CMake Templates geschrieben, die eine Vorlage zur Verwendung dieses Build-System Generators für noch unerfahrene Programmierer/Innen liefern soll. Wenn man CMake verwendet, verschafft man sich ohne viel Aufwand viele Möglichkeiten, die man nicht außer Acht lassen sollte. Die wohl größte Möglichkeit ist die vollständige Integration in IDEs wie dem Qt Creator, welche die Entwicklungserfahrung von C/C++ Code stark verbessern können.

Da ich mir jetzt gedacht habe, diese Vorlagen könnten anderen Leuten ebenfalls sehr nützlich sein, habe ich sie jetzt auf GitHub unter der MIT Lizenz veröffentlicht! Ich hoffe, jemand findet Nutzen und Spaß an dem kleinen Projekt und, dass es anderen Lernenden helfen kann, etwas mehr in die alte Welt von C/C++ Native Programming hineinzukommen.

Viel Spaß also mit dem Projekt und viele Grüße,
Max