Keyboard converter between a Zbrojovka Consul 262.5 terminal keyboard and a Videoton VDX 52600 terminal.

This is a multi-purpose converter that enables the two vintage devices to be used on their own (1. USB keyboard adapter, 2. keyboard emulator over serial) or together to form an honest VT52 terminal.

Status: Semi-finished.
Reading from the keyboard works. Writing to the terminal works. Though it is unreliable and I haven’t discovered all the keycodes that the terminal accepts.

Project page:

Replace the old electronics of your tapedeck with an mp3 player, all while keeping the retro controls working!

A conversion project that takes a beautiful piece of obsolete hardware and gives it a new life. The aim is to retain as much of the look and the controls as possible. Buttons still control the playback, turning the knobs impacts the sound. Yet there is a tiny MP3 player board that loads the music from a microSD card and the turning cassette reels are just for show.

Status: Finished.

Project page:

Powering on many devices at once might trip a circuit breaker due to the initial surge. A slow-start power socket avoids this by introducing a delay for the grid to stabilize.

The device uses an MCU to gradually energize a strip of power sockets using relays. This way, the startup is more gentle and there is no need to manually connect and disconnect devices.

Status: Finished.

Project page:

3D printable case for a Geiger Counter kit packing a battery, ON/OFF switches and a servo motor to display the measurement.

Enclosed is a “RadiationD-v1.1 (CAJOE)” Geiger Counter kit that does all the work. A standard power bank for an 18650 battery cell provides the power. An Arduino reads the radiation ticks and drives a servo motor to display a time-windowed value. Switches enable or disable 1) the whole system 2) the clicking sound 3) the servo display. The case is modeled in OpenSCAD with the battery and the servo parts of the case being optional.

Status: Finished.

Project page:

Web portal providing computer generated art with a possibility to customize and experiment with the art generators hosted on the site.

Caraway from

The art varies from randomly generated alien flowers to dungeon maps. These could be used for many purposes, such as wallpapers, game assets or an album cover for your band.

There are multiple original art generators available with previews of their results. You can open a sandbox environment, which lets you customize a generator’s input parameters and create new results.

Project page:

A collection of tools and utility apps for the PINE64 PinePhone.

The aim was to create simple and clean low-level utilities that expose the phone hardware to scripting, which can get more complex. Provided is a control of the backlight, notification LED, flash LED, vibrator motor and the option to put CPUs into sleep mode.

Status: Finished.

Project page:


VT100 terminal using an ESP32, LK201 keyboard and a TV.

This is a conversion of a black & white mini TV into a serial terminal that can be hooked up to e.g. a Linux host computer. ESP32 generates the TV signal, emulates a VT100 terminal and interfaces with the keyboard. It uses an LK201 terminal keyboard (which is otherwise not suitable for modern computers anyway).

Status: Finished.

Project page:

Linux box with a loudspeaker and an emergency light to be used for TTS announcements and notifications.

If you want to set up very loud notifications for events or reminders, this is a great solution. Announcements can be submitted via MQTT or scheduled over SSH. They are then read out loud via TTS. The Human-Activity-Sensor (PIR module) makes sure the speaker is extra loud only when there are no humans around.

Status: Finished. Out of regular service.

Project page:

Sway UI environment configured for PINE64 PinePhone. Proof Of Concept used to test the experience.

This was a learning experience of “What components make a usable UI environment for a phone?” and it turns out that the answer is “A whole lot!”

This project is superseded by sxmo.

Status: Finished PoC.

Project page:


OS for the PINE64’s PineTime smartwatch and a companion app for a phone.

Development unit connected to a PC

The PineTime smartwatch OS is built on Zephyr in C/C++. The companion app (for Linux, Android) is used to sync data to the smartwatch over Bluetooth.

Status: Incomplete. Abandoned.

Turns out building a whole ecosystem is quite challenging!

Project page: :: PineTime OS :: Companion App :: Zephyr for PineTime :: core Zephyr modifications

Ebook reader firmware designed for LilyGO T5 v2.4 (ESP32 with 2.9″ eInk display).

LilyBook prototype

The goal was to create an ebook reader that would be very small, last a very long time on a single charge and you could read it while walking, without having your vision obstructed that much (to avoid bumping into stuff!). Given the small display can only show around 4 lines of text, it is easy to keep track of where you are in the book; no need to re-read paragraphs every time your eyes move back and forth between the reader and your surroundings.

I’ve successfully tested this on my commutes to work where I managed to read through e.g. the story of Dr. Jekyll and Mr. Hyde, using it in a public transport and while moving through (or rather with?) a crowd on some of our busy streets.

Status: Beta version done and working. Possible improvements could come in the future.

Project page:

Android music player with Ampache server as the main data source. Allows online streaming (and hopefully soon also cached offline playback).


This project was not started from scratch. It is based on the official Ampache’s client for Android. Sadly, this official version has not been maintained since 2010 and it shows.

My work on this project is focused on:

  • Pleasant and practical UI
  • Ability to play cached content in offline mode
  • Responsible error handling

Status: base version finished. Abandoned, since I’m moving away from Android.

Project page:

Dungeon exploration horror game. The task is to get to the deepest level possible without getting caught by one of the pursuers.


Written in Java with jMonkeyEngine3.

Status: alpha version finished.

Project page:


Running HTTP and HTTPS on the same port with Apache. They said it couldn’t be done. They were wrong!

I’ve modified a simple Python port forwarding utility to act as a port multiplexer that can automatically forward HTTP and HTTPS requests to the appropriate ports. If the request looks like an HTTP in plain text, it forwards it to port A. Otherwise it is assumed to be HTTPS and is forwarded to port B.

Now you can run your web applications from a single port, regardless of using HTTP or HTTPS. Hooray!

2D monster fighting game where light is your best friend and enemy at the same time.


The darkness is impenetrable. The only way to see where you are going is to light a fire or a torch. But doing so might also attract a horde of brain-hungry monsters…

Created with Java and LibGDX.

Status: base engine done, needs more content to be playable.

Procedurally generated textual RPG adventure game.


Have you ever wondered how an AI-driven game of Dungeons & Dragons mixed with a modern first-person RPG would look like? Well this is it! Forget about shiny graphics and high frame rates. Instead, dive deep into your imagination guided by a colourfully described world rich with detail.

The ideal way to play this would be on a phone. Instead of reading a fantasy book, you could live your own adventure in an interactive story. There is no need for fast reactions, you can take your time (as it is basically a turn-based game), just like with a book. But you get a new and individual story every time you play.

Status: basic prototype done, not really playable.

My Master Thesis software suite. The aim was to create a high-performance correlation computation software + visualisation framework for large datasets.



Correlation computation software. Written in C++ with focus on high performance, uses MPI for running on any kind of setup, from one to many computers.

Source code:


Data visualisation framework in Python built on top of PyQtGraph. It interconnects with Corrputer quite nicely.

Source code:

Distributed nuke-resistant chat application. Peer-to-peer, built on FreePastry. Created as a school project.


Written in Java on top of FreePastry.

Messages are sent peer-to-peer, chat room configurations are distributed among the peers with a k-level fault tolerance. The implementation is more or less a proof-of-concept. It would require some additional configuration for it to function as a user-friendly application. But that is a task for someone else.

Project page:

The finest of all crafts – the craft of brewing ale.

The story of Alecraft is a bit long, so let’s not bother. In short, there is a playable 2D version forked off from a game called Minicraft. Then there is a absolutely unplayable 3D version, which is a completely new game meant to carry on the legacy and ideas from the 2D version.

Project homepage:

A website with easy access to configuration files for frequently used applications. The aim is to be able to have your favourite settings available wherever you are, be a friend’s computer or a brand new OS installation. Simply type the short URL into a browser and you are ready to go.

Project site:

The main idea is to have a website with a short URL handy at any time. It doesn’t have to be flashy and beautiful, as long as it gets the job done.


Web-based, single-page, AJAX-powered game. Simplified RPG dungeon exploration. Get to the deepest level possible without being killed!


Built with PHP + Nette Framework and MySQL built with Bootstrap.

The idea is to have a full-featured RPG game with only a minimalistic set of controls. The name of the game is actually an abbreviation: Heart of Esrem = Heart of Every Single Rpg Ever Made. Because what you really do in every RPG game is exploring, fighting, running away, drinking health potions, getting a better equipment, … All of this can be achieved using a few buttons and a random generator.

Status: bare-minimum core done, not yet enjoyably playable.

Link: soon (?)

After touching your Android phone screen, this live wallpaper will spawn thousands of new bacteria from your dirty fingers. From this moment on, they live their own lives.

2014-07-08 19.59.14

This is simply a Game of Life machine with the input taken from where you put your finger while working with the phone. The effect is quite interesting and entertaining with various user-defined visual settings being available (size, color, speed, effects, …). You can watch whole colonies endlessly struggle for survival.

Project page:

Ray-tracing engine written in Haskell. Created as a school project.

The engine is quite basic. It reads a scene definition from a custom-format text file. It is able to use set operations to define even more complex objects. Apart from common geometric objects (cube, sphere, …), there are other object types like cameras and lights. Specifying lights in a scene also allows you to have some material effects and most importantly, shadows.

Project page: