-
Notifications
You must be signed in to change notification settings - Fork 0
/
cv.html
163 lines (160 loc) · 15.8 KB
/
cv.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>CV - James Ting</title>
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="assets/img/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/img/favicons/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="180x180" href="assets/img/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/img/favicons/android-chrome-192x192.png">
<link rel="icon" type="image/png" sizes="512x512" href="assets/img/favicons/android-chrome-512x512.png">
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400,700">
<link rel="stylesheet" href="assets/fonts/ionicons.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pikaday/1.6.1/css/pikaday.min.css">
</head>
<body>
<nav class="navbar navbar-dark navbar-expand-lg fixed-top bg-white portfolio-navbar gradient">
<div class="container"><a class="navbar-brand logo" href="#">James Ting</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navbarNav"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
<li class="nav-item"><a class="nav-link active" href="cv.html#education">Education</a></li>
<li class="nav-item"><a class="nav-link active" href="cv.html#experience">Experience</a></li>
<li class="nav-item"><a class="nav-link" href="projects-grid-cards.html">Projects</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact Me</a></li>
<li class="nav-item"><a class="nav-link" href="James_Ting_Resume.pdf" target="_blank">Resume</a></li>
</ul>
</div>
</div>
</nav>
<main class="page cv-page">
<section class="portfolio-block cv">
<div class="container">
<div id="experience" class="work-experience group">
<div class="heading">
<h2 class="text-center">Experience</h2>
</div>
<div class="item">
<div class="row">
<div class="col-md-6 col-lg-8">
<h3>Software Development Engineer Intern @ AWS CloudFormation</h3>
<h4 class="organization">Internship</h4>
<h4 class="display-1 organization">AWS SDK</h4>
<h4 class="display-1 organization">AWS CDK</h4>
<h4 class="display-1 organization">AWS API Gateway</h4>
<h4 class="display-1 organization">AWS Lambda</h4>
<h4 class="display-1 organization">AWS DynamoDB</h4>
<h4 class="display-1 organization">AWS Simple Queue Service</h4>
<h4 class="display-1 organization">AWS CloudFormation</h4>
</div>
<div class="col-md-6 col-lg-4"><span class="period">06/2021 - 08/2021</span></div>
</div>
<p class="text-muted">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". <br>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. <br><br>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. <br><br>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. <br><br>Finally, the system was deployed using the AWS CDK, to follow best practices and ensure that necessary infrastructure changes can be easily implemented. </p>
</div>
<div class="item">
<div class="row">
<div class="col-md-6 col-lg-8">
<h3>Undergraduate Research Project @ McGill University</h3>
<h4 class="organization">Research Project</h4>
<h4 class="display-1 organization">NodeJS</h4>
<h4 class="display-1 organization">PyTorch</h4>
<h4 class="display-1 organization">Monte Carlo Tree Search</h4>
</div>
<div class="col-md-6 col-lg-4"><span class="period">01/2021 - 04/2021</span></div>
</div>
<p class="text-muted">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 <a href="https://sites.google.com/view/oanabalmau" target="_blank">Dr. Oana Balmau</a>. My project demonstrated that a<strong> Monte Carlo Tree Search (MCTS) </strong>system can provide real-time champion recommendations for League of Legends. This project is loosely inspired by one of my personal projects, <a href="lolpredictor-project.html">League Of Legends Match Outcome Prediction</a><br><br>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.<br><br>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. <br><br>The final report is available <a href="assets/comp-400-final-report.pdf" target="_blank">here</a>, and the code is available on <a href="https://github.com/jamesbting/COMP-400-Research-Project" target="_blank">my GitHub</a>.</p>
</div>
<div class="item">
<div class="row">
<div class="col-md-6 col-lg-8">
<h3>Software Developer Intern @ Nuance Communications</h3>
<h4 class="organization">Internship</h4>
<h4 class="display-1 organization">NodeJS</h4>
<h4 class="display-1 organization">Jest</h4>
<h4 class="display-1 organization">Docker</h4>
<h4 class="display-1 organization">Kubernetes</h4>
<h4 class="display-1 organization">Helm</h4>
<h4 class="display-1 organization">Jaeger</h4>
</div>
<div class="col-md-6 col-lg-4"><span class="period">09/2020 - 12/2020</span></div>
</div>
<p class="text-muted">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: <br><br>I modified a <strong>NodeJS</strong> 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 <strong>Docker, Kubernetes, Helm </strong>in order to deploy the client to the production environment. The client and the entire service was able to handle over 8000 concurrent calls.<br><br>I also created a testing suite for the gateway microservice using the <strong>Jest framework.</strong> I was able to achieve a code coverage of <strong>up to 91% across several modules</strong>, in addition to detecting a defect before it was able to affect the production service. The purpose of this project was to create a <br><br>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.<br><br>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.</p>
</div>
<div class="item">
<div class="row">
<div class="col-6 col-lg-8">
<h3>VP Web Developer @ McGill Student's Flying Club</h3>
<h4 class="organization">Volunteer Position</h4>
<h4 class="display-1 organization">HTML</h4>
<h4 class="display-1 organization">CSS</h4>
<h4 class="display-1 organization">JS</h4>
</div>
<div class="col-md-6 col-lg-4"><span class="period">06/2020 - 04/2021</span></div>
</div>
<p class="text-muted">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.</p>
</div>
<div class="item">
<div class="row">
<div class="col-md-6 col-lg-7">
<h3>Co-President @ Hong Kong Student's Network</h3>
<h4 class="organization">Volunteer Position</h4>
<h4 class="display-1 organization">Communication</h4>
<h4 class="display-1 organization">Leadership</h4>
</div>
<div class="col-md-6 col-lg-5"><span class="period">03/2020 - Present</span></div>
</div>
<p class="text-muted"> 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. <br><br>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. <br><br>The club has mandated that we will continue delivering virtual events that promote and spread Hong Kong culture throughout the McGill community.</p>
</div>
</div>
<div id="education" class="education group">
<div class="item"></div>
<div class="heading">
<h2 class="text-center">Education</h2>
</div>
<div class="item">
<div class="row">
<div class="col-md-6">
<h3>B.Sc., Computer Science</h3>
<h4 class="organization" style="background: rgb(237,27,47);">McGill University</h4>
</div>
<div class="col-md-6"><span class="period">09/2018 - Present</span></div>
</div>
<p class="text-muted">cGPA: 3.87/4.00<br>Year: Fourth Year<br>Expected Graduation Date: April 2022</p>
</div>
</div>
<div id="skills" class="skills group">
<div class="skills portfolio-info-card">
<h2>Skills and Technologies</h2>
<div class="row">
<div class="col">
<p><strong>Programming Languages:</strong> Java, Python, C, JavaScript, TypeScript, OCaml</p>
<p><strong>Frameworks and Technologies:</strong> Junit5, PyTorch, TensorFlow, ReactJS, NodeJS, Jest, Git, Docker, Kubernetes, Helm</p>
<p><strong>AWS</strong> <strong>Systems: </strong>API Gateway, Systems Manager, Lambda, DynamoDB, Simple Queue Service</p>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<footer class="page-footer">
<div class="container">
<div class="links"><a href="#">Home</a><a href="cv.html#eductation">Education</a><a href="cv.html#experience">Experience</a><a href="projects-grid-cards.html">Projects</a><a href="contact.html">Contact me</a><a href="#">CV</a></div>
<div class="social-icons"><a href="https://www.linkedin.com/in/james-b-ting/" target="_blank"><i class="icon ion-social-linkedin"></i></a><a href="https://github.com/jamesbting" target="_blank"><i class="icon ion-social-github"></i></a><a href="mailto:[email protected]"><i class="icon ion-android-mail"></i></a></div>
<div>
<p>Created by James Ting with Bootstrap Studio. © James Ting 2020.<br></p>
</div>
</div>
</footer>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/bs-init.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pikaday/1.6.1/pikaday.min.js"></script>
<script src="assets/js/theme.js"></script>
</body>
</html>