University stuff
In this page I tried to organize the material about some of the exams I took: projects, papers, exercises and exams' solutions. Maybe some students will find these things interesting.
Computer System Security
I wrote a short paper on the security aspects of electronic voting and the receipt-freeness property in particular. Receipt-freeness guarantees that the voter keeps its vote secret, so that no one else can be convinced of the way he voted (even if the voter collaborates); at the same time, the voter is still able of verifying that his vote has been correctly tallied.
E-voting paper
Distributed Systems
Albana
and I have designed and developed a distributed version of the famous card
game known as
UNO.
We called it DUNO which stands for Distributed UNO.
DUNO is written in Java, communications are based on Java RMI. It's fully
decentralized (no server needed to coordinate the game). It aims at being
fault tolerant against peers' crashes. Duno is actively developed and is
now hosted by SourceForge: have a look at
Duno's project page.
Duno source code
Duno documentation
Middleware
My group and I did a short presentation of the J2EE based Collaborative Information Portal developed for the NASA's Mars exploration mission. The slides summarizes the content of this paper.
We also developed a J2EE application that helps managing rooms' bookings in a hypothetical university/school. The application works on the JBoss with both centrilized and clustered configuration. The points of strength of this application are:
- fine grained mechanisms of booking rooms over deeply customizable periods of time
- users are given roles that define the permissions of booking rooms
- roles can be added/removed and their booking policy can be modified later
- reservations can be canceled partially or as a whole
Paper slides
Project source code
Project documentation
Software Engineering
I played the role of project manager during the development of project for
this exam. My team and I designed and implemented a personal digital
library called Yadoda (though the original name in the documentation
is still BiblioTech): user can create their own ontology and a database of
digital documents (pdf, ps, mp3, images) that can be enriched with metadata
(author,date,title). User can create semantic relations between documents
and navigate them. It works on both Linux and Windows. Yadoda is no longer
developed: it needs some deep refactoring, a new GUI and a better
integration with desktop manager. Yadoda is hosted by SourceForge: have a
look at
Yadoda's project page.
Source code can be checked out from the SVN repository, read how in the
download page of the project.
This wiki page
describes the development process of Yadoda (Bibliotech); there's a diary
of the group jobs and links to the member's page.
Yadoda documentation
Yadoda slides
Algorithms on computer networks
This is absolutely the most difficult exam I ever have taken! It took about 2 months of hard study for me to be ready. I should thank my friend Mirco for the helpful discussions in front of the blackboards of the Department of Mathematics. I collected almost all of the solutions to the exercises we solved in that period (July 2005). I'm sure they will be of great help to other students. There're some diagrams drawn with XFig that can be converted to Postscript in order to be printed. Issue the command: fig2dev -p <input.fig> <output.ps>. Before asking any questions, please read the README file inside.
Solved exercises
Complex adaptive systems
I really appreciated the arguments treated by this exam. I suggest anyone
to take it or to follow prof. Babaoglu's lessons, at least. Two tasks for
this exam: make a brief presentation of a research paper on complex systems
and write a randomizer protocol for the
Peersim simulator.
The paper I chose is The Role of Computation in Complex Regulatory Networks.
You can download my slides, the randomizer algorithm source and a brief
analysis of its performance.
Paper slides
Randomizer source code
Randomizer documentation
Programming languages and compilers
The project of this exam was the definition and implementation of a programming language. We called it CinC which stands for "CinC is not C" (recursive acronym :-). It is a trivial procedural language with strong typechecking which syntax was inspired by C, Java, Python and finally OCaml (everyone in the team suggested his preferences). Primitive types are Integers, Booleans, Strings and (multiple) Arrays of the previous types. The main feature of this language is that you don't need to define function prototypes, even with mutually recursive functions. Like OCaml, CinC understands recursive comments. Despite of the name, CinC compiler is entirely written in C and is based on Jasmin, a backend which generates Java bytecode. Lexical analyzer and syntax parser generators are respectively Flex and Bison.
Cinc source code
Cinc documentation
Computer Networks
For this exam, my collegue Matteo and I developed Fshame (aka File SHaring shAME). It's mainly a proxy that acts as an intermediate between clients and a group of servers; the proxy listens to the clients' requests for downloading files and then forwards these requests to the group of servers. Traffic loading between proxy and servers is balanced in order to make the best of the bandwidth of each server. The proxy protocol aims at maximizing the download speed of the clients. The file to be downloaded is divided in small frames of data by the proxy; initial frames receive a higher priority and are requested to the server at first. Clients don't care about how file data has been downloaded.
Fshame source code
Programming
GnuForza4 is a board game for two players which is often called "5 in a row". The goal is to align four of your fiches horizontally, vertically or diagonally inside a grid. You must be faster than your opponent. The program is entirely written in C and has a ncurses interface. The AI is based on the brute-force strategy, to say, it tries to resolve the whole system and valuates the winning choices. Each possible solution is given a score; the AI playes according to the solution with the best score.
Gforza4 source code
Last changes: March 17th, 2007

