This page contains some of my hobby projects.

Threading From Scratch

Threading From Scratch 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
Silly Invaders

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

Self-driving cars

A bunch of projects I have done in the context of Udacity's Self-driving car nanodegree:

Deep Learning
Deep Learning

Neural Network models that caught my interest; typically implemented "from scratch" in TensorFlow:

Software Toys
Software Toys

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.
Scrapy Do
Scrapy Do

Scrapy Do is a daemon that provides a convenient way to run Scrapy spiders. It can either do it once - immediately; or it can run them periodically, at specified time intervals. It's been inspired by scrapyd but written from scratch.