👋 Hi, I'm Christian.

I am a college graduate from Hasso Plattner Institute (HPI), which is part of the University of Potsdam. I have a master's degree in IT-Systems Engineering, a more practice-oriented computer science degree.
My own projects are hosted at github.com/cmfcmf and a curated list is provided below.

Open Source Work

I frequently contribute to open source software and maintain libraries with hundreds of downloads per week. One of my oldest still-in-use open source projects is more than 8 years old. To date, I have made more than 900 pull requests to projects big and small, ranging from introducing new features to Visual Studio Code, adding features to react-redux, fixing bugs in the Caddy web server, rewriting documentation, to fixing minor bugs and typos.

Interests and Skills

I regularly work in teams of varying sizes, and have used processes like Scrum and Kanban. I have experience in managing and maintaining big projects over multiple years, including communication with other developers and stakeholders.

I am interested in many areas of computer science, including:

  • Full Stack Web Development: Node.js & React, as well as PHP & Symfony
  • Electronics and Embedded Software: Assembler, C/C++, Python, Arduino, Raspberry Pi, FPGA, …
  • Infrastructure & CI/CD: Docker, Ansible, Github Actions, Heroku, Caddy, …
  • Reverse Engineering & Security Vulnerabilities: I enjoy reverse engineering of programs and code. Additionally, up until today, I found and reported three security vulnerabilities on major websites. While I no longer actively search for vulnerabilities, my knowledge and experience with them often helps me avoid them in code I write and review.
    more details
    • I found an Open Redirect Vulnerability on twitch.tv, that apparently had already been reported but not yet been fixed.
    • I found an Open Redirect Vulnerability on tumblr.com, which I eventually received a bounty for.
    • I found a way to check if a private repository with a given name exists on github.com, which was out of scope of the bounty program at that time. I got some cool GitHub swag though!



IT-Systems Engineering, Master of Science

Hasso Plattner Institute (HPI), University of Potsdam, Germany

» find my thesis below

IT-Systems Engineering, Bachelor of Science

Hasso Plattner Institute (HPI), University of Potsdam, Germany

» find my thesis below


Katholische Schule Liebfrauen, Berlin, Germany


Many of my projects are at github.com/cmfcmf. Below you'll find a curated list of my biggest/most interesting projects, some of which are closed source. An overview of my pull requests to other projects can be found here.

Teaching Experience


Mentor at HPI Schülerkolleg at Hasso Plattner Institute

I taught children how to program LEGO Mindstorms robots using a graphical environment as well as Python and JAVA. I was responsible for developing and structuring the course curriculum.

September '18August '19

Robotics and Programming Mentor at Katholische Schule Liebfrauen

I taught the basics of programming with LEGO Mindstorms robots on a weekly basis for fifth to eighth grade students.

Winter Terms '18, '17, '16, '15

Teaching Assistant for Basics of Digital Systems at Hasso Plattner Institute

Correction of exercises and exams, tri-weekly exercise discussions with students.

Summer Term '18

Teaching Assistant for Design and Implementation of Digitial Circuits with VHDL at Hasso Plattner Institute

Correction of exercises, tri-weekly exercise discussions with students.

Summer Term '17

Teaching Assistant for Internet and WWW Technologies at Hasso Plattner Institute

Correction of exercises and exams.

Publications and Scientific Work


Master's Thesis

Call Graphs for Live Programming: Implementing Call Tracing in Babylonian/S based on a Survey of Property Extraction Techniques for Dynamic Analysis


Live programming systems continuously update and re-execute the program when its source code is edited to provide immediate feedback to programmers. Most live programming systems only provide feedback at selected locations (probes) in the source code in order to keep the feedback focused and scalable.

As a consequence, programmers only get feedback for individual, isolated parts of a program. The connections between individual probes, as well as between probes and other procedures, remain unclear. Call graphs are a means to visualize the connections of procedures, and can also be used to visualize the connections between probes.

In this thesis, we integrate call graphs into Babylonian/S, a tool-set for Squeak/ Smalltalk that visualizes and encourages the use of probes. Squeak/Smalltalk does not yet provide a fast and ready-to-use function to generate call graphs. Call graphs are usually created from a call trace, the generation of which live programming imposes special non-functional requirements on. The fulfillment of these requirements is mainly determined by the instrumentation technique. To select the best suited instrumentation technique, we conducted an exploratory literature survey of possible techniques. To cover a broad range of techniques, we scoped the survey to the much bigger area of dynamic analysis, without focusing on a single programming paradigm or use case.

Based on our survey, we created a hierarchical categorization of implementation techniques for property extraction for dynamic analysis. We also integrated call graphs into Babylonian/S, thus giving programmers a continuous view into the program that also visualizes the connections between probes.

Based on the specific requirements of call tracing for Babylonian/S, we implement and compare two of the most feasible call tracing techniques: Bytecode Rewriting and Simulation. Benchmarks of a worst-case scenario show that the faster call tracing approach, Bytecode Rewriting, causes the program to run approximately 23 times slower. Walk-throughs show how the integration of call graph generation into Babylonian/S can aid programmers in better understanding the run-time behavior of their code.

We hope that our exploratory literature survey can act as a starting point for further research on the topic of property extraction techniques for dynamic analysis. We hope that our integration of call graphs into Babylonian/S illustrates how live programming systems can benefit from dynamic analyses that provide programmers with insights into the behavior of the system beyond the probing of individual expressions.


Research Paper

Niephaus, F., Krebs, E., Flach, C., Lincke, J., & Hirschfeld, R. (2019, April). PolyJuS: a Squeak/Smalltalk-based Polyglot Notebook System for the GraalVM. In Proceedings of the Conference Companion of the 3rd International Conference on Art, Science, and Engineering of Programming (pp. 1-6).



Jupyter notebooks are used by data scientists to publish their research in an executable format. These notebooks are usually limited to a single programming language. Current polyglot notebooks extend this concept by allowing multiple languages per notebook, but this comes at the cost of having to externalize and to import data across languages. Our approach for polyglot notebooks is able to provide a more direct programming experience by executing notebooks on top of a polyglot execution environment, allowing each code cell to directly access foreign data structures and to call foreign functions and methods. We implemented this approach using GraalSqueak, a Squeak/Smalltalk implementation for the GraalVM. To prototype the programming experience and experiment with further polyglot tool support, we build a Squeak/Smalltalk-based notebook UI that is compatible with the Jupyter notebook file format. We evaluate PolyJuS by demonstrating an example polyglot notebook and discuss advantages and limitations of our approach.


Bachelor's Thesis

Development Process, Continuous Integration and Delivery of a Web Application


Agile software development in a team of seven people can only succeed if the team works in a coordinated fashion and uses established practices. Following practices and rules during development is as important for the overall success of the project as continuous integration and delivery. This work describes the process from writing code to delivering the application. Using these techniques allows working in short iterations and rapid integration of feedback. Because application reliability is just as important, approaches and examples for monitoring application stability are also reviewed.

Volunteer Work

In 2014, I was awarded the Berlin Certificate for Volunteer Work (Beliner FreiwilligenPass) by the state of Berlin for my ongoing engagement in volunteer work. The following table shows a selection of my past and current volunteering activities.

April '19

Student Volunteer at ‹Programming› 2019
(International Conference on the Art, Science, and Engineering of Programming 2019)

I helped out as a student volunteer during the conference. We also presented our research paper on polyglot notebook sysytems.

May '18April '19

Student Representative at Hasso Plattner Institute

I was an elected student representative at HPI. As student representatives, we organized multiple yearly events, such as the spring, halloween and Christmas parties. The year I was a student representative was particularly challenging, because the HPI became its own faculty and gained two new degree courses during this year, which we had to integrate into existing workflows and structures.

September '18August '19

Robotics and Programming Mentor at Katholische Schule Liebfrauen

I taught the basics of programming with LEGO Mindstorms robots on a weekly basis for fifth to eighth grade students.


Web Development / EventManager Software at Katholische Schule Liebfrauen

I program and maintain a software called "EventManager" that eases the managment of events taking place at the school. For example, parents use the EventManager to register for timeslots for the annual parent-teacher conference.


Member of the Berlin FüMO-Team at Katholische Schule Liebfrauen

I am part of the Berlin FüMO-Team that organizes several yearly mathematics-related events: We organize a three day camp with up to 50 students where we offer a multitude of mathematics workshops for all ages, as well as a one-day workshop for fifth and sixth graders where we solve mathematical problems together.
We also organize the Berlin version of the "Fürther Mathematik Olympiade" (FüMO), a mathematical contest.

Awards and Honorations


HackHPI '19 – Winner of the IBM Cross-Border Effects Challenge

Our project: An interactive visualization of refugee movements and potential causes, which aims to make the stories of individual refugees more comprehensible to the general public. More info


Scholarship by the German Academic Scholarship Foundation (Studienstiftung des deutschen Volkes)

The "Studienstiftung" is Germany's largest organisation that sponsors outstanding students. It is funded mainly by the Federal Ministry of Education and Research.


HackHPI '18 – Winner of the WWF Challenge

Our project: A weather app that makes you aware of climate change and offers tailored tips and proposals to fight it — be it in your neighborhood or around the globe. More info


Berlin Certificate for Volunteer Work (Beliner FreiwilligenPass)

Awarded by: State of Berlin

The Berlin Certificate for Volunteer Work is awarded to people who are particularly active in volunteer work.


Math Practitioner of the Month (Mathemacher des Monats)

Awarded by: German Mathematical Society (Deutsche Mathematiker-Vereinigung)

I was awarded "Mathemacher des Monats" of June 2013 by the German Mathematical Society as part of the "Berlin FüMO-Team". The Berlin FüMO-Team organizes the yearly Berlin version of the mathematical contest called "Führter Mathematik Olympiade".