Erik Babu Drawing of me done by a friend

About Me

My family originates from Kerala, India, but I was born and brought up in Gaborone, Botswana. Before you ask, I would like to let you know that I did not ride giraffes to school. That is just ludicrous! Everybody knows you get better mileage from elephants. My interests include anything related to computer science, football and Formula 1. When time permits, I also perform stand-up comedy. I am currently undertaking the final year of a 4-year Computing (MEng) degree at Imperial College London. For more on my (lack of a) social life, I recommend you take a look at my social media and other accounts listed below.


Education

Imperial College London | MEng Computing | London, United Kingdom

October 2016 - June 2020 (Expected)

Distinctions Performance Combined Overall: 73% (1st)

Maru-A-Pula School | A-Levels and IGCSEs | Gaborone, Botswana

January 2009 - November 2015

A-Levels IGCSEs Distinctions

Work Experience

Bloomberg LP | Software Engineering Intern | London, United Kingdom

April 2019 - September 2019

During my placement, I worked in one of the divisions of Trading and Analytics, the Market Depth team. My assigned individual project was to develop short term intra-day volatility models for securities on the FTSE100 (UKX Exchange).

This project provided a good foundation to learn more about finance and time series modelling, of which I had no experience prior to the placement. I got the chance to experiment with different statistical approaches to modelling the data, such as: Auto Regressive (AR), Moving Average (MA), Auto Regressive Integrated Moving Average (ARIMA) and Generalised Auto Regressive Conditional Heteroskedasticity (GARCH) models.

Another important skill learnt was how to model the data using neural networks (LSTMs), constructed with TensorFlow and Keras. The preprocessing step involved visualising, cleaning and augmenting the datasets on Jupyter Notebooks. This enabled fast feedback and rapid prototyping of different approaches.

As the model development was completed ahead of schedule, I was assigned an extra task; to develop a real-time prototype that could make live forecasts and visualise the predictions on a Bloomberg Terminal UI. Internal demos and presentations were given at the end of the placement to various stakeholders. The overall feedback was extremely positive.

Although this project was initially just meant to be about developing a model, it turned into a full stack project. I gained experience with writing high performance, scalable and well tested python code (back-end). Model training was done on a cloud compute platform, which meant I had to familiarise myself with Docker and Kubernetes. I also had to configure a database for the prototype. The Bloomberg Terminal UI was implemented in a proprietary javascript framework.


American Express | Technology Intern Engineer | Burgess Hill, United Kingdom

June 2018 - August 2018

Worked in the Loyalty sector where the assigned project was to develop a dashboard that would allow engineers to monitor file transfers between AmEx and a specific partner to determine if they were successful or not.

The MVP was just meant to monitor files sent to one partner. However the developed solution vastly exceeded expectations by being generic enough to be used to monitor both sending and receiving as well as having the capability to monitor transfers to every single partner.

Worked with a start-up, loyalBe, as part of the internship. Tasked with developing a REST API that would allow submission of feedback. Also developed a dashboard that retailers could use to view feedback as well as reply to it.

Gained a lot of technical experience working with several new technologies (Redis, Logstash, ElasticSearch, Kibana, React, Spring Boot). Learnt how to work in an agile (scrum) environment to ensure consistent delivery of value after each iteration, demonstrated by the fact that the project went into production 2 weeks ahead of schedule.


Giraffe | Intern | Johannesburg, South Africa

April 2016 - July 2016

Spent nearly 4 months interning at job recruitment agency, Giraffe, winners of the 2015 Seedstars World Award for Best Global Startup. This internship provided numerous insights into startup culture and the benefits of working as part of a driven but cohesive unit. During my time there, I:

Skills

Programming related Non-programming related

Other Projects

Wireless Sensor Network Individual Project

February 2019 - March 2019

Developed a reliable wireless sensor network in a star topology, corresponding of 9 sender nodes and a base station, which was capable of maintaining ~99% Packet Delivery Ratio and Round Trip Time of 15-25 ms. This was particularly challenging because we needed to ensure that each sender node sent packets at a (fixed) rate of 5 per second. The developed solution also proved to be resistant to jamming attacks; when tested with a jammer operating every 50ms in 500ms intervals, we still maintained 99% delivery rate. The nodes (Texas Instruments Sensor Tags) ran the contiki OS, meaning all code flashed onto the hardware was written in C. Simulations of our network were run on Cooja.

To show the packet delivery ratio and round trip times in real time, a visualisation was developed in python (matplotlib) which read data from a serial port that the base station was connected to. As data was coming in from 9 sources simultaneously, to prevent clobbering of messages (which would not get picked up by our filter and thus incorrectly report metrics), we applied the producer consumer principle; one thread placed data in a queue and another one graphed it.

Languages/Frameworks used: C (ContikiOS), Cooja, Python


Edward.AI (Web Application)

October 2018 - January 2019

Third Year Software Engineering Group project. Our task was to develop a digital assistant for Imperial College London that could help current and prospective students by providing a single point of information for all things Imperial (and even some general knowledge about the world).

Users could ask Edward a question, either by typing it in or using the voice command option. Edward would display the answer on screen, as well as dictate the answer in an articulate male British accent (to simulate its namesake, King Edward VII).

An administrator dashboard was also created that allowed admins to:

The back-end was implemented as a REST-API to reduce coupling with the front-end. We developed our own Recurrent Neural Network (RNN), using specifically bi-directional GRUs, to tackle the challenge of question answering. Our model was developed using Keras. A question answering model developed by Facebook, DrQA, was also integrated into the application, to enable Edward to answer general knowledge questions about the world. The DrQA model answered questions by fetching the most likely answer from Wikipedia.

The product was developed following the Scrum methodology over a series of 4 two-week checkpoints. I additionally acted as scrum master throughout the project. GitHub was used for version control and CircleCI was used for continuous integration.

Languages/Frameworks used: React.js, Keras, Python/Flask, Gunicorn, Nginx, Memcached, Server-Sent Events (SSE), AWS RDS, MySQL, SQLite


Handy Peters (Web Application)

May 2018 - June 2018

Leader of group project where we created a Web application with the aim of connecting those that need help around the house, with those willing to help them. There was a strong emphasis on following agile practices for this project. In the first week, we carried out extensive research (surveys) to determine the viability of our idea. Next, we set up CI/CD and developed a walking skeleton, following a thin-sliced, iterative approach to adding features. Based on user-feedback (gained during meetings with users fitting the target demographic), we added/removed/improved existing features, leading to our MVP. Finally, we added the remaining features that were lower on the priority list but would still bring value to the users, either through functionality or user-experience.

Languages/Frameworks used: Python/Django, PostgresDB, HTML, CS, JS, Bootstrap, GitLab runners for CI/CD


Pintos

January 2018 - March 2018

Second Year Group project where the aim was to implement the Pintos Operating system. The project was split into 4 tasks:

  1. Task 0: This task was done individually. It involved changing the original skeleton's implementation of the clock timer's 'sleep' functionality. Changed busy waiting waiting implementation to having a list of threads, descendingly ordered by their earliest wake up time. This meant that more threads could run in a given time, on average.

  2. Task 1: This task involved implementing scheduling algorithms. The first thing we needed to do was implement priority scheduling for locks, semaphores and monitors. Once this was done, we worked on implementing priority donation for locks. Finally, we implemented the BSD scheduling algorithm. Additionally, to implement BSD scheduling, we needed to create our own floating-point arithmetic functions.

  3. Task 2: For this task, the aim was to get pintos to be able to support loading and running user programs (written in C) i.e. interacting with the OS through system calls. We also added support for passing arguments to new processes. We made sure that anything unsafe that the user program attempted would be killed, thereby protecting the kernel, and allowing other user processes to run without any issues.

  4. Task 3: This was the most challenging task of the project. We needed to implement user virtual memory. For Task 2, every user program managed to fit inside the 2MB RAM. However, for this task, we allowed user programs to "think" that they had 3GB to work with. To get this done, we created a frame table and a swap table, to keep track of the current frames in physical memory and the ones stored in swap space (the hard drive). The page-fault handler from the previous task was modified to also allow the stack to grow larger (up to 8MB). This was significantly larger than the size of the single page (4kB) limit that was previously imposed. We used the second chance eviction algorithm for our frame replacement. We tried to implement sharing of read-only pages but did not manage to complete it in time. This task, much like the others, was difficult due to the small time frame we had to complete the assignment. There were a lot of synchronisation cases we needed to consider to prevent deadlocks from occurring.
Languages/Frameworks used: C


Image Steganography

January 2018

After implementing an Enigma Machine (mentioned below), which was about making messages hard to decode, I wondered if there was a way of hiding messages in the open. My research pointed me towards image steganography. After reading a research paper on Lowest Significant Bit Image Steganography using colour images, I implemented a variation of the algorithm in C++. Users can store their message in a text file and hide this message in a provided image. The differences between the source and embedded images cannot be detected by the human eye. A user on the receiving end can then run the decryption algorithm on the embedded image and have the discovered text saved in a text file.

Languages/Frameworks used: C++


Enigma Machine

December 2017

After watching the film, The Imitation Game, I became fascinated by the enigma machine used by Germany to encrypt and decrypt messages. After reading a bit on how it worked, I implemented it in C++. My implementation works exactly like the original apart from the fact that more than 3 rotors can be used. I also included the original rotor configurations as well as other configurations used throughout history to give users an authentic experience.

Languages/Frameworks used: C++


World GDP Visualisation Tool

December 2017

I had recently learnt python and wanted to practise the skills I garnered. I am quite fascinated by data analysis and impressed by good data visualisations. I decided to write my own data visualisation tool, with the aid of Pygal. The program allows users to input a year between 1960 and 2016 (the years data were available). The program then reads from the json file containing the data. Finally it plots the data on a pygal world map and saves the result in a svg file that can be viewed on a browser.

Languages/Frameworks used: Python


Compiler for small while language (WACC)

November 2017 - December 2017

Second year group project where the aim was to write a full compiler for a complete, static-typed while language. The first task was to develop the front-end of the compiler (perform syntax and semantic checks). ANTLR was used to perform the tokenizing and parse tree generation based on the Lexer and Parser rules we provided. The second task was to develop the back-end of the compiler (convert valid programs into ARM11 assembly). For both these tasks, we wrote ruby scripts that would automate testing. Our extension to the language was to have classes with constructors, destructors and overloaded fields/methods with visibility. The front- and back-end implementations were updated to reflect this.

Languages/Frameworks used: Java with ANTLR, Ruby


Concurrent Picture Processing Library

November 2017

Wrote a picture processing library in C++ with the aid of the opencv library. The task was to allow users to load several images into a library and perform operations on them such as: blurring, inverting, grayscaling, rotating or flipping. After this was done, the next task was to make the implementation concurrent. I had learnt some theory about concurrency in the first year, but this was the first time I would be applying that theory. To speed up the image processing, the program was updated to perform different actions on separate images concurrently. Additionally, images were split into sectors and had threads working on each sector to further speed up processing.

Languages/Frameworks used: C++


Emulator and Assembler for subset of ARM11 instructions

May 2017 - June 2017

First year group project where the first task was to write an ARM11 emulator. The second task was to write an ARM11 assembler. For our extension, we wrote games with GUIs in C with the aid of the SDL Library. I re-made the classic arcade game, Pong.

Languages/Frameworks used: C


Supermarket loyalty rewards system

February 2015 - October 2015

A-Level project that involved creating a customer rewards system for an international grocery chain. The program, written in VB6.0 gives users the option to register for the scheme. And if they are registered, the POS system interacts with the loyalty system to award them points for their purchases. When a certain number of points has been accrued, users get discounts on their purchases. All user information was stored in a database and lookups were made with SQL queries.

Languages/Frameworks used: VB6.0, mySQL


Contact details

Personal E-mail: erikbabu@gmail.com
University E-mail: eb1816@ic.ac.uk

Copyright © Erik Babu