Hi! I'm a passionate climate activist and hobby-programmer! On this homepage I present some of the programming and research projects I have worked on in the past and invite you to contact me if you are interested in any of these or want to collaborate!
A lot about usability via a repeating feedback loop
Server setup on a RaspberryPi, running Linux and NodeJS
Setting up a database in SQL and moderating it
Version control and collaboration via Github
Handling a usually high-level language like JS in low-level ways to achieve better results (Utilizing bit arrays and client side IndexedDB)
My most finished programming project yet! Some of you may know When2Meet. A neat little date-polling tool, which excels at finding dates with more complex time requirements, compared to classic tools like Doodle. It is based on a "drag" style of filling out time slots and helps in finding the best time span by overlaying colors.
It became especially useful for us climate activists in Bochum when it came to political protests, which always required a minimum number of at least 3 people present. One of these was the climate camp in Bochum (A press report about it) which lasted multiple weeks 24/7.
If less than 3 people were present, the authorities could legally end the protest, so it had to be guaranteed to be above said number. We tried using a tool like When2Meet, but the terrible mobile device compatibility and some missing features made this unpractical, so I created my own (better) version!
Here are some features:
A much improved poll creation page, with the possibilities to...
...set an admin password, with which the creator can modify existing entries
...specify the size of the time slots to allow for an accuracy best fit for the situation
...add further "roles" and a minimum requirement of these, users can assign themselves. (Example: You always need a supervisor that is in charge and people can assign themselves as this role at certain time slots)
...specify a minimum amount of people needed, which will be highlighted when not met.
A week based design for submitting entries, opposed to horizontal scrolling which conflicts with the "drag" style method of filling out time slots.
Compatibility with digital calenders by ICS-Links, showing dates in the users calender directly overlayed over the time slots.
A comment and feedback section
Functionality to export poll data as JSON
Functionality to automatically recognize critical gaps with too little people in the poll and listing these in a created text message, to be shared easily.
Overall improved visuals and design more fitting to the minimalistic modern web
Minimizing mobile data consumption (often critical in protest camps as they often do not have WiFi) by...
...transferring entry data as bit arrays opposed to normal JS objects and interpreting these client-side
...only sending users the changed or new entries on repeated visits by utilizing the client-side IndexedDB to save poll data and comparing a version number.
The servers currently run completely on a RaspberryPi I installed myself and all passwords are hashed before storing in SQL. All connections are of course encrypted via https!
What I learned: (Python, Docker, Flask, Gurobi, Celery, Redis, SQL, HTML)
Next to my usual experience of NodeJS servers, I learned web-hosting with Python
Because the optimization process with Gurobi can take quiet some time, I had to implement a task queue and worker management with distinct frontend and backend.
This all ran in a multiple container setup, thus I learned to use Docker and Docker Compose.
I developed this project as part of my employment at the chair of ecoinformatics at the Ruhr Universität Bochum. It utilizes an ILP to solve a visualization problem present in geophylogenetic trees. These are often not very readable, because of the large number of intersections between leaders. The ILP minimizes these intersections and thus increases readability.
Next to this ILP, running in the backend, I developed a Flask based frontend to make the tool as usable as possible. In this, you can upload a phylogenetic tree, a geo-coordinates files and tweak a number of styling parameters to retrieve a more readable diagram.
Additionally, I utilize Geoapify to enable static map backgrounds. The algorithm developed, was also subject to a conference paper publication.
As soon as the project is fully finished, it will be released under an open source license and hosted for public use.
Working with a varied team of different programmers and designers on Github and Figma
GoAres was a project, I got invited to by Fridays for Future Frankfurt as a web developer. It was an alternate reality puzzle game, following the story of a fictitious mars expedition startup, promising to escape global pollution by traveling to mars, but ultimately resulting in the same environmental catastrophe on the next planet.
It was the players task, to identify this fraud and preventing this future, by solving a number of puzzles and finally taking part in the global climate strike on September 25th.
I was responsible for creating this startup's web page, which was the first place for the player to find clues. We worked in a bigger team with different specialists via the designing tool "Figma" and Github.
Review and CFD-simulation of backward facing stages
What I learned: (Ansys, Matlab, Batch)
Conducting CFD-simulations with Ansys including
geometry creation,
mesh creation,
solving process and
visualization.
Automating the large batch simulation of multiple different sets of parameters and working with design points.
Automating the extraction of Ansys Fluent internal results to widely readable formats
This was a project thesis I conducted as part of my studies. In it a method has been worked out, with which it is easily possible to input, solve and export
laminar, large-batch fluid dynamics simulation data for the geometry of a three-dimensional backward facing step. This has been done using Fluent in Ansys Workbench. The
method has been applied for fluids in both liquid and gas form and compared to literature
data. The result is a comprehensive step-by-step approach with detailed regard towards
the solution of possible difficulties one can experience when working on a similar prob-
lem and reproducibility for other geometries.
The most interesting part was integrating the usually quiet manual processes of conducting CFD-simulations with Ansys Fluent in an automated workflow, so that many different configurations of backward facing steps could be analyzed.
Thus, working with design points and scripting inside Ansys to automatically export the solutions of every design point was a key focus.
HumiditySensor
What I learned: (HTML, CSS, JS, NodeJS)
Soldering extremely tiny parts
Design of PCB prototype circuits
RaspberryPi communication with peripheral devices
Basic handling of sensor measurements
To reduce heating, one should always keep track of the humidity in the room, as lower temperatures can result in higher relative humidity which can cause mold and structural damage. For this, I attached a self build breakout board for the BME280 humidity, temperature and pressure sensor to my raspberry pi and programmed a user interface to read the data.
The BME280 is only about 2mm in size, so soldering the 8 pins to a breakout board was incredibly difficult. I only found out afterwards that there already exist breakout boards for this kind of sensor.
It is very helpful for seeing the effects of regular opening of the windows and can aid in estimating how much a room can be cooled down safely.
Bachelor's thesis: Equations of state for MDEA-Mixtures
What I learned: (LateX)
English thesis writing
Working with LateX and Citavi
A lot about thermodynamics
Advanced equation fitting
In my bachelor's thesis, I created equations of state for mixtures containing Methyldiethanolamine (MDEA). With these equations, you are capable of deriving all thermodynamic properties for a given temperature and pressure, like the heat capacity or density.
MDEA is a relevant chemical for carbon capture and storage technology, as it behaves much like Monoethanolamine (MEA), which is the most common absorbent of CO2 in amine CCS. Knowledge of the thermodynamic properties of MDEA mixtures is thus critical for utilizing it in industrial processes.
This is done in a semi-empirical way, by utilizing both fundamental relations of properties and empirical data. I collected this data in a literature research and used a complex fitting algorithm to find an equation in terms of the Helmholtz energy to describe the given data points.
Unnamed 2D Dynamic Fighting Game
What I learned: (Unity, C#)
Basic game development with Unity
Scripting with C#
A 2D side-scrolling fighting game, with the main form of combat being a kick move, used simultaneously to propel yourself from walls and hit enemies. It is very focused on mobility and flying around.
I work on this privately and very irregularly, so there is no release date in sight but I like the concept. All graphics and sprites are self designed.
The "Känguruknobelkette" is a math toy, that could be won in a highschool math competition. It is a chain with multiple foldable segments and your task is, to fold this chain into a given shape with the right colors.
I programmed a little web tool, that can solve any given shape by simulating the puzzle and finding the right combination of "folds".
You input the shape in the 5 by 5 grid and hit "Solve"!
Rolling ball on math curves
What I learned: (Matlab)
Basic physics simulation
Matlab basics
After having gotten introduced to Matlab in university, I wanted to get to know it in a small little project on my own. This little physics simulation takes a math curve and calculates a "realistic" roll based on slope and friction.
This assumes, the ball is a singularity and can not leave the curve, like a rollercoaster on a track.
Some 3D Models/Animations
What I learned: (Blender)
Basic 3D modelling
Basic 3D animation
I used Blender to create a small model for social media and performed some basic animations on it. I also used this to model my bedroom and preview how a new arrangement of furniture may look.
Additionally, a friend requested a model of our university with some solar panels on it for a presentation (no accurate solar panel placement and size, just visual), which i created based on an existing 3D model of the university.