Here you can find some projects I'm currently involved in and others I've been working on in the past.

COS - Parallel Community Detection on Large-Scale Networks

COS is a parallel version of the clique percolation method. By exploiting today's multi-core/multi-processor computing architectures, the method enables the extraction of k-clique communities from very large networks. The source code of the method is released under the GPL and is freely available for the community.

Official project page:

Portolan - Network Sensing Architecture

Portolan is a a crowdsourced system that uses smartphones as mobile measuring elements. The aim of Portolan is to discover the topology and the structure of the Internet and build signal coverage maps, all with the contribution of volunteers. We have developed an Android app which runs background traceroute measurements and signal strength measurements. Signal coverage measurements are completely costless in terms of energy or bandwidth, as the Portolan app passively collects signal strength samples using GPS positions generated by other apps.

Publication: "On the Feasibility of Measuring the Internet Through Smartphone-based Crowdsourcing", Adriano Faggiani, Enrico Gregori, Luciano Lenzini, Simone Mainardi and Alessio Vecchio, Proceedings of the 8th International Workshop on Wireless Network Measurements (WinMee).

NSS Simulation of RRAA on IEEE802.11s TDMA Wireless Mesh Networks

NSS simulation of the Robust Rate Adaptation Algorithm (RRAA) on IEEE802.11s Wireless Mesh Networks. RRAA seeks to achieve robustness against random loss and responsiveness against drastic channel changes. As explained in the attached slides RRAA consists of three closely related modules: Loss Estimation, Rate Change and Adaptive RTS Filter (unuseful on a TDMA environment where RTS/CTS are not used at all). Several traffic patterns as well as topological structures have been taken into account. Examples are CBR On-Off for a typical emergency scenario and Markov with gateways for a typical urban wireless Internet access point scenario. Very good results have been achieved in terms of delay, throughput and packet loss compared to the Static Rate Allocation.

Special Thanks goes to Giovanni Accongiagioco, Marco Camilli and Paolo Di Noto for the essential contribution they have brought to this project.

JAVA Simulation of Message Exchange IPC Paradigm on a Shared Memory System

A Java implementation of the typical mechanisms needed for the implementation of a Message Exchange Inter Process Communication Paradigm on a shared memory kernel. Each process (simulated by a Thread) owns a list of ports on which listens for messages sent by other processes. Since multiple processes can send messages on the same port to the same destination extra work has been done for allowing concurrent access to these data structures. Every queue of messages associated with a port is managed FIFO thus avoiding starvation issues.

By using these mechanisms a Readers Writers protocol (many to many IPC) has been implemented. This shows how multiple concurrent communications are possible without starvation and the preservation of consistency on shared data structures is always assured.

Extra documentation can be found in the attached archive.

C++ Multithreaded Distributed File Repository

A C++ implementation of a multithreaded Posix File Repository (DFR for short). The DFR runs on a server and is contacted by File Servers (FS) for the registration of new files available for download. Also the Clients (CL) contact the DFR asking for an address and a port on which issue a request for downloading a file. Every time the DFR receives a request from a Client, it creates a new thread and checks if there is at least one registered FS which owns that file and reply to the CL with the previously registrered address and port. If the specified file is not available a CL can issue a notification request: the DFR will reply to the Client immediately after a FS has registered the file.

For the management of the registered files the DFR keep two lists in a class called Repository: in this way it is possible to balance the load between multiple FSs and to keep track of the number of active downloads.

Detailed specifications are available in the archive together with the source code of the DFR, the FS and the CL. Thanks goes to Gaetano Catalli which has written a good documentation of the whole project with Doxygen.

PYTHON Cryptographic protocols using RSA and BlowFish with M2Crypto

Implementation of a cryptographic protocol which allows a client and a server to establish a symmetric session key for the communication. The protocol after the execution guarantees key authentication, key confirmation and key freshness and it has been analyzed with BAN logic. For the exchange of public keys has been implemented also a Certification Authority which provides signed keys. Also for the cryptographic protocol with the CA authentication and freshness of the key transmitted are guaranteed.

VHDL description of an IC which implements CORDIC in vectoring mode

Description of a circuit for the conversion from rectangular to polar coordinates using CORDIC algorithm in vectoring mode. A pipeline architecture has been used and the description has been extended for the computation of every angle, not only angles included in [pi/2;-pi/2]. The gain the algorithm presents after the computation has been removed with an error less than 1e-3 using only shifts and sums.

Digital Controller for the Pitch Angle of an Aircraft

Pitch control is a longitudinal problem and in this paper we will design an autopilot that controls the pitch of an aircraft. This project starts with a brief study on the equations governing the physical system and then continues with the description and the simulation of the controller under SCILAB/SCICOS and RTAI Linux. Disturbs have been included in the simulation together with an I-PD and a Kahlman Filter for the estimation of internal states.

C Multithreaded Posix Webserver

A simple multithreaded webserver. Posix pthread library has been used. It compiles both under Unix and BSD. It is HTTP/1.0 compliant but only a few mimetypes are supported.

On startup a pool of threads is allocated in main memory and the server blocks itself on a listening socket. Every time a new request arrives it is dispatched to a preallocated thead of the pool.