Notice #

This website is work in progress.

Home #

Welcome to my personal website.

This website does not follow the trend of bloat. It follows a kind of minimalism, while trying to stay useful. This website is informational in nature. It simply displays the information I want to share and that's it. Neither does it track you nor does it send your data to big tech or pesky tracking companies. It does not set cookies. There are no ads, no logins, no registrations, no paywalls, no journalism. It uses merely HTML and CSS. There is no JavaScript you would need to trust to view the contents of this page. Yet, it serves its purpose.

Information you will find here relates mostly to my professional or software development activities.

Projects #

In my free time I work on lots of projects. Here I describe some of them.

Functional algorithms #

I sometimes work on a repository accumulating functional algorithms. These are functional versions of commonly used algorithms, like depth-first search, breadth-first search, and so on.

Advent of Code #

I like to work on Advent of Code (AoC) puzzles, when it is the season. I sometimes use AoC puzzles sometimes as a vehicle for learning interesting programming languages. My fallback option is GNU Guile, a Scheme, my favorite programming language currently.

Guile Examples #

I maintain a repository of examples of things Scheme or GNU Guile as a reference for myself, when working on other projects, but also as a place where I explore parts of the language.

Function Contracts #

My explorations in the realm of Scheme and metaprogramming have led me to discover CK-macros, which in turn enabled me to write a function contracts library.

This library does not merely provide a wrapper to define functions. It defines a new define form, which is a syntax for defining function contracts. The macro takes care of creating define forms, which check contracts and report any violated contract including the arguments, which violated a contract. The form also allows referencing the return value of a function, so that contracts about the return values of functions can be defined.

The library also defines lambda forms, for defining contracts for anonymous functions.

Documentation could be better, but there is an extensive set of tests which demonstrate the usage.

To summarize, my library is written using CK-macros and for that reason composes well. It is also written in a way, that I believe is quite readable, considering its macro nature. This has been an attempt to see where I can go using the CK-macros. I have used my library sometimes in my own projects and it works well. I also consider it an example for a macro that does not diminish readability of the code it is used in. While my library is neat, there are other function contract libraries out there, which might offer different sets of features or even additional features and might be more battle tested:

  • Racket has a more advanced library, offering additional concepts like impersonators and chaperones and defining contracts on the module level, in separate forms. It does way more than my little library. Its code seems quite a bit less penetrable than my library as well.
  • There is an old implementation of Racket's function contracts library for Guile.
  • Also there are other implementations of function contracts by other people: guildhall/guile-contract

Guile has an implementation of CK-macros already, which can be imported using (use-modules (system base ck)). I did not know about this, and instead used the one found on Oleg Kiselyov's website, which I heavily annotated, to make it easier to understand for myself, my future self, and anyone who might want to have a look at how it works. Mind-blowing stuff.

Risk (board game) Calculator #

I played some games of Risk with friends. At some point I was thinking, perhaps I can build a tool, that tells me what the odds are, that various moves will be successful. So I started to implement simple probability calculations for moves. However, I soon hit a mathematical wall of formulas becoming more and more complicated. This is when I got the idea, that perhaps a simulation approach is simpler to implement. That is what I implemented and it proved to be sufficiently accurate for my purposes.

Guile Docker Client #

guile-docker was an experiment in using metaprogramming to automatically define procedures for an API, in this case the docker REST API. It is not (yet) a full docker client library. It merely implements one or two routes. However, it reduces the amount of effort needed to define an interface to docker to a few macro calls looking like (define-api-route /containers/json GET application/x-www-form-urlencoded). Goal reached. Does anyone want to build a complete docker library on top?

Career #

I studied Informatik (roughly speaking, actually it was "IT-Systems Engineering" and "Telematik") and received the degrees of Bachelor of Science (B.Sc.) from HPI in Potsdam, and Master of Engineering (M.Eng.) from TH Wildau.

After graduating with the M.Eng. degree, I started working at a small startup in Berlin, named "StackFuel". This little startup has grown over time and is no longer a small startup. I have been one of the first employees in the company and have had my hand in almost all of its technical parts. Working at a startup for several years, I got to work at or create many different aspects of its software. Some of the things I have done at StackFuel include:

  • Development
    • implementing whole new critical services from scratch
    • writing unit and integration tests
    • setting up monitoring solutions
    • setting up CI pipelines
    • developing solutions for automated checking MOOC student solutions of computer programming tasks
    • creating a concurrent backup strategy and implementing a backup system to save the company
    • containerization (docker) of various critical services
    • creating reproducible base images for data scientist stacks
    • developing a service for distribution of educational content
    • frontend development
    • developing an event tracking solution
  • Engineering
    • documentation of software, formal and informal diagrams, prose
    • modelling software architecture
    • modelling of databases
  • Devops
    • working on server deployment code (infrastructure as code approach) and reproducibility
    • deploying server infrastructure
    • deploying services on infrastructure
    • handling outages
  • Other
    • code reviews
    • developing assignments
    • developing online course content
    • reviewing applications
    • reviewing hand-ins of applicants
    • onboarding of new coworkers
    • technical support

This is what happens, when you join a technical startup as 1 of 2 engineers, 1 of the first 10 employees, and need to get cracking at whatever comes your way. When you stick around for a while. When you are a core team member building up the company. For this reason my experience is rather broad, even though this is my first job.

In a way pride myself to be a generalist. However, there is also a specialist side to me, due to my free time projects. In those free time projects I gained a lot of additional experience off the job, that often allows me to make the right decisions at the job.

Over time I have seen many changes in processes at work. I have seen some projects play out over their whole life-cycles. I have seen decisions that later would be regretted and I have seen decisions, that stood the test of time.

About me #

I am a professional software developer/software engineer/computer programmer from Germany. Not only do I do computer programming and related activities on the job, but I also have many free time projects, from which I learned many things, including other programming languages, paradigms, and tools. Computer programming has been my thing since I first got into contact with it in school, in Informatik classes, which also led me to studying that stuff at university. If you want a guy, who really knows something about computer programming and does not stop learning, contact me! Feel free to check out my projects and convince yourself or ask me questions about them.

While computer programming is totally my thing, on the job, as well as off the job, I also have other interests.

I like to play chess and chess variants like Japanese chess (Shōgi) or Chinese chess (Xiàngqí). I used to be a club chess player in my childhood and achieved quite good results. These days I only play online sometimes, or perhaps with friends over the board, or perhaps with strangers, if there is some kind of event. But I did not participate in a proper tournament for years, due to the time commitment needed.

Considering, that I have never been in a table tennis club, I play quite well. Learned a couple of tricks from a club player at some point though.

In my free time I also learn Mandarin. I take regular online lessons and can survive on my own in China. Simple conversation is not a problem, but I still have lots to learn. Especially vocabulary.

I enjoy reading novels. Usually fantasy or science-fiction novels. I read all of the original Dune novels and then some. Or the Barrayar series novels. I think in total I probably read more sci-fi than other genres. Grand ideas about the future and philosophical questions fascinate me.

Sometimes I also do some story writing, with long creativity breaks in between.

Contact #

Due to this being on the open, easily automatically parsable and processable, and many bad actors out there, I cannot share complete CV information here. Feel free to reach out at contact address or one of the other ways linked on this website.