Web Applications

DocRev: a crowd-sourced platform to review documents


This project was born after finding myself reviewing my research papers time after time. At some point I thought: I'd rather review someone else's work and have that person review mine.

This is a perfect match for a crowd-sourced platform, as you ask for another user's time and expertise (hopefully, orthogonal to yours), and you give back your own knowledge and time by reviewing others' work.

So many types of documents out there in the world would be improved by having a fresh pair of eyes look at them. DocRev is meant to provide that for free.


Distributed Transactions

Fenix Framework

Source in GitHub

The Fenix Framework provides a transactional and persistent domain model for web-based applications. Think of it as an ORM where persistence is handled transparently (in contrast with, let's say Hibernate). It is used in FenixEdu across several universities.

During my Ph.D. I contributed with pluggable Abstract Data Types (code), efficient retrieval from collections via Indexes (code), and an Object Cache to speed up accesses in distributed deployments (code).

My contributions were developed in the Cloud-TM branch and later FenixEdu team members integrated them in the master branch.



Transactional Memory Study

Source in GitHub

The recent trend of multi-core CPUs forces developers to embrace concurrency to chase high performance.

Although locks are widely used, they are not necessarily the best choice. This benchmark study provides several Transactional Memory implementations (in Software, Hardware and Hybrid) to compare with other lock-based schemes in various applications.

It allows to measure efficiency both from a performance as well as power consumed point of views.


Transactional Memory

Lock-Free Parallel Nesting

Source in GitHub

In Transactional Memory code is speculatively executed in parallel with safety checks in place (and possible roll-backs) when correctness cannot be guaranteed (i.e., the execution would not be equivalent to a serial one).

However, in some cases running more concurrent transactions may harm performance.

Parallel Nested Transactions allow to explore the parallelism within a transaction, thus allowing to run less transactions at a time, but with each one taking up several cores. As such, the end result is that we may still explore all the hardware parallelism but we get less aborts and roll-backs.


Android Apps

Software Ninja

Source in GitHub

Programming is becoming an ubiquitous skill that most people should learn. Ideally, kids should even start learning it back in school.

Naturally, for such early ages, it becomes much more appealing to learn something by playing a game.

That was exactly the idea here: to develop a puzzle game where the user is actually building a program to solve the challenge.

At the time we proposed this as the first smartphone application of the kind.



Transactional JVM

Source in GitHub

The idea of this project is to expose a transactional construct in Java that is implemented inside the virtual machine. As such, programmers would only need to annotate pieces of code as atomic, and the JVM would take care of the rest, providing serializable executions despite transactions running in the application concurrently.

The execution of this idea extends the open-source JVM called JamVM so that it interprets such pieces of code correctly and relies on a Software Transactional Memory (called TinySTM) to synchronize the transactions.

The JamVM interpreter is highly optimized with inline-threading and stack-caching. It was thus a challenge on par with a simple JIT. In retrospective it would have been simpler to do this in Jikes, for instance.