Other Course Work


This course consisted in studying in deep various means of media, compression algorithms, different colour systems and other things related to modern days multimedia technologies. The final project involved  developing a tool or software which explored multimedia properties, namely video, colour and sound. I developed a game with a colleague using the Processing programming language in order to explore this field. Our aim was to create a therapeutic game for autistic children that would aid them in their associative memory.

The game consisted in having a 3×3 grid monitored by a camera, whose image would be displayed on screen overlapped with colour on each of the grid’s positions. The objective of the game is to put a coloured card in its correct position. The application controls if the card placed in the position matches the colour, and if it does it displays that to the player.

The other aspect of the game is that it allows the player, a kid, to place one of the cards in the middle of the board. The card’s colour will then be recognized and an educational video about that colour is displayed to the kid.


MarioAI – Hierarchical FSM

This was the final project for the Gaming AI course. The objective was to implement a Hierarchical Finite State Machine over the Super Mario available for the MarioAI Championship.

Unfortunately, as there wasn’t much free time due to the other classes projects, the FSM is not as complex as it should be to make Mario overcome all the obstacles.


RallyX : A* Implementation

As the name suggests, this is the implementation of the A* pathfinding algorithm in the RallyX Python game (developed by Infukor).

Pac-Man – FSM

A project in the Game AI course. Objective: implement a Finite State Machine to control a Pac-Man game wrote in Python.


Database Technologies

The main project consisted in simulating concurrent database accesses, by creating several threads which would execute a series of specific transactions. The database had to be modeled by each group, utilizing whichever techniques to improve query performance. The final goal was to achieve the fastest access time among all groups. This project was developed in Java as well as Oracle’s PL/SQL language.


Web Applications

The objective was to build a Mashup Web Page. This Web Application was designed according to the RESTful Methodology by creating a Back-end and Front-End applications and using several WebServices. These services were either developed by us or offered by third party API’s. In our case, we used Google Maps API as well as Sapo’s Verbatim API. We resorted to PHP and MySQL to complete this project.

Unfortunately the Apache server was not in my possession so I wasn’t able to get all the code after the project’s completion.


Animation in Virtual Environments

It consisted on the visualization of a VRML 3D model over a fiducial mark through the use of the ARToolKit Software. It was more of a research work since it included an extensive report concerning which Augmented Reality applications are available, how can one integrate them with each other, which of them are OpenSource, as well as other topics.


Markerless Augmented Reality Visualization

This was a Scholarship project for the LabMag laboratory. It required some work with the OpenCV library, as well as with OpenGL. The aim of this project was to, given a file with data about a Dam, it would be interpreted then rendered through OpenGL. Then, the rendered model would be drawn and aligned over an image with the real picture of the Dam. This was done by the usage of some algorithms of the OpenCV library.


Machine Learning – Data Mining

This course consisted in two separate projects. The first one was a Data Classification Championship, where the groups had to build their own classifier, using the R language, while analyzing the data provided in order to obtain the best data classification possible. The second project consisted in creating a simulated Spam Filter, using the Naive Bayes algorithm for learning from a provided training set. This filter was customizable so that we could vary its classification threshold.


Hypermedia Systems

This course consisted in having thorough discussions about articles related with Hypermedia. Each group had to read several pre-selected articles and prepare a presentation on the subject. Another group was in charge of preparing the discussion to confront the presenting group. The final project consisting in elaborating an extensive report about the hypothetical implementation of a hypermedia system, starting in the target population, describing all the use cases and finally implementing a working prototype using Adobe Flash.

Distributed Systems – Distributed Hash Table

Consisted on implementing a Distributed and Replicated Hash Table structure, written in C and with three separate applications: a Client, a Hash Table Server and a Switch Server for Load-Balancing and Replication.

There could be any number of servers, each with its own client Poll, as well as a single  Switch Server.  The latter had several threads capable of dispatching the client requests to the available servers, working either in Replication Mode or Load-Balancing Mode.

In Replication Mode, the Switch was responsible of detecting the state of the Servers. If any Server went down, as soon as it is detected as being up again, all the data is replicated from the remaining servers into the newly restarted one.

In Load-Balancing Mode, the Switch forwarded the messages to the according servers in order to ensure that there was and effective balance of the data between the servers.

The whole project was ran through the memory leak check application Valgrind.



The aim was to create a Secure Election Mechanism, consisting of a Client application, a Secure Ballot and a Secure Server. It was developed in Java using the Bouncy Castle API, resorting to the Diffie-Hellman Algorithm, Triple-DES, AES and RSA-SHA1. The client would obtain a list of candidates from the server, and would cast it’s vote on one of them. Then, the server would blind-sign the vote, so that the Ballot could identify it as a legal vote. The second project consisted in configuring Iptables and detecting intrusions using Snort.


Operating Systems

The project consisted in implementing a bank account infrastructure and use multiple processes to access this shared memory space, using the POSIX approach. It involved a series of concepts like Semaphores, Mutexes, Conditional Locks, Pointers and Data structures in C.

Object Centered Development

This course was the main course teaching Object Oriented Programming concepts such as Polymorphism, Inheritance and Abstraction. The final project of this course was the implementation of the Cartagena board game in Java, respecting the interfaces  and specifications provided by the teachers.

Information Systems Project

The aim of this project was to create an information system for a hospital. The groups were in charge of elaborating a thorough report with Gantt Maps, Task Planning, Case Studies, Use Cases and UML Class Diagrams, among other artefacts related to Software Engineering.


The remaining relevant Degree projects will be posted here once I have free time to do so.