Hi, I am Giovanni.
I am a software developer working on Linux system libraries and tools, and a bit of everything else! [CV]. Most of my open source software is hosted here on GitHub.
Get in contact with me:
- preferably via email at [email protected],
- on mastodon @[email protected].
- check out my blog / diary
- on IRC, I go by "santo_".
Below you can find a list of some of my projects, you can also click here to visualize them by category:
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
- Projects that use this renderer: cosu, cgis, game-of-life (wasm)
- 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-sprite: simple drawing tool.
- lkde-tool: develop and test kernel patches and applications in multiple kernel branches, trees, architectures and configurations.
- mapkg: my packet manager
- Brenta Engine: a 3D renderer and game engine in modern C++, with a custom ECS framework. website
- haplolang: a Lisp-like, s-expression based, imperative, strongly typed programming language
- The Design and Implementation of Haplolang: my notes after implementing the language
- kivebpf: eBPF-powered file access monitoring Kubernetes operator
- The Kibebpf website: more documentation about the operator
- Baldo scanner: malware scanner daemon for linux using a kernel module
- tenno-tl: a partial re-implementation of the c++26 standard library
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.
- 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.
- minipiano.c: play the piano using sinewaves and your keyboard!
- cosu!: a rhythm game written in C, (not yet fully) compatible with osu!mania maps.
- snakepp: simple demo of snake in C++, using SFML
- Introduction-to-machine-learning: useful notes for students studying for an introductionary course to Machine Learning, or to anyone interested in the subject
- design-patterns-cpp: implementation of common design patterns in C++, useful reference for many projects
- modern-cpp-template: a template for c++ libraries
- parallel-computing-cpp: MPI and OpenMP algorithms and benchmarks
- cycloidal-curves: cycloidal curves interactive visualization. website
- fixmi: business management software using microservices.
- repo-graph: visualize GitHub repositories through a graph based on their topics.
- Algorithms and Data Structure course (Italian): high quality notes from my Algorithms university course
- react-express-template: a meplate for web applications using node, express, typescript, react, tailwind, docker.
- webgl-3D-renderer: a 3D renderer in WebGL and Angular
- tiny-rss: RSS feeds generator for org mode
- musync: download music declaratively
- ssap: local password encryption manager written in in Rust
- rust-lc3: implementation of a virtual machine for LC-3
- robotUI: bevy visualizer for Advanced Programming 2023 @Unitn
- rust-pomodoro-timer: TUI study timer written in Rust
- rust-music-player: a TUI music player written in Rust
- broutines: goroutines and coroutines implemented in C
- stock-exchange-py: simple logic implementation of a stock exchange in Python.
- chttps: https server in C with server-side rendering
- cchecker: borrow checker in C++
- regEZ: fully constexpr regex implementation in modern C++
- go-ebpf: example eBPF program in go
- risto89: online tickets market in java
- ledger-board: highly scalable transaction producer/consumer app, built with Kubernetes, Kafka, Django, Angular, Nginx, Redis, Celery, Docker
- how-to-root-samsung-galaxy-j5: instructions to root a Samsung Galaxy J5
- hypr-nerd-gestures: control hyprland through hand gestures, using openCV
- launchpad-app-launcher: launch commands from a novation's launchpad
- modern-python-template
- youtube-minuature-generator
- many more...
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)
Custom configurations for my daily development setup and workflow.
- .emacs.d: my emacs configuration
- dwm: my fork of DWM and DWL
- init.lua: simple Neovim configuration without too much bloat
- i3config: i3 configuration, I use it as a fallback
- lfs: my Linux From Scratch distribution
- nixos-dotfiles: my (outdated) nixos setup
- obsidian-chill-theme: my custom obsidian theme
- obsidian-advanced-slided-theme: custom theme for obsidian advanced slides
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
Minor contributions all over the interweb:
- riscv/riscv-opcodes#375: Correct parse.py example
- ColleagueRiley/RGFW#329: fix example program



