Giovanni's Diary > Subjects > Programming >

My public repositories

Here is a list of my public repositories, with a brief description.

Highlights

micro-headers

A collection of high-quality, configurable, header-only libraries written in C99. The libraries are designed to be highly reusable, simple to maintain with little to no dependencies, and easy to integrate in your projects. website

  • micro-tests.h: lightweight testing framework, with multithread support and run-time settings
  • micro-log.h: configurable, thread safe logging framework in C99. With lots of features
  • micro-draw.h: a 2D software renderer
  • micro-lex.h: simple lexer for lisp-like languages, and others. See also justlex-rs crates.io
  • micro-arena.h: memory allocator (first fit). It implements the common memory functions from stdlib.h.
  • micro-flag.h: tiny library to parse command line arguments
  • micro-module.h: define, load, and unload runtime modules / plugins with a simple C99 API
  • micro-serde.h: serialization library for C99, in ~150 lines of code.
  • micro-bench.h: micro benchmarking library
  • micro-conf.h: library to parse config files
  • micro-hash.h: quick and dirty hash functions in C99, with some benchmarks
  • micro-la.h: linear algebra types and functions
  • hll.h: configurable, header-only implementation of HyperLogLog, used for approximating the cardinality of large multisets
  • bloom-filter.h: configurable, header-only implementation of bloom filters, a space-efficient probabilistic data structure that is used to test whether an element is a member of a set
  • rendezvous-hasher.h: dependency-free implementation of Rendezvous Hashing (a.k.a. Highest Random Weight hashing), useful for distributing keys across a dynamic set of nodes
  • consistent-hasher.h: implementation of consistent hashing, alternative to rendezvous-hashing
  • hashmap.h: implementation of an hashmap for any type
  • hashset.h: implementation of an hashset for any type
  • llist.h: type-safe, generic doubly-linked list in C99
  • liblaunchpad.h: abstraction layer over Novation's Launchpad S through ALSA, as an header-only C99 library
  • micro-example.h: example header-only library in C99 used as a template project, in the style of the great micro-headers
  • game-of-life.h: Conway's Game of Life logic implementation

Related projects:

  • micro-style.css: minimal, simple, tunable style for your websites
  • micro-website: generate a static website from markdown files
  • micro-templating.c: generate a file from a template, in ~200 lines of code
  • micro-timerd: client-server application to start, stop and list timers
  • micro-audio.c: tiny wrapper over miniaudio for managing audio sounds and streams
  • micro-sprite: simple drawing tool.
  • lkde-tool: develop and test kernel patches and applications in multiple kernel branches, trees, architectures and configurations.
  • xorcrypt.rs: encrypt / decrypt files with XOR encryption
  • mapkg: my packet manager

Demos

Projects showcasing how to use various technologies.

  • fft.c: implementation of Discrete Fourier Transform (DFT) and Fast Fourier Transform (FFT) in C99, with a bonus cool music visualization.
  • povOS: x86_64 bare metal playground and bootloader
  • ld-preload-sample: sample LD_PRELOAD demonstration to replace libc functions
  • ebpf-c-sample: sample project for an eBPF program + loader in C with libbpf and clang
  • opentelemetry-cpp-sample: sample C++ application with OpenTelemetry instrumentation to emit telemetry data
  • linux-kernel-module: hello world kernel module with a full developement setup using qemu
  • micro-gl-sample: simple setup project for OpenGL graphics.
  • x509-examples: examples for generating and storing an RSA key pair and a self-signed x509 certificate (RFC 5980), in C and Go
  • go-chat-server: a server and client for a minimal text-based chat in Go
  • elixir-blockchain: a simple blockchain library implemented in elixir.
  • santOS: a general purpose microkernel for i386.

Misc

Gists

Code extracted from my other projects that can be easily reused, or implementation of simple algorithms.

  • unix_server.c: Create an unix socket server that reads data sent to it
  • inet_server.c: Create an inet server that reads data sent to it
  • set_signals.c: Setup an handler for various POSIX signals
  • sdl_window.c: Create an SDL3 window and poll events
  • mmap_file.c: Read a file's contents using mmap, faster than read(2). Neat optimization on POSIX systems
  • traverse_dir.c: Traverse a directory recursively and call handle_file on each file
  • djb2.c: Simple hash function for strings
  • lcg.c: LCG algorithm for fast pseudo random number generation
  • utils.h: Utility macros for C projects
  • mandelbrot.c: Get the number of iterations of a point in the Mandelbrot set
  • left_space.c: Get number of separator charactes from the left of a string in C99
  • clear_screen.c: Clear the terminal screen using ANSI control sequences
  • delta_time.c: Calculate the frame delta time and render a certain number of times per seconds in C99
  • time_sec.c: Get the time in seconds in C
  • xorshift_rng.c: xorshift algorithm for generating pseudo random numbers
  • Makefile: Simple Makefile template for C projects
  • CMakeLists.txt: Modern Cmake template for C++ projects
  • windows-commands.ps1: Useful Microsoft Windows commands
  • yt-dl-mp3.sh: Download mp3 music from youtube
  • replace-string.sh: Replace all occurrences of a string in all files recursively.
  • k-means.py: Implementation of k-means clustering in Python
  • scikit-sample.py: Example of using a ML model with scikit-learn
  • hello_world.asm: Hello world x86-64 assembly on Linux
  • black-and-white-screen.glsl: Use picom and a glsl shader to render the screen black and white
  • static-ip-over-ethernet: Set a static ip on two computers connected via ethernet so that they can communicate
  • knn.c: Implementation of KNN for supervised learning classification on a one-dimensional dataset in C
  • perceptron.c: Implementation of a perceptron for binary classification in C
  • generate-debuginfo: Separate debuginfo and executable in two different files
  • gcc-print-definitions: Print all the #define symbols and their values with gcc or clang
  • ohm-law: Ohm's law cheatsheet
  • calling-conventions-x86-32-64: Calling conventions for i386 and i686
  • sha1.c: sha1 implementation from nginx (src/core/ngx_sha1.c)
  • md5.c: md5 implementation from nginx (src/core/ngx_md5.c)

Setup

Custom configurations for my daily development setup and workflow.

My Favourite libraries

These are the libraries that I use the most in my projects and that I find incredibly useful.

  • RGFW (C99): when you just want to open a window in a cross-platform way, love it!
  • stb headers (C): great source of inspiration and knowledge. There are some other headers in the creator's website such as stb_malloc.c.
  • raylib (C99): simple 2D/3D graphics library
  • micro-headers (C99): my own cool libraries for all my other projects
  • csynth (C): A simple synth in C, very fun to explore the code, It is somewhat unusual and enlightening.
  • luigi (C): single header GUI framework in C. It is absurdly simple and well written, amazing read.
  • nginx (C): even if it is not a library, each source file is well divided from the others so that you can copy paste almost everything in your projects!
  • SDL (C): my goto library for writing desktop applications
  • miniaudio (C): my goto library to play and mix audio
  • SFML (c++17): another great multimedia library, more ideomatic for C++
  • moviepy (Python): edit videos from python
  • wren (C): the most elegantly implemented programming language I have ever seen

Minor Contributions

Minor contributions all over the interweb:

There are many more which are not really interesting or are not public, so I didn't mention them.

Check out my gists.


Travel: Programming, Index