This page contains some of my hobby projects.
Thread Bites is a POSIXish threading library written in C. Its primary purpose was to teach me what it takes to implement pthreads "from first principles" on top of x86-64 Linux. It has:
- a capability to create, join and detach threads
- mutexes, rw-locks, condition variables
- thread-local storage
- cancellation, both deferred and asynchronous
- support for scheduling, including priority mutexes
Silly Invaders is a Space Invaders type game. The goal here is to familiarize myself with microcontroller programming without relying on any black boxes. It features:
- its own linker script and start-up code with the ability to override the default interrupt handlers using strong symbols
- a heap management system with a guard region using MPU
- a hardware abstraction layer providing a generic interface for accessing GPIOs, UARTs, and SSI modules and supporting non-blocking, asynchronous, and DMA modes
- a display interface using rasterized TrueType fonts for displaying text
- a digital-to-analog converter that may be used to generate sound
- a capability to play RTTTL (Nokia) tunes
- a game rendering engine using polymorphic display objects
- a simple RTOS with a scheduler and synchronization mechanisms
A bunch of projects I have done in the context of Udacity's Self-driving car nanodegree:
- a traffic sign classifier using TensorFlow that gets an accuracy of 98.7% on a subset of German road signs, which is just about human performance
- a regression model Keras that learned how to drive by observing how I do it
- a lane lines and vehicle detector using OpenCV, support vector machines, and histograms of oriented gradients
- Kalman and particle filters
- a Deep Learning model for Semantic Image Segmentation of road scenes
- a Path Planner computing safe and comfortable way through highway traffic
A bunch of toy programs useful here or there:
- s3proxy is a FastCGI script that reads data from a protected AWS S3 bucket and makes it available to the caller. It's useful when you want to have some of your data accessible with HTTP Authentication, which is not supported by AWS.
- Jail is a helper script that I use to sandbox GUI applications using Docker and Xephyr.
- Envy is a small program that can be used in the shebang line of a script and set up any environment you want before calling the interpreter.