Marco Selvatici

Projects

As BEng thesis I created an open source electronic circuits designer and simulator. The application is much more modern and intuitive than existing alternatives, which were common choices in education. Starting from 2020, Imperial College Electrical, Electronic and Computer Engineers will be using my application to learn Digital Electronics.

The application (source code on github) was almost entirely developed using the F# functional programming language, together with React and Electron.

During the third year of university I lead a team of 4 students to design and implement Blue, a functional programming language with a Hindley Minler type system. Blue features several data types (including untyped lists), two runtimes (SKI reducer and Beta reducer), type inference and type checking. The language also supports currying, lambda functions and higher order functions. We also created an IDE with syntax highlighting to easily run and test Blue code.

In order to test Blue's capabilities we used it to implement a series of libraries which include common functions such as map, reduce, fold and sort. We then used these libraries to implement a lexer for Blue using Blue itself.

The Blue language (source code on github) was developed with the F# functional programming lanuage. The IDE was created with Electron.

RAFT is a well known distributed algorithm to reach consensus via leader election in an eventually synchronous system.

During the third year of university, I implemented it using Elixir, a functional programming language for distributed systems. The system was tested and analysed in a series of scenarios, with several faulty or slow processes. These had the aim to simulate a real world scenario where servers or clients might crash.

The algorithm (source code on github) was developed with the Elixir functional programming lanuage. Elixir makes use of the Erlang VM, which allows to spawn many lightweight "processes" which communicate among each other via message-passing.

During the second year of university, I wrote a compiler able to compile a subset of C into MIPS assembly, which can then be assembled and executed using the MIPS CPU simulator I created in another project. This project also features a transpiler from a subset of C to Python.

The compiler (source code on github) supports loops, if-statements, pointers, arrays, global variables, cross-file linking, recursive functions and more.

The compiler has been implemented in C++, using flex for lexing and yacc for parsing.

During the second year of university, I created a simulator for the MIPS CPU architecture. The simulator (source code on github) can successfully execute binaries compiled and assembled for such an architecture.

The simulator has been implemented in C++.

At the end of first year of university, I lead a group of 3 in the creation of an FPGA system that is able to challenge a human player in the connect four game. The system receives a video stream of the connect four game board, analyses it using an FPGA and sends data to a an ARM CPU which uses them to calculate the next move. The moves are calclated via a very optimised alpha-beta pruning minimax (source code on github).

The FPGA hardware have been specified via C++ code with FPGA-specific pragmas. The minimax algorithm have been implemented in Python as it was the only language the minimal OS of SoC supported.

After the Facebook Hack a Project experience (see below), I wrote a tutorial about WebAssembly. I decided to do so as back in 2018 there were very few resources to learn such topics. The tutorial received several compliments and it is visited by around 20 developers every day.

You can find it here.

During my first year of university I got selected for a 14 weeks long hackathon with Facebook where I developed a WebAssembly-based webapp.

The webapp allows users to compress and decompress files directly in the client in an extremely perfomant way. In fact, the compression library used is written in C and runs in the browser at near native speed thanks to WebAssembly (source code on github).

Because of my good results at Informatics Olympiads I volounteered as a tutor for students in my high school that were interested in that kind of competition. Together with a friend of mine we involved more than 50 students from 14 to 18 years old, and started to teach them both the basics of programming and more advanced algorithms and data structures.

One of our teams managed to win 3 over 5 contests at national level and 5 students reached the final round at Individual Informatics Olympiads (to which are admitted around 100 contestants over the initial 20'000+).

Across the years, I attended several online AI courses and experimented with numerous AI algorithms and technologies.

Online courses I attednded:
- David Silver's course on Reinforcement Learning (University College of London),
- Introduction to Artificial Intelligence (Berkeley University).

Technologies I used:
- Tensorflow,
- Pytorch,
- Keras.

Algorithms I familiarised with:
- Search algorithms such as DFS, BFS, A*,
- Feed-forward and convolutional neural networks,
- Reinforcement Learning algorithms such as Q-learning,
- Evolutionary algorithms.