GLXOSD is an extensible on-screen display (OSD)/overlay for OpenGL applications running on Linux with X11 which aims to provide similar functionality to MSI Afterburner/RivaTuner OSD. It can show FPS, frame timings, temperatures and more in OpenGL games and applications. It can also be used to benchmark games, much like voglperf.
WixWPFWizardBA is a template for custom WPF-based wizard-like Wix Burn frontends. It is an open-sourced, generalised version of a Wix bootstrapper I’ve built for a proprietary piece of software I developped.
BMSF is a collection of generic utilities and WPF components that I initially developed for a proprietary application. I intend on open-sourcing more components in the future.
Abandoned due to a lack of time and the absense of reasons to continue development. The frontend has a lot of technical debt (mainly thanks to AngularJS 1).
OpenOlympus is a programming olympiad hosting server written in Java. It is comprised of two components: the web server and OpenOlympus Cerberus
The OpenOlympus server is a Spring web application that uses PostgreSQL. It is responsible for contest management, delivering task info to the user, accepting the user’s solutions, and scheduling and distributing solution testing using JPPF.
The frontend is written in AngularJS 1, which practically doomed the whole project due to its inflexibility.
While OpenOlympus itself is abandoned, I am planning on salvaging a big chunk of its backend for a more useful project - it has a lot of boilerplate for user management and ACLs already in place.
PostgreSQL doesn’t support partial updates of materialized views. I had to use a bunch of triggers (ugh) to emulate the functionality.
Creating a failure-tolerant way to turn a SQL table into a queue (message queues don’t seem to be useful in this case because there is no way to guarantee that an item will be processed from start to finish even if there is a power outage).
OpenOlympus was initially built using Spring Data JPA. Eventually, Spring Data JPA became unbearably inconvenient and I switched to jOOQ.
The lack of JSR-310 support and documentation for creating custom data type conversions in jOOQ meant that I had to implement it through trial-and-error, which took some time.
Serialising data for JPPF proved to be harder than I expected. Eventually, I wrote a somewhat hacky solution to the problem.
OpenOlympus Cerberus is an API for checking solutions to different tasks. While it is integrated with the OpenOlympus server, it can potentially be used by other programming olympiad hosting servers.
Unfortunately, I never got round to cleaning up and simplifying its API.
The OpenOlympus Watchdog was created as a replacement for the libsandbox-based tool, OpenOlympus-olrunner, due to performance reasons. Unlike libsandbox, OpenOlympus Watchdog uses seccomp-bpf to filter syscalls, which gives a 20x performance increase over the ptrace-based libsandbox.
Please note that OpenOlympus Watchdog hasn’t had much penetration testing, so if you intend on using parts from it, you should do some testing first.