Various student projects

Short description of various projects that do not have a separate page yet: middleware, wired and wireless networking, SQL and non-SQL databases, compiler, static analyzer, etc. I learned many things while applying theory in practice.

Middleware

A multi-threaded Java middleware for a key-value store was built in a student lab project to study Queueing Theory. Data was analyzed with Python and Octave building models of the instrumented data using operational laws and queueing models. See description and link to the source code here.
Java | Python | Bash | Octave

Wired and wireless networking

As a group with Felice Serena and Julian Collazo (group ping), we implemented 2 projects in C.
RELIABLE a reliable sliding window transport layer on top of UDP, i.e. implementing some of the TCP functionality using UDP. It helped to understand some of the inner workings of these protocols, effect of small configuration changes, and value of using a state machine to follow a given protocol specification.
ALIVE a router that implements the routing information protocol (RIP). It fulfilled the project specifications, followed RIP, routed packages, and worked better than the master solution. My contributions lead me to winning 1st prize in class (a Synology NAS).
In 2019, our group ping had a revival in Google’s HashCode where we had fun working the puzzle and achieved 5th rank in Switzerland (out of 100 groups).

Wireless Multiple exercises/projects in Wireless and Mobile Computing for Entertainment Applications (Dr. Mangold) gave insight into the workings of the 802.11 Wi-Fi protocols. A Java event simulator (Jemula) was used. Also here, it was interesting to realize how small configuration changes may have a huge impact.

SQL and non-SQL databases

Besides using SQL databases in exercises and also private projects (PHP, Go, Java), practical group projects in Information Systems allowed me gaining experience with various non-SQL databases: MongoDB, BaseX, ZooDB. An information system for managing scientific publications was implemented in Java using each of these database engines as backend. A 60 MB large data set from dblp was used for data import. Data sanitation routines had to be implemented. The application had a rich frontend using JavaFX that provided a comfortable user experience including e.g. history of applied queries. All databases were benchmarked and finally all 3 backends were combined into one single application that allowed switching between all of them. We used a clever abstraction layer to accomplish this final task.

Javali compiler

In Compiler Design, a working compiler was developed for a simplified Java-like object oriented language: Javali. Various aspects of a compiler were studied, including simple optimization passes. A visitor pattern was used to traverse the abstract syntax tree (AST). x86 assembly code was generated using a template system. A self-written runtime system (assembly) handled bootstrapping, I/O and memory management.
Java | x86 assembly

Software Engineering and Architecture: UML, Design patterns, software modelling (alloy), static analyzer with APRON

Besides learning about basic engineering and architecture aspects like UML modelling and design patterns, two group projects gave practical insights of important aspects in building reliable software systems.
Modelling UML and alloy models were built for a simple artificial programming language (“LINEAR”).
Static Analyzer A static analyzer was written in Java for Java programs to check for the absence of DIV/0 exceptions and absence for OUT_OF_BOUNDS exceptions for an index in an array. A polyhedra domain (Polka from APRON) was used as numerical domain. Creating lots of test cases, in particular corner cases, was key to building a sound and precise static analyzer.