I'm a researcher and software developer from Tuscany, Italy, with a PhD in Computer Science from the University of Florence. I work on graph algorithms and large-scale network analysis, and I spend a lot of time with programming languages: Scheme, Smalltalk, Lua, Rust and C.
- 🌐 Homepage and blog: massimo-nocentini.github.io (RSS)
- 📄 Curriculum vitae et studiorum: online, LaTeX sources
- ✉️ massimo.nocentini@gmail.com · massimo.nocentini@unifi.it
- Graphs and networks. Research fellow at DiSIA (2024–2026, Graphs and applications, with Prof. Andrea Marino): graph models of the Bitcoin transaction network, algorithms for graphs with large diameter, and crowding estimation in public transport via temporal graphs.
- Relational and logic programming. µKanren and miniKanren in Python, Smalltalk and Scheme, plus Kanren Light, a logic programming system built on HOL Light (with Prof. Marco Maggesi).
- Combinatorics. My PhD (2019, advisor Prof. Donatella Merlini) studied Riordan arrays, generating functions and the OEIS, with symbolic and logic tools.
- Software development. Freelance since 2019 on Pharo Smalltalk and microservice architectures. Before that I spent years in industry on .NET, C# and PostgreSQL.
- A. Bernasconi, D. Di Francesco Maesa, M. Loporchio, A. Marino, M. Nocentini, L. Ricci. Systematizing Graph Models for Bitcoin and Designing Algorithms for Large-Distance Analysis, IEEE Transactions on Network Science and Engineering, 2026.
- D. Bubboloni, C. Catalano, M. Fanfani, A. Marino, P. Nesi, M. Nocentini. Public Transport Crowding Estimation via Temporal Graphs, submitted.
- M. Maggesi, M. Nocentini. Kanren Light: A Dynamically Semi-Certified Interactive Logic Programming System, miniKanren 2020 workshop (code).
- D. Merlini, M. Nocentini. Functions and Jordan canonical forms of Riordan matrices, Linear Algebra and its Applications 565, 2019.
- D. Merlini, M. Nocentini. Algebraic generating functions for languages avoiding Riordan patterns, Journal of Integer Sequences 21, 2018.
- M. Nocentini, D. Merlini. Crawling, (pretty) printing and graphing the OEIS, DiSIA working paper, 2018 (code).
Theses: PhD (defense slides), master (Patterns in Riordan arrays).
Graphs, in Rust and C
- igraph-rs: Rust bindings for igraph (post)
- webgraph-clib-rs: a C library over webgraph-rs compressed graphs; webgraph-foreign-algorithms-rs runs igraph and rustworkx algorithms on them
- avgdist-rs: a sampling algorithm to estimate the average distance in graphs with a large diameter
- utxo2webgraph-rs, utxoscope-rs: Bitcoin UTXO graphs (post)
- non-layered-tidy-trees.c: drawing non-layered tidy trees in linear time, also in Rust
- libpq-rs, judy-rs: bindings for PostgreSQL's libpq (post) and Judy arrays
Scheme and relational programming
- aux.scm: auxiliary definitions and macros for CHICKEN Scheme (streams, nondeterminism, HANSEI, unit testing)
- concurrent.scm: Concurrent ML for CHICKEN Scheme (post)
- wolfram.scm: talking to the Wolfram Engine from Scheme
- microkanrenpy, microkanrenst, kanren-light: µKanren in Python, Smalltalk and OCaml/HOL Light
Pharo Smalltalk
- Containers-*: persistent and classic data structures (skip lists, splay, leftist and binomial heaps, red-black sets, union-find, SBRAL, …), collected in the Booklet-DSst booklet
- srfi-41st (streams), delimcc.st (delimited continuations), FFI bindings to Lua, tree-sitter, Wolfram and poppler
Knuth, literate programming and Lua
- sgb.cweb, bdd-zdd.cweb, SAT.cweb, simpath.cweb: working through Knuth's programs (post)
- exactcover.lua (dancing links), toposort.lua, and Lua bindings for curl, cairo and PostgreSQL