Init 1

Some pet projects

Personal pet projects, mostly learning experiences and experimentations, all hosted on GitHub.

llb - Dead simple event-driven load balancer


(L)ittle(L)oad(B)alancer, a dead simple event-driven load-balancer (< 2000 sloc). Supports Linux (and arguably OSX) through epoll and poll/select (kqueue on BSD-like) as fallback, it uses an event-loop library borrowed from Sol. It currently supports a bunch of most common balancing algorithms like round-robin, weighted round-robin, leastconn, hash-balancing and of course random-balancing.

codepr/llb

Sol - Lightweight MQTT broker


Oversimplified MQTT broker written from scratch, which mimics mosquitto. Implemented for learning how the protocol works, for now it supports almost all MQTT v3.1.1 commands on linux platform.

codepr/sol

EV - Lightweight event-loop library based on multiplexing IO


Light event-loop library loosely inspired by the excellent libuv, in a single small (< 1000 sloc) header, based on the common IO multiplexing implementations available, epoll on linux, kqueue on BSD-like and OSX, poll/select as a fallback, dependency-free.

codepr/ev

RLB - Rough-and-ready lightweight load-balancer in Rust


(R)ust(L)oad(B)alancer, simple reverse-proxy written to learn the language (porting of llb).

codepr/rlb

Drain - A sewer of streams


Fun project, aims to channel multiple sources into a single stream which can be used to perform some operations directly on each new record.

codepr/drain

TTS - Transient Time Series, a naive implementation of a time series DB


Transient Time Series, lightweight in-memory time-series database. Rudimental TSDB without persistence, allow to create named time-series and store points with nanosecods precision.

codepr/tts

Timepipe - Simple Go implementation of an in-memory TSDB


Lightweight in-memory time series database, it’s a rewrite of TTS aimed to learn and improve with Go programming language.

codepr/timepipe

Narwhal - PoC of a simple continuous integration system


PoC of a very simple CI system, consisting of 3 microservices using RabbitMQ and RPC as communication channels.

codepr/narwhal

Tasq - python task queue


Minimal task-queue that allow the scheduling of job functions to be executed on local or remote workers, supports ZMQ, redis and rabbitMQ as communication channels.

codepr/tasq

Aiotunnel - HTTP(S) tunneling for local and remote port-forwarding


Yet another HTTP tunnel, supports two modes, a direct one which open a local port on the host machine and redirect all TCP data to the remote side of the tunnel, which actually connect to the desired URL. A second one which require the client part to be run on the target system we want to expose, the server side on a (arguably) public machine (e.g. an AWS EC2) which expose a port to communicate to our target system through HTTP.

codepr/aiotunnel