Here are some of my more relevant projects, related to Data Science, Computer Science or Electrical Engineering. They are in chronological order, from newest to oldest.
E. M. Forster once said, "A work of art is never finished. It is merely abandoned." Below are some projects I am still working on, and have yet to call complete!
Click on any of them to jump to their place on the timeline.
Analyzing humor with BERT
Using state-of-the-art NLP to tackle humor detection
A semester-long research project using BERT (Bidirectional Encoder Representations from Transformers) to construct reasonably well-performing humor-detection models on a paired satirical-and-serious headlines dataset and then analyze them in order to discern what mechanisms are having an impact on their classification decisions.
I started by showing it is indeed possible to build neural architectures that achieve remarkable performance on a humor classification task. Subsequently, the analysis revealed that these architectures need to be able to leverage semantic-level concepts and the context of words within the headline in order to be able to successfully identify humor.
You can read the report for the semester project here.
Venetian biographies generator
Generating biographies of Venetians up to the 20th century, using GPT-2 and BERT
In this project developed in a group of 3, we used generative models to come up with creative biographies of Venetians up to and including the 19th century. Our pipeline employed several modules, including a generative module using both GPT-2 and BERT models, and an enhancements module used to increase the realism of biographies.
The fictional biographies generated with the final pipeline exceeded our initial expectations in their level of realism. In fact, on average, 1 out of every 4 fake biographies was able to fool us when we conducted an evaluation.
Philosophy of Explanation
A philosophical essay on Scientific Explanation
In this essay, a prediction-based approach to scientific explanation (advantageous because it allows the grouping of different categories of explanation into a comparable whole) is presented. This is done by a focusing on the concrete set of predictions a theory can generate, given all the input it requires to do so. Through this, it then becomes possible to define the Predictor Framework, which incorporates not only the aforementioned predictions but also several evaluation and comparison metrics and procedures, including those of probabilistic predictors.
If you're curious, you can find it here.
We are where we eat
A data-driven look at Chicago's food scene
A 4-person group project for EPFL's Applied Data Analysis class, where we took a structured look at Chicago’s food inspection scene and everything happening behind the curtain – starting with food violations and usual risk, progressing beyond year seasons and temperatures, reaching all the way down to location and block-level wealth and ethnicity.
You can find the data story for this analysis here (the pictures below give you a sneak peek), the pretty nice poster for our presentation here (you might want to zoom in for better readability), and the whole github repository here.
Learning chord embeddings from the Annotated Beethoven Corpus
A 3-person group project, for EPFL's Machine Learning class, where we analysed various possible representations of chords, as well as several possible dimensional spaces in which to embed them.
We conclude that a skip-gram model, for intermediate chord representations, using vectors with 3 dimensions, was the best approach for the chords of this corpus.
You can read our report here.
A personality-assuming conversational AI based on GPT-2
WabiSabi is a smart inspirational chatbot developed by me and 2 other friends, for the 2019 LauzHack hackathon. Using ConvAI technology, we build personalities of different famous people through their quotes and speeches. These personalities are then used to build a chatbot that you can talk to about your hopes, dreams and worries or have a casual conversation with. WabiSabi was created with people's wellbeing in mind - its main focus is to offer pep talks and advice to users when they're feeling down.
We ended up winning second place! You can see a short video demo here (it has no sound, and I recommend watching it at 1.5x or more), find its devpost page here and the github repo here.
SEM - Subaquatic Environments Monitoring
Computer Vision applied to fish detection and tracking
Related to the ExpROVer project below, this project was more research oriented, though also connected to ROVs (Remotely Operated Vehicles), aquatic and usually small robotic vehicles.
After an exploration of the state-of-the-art technologies concerning intelligent underwater vision and movement, I focused on the transfer training of several different CNN (Convolutional Neural Network) architectures for fish classification, as well as the application and performance of YOLOv3 (You Only Look Once) to fish detection.
An open source solution enabling a myriad of functionalities around the 'VideoRay Pro 4' ROV
Remotely Operated Vehicles (ROVs) are one of the most important underwater tools in today’s evermore sea- and ocean-dependent world. The ExpROVer software intends to add value to the inspection ROV market by introducing an open source solution enabling an easy and intuitive user interface, available anywhere and at anytime and ready to support extensions from the open source community.
ExpROVer was a 5-person semester long project, featuring low-level communication between Linux and the ROV, integrated with ROS (the Robot Operating System), ROSbridge-powered server capabilities, several extensions, like Computer Vision capabilities (fish detection using a modified YOLOv3 architecture), a set of semi-autonomous maneuvers, and a dedicated Android and Web applications.
I was responsible for the Computer Vision Capabilities and the Android app. Due to the our originally 6th member abandoning the project, I subsequently also became responsible for the Web application. I was the team leader, and also responsible for the documentation, the oral presentation and pitches of the project.
You can find much more information in the ExpROVer website, in this prezi presentation, or watch a relatively short video giving you an overview of the system. You can watch the fish detection algorithm's evolution here. Finally, you can also find the open source repository here.
A T-SQL and C# application
ManABank is a software solution for bank managers, allowing them to manage clients, accounts, investments and loans, as well as employees, and the bank's branches.
Using Windows Forms and C# for the front end, the application shines in its SQL backend, with SPs (Stored Procedures), UDFs (User Defined Functions), Triggers, transactions, index optimization, SQL injection prevention and other security measures.
This was a 2-person project for a class on databases. I handled the schemactic conception of the database, all of the front end, as well as the SPs (including transactions), UDFs, the SQL injection prevention and other security measures, and some of the triggers.
You can check out a relatively short video of the application here!
A concurrent programming project
A 3-person project on concurrent programming, using threads. A barbershop was simulated, where each client and barber ran concurrently, on different threads, and were synchronized through semaphores. Some care had to be put into their synchronization to avoid deadlocks as well.
Design and configuration of an enterprise-level network
I designed an enterprise-level network, between 3 branch locations, some with several buildings - from designing the hierarchical model used, to deciding VLANs IP addresses' encodings (both IPv4 and IPv6), to the number of devices necessary, their minimum bandwidth, a budget for the equipment and Ganntt diagram for the whole process. The work was done in Portuguese.
I also configured the equipment, using OSPF v2 and v3 for internal routing, configuring the VLANs (distinguishing end-to-end VLANs from local ones, creating an interconnection VLAN for them), along with DHCP and DNS servers, quality of service (using DiffServ), among other configurations.
Intelligent Pacman Agent
Conception and implementation of an autonomous and intelligent Pacman agent
A 2-person project to design an intelligent pacman agent, using Python, for a class on Artificial Intelligence. We started by investigation the literature, and ended up trying 4 different approaches, submiting the last.
- Reinforcement learning (not the final approach used since the requirements evolved into not allowing external libraries to be used for submission, and this implementation relied on tensorflow),
- Breadth-First Search path generation (inspired by Robles, David & Lucas, Simon. (2009). A simple tree search method for playing Ms. Pac-Man. 249-255. 10.1109/CIG.2009.5286469),
- Monte-Carlo Tree Search (MCTS) search and simulation (inspired by Pepels, Tom & Winands, Mark. (2012). Enhancements for Monte-Carlo Tree Search in Ms Pac-Man. 2012 IEEE Conference on Computational Intelligence and Games, CIG 2012. 265-272. 10.1109/CIG.2012.6374165),
- Voting system for target election (taking into consideration the target type, proximity to Pacman and to ghosts, etc.), and an optimized A* search with frame-scope memory (which penalized not only the length of the path but also its proximity to non-zombie ghost).
A music programming language, and a compiler from it to Python 3
A 5 person project done for the class 'Formal Languages and Automata.' The objective was the creation of both a new programming language, and a compiler from it into another Turing-complete language, using Java and ANTLR4. We created a musical language, and a compiler from it to Python 3, generating a Python file that, when executed, creates a MIDI file with the music.
I designed and documented the language, and was responsible for the semantic analysis and the compilation of the main input files (.mux) into Python 3 (using StringTemplates created by one of my colleagues).
You can find the source code here.
Autonomous Banking Helper Robot
Bringing together robotics (NAO Pepper robots), face recognition, speech generation and banking, this was a 4-person, 2-day project done during hackZurich2018. Its purpose was the creation of truly personalized (and automatized) customer service!
You check out a (very) short demo of the final system here!
A Simple File System
sofs18 was a simple and somewhat limited file system, based on the ext2 file system. The physical support was a regular file from any other file system. This was a 6-person project done for a class on Operating Systems.
The sofs18 filesystem was composed of 5 areas (each one composed of N blocks of 512 bytes) - the superblock (containing global attributes for the disk, as well as currently-free and recently-freed caches for both inodes and data blocks), the list of free inodes, the inode table, the list of free data blocks, and the data blocks.
SmartGreens was a software (and hardware) solution that automated farm watering, using a myriad of sensors, and some information provided by the user (type of crop), leveraging the Internet of Things.
This was a 4-person group project done for a class whose objective was the analysis of an industry; proposal of a new product in it, as well as the definition of its stakeholders, clients, etc; use of several UML diagrams to describe use cases (and later, definition of personas and user stories), system's logistics, etc; definition of quality testing and assurance measures; and the creation of both a non-functional and a functional prototypes. All work was done in Portuguese.
I contributed evenly to the reports and diagrams, was responsible for the promotion website, for the non-functional prototype - both for desktop and mobile - and for the monthly presentations, and did most of the functional prototype as well. Both the landing website and the dashboard were integrated with and hosted by heroku.
Learning from Nada (and Data)
A Machine Learning Blog!
The idea is that this blog will become the resource I wish I had right now, or at least a helpful summary of what I don't want to forget, while simultaneously serving as a way to consolidate my knowledge in Machine Learning!
You can find it here.
Started using Kaggle, and participated in several beginner level Kaggle competitions.
An automatic and semi-autonomous self-organizing text library
A 2-person group project, where we decided to implement an intelligent library. That is, a system which can automatically detect a text's language, and sort it into one of several categories according to its subject. If a given file is not already in the library, it's added to it, in its corresponding language and subject. To this end, MinHashes, a vanilla bloom filter (used to check whether the file already existed in the library), and a counting bloom filter (designed to supplement the 'choice' of a given text's subject) were used.
This done for a class on Probabilistic Methods, using MATLAB. It was also heavily test-driven.
You can find the source code here.
This website itself!
This website was my first venture into GitHub Pages. It was based on Jekyll's Cayman theme. However, since then I've completely reworked it! And all the custom styling, image grids, modal galleries, blog and other cool stuff are my own, from-scratch creation!
100 Cerebros Image Gallery
Online Gallery, Photo Editor and Meme Generator
An online application allowing you to upload photos, to which you can add several effects, or turn into a meme. You can preview and undo each one of the effects (and meme captions). This was a 4-person group project, where the application's interface (ie. how the front and back-ends communicate) was done by me. I also did all the design and front-end, as well as about half of the back-end. The rest of the back-end, the database management and the images' processing and editing were done by the other 3 persons.
You can find the source code here.
VHDL Model for Enigma M3
A VHDL Model for two Enigmas M3 - one for ciphering the message and a second one to decipher it, using the RS232 to communicate between themselves - that I developed for a class on Digital Systems. The devices, in terms of functionality, are identical to their World War Two counterparts, sharing the more than 158,962,555,217,826,360,000 possible configurations!
You can find the source code here.
obiwit (Orange Bit of Wit)
My previous personal website and blog, using WordPress, plenty of plugins, as well of being an experiment in design and usability. This was a long project. I started out by designing Style Tiles (pictured below), and testing a few mock-ups. I also learned how to use WordPress, having heavily customized it and made use of several plug-ins. I also dabbled in email marketing, SEO optimization, and social media integration.
A processing (Java based) implementation of Pacman, with the ghosts actively chasing Pacman (not following pre-determined routes), several difficulty levels, semi-random maps, and lots of cheat codes!
Unfortunately, the interface is in Portuguese, since this project was part of a programming assignment for my university.
You can find the source code here.
80,000 Hours' Mock-Up Quizzes
The second one used more advanced technologies, like Yeoman, Angular, Grunt, Bower (and Sass once again). This quiz was done by me, however I was in England and my laptop broke, so I ended using another computer, which was linked to another GitHub, hence the @bborgesr.
Bookmarking AppAn incomplete MEAN stack app, attempting to create a more visual appealing browser bookmarking system.
Flex-wire heat-shrinkable handOn the backside of this hand, runs a muscle wire to create a realistically moving robot hand. Made of nickel-titanium alloy, this wire contracts with heat and stays expanded when cool, which is exactly the opposite of what you'd expect of a metal. Each finger of the robot hand contains a muscle wire connected to an LED. The LED lights up when power runs through the finger. As the wire heats, the finger bends! Also, check out my original futurist design of the controller box :)
Stimuli-responsive robotThis was the final course project for BerkeleyX's Electronic Interfaces (EE40LX): a craft-stick vibrating hopper robot controlled by the MSP430G2 LaunchPad. It has the following subsystems: a voltage regulator, two photocell front ends, a speaker driver, a microphone front end and two DC motor drivers. These systems communicate with the MSP430G2 LaunchPad in order to allow the robot to move in response to its environment. In layman's terms, this robot will start moving and making noises in reaction to light and sound stimuli. Check out the demo video!
Home alarm systemAn intrusion alarm system, using magnetic sensor switches to respond to movement. This system uses "low-level" hardware, that is, there was no programming involved, nor any development board (like the Arduino, for example). The two LEDs indicate both whether the system is on or off and whether it is self-locked or not (to continue making noise if, for example, someone opens a door and closes it quickly).
rpg (Rewarding Programming Game)An interactive checklist, with a progress bar that tells you how close you are to the next level and its reward! It makes use of HTML5's localStorage. This whole project started when I drew all that I wanted to do (instead of actually doing it, procrastination at its best!) Note: Due to the localStorage cross-browser implementation, this app works better in Chrome or chrome-based browsers (i.e. Opera).
See a short demo or play the game!
BreakAwakeA website, focusing on design and responsive layouts at all levels. After several iterations, it evolved from the original flower-like design to a more modern tiled one. Prototyping and design (mock-ups pictured below) played a crucial role in this process. Check out the website, but bear in mind, I've never actually finished it, since this was mainly an experiment in design and responsiveness.
Useless box!This was my first electronics project: a fully functional useless box made from scratch (including the wooden box itself and its pretty design). This project was inspired by ThinkGeek's Useless Box Kit. Check out their description: "Ok, so it's a black box, sort of shiny, with a switch on top. But what does the switch do? Does it launch a nuclear attack? Does it terminate someone you don't know somewhere in the world? Does it make bacon magically appear? You stare at it over and over, hour after hour, until you can't take it anymore. You turn it on. And out of the box, a little finger pops out and turns the unit back off. That's all it does, and the smile on your face is proof it works."
src: sarcasmA simple static webpage, my first venture into web development!