Experience
Software Development Engineer Intern @ AWS CloudFormation
Internship
AWS SDK
AWS CDK
AWS API Gateway
AWS Lambda
AWS DynamoDB
AWS Simple Queue Service
AWS CloudFormation
As a Software Development Engineer Intern at Amazon, my internship consisted of a project that I designed, implemented, tested and presented from beginning to end. My project was entitled "AWS CloudFormation GitOps".
The goal of the project was to create an automated approval workflow for AWS CloudFormation stacks. Using GitOps principles. every pull request in a configured repository will have a comment that automatically describes infrastructure changes, being made by that pull request. This will add another layer of protection against critical infrastructure failures.
For my project, I designed the cloud-native application with an API gateway, several Lambda functions and a DynamoDB table for persistent storage. The system uses several SQS queues for communication between the Lambda instances. The design mitigates issues with starvation, and can theoretically handle hundreds of thousands of requests at a time.
Next, I used constructed an extensive testing suite for the system, ensuring that the system is working as designed, and that the system works as designed. The unit tests have over 90% code coverage, ensuring that any breaking changes will be caught before releasing.
Finally, the system was deployed using the AWS CDK, to follow best practices and ensure that necessary infrastructure changes can be easily implemented.
Undergraduate Research Project @ McGill University
Research Project
NodeJS
PyTorch
Monte Carlo Tree Search
As part of a research project course, I worked at the Data Intensive Storage and Computer Systems Lab at McGill University, under the supervision of Dr. Oana Balmau. My project demonstrated that a Monte Carlo Tree Search (MCTS) system can provide real-time champion recommendations for League of Legends. This project is loosely inspired by one of my personal projects, League Of Legends Match Outcome Prediction
First, I used a NodeJS script to collect data on 1,357,379 matches from the Riot API. Then, I removed duplicate matches and matches with incomplete information. The champion data and outcome was then extracted, for a final dataset size of 984,976 matches.
Then, I built a collaborative filtering technique as a baseline for the latency and memory usage. Then I used a MCTS algorithm called Upper Confidence applied to Trees (UCT) and a neural network reward function. I demonstrated that the UCT and NN reward function have the lowest latencies, and memory usage, while having high recommendation performance and scalability.
The final report is available here, and the code is available on my GitHub.
Software Developer Intern @ Nuance Communications
Internship
NodeJS
Jest
Docker
Kubernetes
Helm
Jaeger
As a Software Developer Intern working with the NLUaaS team in the Enterprise R&D Department, I was responsible for developing modules that encapsulate libraries built by the Research team, such as tokenizers, NLU API gateways, and NLU clients, for Nuance clients. Within my team's agile software development process, I completed a number of tasks:
I modified a NodeJS client to obtain OAuth tokens authentication to access the production endpoints using OAuth tokens, in preparation for the massive load testing for a new client. I then containerized the client using Docker, Kubernetes, Helm in order to deploy the client to the production environment. The client and the entire service was able to handle over 8000 concurrent calls.
I also created a testing suite for the gateway microservice using the Jest framework. I was able to achieve a code coverage of up to 91% across several modules, in addition to detecting a defect before it was able to affect the production service. The purpose of this project was to create a
For my next project, I developed a runtime configuration watcher NodeJS library to abstract a module that appears multiple times in several microservices. This library allows clients to define which parameters in configuration files are to be watched, and define behavior for when the watched parameter is changed. This library is now being used in several microservices in production, reducing system down for Nuance clients.
The final project was a POC for OpenTelemetry and Jaeger, to demonstrate viability for use in my team's technology stack. I create a client, gateway and service applications, then constructed a tracing module that could serve as a basis for a distributed tracing library.
VP Web Developer @ McGill Student's Flying Club
Volunteer Position
HTML
CSS
JS
I am the VP Web Developer at the McGill Student's Flying Club, where I am responsible for updating and maintaining the club's website. During my time, I refactored the code base and significantly improved the readability without damaging the functionality of the website.
Co-President @ Hong Kong Student's Network
Volunteer Position
Communication
Leadership
As the Co-President of the Hong Kong Student Network, I am responsible for leading the club throughout the year. I am primarily responsible for the Internal, External, Finance and Communications teams.
In these unprecedented times, I was elected to lead the club in a time where there is no pre-existing framework of what the club's response to this pandemic. To protect the health and safety of other executive members, and by extension the general public, the co-presidents have decided to suspend all in-person events and meetings, and will continue to follow the social distancing guidelines set out by local, provincial and federal governments.
The club has mandated that we will continue delivering virtual events that promote and spread Hong Kong culture throughout the McGill community.
Education
B.Sc., Computer Science
McGill University
cGPA: 3.87/4.00
Year: Fourth Year
Expected Graduation Date: April 2022
Skills and Technologies
Programming Languages: Java, Python, C, JavaScript, TypeScript, OCaml
Frameworks and Technologies: Junit5, PyTorch, TensorFlow, ReactJS, NodeJS, Jest, Git, Docker, Kubernetes, Helm
AWS Systems: API Gateway, Systems Manager, Lambda, DynamoDB, Simple Queue Service