Advent of Code 2024

Tag 15: Lagerprobleme

Am Tag 15 des Adventskalenders für Programmierer bestand die Aufgabe darin, das Verhalten eines Amok-laufenden Lagerroboters zu simulieren. Interessant waren vor Allem die Positionen der Kisten im Lager, die der Roboter ständig verschiebt, sofern sie nicht durch eine Wand oder eine Säule abgeblockt werden. Dazu war eine Abfolge von 20000 Roboterbewegungen vorgegeben.

Während im Teil 1 des Rätsels die Kisten genau ein Feld des Lagers belegen, besitzen sie im Teil 2 die doppelte Breite, so dass sie beim Verschieben auch versetzt mehrere andere Kisten mitnehmen können. Leider war meine Lösung des 1. Teils für den 2. Teil völlig unbrauchbar, so dass ein neuer Ansatz nötig wurde:

Verschiebungen laufen jetzt in zwei Phasen ab. In der ersten Phase wird rekursiv überprüft, ob die Verschiebung und die sich anschließenden Verschiebungen überhaupt möglich sind, ohne an einer Säule oder einer Wand hängenzubleiben.

def is_movable(self, pos, dx, dy):
if pos not in self.map:
return True
if self.map[pos] == "#": # Wand
return False
char = self.map[pos]
pos = (pos[0]+dx, pos[1]+dy)
if dy == 0 or char == "O": # Horizontale Verschiebung oder Teil 1
return self.is_movable(pos, dx, dy)
else:
if char == "[":
peer = (pos[0]+1, pos[1])
else:
peer = (pos[0]-1, pos[1])
return self.is_movable(pos, dx, dy) and self.is_movable(peer, dx, dy)

Nur bei positivem Ausgang der Prüfung wird die eigentliche Verschiebung wiederum rekursiv angestoßen. Die Laufzeiten für einen Testfall (700 Bewegungen) und das eigentliche Rätsel sind akzeptabel.

TEST for DAY 15
Part 1: 10092 (0.0002s)
Part 2: 9021 (0.0002s)
SOLUTION for DAY 15
Part 1: 1398947 (0.0049s)
Part 2: 1397393 (0.0062s)

Advent of Code 2024

Tag 12 – Gartengruppen

Auch dieses Jahr macht der Adventskalender für Programmierer Spaß. Ganz ohne Verknüpfung mit einer Lehrveranstaltung oder einem Fakultäts-Leaderboard ist es diesmal ganz entspannt.

Am Tag 12 geht es darum, den Elfen beim Einzäunen von Beeten zu helfen. Ein Beet enthält immer genau eine Pflanzensorte. Die Lage der Pflanzen ist in Form eines großen Buchstabensalats gegeben – 140 Zeilen mit jeweils 140 Zeichen. Jeder Buchstabe steht für eine Pflanzensorte. Die erste Herausforderung besteht darin, effizient die Beete zu identifizieren.

Eine schicke Möglichkeit ist es, jede einzelne Pflanze zunächst als eigenes Beet zu sehen und anschließend benachbarte Pflanzen gleicher Sorte zu vereinen. Mit einem UNION-FIND-Algorithmus lässt sich beides jeweils in linearer Zeit erledigen.

RoboCup-2D-Simulation

RoboCup ist ein seit Mitte der 1990er-Jahren weltweit stattfindendes Turnier, in welchem Teams ihre selbst programmierten „Agents“ in Form von Fußball-Teams gegen andere Teams antreten lassen – wie echter Fußball halt, nur virtuell!

Hierbei gibt es verschiedene Disziplinen – 2D, 3D und die Disziplin unter Einsatz mechatronischer Roboter auf dem „echten“ grünen Feld.

Die 2D- und 3D-Simulationen sind dabei komplett virtuell. Doch wozu das Ganze? Hiermit möchte man auf einladende Art und Weise einen stetigen Fortschritt im Bereich der künstlichen Intelligenz sowie der Robotik erzielen mit dem Fußball als Anziehungs-Katalysator!

Fußball-Manager für Roboter

In unserem Falle haben wir uns (aus Gründen der (relativen) Einfachheit!) der 2D-Simulation angenommen.

Hierzu dienen der RoboCup-Simulation-Server und der Monitor als fundamentale Größen im Projekt. Der Server ist für die Kommunikation zwischen zwei Clients, auf denen die einzelnen Programme der Agents ablaufen, zuständig. Der Monitor hingegen dient als visuelles Fenster um solch ein Match bzw. Simulation auch betrachten zu können.

Der Server unterstützt dabei eine Reihe von Befehlen für die einzelnen Spieler und darüber hinaus. Die grundlegende Art dieser Befehle wird in einer Art Handbuch festgehalten, welches es in sich hat!

Auf den ersten Blick scheint es trivial zu klingen, zumindest zu Beginn, doch die Realität zeigt, dass das Projekt schwieriger ist, als man zuerst annehmen würde. Angefangen von der Recherche, z. B. wie die Tools stabil laufen (vorneweg: am besten per VM unter Ubuntu!) bis hin zu den sich anzueignenden technischen Skills.

Hier kommen dabei eine Menge von Teilbereichen zur Sprache: von mathematischen Winkelberechnungen bis hin zu komplexen Transformationen, welche nötig sind für bspw. die exakte Positionsbestimmung (Stichwort: Triangulation), das Erlernen einer neuen Programmiersprache (in unserem Falle war dies Python, jedoch ist die Nutzung von C++ oder auch Java ebenso möglich) sowie dem Eintauchen in der Welt der komplexen Software-Entwicklung abseits von „Hello World“ und „Erstelle ein Programm zur Berechnung von 2 Werten“.

Eine Projektarbeit bietet die große Chance einen Großteil der erworbenen Kenntnisse vom Studium bis dahin einzusetzen, darüber hinaus den eigenen Horizont zu erweitern und Neues zu erlernen. So haben wir z.B. unseren Fortschritt mittels Git aufgezeichnet.

Git-Repository
Hauptseite des EFI-Git Dienstes

Da (bewegte) Bilder mehr als 1000 Worte sprechen, hier zum Schluss ein kleiner Ausschnitt eines Matches!

Ein typisches RoboCup-2D Match

Advent Of Code 2022

Heute beginnt wieder der jährliche Adventskalender für Software-Entwickler, der „Advent Of Code“, bei dem täglich bis Weihnachten kleine Programmierrätsel gestellt werden. Für EFI ist ein privates „Leaderboard“ angelegt, auf dem Sie in den Wettbewerb mit anderen EFI-Studierenden, Mitarbeitenden und Lehrenden treten können. Den Beitrittscode finden Sie in der gestern (30.11.) an alle EFI-Angehörigen versendeten Mail bzw. auf Anfrage. Viel Spaß beim Adventsrätseln!

Endstand
Endstand nach Weihnachten

Scrum-Workshop „SpaceRobots“

Am 26.11.22 fand in Kooperation mit Capgemini ein ganztägiger Scrum-Workshop statt, in dem Studierenden des Studiengangs Media Engineering im Rahmen der Veranstaltung „Programmieren III“ das agile Vorgehensmodell „Scrum“ näher gebracht wurde.

11 Teams, die sich crossfunktional aus 4-5 Entwicklern und Designern zusammensetzten, entwickelten in 3 Sprints jeweils einen „SpaceRobot“, der abschließend in einem Turnier gegen die anderen Robots antreten musste. Zusätzliche Punkte gab es für ein gutes visuelles Design des Robots und eine ansprechende Darstellung der Teamleistung in einem Blogbeitrag.

Turnier
Turnier

Das Team „Astroboy“ beschreibt seinen Leidensweg sehr anschaulich. Mit Zeitnot hatte das Team „Bloody Mary“ zu kämpfen. Recht vollständig ist der Robot von Team „TschuTschu“ implementiert. Für das Team „Doomkitty“ ist Schießen zweitrangig – symphatisch aber nicht zielführend.

Intensive Arbeit während der Sprints

Sieger wurde am Ende der Robot „Red Reaper“ in einem packenden Finale gegen den Robot von „MockinBird“. Spaß hatten aber definitiv alle Teilnehmer.

Herzlichen Dank an das Team von Capgemini für die Durchführung und das Sponsoring des Scrum-Workshops.

Red Reaper

Uns hat es super viel Spaß gemacht und sind immer noch sehr von den Ergebnissen begeistert.

Tatjana Friedrich, Capgemini
Frühere Studentin im Studiengang Media Engineering

Von CI/CD Pipelines zu DevOps

Dr. Hongguang Yang, Lead Consultant beim Beratungshaus msg Systems AG, erläutert in einem Vortrag am 9.11.2022, 11:30 Uhr, im Raum BB.111, wie mithilfe von Containern und der Cloud die Entwicklung und der Betrieb von Software unterstützt werden kann.

Der Vortrag findet im Rahmen der Vorlesung „Software Engineering“ statt, ist aber hochschulöffentlich, d.h. Besucher sind willkommen.

Deepfakes

Im Rahmen einer Projektarbeit wurden die Tools und die Technologie rund um Deepfake-Videos, also dem Ersetzen einer Person durch eine Andere innerhalb einer Filmaufnahme bzw. eines Live-Videos, analysiert und angewendet.

Werbevideo für das Deepfake-Modell Heinz 2.0

Motivation

Ein Rapbattle zwischen Donald Trump und Joe Biden, widersprüchliche Weihnachtsgrüße der Queen oder Donald Trump, der Belgien rät aus dem Pariser Klimaabkommen auszutreten – alles Situationen, die für uns nur schwer vorstellbar sind. Warum sollten berühmte Persönlichkeiten, wie Politiker oder Hollywood-Stars, solche Aussagen überhaupt treffen und das mögliche Ende ihre Karriere heraufbeschwören? Die Antwort darauf lässt sich ganz einfach sagen: gar nicht. Es handelt sich um gefälschte Medieninhalte, sogenannte DeepFakes. In einer Welt voller Fake News ist es für viele Menschen allerdings zum Alltag geworden, kritische Nachrichten anzuzweifeln und diese zu hinterfragen. Aber was macht es mit uns, auf einmal eine Person in unserem direkten Umfeld in solch einer Situation zu finden? Auf genau diesen Effekt zielen wir mit unserem Projekt ab. Mit Heinz 2.0 kann jede beliebige Person, mit Hilfe von Deepfakes, zu dem in den Ruhestand eingetretenen Professor Heinz Brünig werden.

Bildschirm mit Webcam, Website Heinz 2.0 ist sichtbar, daneben eine große Lampe
Aufbau während der Projektpräsentation

DeepFaceLive

DeepFaceLive ist eine Erweiterung von DeepFaceLab. Die Arbeit mit Deepfacelab war unser Hauptfokus aus der ersten Projekthälfte, denn diese Software macht die Erstellung von hochwertigen Deepfake-Videos möglich.  DFLive hingegen ermöglicht einen Gesichter Tausch (auch FaceSwap genannt), welcher Live vor einer Webcam stattfindet, also in Echtzeit. Normalerweise werden Deepfake-Videos mit dem Ziel trainiert ein bestimmtes Gesicht mit einem weiteren bestimmten Gesicht zu tauschen. Die daraus entstehenden Deepfake-Modelle sind aufeinander abgestimmt und eine Wiederverwendung für andere Gesichter ist nicht möglich. Dieser Vorgang muss dann auch noch für jedes weitere Deepfake Video oder Modell wiederholt werden. Wie können wir also dieses Konzept abändern, um Modelle zu erstellen welche für mehrere Gesichter anwendbar sind? Wie kann man also die trainierten Modelle für den Live-Betrieb und für weitere Deepfake-Videos wieder verwenden?

Der große Unterschied bei DeepFaceLive besteht darin, dass sogenannte RTM Modelle (Ready-To-Merge Modelle) zum Einsatz kommen. Im Zuge der Projektarbeit Heinz 2.0 wurde auf die Erstellung eines solchen Modells eingegangen um den in Ruhestand gehenden Professor Heinz Brünig für das Hochschulleben zu erhalten.

Mehrere Gesichter denen mithilfe eines Deepfakes die Gesichtszüge gegen die von Heinz Brünig ausgetauscht wurden.
Mehrere Beispiele von Heinz 2.0 als Deepfake

Website

https://heinz-2-0.de/

Die verbreitetste Nutzung von Deepfakes ist es allerdings nicht, Professoren aus der Rente zu ziehen oder falsche Nachrichten im Internet zu verbreiten. Deepfakes finden ihre Hauptverwendung heute beim Austausch von Akteuren in Pornos. Dementsprechend waren auf der Website, von der wir unsere Informationen gezogen haben, neben detailreichen Tutorials und Guides zur Deepfake Erstellung auch pornografische Inhalte. Um dem allerdings ein Ende zu setzen und dem schädlichen Image von Deepfakes entgegenzutreten, entschieden wir uns, eine jugendfreie Website zum Thema Deepfakes zu erstellen: Die Internetseite Heinz 2.0, auf der Tutorials, Tipps und Hintergründe zu unserem Projekt zu finden sind.

Der Kommissar im Internet

Wie sieht Polizeiarbeit im Umfeld der IT-Sicherheit aus? Welche Herausforderungen ergeben sich für einen Kommissar durch die fortschreitende Digitalisierung aller Lebensbereiche?

Antworten auf diese Fragen verspricht der Vortrag von Kommissar Oliver Weidel, der als studierter Wirtschaftsinformatiker bei der bayerischen Polizei mit dem Schwerpunkt IT-Kriminalität tätig ist.

Datum: 17. Dezember 2020
Zeit: 14:00 Uhr
Ort: Zoom

ICPRAM 2020

Das Ergebnis der Bachelorarbeit von Herrn Tobias Hassel (Studiengang Media Engineering) konnte auf der ICPRAM 2020 (International Conference on Pattern Recognition Applications and Methods) vorgestellt werden.

Worum geht es?

Möchte man Roboter mit künstlicher Intelligenz steuern, ist i.d.R. ein aufwändiges Anlernen erforderlich. Stehen keine Trainingsdaten zur Verfügung, bleibt nur ein „Trial and Error“-Ansatz, der sich aber bei Robotern verbietet, da Fehler u.U. mit hohen Kosten und Beschädigungen verbunden wären.

In der Arbeit von Herrn Hassel wurde daher ein „Digital Twin“ in der Simulationsumgebung Unity geschaffen, mit dem das Anlernen ohne Gefahren für die Umgebung in einer virtuellen Welt ausgeführt werden kann. Anschließend wurde das trainierte Model erfolgreich genutzt, um den „echten“ Roboter zu steuern.

Cozmo

Digital Twin

In der Arbeit wird der Spielzeugroboter Cozmo verwendet, der über eine Programmierschnittstelle verfügt. Der „Digital Twin“ bildet die Geometrie, die Sensoren (insbesondere die Kamera) und die Eigenschaften des Antriebs genau nach. Dazu wurden umfangreiche Messungen und Anpassungen durchgeführt.

Als Aufgabe wurde das Verfolgen einer gezeichneten Spur ausgewählt. Der Roboter ermittelt dazu die im Kamerabild enthaltenen Kanten und berechnet ein „Center of Gravity“ (COG) der Pixel. Das Modell versucht, dieses COG in der Mitte des Bildes zu halten. Dazu „lernt“ ein neuronales Netz, wir Steuerbewegungen die Position des COG verändern.

Sicher im Internet

Am 20.2.2020 konnten sich sieben Schülerinnen des Christoph-Jacob-Treu-Gymnasiums in Lauf im Rahmen der OHM-Tage einen Einblick in die Gefahren des Internets gewinnen. Der Fokus lag dabei ganz bewusst nicht auf dem häufig thematisierten Cyber-Mobbing, sondern auf den technischen Möglichkeiten des Zugriffs auf private Daten.

Nachdem zunächst gemeinsam erarbeitet wurde, wer Interesse an persönlichen Daten haben könnte (das Spektrum reichte von der Polizei bis Donald Trump) und welche Daten besonders schützenswert sind (immerhin waren wir im Labor für medizinische Informationstechnik), haben wir uns anschließend angesehen, wie diese Daten abgegriffen werden können. Dazu haben sich die Schülerinnen in bereitgestellte freie WLANs einbuchen und an einem (fiktiven) Webshop anmelden können.

Die Überraschung war groß, als die bei der Registrierung verwendeten Passwörter im Protokoll der WLAN-Hotspots ausgelesen werden konnten und damit deutlich wurde, welche Möglichkeiten ein Anbieter eines freien WLANs besitzt. Der Nutzen einer Ende-zu-Ende-Verschlüsselung wurde auf diese Weise allen Teilnehmerinnen sehr bewusst.