I like to explore what can be done with software and have done so over time by working on a few projects. Favorite languages/tools are Golang, React, Node and C and Python.

Below are a few of my software hobby projects, along with some projects from university.

Master's Thesis Project in ML and NLP

ongoing 2020

Using machine learning and natural language processing techniques to extract protein-protein interactions from biomedical research papers using named-entity recognition and relationship extraction. Technologies used include Python, TensorFlow and BERT. Code is available here.

Anonymous Ultra-Real-Time Chat

November 2020 – current

A chat which shows each user's message as it is being typed. By design this kind of chat encourages a synchronous type of conversation, much like that which we engage in offline, and makes conversation extremely fun and engaging.

Additionally the chat allows for anonymity but with the option to identify oneself via a so-called "tripcode"—the result of running a user-supplied secret through a hash algorithm.

The advantages of an anonymous ultra-real-time chat are manifold: (I) no user registration is required, so anyone can join the conversation instantly, (II) shifts the focus onto quality of content, naturally defeating credentialism, (III) conversation moves forward very fast even if only a couple of people are typing and (IV) since you see what people type in real time, "talking past each other" becomes less of an issue.

Contact me if you're curious to learn more.

Built with WebSocket, React, Golang, SQLite3 and NGINX.

Go Behave

December 2018

Go Behave is a behavior tree library in Golang. A behavior tree is a formalism for describing the behavior of an autonomous entity such as a robot or a non-player character in a video game. It allows for highly modular behavior design thanks to the composability of its nodes, and the formalism makes task switching and state management trivial. Please refer to the project repository for more information.

2D Video Game & Engine

October 2018 – current

A video game in a homemade engine that allows for, among other features:

  • Artificial intelligence via behavior trees that can be defined in a custom-built simple declarative language, allowing for e.g. game designers without programming experience to design agents with intelligent behavior.
  • Efficient collision detection and resolution via spatial partitioning.
  • Loading and rendering of tilemaps and tilesets built using the Tiled Map Editor.
  • Easy development of features thanks to a highly modular implementation of an Entity-Component-System architecture.

The code is private but I'll gladly discuss it with anyone curious.

Kademlia

October 2018

A Golang implementation of Kademlia, a distributed hash table for decentralized peer-to-peer computer networks. Unfinished, but code is available here.

Self-Balancing Robot

November–December 2017

In a control systems project course, three other students and I built a self-balancing two-wheeled robot using LEGO Mindstorms components. We implemented and compared two different control strategies: PID control and linear-quadratic control. We compared two different filtering methods—Kalman filtering and complementary filtering—for the measurements taken by a gyroscope and an accelerometer. The control algorithms were implemented first in Simulink and then in leJOS on a LEGO Mindstorms EV3 microprocessor. The project report can be found here.

Extremum-Seeking Control

April–June 2017

As the final project in an advanced course in control theory I chose to investigate an area of control engineering known as extremum-seeking control. While the aim of conventional control is to drive the output of a system to a predetermined reference value, the purpose of extremum-seeking control is to create a controller that finds an optimal reference value for a system to operate at. This type of control is often used within the process industry to optimize system performance and subsequently minimize resource usage. The project report can be found here.

Reduction of Static Noise in Real Time

February 2017

In a digital signal processing project course, a fellow student and I investigated and implemented an algorithm for reducing static audial noise in real time. The solution was implemented on a SHARC DSP. The project report can be found here.