Skip to content
View San7o's full-sized avatar

Highlights

  • Pro

Block or report San7o

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don't include any personal information such as legal names or email addresses. Markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
San7o/README.md

Giovanni Santini

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:

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
  • 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

Advanced projects

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.
  • 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

Minor Contributions

Minor contributions all over the interweb:

Pinned Loading

  1. micro-headers micro-headers Public

    A collection of high-quality, configurable, header-only libraries written in C99.

    C 1

  2. kivebpf kivebpf Public

    Kive is a free and open source eBPF-powered file access monitoring Kubernetes operator.

    C 9 1

  3. Brenta-Engine Brenta-Engine Public

    An Entity Component System 3D engine written in modern C++ and OpenGL.

    C++ 6 1

  4. valFuzz valFuzz Public

    valFuzz is a modern cross-platform, multi-threaded testing, fuzzing and benchmarking library for C++17 onwards.

    C++

  5. Baldo-Scanner Baldo-Scanner Public

    Baldo is a malware scanner for Linux. It does static analysis with signatures or YARA rules, firewall, sandboxing, support for online malware databases.

    C++ 5

  6. haplolang haplolang Public

    Haplolang an s-expression based, imperative, interpreted programming language implemented in C, greatly inspired by Emacs Lisp.

    C 1