Curriculum Vitae


Et Studiorum

CV

Keywords / Skills: Pharo Smalltalk, functional programming, logic programming, relational programming, microKanren, miniKanren, Kanren Light, delimited continuations, persistent data structures (skip-list, splay-heap, leftist-heap, binomial-heap, red-black-set, union-find, skew-binary random-access lists), FFI bindings, graph algorithms, graph theory, Bitcoin graph analysis, C#, .NET, TSQL, PostgreSQL, recursive queries, pivoting, LSTM, neural networks, predictive time-series analysis, Rust, igraph, libpq, C, timsort, kann neural network library, Python, Jupyter, data analysis, web crawling, CHICKEN Scheme, Scheme eggs, ZeroMQ, ConcurrentML, Standard ML, OCaml, Common Lisp, HOL Light, theorem proving, Riordan arrays, combinatorics, generating functions, linear algebra, theoretical computer science, compilers, computational complexity, mathematical logic, Roassal visualization, tree-sitter, poppler, pango/cairo, Lua, XMPP, JQuery, open source software.

Summary

Researcher and software developer with a PhD in Computer Science (Università degli Studi di Firenze, 2019). Background spans theoretical computer science (combinatorics, Riordan arrays, generating functions, logic programming), applied graph algorithms and large-scale graph analysis (including Bitcoin transaction graphs and public transport crowding estimation), and neural network / time-series modeling (LSTM). Long-standing open-source contributor, primarily in Pharo Smalltalk, with additional experience across Rust, C, C#/.NET, Python, and the Scheme/ML/Lisp family of languages.

Publications

  • Anna Bernasconi, Damiano Di Francesco Maesa, Matteo Loporchio, Andrea Marino, Massimo Nocentini, Laura Ricci. Systematizing Graph Models for Bitcoin and Designing Algorithms for Large-Distance Analysis. Submitted.
  • Daniela Bubboloni, Costanza Catalano, Marco Fanfani, Andrea Marino, Paolo Nesi, Massimo Nocentini. Public Transport Crowding Estimation via Temporal Graphs. Submitted.
  • Marco Maggesi, Massimo Nocentini. Kanren Light: A Dynamically Semi-Certified Interactive Logic Programming System. Accepted for communication to miniKanren 2020 — miniKanren and Relational Programming Workshop.
  • Donatella Merlini, Massimo Nocentini. Functions and Jordan canonical forms of Riordan matrices. Linear Algebra and its Applications, Volume 565, 15 March 2019, pp. 177–207.
  • Massimo Nocentini, Donatella Merlini. Crawling, (pretty) printing and graphing the OEIS. Working paper at DiSIA.
  • Donatella Merlini, Massimo Nocentini. Algebraic generating functions for languages avoiding Riordan patterns. Journal of Integer Sequences, Volume 21, Article 18.1.3, 2018.

Academic Experience

2024–2026 — Assegnista, Università degli Studi di Firenze, DISIA Research grant Grafi e applicazioni under the supervision of Prof. Andrea Marino.

2020 — Assegnista, Università degli Studi di Firenze, DIMAI Research grant Sviluppo, implementazione ed ottimizzazione di reti neurali LSTM per l’analisi predittiva di time series della grande distribuzione, under the supervision of Prof. Marco Maggesi and Dr. Alberto Mancini.

2019–2020 — Assegnista, Università degli Studi di Firenze, DISIA Research grant Economic Uncertainty and Fertility in Europe under the supervision of Prof. Daniele Vignoli.

2015–2018 — PhD Student in Mathematics, Computer Science and Statistics, Università degli Studi di Firenze (Dipartimento di Matematica, Informatica e Statistica) PhD program; the curriculum studiorum is available in a following section.

2013–2015 — Borsista, Università degli Studi di Firenze, Scuola di Ingegneria Post-graduate research fellowship Architetture e metodi per la cooperazione applicativa under the supervision of Prof. Enrico Vicario.

Professional Experience

Since 2019 — Libero professionista, Azienda che opera nel settore terziario e dei servizi Development on the Pharo Smalltalk platform and microservices-based architectures.

2013 — Sviluppatore, Negens Srl, Firenze, Italia Development of a middleware layer for sensor and actuator control: a Raspberry Pi daemon written in C# on the Mono platform, with each device interfacing via the XMPP protocol; web frontend using asynchronous events, built on JQuery.

2007–2012 — Sviluppatore, Comm.it, Firenze (FI) / Sesto Fiorentino (FI), Italia Development of applications on the .NET platform, both standalone and client-server architectures. Notable projects: maintenance, refactoring and development of an event-driven game system generator (sports betting slips, totocalcio), web-service integration with Sisal servers; refactoring and development of an accounting/management system, including invoice storage and manipulation, double-entry bookkeeping, and compilation of ledger and VAT registers.

2005–2006 — Sviluppatore, AnemoneLab, Scandicci, Italia Design and development of three websites and technical support on Linux machines.

Jul–Sep 2005 — Sviluppatore, Balena S.R.L., Firenze, Italia Development of a website for managing production activities and simulating cost variations, and a local intranet site.

Jun–Jul 2005 — Stagista, Exitech, Firenze, Italia Drafted the user manual (paper and digital) for a management system developed by the company, translated it into English, and performed analysis and management of the system’s database.

Sep 2004–Jan 2005 — Sviluppatore, Balena S.R.L., Firenze, Italia Design and development of a management system covering both production and accounting departments.

Jun–Jul 2004 — Stagista, I.T.I.S Antonio Meucci, Firenze, Italia Built the foundations for a project to automatically manage absences and tardiness using a barcode reader.

Education

2019 — PhD in Informatica, Università degli Studi di Firenze, Scuola di Scienze Matematiche Fisiche e Naturali Thesis: An algebraic and combinatorial study of some infinite sequences of numbers supported by symbolic and logic. Supervisor: Prof. Donatella Merlini.

2015 — Laurea Magistrale in Informatica, Università degli Studi di Firenze, Scuola di Scienze Matematiche Fisiche e Naturali — Grade: 110 e lode Thesis: Patterns in Riordan Arrays. Advisor: Prof. Donatella Merlini. Main subjects: theoretical computer science, discrete mathematics.

2012 — Laurea in Informatica, Università degli Studi di Firenze, Scuola di Scienze Matematiche Fisiche e Naturali — Grade: 110 Thesis: Analisi di reti metaboliche basata su proprietà di connessione. Advisor: Prof. Pierluigi Crescenzi. Main subjects: theoretical computer science, discrete mathematics.

2000–2005 — Tecnico Industriale Informatica (progetto ABACUS), Istituto Tecnico Industriale Antonio Meucci — Grade: 100 Main subjects: Informatica, matematica, sistemi, elettronica.

Skills and Competences

Languages

  • Native language: Italian
  • Other languages: English (B2: comprehension, listening, spoken production, written production, spoken interaction)

Social Competences

Practicing Judo, which teaches working toward goals through mutual cooperation. Occasional volunteer service with CUI — Ragazzi del Sole, an association supporting people with disabilities.

Organizational Competences

During the period at Comm.it, gained extensive experience in software production process organization, mentored by people who had worked in University of Florence labs. Projects were always developed in teams, which was valuable for understanding both technical and human problems and how to address them.

Technical Competences

Most professional projects targeted the .NET platform, written in C#, and often relied on relational databases: TSQL and, to a greater extent, PostgreSQL, including complex constructs such as pivoting and recursive query manipulation.

In recent years the primary research and development environment has been Pharo Smalltalk, where numerous open-source packages are developed and maintained: functional and persistent data structures (skip-list, splay-heap, leftist-heap, binomial-heap, red-black-set, union-find, skew-binary random-access lists), a port of microKanren/miniKanren for relational logic programming, a port of delimited continuations (delimcc.st), and several bindings to C libraries (libpq, tree-sitter, poppler, pango/cairo, Lua) to extend the Pharo image with native functionality. The Roassal visualization engine is used to graphically represent graphs and data structures.

On the functional and logic programming side (Standard ML, OCaml, Common Lisp, Scheme), work with CHICKEN Scheme includes writing several eggs (a ZeroMQ binding, a small HTTP server, a port of ConcurrentML, functional data structures); the Little Books series by Friedman and Felleisen (including The Reasoned Schemer) was ported from Scheme to Standard ML under an MIT license; and miniKanren and theorem provers such as HOL Light have been studied in depth. In Rust, algorithms on large-scale graphs were implemented (sampling-based estimation of average vertex distance, bindings to igraph and libpq), while in C work covered basic algorithms and data structures (timsort, unstratified tree drawing) and a small neural network library (kann), later called from Pharo via FFI.

Python and Jupyter are used for data analysis, rapid prototyping, and research support tools (e.g. a crawler/grapher for the OEIS). Ongoing personal interest in the principles of object-oriented languages, particularly Smalltalk and Python.

All developed code is published on GitHub, reflecting a commitment to freely accessible knowledge.

Informatics Competences

Strong interest in theoretical computer science, particularly complexity theory, compilers, and logic — approached in part through the study of LISP and the books of Raymond Smullyan. The master’s thesis work sparked interest in the combinatorial interpretation of classes of objects and their algebraic manipulation via the theory of Riordan arrays.

Artistic Competences

Study of chess endgames and the game of Go.

Driving License

Category B.

Additional Information

Open-source projects: https://github.com/massimo-nocentini

Consent given for personal data processing pursuant to Italian law no. 196/03.

Substitute declaration of certification and substitute declaration of notoriety pursuant to D.P.R. 445/28.12.2000. The undersigned Massimo Nocentini, born in Firenze on 08/01/1986, resident at Via del Ronco Corto 98, Firenze 50143, aware of the criminal liability for false statements under art. 76 of D.P.R. 445/2000, and aware pursuant to art. 13 of EU Regulation 2016/679 (GDPR), declares pursuant to artt. 46 and 47 of D.P.R. 445/2000.


{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Massimo Nocentini",
  "givenName": "Massimo",
  "familyName": "Nocentini",
  "email": ["massimo.nocentini@gmail.com", "massimo.nocentini@unifi.it"],
  "telephone": "+39 320 116 2059",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Via Ronco Corto 98",
    "postalCode": "50143",
    "addressLocality": "Firenze",
    "addressCountry": "IT"
  },
  "birthDate": "1986-01-08",
  "nationality": "Italian",
  "url": "https://github.com/massimo-nocentini",
  "sameAs": ["https://github.com/massimo-nocentini"],
  "alumniOf": [
    {
      "@type": "CollegeOrUniversity",
      "name": "Università degli Studi di Firenze"
    }
  ],
  "hasCredential": [
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "PhD",
      "name": "PhD in Informatica",
      "dateCreated": "2019"
    },
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "Master's Degree",
      "name": "Laurea Magistrale in Informatica",
      "dateCreated": "2015"
    },
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "Bachelor's Degree",
      "name": "Laurea in Informatica",
      "dateCreated": "2012"
    }
  ],
  "knowsLanguage": ["Italian", "English"],
  "knowsAbout": [
    "Pharo Smalltalk", "functional programming", "logic programming", "miniKanren",
    "graph algorithms", "graph theory", "C#", ".NET", "PostgreSQL", "LSTM",
    "neural networks", "Rust", "Python", "Scheme", "Standard ML", "OCaml",
    "Common Lisp", "Riordan arrays", "combinatorics", "theoretical computer science",
    "compilers", "computational complexity", "mathematical logic"
  ],
  "jobTitle": "Researcher / Software Developer"
}

Studiorum

Keywords / Skills: Riordan arrays, algebraic combinatorics, generating functions, graph theory, Bitcoin graph analysis, temporal graphs, relational logic programming, microKanren, miniKanren, Kanren Light, HOL Light, theorem proving, mechanized mathematics, delimited continuations, persistent data structures, metaprogramming, LSTM, neural networks, time-series analysis, natural language processing, word embeddings, named entity recognition, Spacy, Pharo Smalltalk, CHICKEN Scheme, Standard ML, OCaml, Common Lisp, Rust, C, Python, Jupyter, C#, .NET, SQL, TSQL, PostgreSQL, dancing links, Sudoku, N-Queens, Roassal, FFI, SRFI 41, lazy evaluation, SECD machine, type inference, computational complexity theory, formal languages, functional programming, open source.

Current Position

Since August 2024, research fellowship (assegno di ricerca) at the Department of Statistics, Computer Science, Applications (DISIA), University of Florence, working on the project Graphs and Applications, under the supervision of Prof. Andrea Marino. In parallel, since January 2019, freelance software developer (VAT id IT-06894000485).

Education

  • Ph.D. in Computer Science, February 2019, University of Florence (School of Mathematical, Physical and Natural Sciences). Thesis: An algebraic and combinatorial study of some infinite sequences of numbers supported by symbolic and logic. Supervisor: Prof. Donatella Merlini.
  • M.Sc. in Computer Science, 2015, University of Florence — 110/110 cum laude. Thesis: Patterns in Riordan Arrays. Advisor: Prof. Donatella Merlini.
  • B.Sc. in Computer Science, 2012, University of Florence — 110/110. Thesis: Analysis of metabolic networks based on connectivity properties. Advisor: Prof. Pierluigi Crescenzi.
  • Industrial Technician diploma in Computer Science (ABACUS project), 2005, Istituto Tecnico Industriale Antonio Meucci, Florence — score 100/100.

Research Path

The common thread running through this research is the combinatorial and algebraic study of integer sequences and discrete structures, together with a broader, ongoing interest in computational foundations (complexity theory, formal languages, logic and functional programming) pursued beyond institutional settings as well.

2015–2018 (Ph.D.) — Worked on the theory of Riordan arrays, continuing the line of research opened in the master’s thesis: studied Jordan canonical forms and functions of Riordan matrices in collaboration with Prof. Donatella Merlini (published in Linear Algebra and its Applications, 2019), and algebraic generating functions for languages avoiding Riordan patterns (Journal of Integer Sequences, 2018). Also developed software tools to automatically query and present data from the OEIS (On-Line Encyclopedia of Integer Sequences), combining mathematical interests with software design.

2019–2020 — Research fellow on two separate projects: computational demography (Economic Uncertainty and Fertility in Europe, supervised by Prof. Daniele Vignoli, DISIA) and applied research on LSTM neural networks for predictive time-series analysis in large-scale retail (supervised by Prof. Marco Maggesi and Dr. Alberto Mancini, DIMAI). During this period, continued work with Marco Maggesi on Kanren Light, a dynamically semi-certified relational logic programming system, presented at the miniKanren 2020 workshop.

Since 2024 — Returned to graph-theoretic topics within the Graphs and Applications project (supervised by Prof. Andrea Marino, DISIA), producing two papers under submission: one on systematizing graph models for Bitcoin and designing algorithms for large-distance analysis (with A. Bernasconi, D. Di Francesco Maesa, M. Loporchio, A. Marino, L. Ricci), and another on estimating public transport crowding via temporal graphs (with D. Bubboloni, C. Catalano, M. Fanfani, A. Marino, P. Nesi).

Since 2019 (parallel) — Freelance software developer, mainly on the Pharo Smalltalk platform and microservice-based architectures, supporting hands-on exploration of persistent data structures, relational logic programming and metaprogramming techniques, much of which is published and maintained on GitHub.

Research Philosophy

The research concerns (i) the study of formal methods and their applications to the analysis of algorithms and data structures, (ii) supporting them with software abstractions implemented in functional and logic programming languages, and (iii) moving toward the broader field of mechanized mathematics. The formal foundation for this approach comes from analytic combinatorics — generating functions, Riordan arrays, the symbolic method — as developed by Flajolet and Sedgewick, Knuth, and Graham, Knuth and Patashnik, complemented by Harrison’s work on automated reasoning and HOL Light, and by Friedman, Felleisen and Byrd’s Little books series on relational and functional programming.

This formal background is paired with combinatorial interpretations of analytic results — in the spirit of Benjamin and Quinn, and of Stanley’s Enumerative Combinatorics — expressed, where possible, in terms of lattice paths, urn models, bracelet configurations or board tilings. Abstract, formal results are best understood when paired with working code that exhibits their structure directly; this is the parallel path leading to writing Lisp, Python, OCaml, Smalltalk and Scheme alongside more formal derivations, and that motivated an extension of HOL Light’s goal/tactic mechanism to support a μKanren-style relational paradigm.

Prior Professional Experience

2004–2015 (before Ph.D.) — Several years of experience as a software developer, mainly on the .NET/C# platform, working for companies in the Florence area (Comm.it, Negens Srl, Balena S.R.L., AnemoneLab, Exitech) on projects including: a betting-system generator for the Italian Sisal circuit, authenticating dealers over secure channels and producing reports from live odds feeds; an accounting and VAT-register system for small businesses, interfacing with MSSQL using pivot tables, cursors, views and stored procedures, developed jointly with a team in Milan; and a middleware layer for sensor/actuator control on Raspberry Pi boards, interfacing C code with Python scripting over XMPP. This experience provided the practical foundation for the later academic path.

Selected Publications

  • 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. Submitted.
  • 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 and Relational Programming Workshop, 2020.
  • D. Merlini, M. Nocentini. Functions and Jordan canonical forms of Riordan matrices. Linear Algebra and its Applications, 565:177–207, 2019.
  • D. Merlini, M. Nocentini. Algebraic generating functions for languages avoiding Riordan patterns. Journal of Integer Sequences, 21, Article 18.1.3, 2018.
  • D. Merlini, M. Nocentini. Colouring Catalan triangle. In preparation.
  • M. Nocentini, D. Merlini. Crawling, (pretty) printing and graphing the OEIS. Working paper, DiSIA.

Conferences

  • ESUG 2019, Cologne, Germany, August 2019 — talk: Dancing Links: an educational pearl.
  • ESUG 2018, Cagliari, Italy, September 2018 — volunteer student; talk: Relational Programming in Smalltalk.
  • <Programming> 2018, Nice, France, April 2018 — participant.
  • ICFP 2017, Oxford, UK, September 2017 — volunteer student.
  • EuroPython 2017, Rimini, Italy, July 2017 — participant.
  • ECOOP 2016, Rome, Italy, July 2016 — volunteer student.
  • 2nd International Symposium on Riordan Arrays and Related Topics, Lecco, Italy, July 2015 — talk on the modular Catalan triangle C≡₂.

Seminars and Schools

  • Ph.D. defense talk, University of Florence.
  • Yearly summaries of Ph.D. activities (1st, 2nd and 3rd year), University of Florence.
  • Logic and Relational Programming, Logic Department, University of Florence.
  • Algebraic generating functions avoiding Riordan patterns and OEIS tools, AORC Open School, Sungkyunkwan University, South Korea, 2017.

Teaching

Taught two classes on SymPy to introduce symbolic computation on top of Python, within the Analysis of Algorithms course given by Prof. Donatella Merlini at the University of Florence, and ported the corresponding lab sessions from Maple to Python. Between April 2019 and March 2020, under a scholarship with Prof. Daniele Vignoli (Detecting economic uncertainty through press and social media), applied natural language processing techniques — including word embeddings trained on an Italian Wikipedia snapshot and a Spacy NER model for Italian — to a corpus of newspaper articles.

Ph.D. Coursework

  • Introduction to process calculi and related type systems (R. Pugliese, I. Castellani)
  • Mathematical methods for Computer Science (E. Barcucci)
  • Analysis of algorithms and data structures through Riordan arrays (D. Merlini)
  • Bayesian methods for high-dimensional data (F. Stingo)
  • Statistical learning (G.M. Marchetti)
  • Advanced programming techniques (L. Bettini)
  • Mathematical logic (B. Donati)

Selected Open-Source Projects

A more complete and up-to-date list is available at https://github.com/massimo-nocentini. A few projects that best represent these interests:

  • dancinglinksst — a Smalltalk implementation of Knuth’s Dancing Links technique, including the ZDD-based extension, Roassal2 visualizations, and N-Queens/Sudoku test cases.
  • microkanrenst / microkanrenpy — Smalltalk and Python implementations of μKanren (triangular substitutions, complete solution enumeration, structural induction via double dispatch), the former presented at ESUG 2018.
  • kanren-light — a parallel goals/tactics mechanism for Harrison’s HOL Light theorem prover, inspired by μKanren.
  • srfi-41st — a Smalltalk port of SRFI 41 for lazy programming, including formal power series manipulation and monadic structures for relational interpreters.
  • oeis-tools — a Python suite (crawler, pretty-printer, grapher) to mine the OEIS, using async/await.
  • on-scheme — explorations in Scheme: continuations, μKanren, union-find, lazy streams with memoization, and Landin’s SECD machine.
  • reasoning-about-little-books / on-the-little-schemer — Standard ML and Common Lisp reworkings of Friedman and Felleisen’s Little books series, with several derivations of the Y combinator.
  • theory-of-programming-languages — a study of type inference following Pierce’s Types and Programming Languages, implemented in SML/NJ.
  • network-reasoner — a gas/water distribution network simulator, joint work with eng. Fabio Tarani, implemented in C# on Mono.

Technical and Computational Skills

Languages and environments used regularly: Pharo Smalltalk (persistent data structures, FFI bindings to C libraries, the Roassal visualization engine), CHICKEN Scheme, Standard ML, OCaml, Common Lisp, Rust, C, Python/Jupyter, C#/.NET, SQL (TSQL, PostgreSQL). Cross-cutting research interests: graph theory, algebraic combinatorics, relational logic programming (miniKanren), delimited continuations, computational complexity theory.

Languages

Italian (native); English (B2 in reading comprehension, listening, spoken production and interaction, and writing).

Personal Data Processing

Consent given for the processing of the personal data contained in this curriculum in accordance with EU Regulation 2016/679 (GDPR) and applicable law.


{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Massimo Nocentini",
  "givenName": "Massimo",
  "familyName": "Nocentini",
  "email": ["massimo.nocentini@gmail.com", "massimo.nocentini@unifi.it"],
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Via Ronco Corto 98",
    "postalCode": "50143",
    "addressLocality": "Florence",
    "addressCountry": "IT"
  },
  "birthDate": "1986-01-08",
  "url": "https://github.com/massimo-nocentini",
  "sameAs": ["https://github.com/massimo-nocentini"],
  "affiliation": {
    "@type": "CollegeOrUniversity",
    "name": "Università degli Studi di Firenze, DISIA"
  },
  "alumniOf": [
    {
      "@type": "CollegeOrUniversity",
      "name": "Università degli Studi di Firenze"
    }
  ],
  "hasCredential": [
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "PhD",
      "name": "Ph.D. in Computer Science",
      "dateCreated": "2019-02"
    },
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "Master's Degree",
      "name": "M.Sc. in Computer Science",
      "dateCreated": "2015"
    },
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "Bachelor's Degree",
      "name": "B.Sc. in Computer Science",
      "dateCreated": "2012"
    }
  ],
  "knowsLanguage": ["Italian", "English"],
  "knowsAbout": [
    "Riordan arrays", "algebraic combinatorics", "generating functions", "graph theory",
    "relational logic programming", "microKanren", "miniKanren", "HOL Light",
    "theorem proving", "mechanized mathematics", "Pharo Smalltalk", "CHICKEN Scheme",
    "Standard ML", "OCaml", "Common Lisp", "Rust", "C", "Python", "C#", ".NET",
    "PostgreSQL", "TSQL", "LSTM neural networks", "natural language processing",
    "computational complexity theory", "functional programming"
  ],
  "jobTitle": "Research Fellow / Software Developer"
}