Working in the Olympiads of Informatics may be challenge, there is a
lot of automation and many aspects to take into consideration when
preparing a contest. task-maker-rust
is a collection of
tools that allows us to prepare the tasks as efficiently as possible.
It helps us in compiling, generating test cases and checking the
correctness of the tasks, all with a nice interactive UI and a fast
local cache. Since recently it is also used by the International
Informatics Olympiads in Teams for the task preparation.
You can find the source code and the documentation on GitHub.
Every year in Italy the Italian Olympiads of Informatics organizes a national competition, where the best high school students compete and are eventually selected as the Italian delegation at IOI. On this website there are loads of historical stats, from most of the held competitions.
Terry is a platform for making Google Codejam-like contests. It's currently used for the territorial (~regional) selection of the Italian Olympiads of Informatics. It is written by me and the rest of the technical committee and the source can be found on GitHub.
This is my Master's these. You can access it from here, download the PDF from here and the slides (with speaker's notes) here.
Abstract
Nowadays, datasets have become so huge that it is impossible to
analyze them using only the resources of a single computer. To be
able to process them in a timely manner, computations need to be
distributed on clusters of multiple machines. Unfortunately,
programming distributed software systems is very difficult. Since
the advent of distributed computing, researchers and practitioners
have been striving to devise abstractions that are flexible and
easy to use, yet efficient and scalable. On one extreme, the
option is to implement ad-hoc solutions for each processing task,
exploiting low-level facilities to handle the communication and
the coordination between the different machines. This approach is
very flexible, and it is able to extract as much performance as
possible from the available resources. However, the development of
these custom solutions is usually time-consuming, and the
resulting code can be very complex and hard to maintain. To
address these drawbacks, many data processing frameworks, such as
Apache Spark and Apache Flink, were developed in the recent years.
These systems automatically handle the parallelization of the
computations, providing to the user a rich set of features that
can be used to easily implement processing pipelines. These
frameworks, however, are not able to provide performance on par
with that of ad-hoc solutions. This thesis presents Noir, a novel
stream-processing framework implemented in Rust. Its objective is
to fill the gap existing between ad-hoc solutions and distributed
processing frameworks, providing better performance than the
latter while maintaining their simplicity and ease of use. Even
providing similar expressiveness to Apache Flink, our evaluation
shows that Noir is able to achieve up to 30× its throughput, and
it rivals custom MPI solutions in some workloads.
Open books exams are fun only if you have good enough material to bring. @mark03 and I made the effort to write in good LaTeX most of the cheatsheets of the exams we encountered during our studies. They can be found on our GitHub organization
Have you ever wondered how the Internet looks like? Sure, there are many ways to represent it, the one I'm showing is based on an XKCD idea. Basically it places every host on the Internet on an Hilbert Curve, a way to wrap a 1-D line (like the IP addresses) to a 2-D surface (like an image), with the nice property that IPs that are near, will be always near in the image.
The first image shows exactly that, each pixel is a group of some hosts (a constant number you can figure out :P), the color of the pixel represents how many hosts in those addresses answered to a ping request. More red means more responses.
Nice right? Can you figure out why there is a big red square in the middle? And why didn't I ping all the addresses in the bottom-left corner? The answer can be found looking at this slightly different image.
During the Computer Graphics course in my Master's degree at Politecnico di Milano, Marco and I worked on a OpenGL game. It's a simple 3D game where you move in a small procedurally generated map, and you have to search and click on a little bird to gain points.
You can access it from here.
La tesina che ho portato all'esame di maturità può essere trovata qui con le rispettive slide.
Alcune slide per un dibattito in inglese sull'open source.
Alcune slide per una presentazione di Sistemi e Reti sullo Spanning Tree Protocol.
Durante uno degli anni scolastici alle superiori un laboratorio è stato ristrutturato e uno degli esercizi che ci sono stati assegnati è stato quello di documentare la nuova topologia di rete realizzando un sito web.