Employment Summary

###August 2011 - Present: Software Engineer at Digital Science, London

Full stack software engineer working on the central department building both applications and infrastructure automation tools.

  • Languages/Frameworks/APIs: ruby, rails, sinatra, eventmachine, amqp, python, coffeescript, javascript, twitter bootstrap, google chrome api, oauth2;
  • Messaging: rabbitmq;
  • DBs: mysql, riak, redis;
  • Tools/Infrastructure: AWS, chef, git, github, jenkins;
  • OSs: mac os x, linux (ubuntu);
  • Testing: rspec, capybara, jasmine.

January 2011 - August 2011: Software Developer at Mobile Interactive Group, London

I mainly worked with Ruby technologies developing both backend RESTful APIs and frontend applications, from which I highlight: a mobile site with a RESTful Rails API to present rewards to customers of a well-known telecommunications company with backend data exchange functionality; a backend sinatra application that acts as a proxy between a number of RESTful APIs and a number of SOAP APIs from a telecommunications company.

Besides the systems mentioned above, I have been working with many other systems, mainly solving production problems as a 3rd level support and improving system’s availability by fixing/enhancing the existing functionality.

Sep 2008 – December 2010: Software Developer at Danske Bank, Denmark

Software Developer on two highly critical and highly transactional systems, namely e-banking and cards systems.

  • Working with both client-side and server-side applications, developing new functionalities and improving existing functionalities in large scale, high availability banking applications to support millions of transactions per hour.
  • Involved in a number of projects and tasks, completing the full development lifecycle from preliminary analysis and design to implementation and deployment within high performance teams using Scrum; experience also in pair programming.
  • Conducted preliminary analysis concerning possible test automation tools that should be in place in order to improve test in general.
  • Mentor for new employees.
  • Developed and performed unit test, system test and integration test.

Wide range of used technologies. For client-side applications, I used Visual Studio, Javascript, HTML, CSS, XML, XSD, XSLT, among others. For server-side applications, I used a wide range of languages and tools such as Eclipse, XML, OIOUBL 2.0, RDBMS (IBM DB2, PL/SQL), Unix systems, PL/1 and MQ (messaging) among others. Finally, I work within a service-oriented architecture (SOA) using the SOAP protocol and I also use a number of tools for modelling (RSM, UML), bug tracking (Quality Center), and version control (CVS and SVN), among others.

Oct 2007 – Apr 2008: Software Developer (part-time) at Callis ApS, Denmark

Software Developer for a startup company in Denmark, building web-based applications for integrating organisation processes with process improvement approaches such as CMMI.

  • Project utilised Scrum as a working methodology and pair programming; I worked both in server-side and client-side applications.
  • Technically, I used Javascript, ExtJS, HTML, XML, XSD, XSLT, CSS, version control system (SVN), bug tracking system (bugzilla), Oxygen and Eclipse among others.

Sep 2007 – December 2010: Software Developer/Contributor/Researcher for the Overture Tool, open source community

Contributor, software developer and researcher for an open source comunnity within formal methods.

  • Main goal of the group is to develop the next generation of tools to support formal modelling and analysis of highly critical computer-based systems.
  • I built a proof-of-concept implementation of an application that converts two formal languages into each other, i.e. it enables the automatic conversion of VDM++ specifications into Java Modelling Language Specifications.
  • Developed mainly with core Java, Eclipse IDE, Eclipse plug-ins, Eclipse RCP, maven (build manager), VDM++, VDM-SL (functional language), Java Modelling Language, ANTLR for parser generation, design patterns such as the Visitor Pattern, deep language manipulation and representation (experience with abstract syntax trees), semantic analysis, formal modelling, unit and combinatorial testing, among other topics.

Research paper presented at Formal Methods 2008, in Turku, Finland. The paper can be found online.


10/2007 – 07/2008: 2nd year of MSc in Computing Science degree in the Engineering College of Aarhus, Denmark. Final MSc degree mark: 16 (in a scale from 0 to 20).

  • Thesis theme: Connecting between VDM++ and Java Modelling Language for the Overture Tool (available here)
  • Supervisor: Professor Peter Gorm Larsen, Engineering College of Aarhus.
  • Co-supervisor: Professor Luís Soares Barbosa, University of Minho.
  • Main subjects: Formal Methods, Tool Support, Software Modelling, Object-Oriented Paradigm, Problem Solving, Software Development.
  • Technologies: VDM++, Java Modelling Language, Eclipse, Java, ANTLR.

09/2006 – 07/2007: 1st Year of MSc in Computing Science in University of Minho, Informatics Department, Portugal.

Main subjects: Artificial Intelligence, Databases, Formal Methods, Operational Research, Computer Communications and Network, Bio-informatics, Statistics, Numerical Analysis.

09/2001 - 07/2006: BSc in Computing Science, in Minho University, Portugal.

Principal subjects / occupational skills covered: Programming Paradigms (Functional, Imperative, Declarative and Object-Oriented), Theory and Formal Methods, Computers Architectures, Numerical Analysis, Algebra, Mathematical Analysis and Calculus, Probability, Artificial Intelligence, Logic, Language Processing, Compilers, Operating Systems, Algorithms and Complexity, Automata and Turing Machines, Concurrent Systems, Computational Mathematics.

Technologies: Haskell, C, Java, Prolog, SQL, XML, XSD, XSL, VDM++, VDM-SL, JML, Alloy, UML, HTML, CSS, PHP, javascript, LaTeX, Lex, Yacc, Plone, Python, Eclipse, AIBench, MySQL, MatLab, Oxygen, MS SQL Server, PostgreSQL, WEKA, Mathematica, Apache, among others. Developed software both for Linux and Windows platforms.

Relevant projects during the coursework:

  • Formal Methods Europe Small Project Repository for Formal Methods Tools.
  • HaPNML: a Haskell tool to manipulate Petri Net Markup Languages. This tool converts any Petri Net into a generic Petri Net.
  • HaCWB: a Haskell tool to manipulate processes and concurrency. This tool reads processes (Pi-calculus or CCS) and animates their transition graph by using the graphviz tool.
  • AIBench Plugin: A plugin in Java to perform data stratification over DNA Microarray data, which enables the detection of certain types of genetic diseases.
  • Modelling a File System: A small file system specified in Alloy.
  • Generic libraries in C for handling trees, hash tables and other data structures.

Organisational skills:

  • Member of the organizing committee of “Jornadas de Informática, JOIN’05” (2005); a scientific event created by the Informatics Department of Universidade do Minho.
  • Member of the organizing committee of “Jornadas de Informática, JOIN’06” (2006); a scientific event created by the Informatics Department of Universidade do Minho.
  • Member of the organizing committee of the international conference “Hands-on Science” (2006); a scientific event created by the Science Department of Universidade do Minho.
  • President of the Executive Board of “Grupo de Estudos de Matemática e Ciências de Comutação” (2006/2007); an association of Mathematics and Computer Science students.
  • Member of the organizing committee of “Interacção 2006”; a national scientific event based on the interaction human machine.
  • Member of the organizing committee of the international conference ETAPS’07 (2007), in Braga, Portugal.

Publications and conference presentations

  • “Connecting Between VDM++ and JML”, Carlos M. G. Vilhena. Newcastle University (UK) Technical Report at the Fourth VDM-Overture Workshop at Formal Methods 08, Turku, Finland, May 2008 (available here). This paper was presented in the Overture workshop during the mentioned conference.