Computer Graphics Animation: Free Radicals; Return Of The O2!

Nach einem Semester voller aufregender Aufgaben und noch aufregenderen Deadlines neigt sich mittlerweile wieder alles dem Ende zu. Dieses Semester sind sogar einige schöne Dinge dabei entstanden, die visuell präsentierbar sind, unter anderem diese kleine Animation mit dem Namen „Free Radicals, Return Of The O2!

Diese Animation wurde im Rahmen der Übung zur LVA „Computer Graphics“ im Bachelorstudium der Informatik an der JKU Linz erstellt. Leider (oder zum Glück, da die Deadline dennoch existierte), musste man ein fertiges Framework verwenden, das die Übungsinhalte möglichst genau abbildet. Dieses Framework funktioniert im Normalfall sehr gut, sobald man aber etwas anderes machen will, kämpft man wie so oft einige Zeit lang, um alles so zu machen, wie es sich das Framework vorstellt. Am Ende hat dann aber dennoch alles funktioniert und diese kleine Animation konnte in enger Teamarbeit mit Simone Atzwanger entstehen.

Die Story

Viele Jahre lang waren die radikalen Sauerstoffatome gefangen. Nie konnten sie so herum fliegen wie sie es wollten. Doch nachdem sie ein Raumschiff entwickelt haben, wuchs ihr Hunger auf Freiheit plötzlich rasant an – die Maschine wurde aktiviert, der Motor hochgefahren und die Reise konnte beginnen! Auf dem Weg begegneten sie vielen Gefahren, verloren sogar knapp ihren rechten Scheinwerfer. Kurz vor dem Versagen ihres Raumschiffes schafften sie es aber dennoch, sicheres Land inmitten eines weiten Ozeans zu erreichen. Bei wolkenlosem Himmel begannen sie ihren Anflug, landeten und feierten ihre neu gewonnene Selbstbestimmung. Die Radikale sind wieder Frei!

Die Technik

Alles basiert auf dem oben genannten WebGL Framework, welches nicht verändert werden sollte. Ein Template wurde bereitgestellt. Durch die Mithilfe von Manuel Pöll konnten wir gute Typisierungsinformationen erhalten, wodurch die Entwicklung leichter wurde. Um die Animationen und die verschiedenen Szenen umzusetzen, entstanden unter anderem:

  • ein einfaches Animationsframework (Max),
  • eine Szenenverwaltung mit genauen Timings (Max),
  • viele Objekte und Texturen (sowohl manuell als auch aus Blender) (Simone) und
  • zusammengeführte Objekte mit getrennt animierbaren Teilen (das Raumschiff und die O2 Atome)(Simone)

Was hätte alles besser laufen können

Wir hätten gerne mehr gemacht und vielfältigere Effekte eingebaut! Leider ist der Zeitdruck trotzdem die hauptsächliche Limitierung, daher konnten wir nicht noch mehr dazu basteln. Wir hoffen dennoch, dass diese kurze Animation spannend ist und wünschen allen viel Spaß beim Ansehen!

Neo4J und Graphenbasierte Datenbanken mit NoSQL Cool-Aid

Neo4J sieht nach einer interessanten Lösung für Datensätze aus, die starke Verknüpfungen untereinander aufweisen. Wenn man beispielsweise komplexere Strukturen in Datenbanken speichern möchte, hätte man in der relationalen Welt eine riesige Sammlung aus Verbindungen in den Tabellen. Das würde mit vielen JOINs zu langsamen Antworten führen. Mit graphenbasierten Datenbanken werden aber intern andere Trade-Offs gefahren, womit hochgradig verbundene Datensätze besser verwaltbar werden. Dabei wird aber nie auf die Garantien hinter ACID verzichtet, was diesen graphenorientierten Weg äußerst spannend macht.

Beispiel-Graph mit Filmen und Schauspielern

Diese Ansätze könnten für eine Idee die ich derzeit verfolge spannend werden. Statt alles in Datenreihen zu speichern oder sich mühevoll eine eigene Repräsentation zu basteln, die das alles persistiert, könnte ich auf diese bereits bestehende Infrastruktur aufbauen und um die Ergebnisse eigene Engines basteln, die diese Daten direkt konsumieren. In lese also komplexe Daten, führe Pattern Matching und Normalisierungs-Algorithmen darauf aus, speichere alles in die Datenbank und gehe zum nächsten Datensatz. Am Ende kann die Datenbank dann das erste Glied zum Auslesen der Daten werden, die dann über eine Client-Anwendung wieder transformiert und präsentiert werden.

Generell kann man mit derartigen Ansätzen also auf die eine allmächtige Datenbank die alle Daten in der aktuellsten Version ohne Redundanzen in der n+1ten Normalform speichert vergessen. Stattdessen bastelt man sich Applikationen mit Flows, die über Zeit die Daten/Änderungen in die letzten Ecken des Stacks propagieren. Bei manchen Anwendungen (Suchen und großen Indices) sollte das auch kein zu großes Problem darstellen.

Zusammenfassend bin ich also schon jetzt neugierig, wie ich diese „Neuerungen“ in meine zukünftigen Entwicklungen einbauen kann und ob ich das alles gebrauchen kann. Der typische Ratschlag von „No matter what, go relational and do fancy things later!“ kann bei solchen Paradigmenwechseln glaube ich auch mal ignoriert werden. Und wenn Speicherplatz eh billig ist, kann man auch alle Daten einfach parallel in eine relationale und eine graphenbasierte Datenbank schreiben, damit im Falle eines Ausfalls die relationale Datenbank als absoluter Safespace einspringen kann und den Rest des Stacks wieder befüllt. Vermutlich gibt es massenhaft Nachteile die man erst bei der Benutzung erfährt (unvorhersehbare Query-Performance, RAM Vorraussetzungen, …), aber Offenheit zu einer kombinierten Nutzung von z.B. PostgreSQL und Neo4J könnte am Ende zu einem Vorteil führen bei Anfragen, die zu dem jeweiligen System passen.

Vielleicht kann so etwas ja einer Leserin oder einem Leser helfen! 🙂

LG,
Max

Fertigstellung der Architektur & Implementierung eines privaten Rootservers „Heimdall“ mit zentraler Benutzerverwaltung & SSO

Artikelbild ist eine Kombination aus Server-multiple.svg und Heimdall.

Nach langer Konfiguration und Research ist die Aufgabe geschafft: Der Rootserver unter root.maximaximal.com ist nun voll funktionsfähig auf seiner ersten (neuen) Ausbaustufe! Diese Version heißt nun „Heimdall“, damit er etwas mehr Persönlichkeit bekommt als nur „der Root-Server“. Dieses Mal wurden Best-Practices befolgt, Konfiguration wurde per Ansible durchgeführt und alle Benutzerdaten werden zentral in einem LDAP Verzeichnis (per OpenLDAP) gespeichert. Auf diese Weise können alle Web-Anwendungen auf den zentralen Store zugreifen und nichts muss mehr eigene Benutzerauthentifizierung betreiben. Sogar Gruppen können nun abgebildet werden, wodurch sich automatisch Zugriffsrechte in Nextcloud verwalten lassen.

Ein weiteres nettes Feature ist der Support für Instant-Messaging über den XMPP Standard. Hierdurch kann man mit allen anderen Serverteilnehmern bequem Chatten (und sogar Bilder oder Dateien übertragen), ohne die Metadaten an Dritte weitergeben zu müssen. Durch die eigene Infrastruktur ist die Performance des Netzwerks auch hinreichend gut, dass man mit größeren Diensten wie beispielsweise WhatsApp im kleinen Kreis durchaus konkurrieren kann. Durch die Federation-Features von XMPP kann man sogar mit anderen Leuten auf anderen Servern chatten, wodurch man nicht mehr auf den einzelnen Server gebunden ist. Es gibt auch noch massenhaft Erweiterungen für größere Softwarepakete wie beispielsweise Jenkins (Jabber Plugin), welche Updates über XMPP verschicken können, wodurch Neuerungen ohne ständige E-Mail Flut übermittelt werden können.

Die größte Neuerung ist allerdings, dass nun durch die verbesserte (und formalisierte) Konfiguration des Servers neue Funktionen ohne viel Schwierigkeiten hinzugebaut werden können. Es ist nun jeder Dienst genauestens dokumentiert und Neuerungen lassen sich auf einfache Weise zur Konfiguration hinzu bauen. Egal ob Wikis, andere Websites, Bugtracking oder irgendwelche RSS-Reader – alles kann man jetzt leicht anbauen. Hierdurch wird der Root-Server besser verwendet, was den Kostenpunkt rechtfertigt.

Alles in Allem bin ich sehr zufrieden mit diesen Änderungen und werde auf dieser Version nun weiter aufbauen. Es hat einige Zeit gedauert bis das jetzt gemacht wurde, da die vollkommene Rekonfiguration natürlich viel Aufwand mit sich gebracht hat. Besonders die alte Installation zu löschen war eine Überwindung, aber am Ende konnten alle Sicherungen erfolgreich gemacht werden.

Viel Glück in euren Server-Setups und viel Spaß mit den Setups von anderen, damit ihr euch das nicht antun müsst! Im Idealfall ist das ganze Ding Setup-and-forget, aber ob das wirklich so gut funktioniert wird nur die Zeit zeigen.

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