-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
387 lines (382 loc) · 16.6 KB
/
index.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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
<!doctype html>
<html lang="en-GB">
<head>
<!--Import Google Icon Font-->
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet"
/>
<!-- Compiled and minified CSS -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@materializecss/materialize@2.1.0/dist/css/materialize.min.css"
/>
<!-- Font awesome icons -->
<script
src="https://kit.fontawesome.com/1f14b3aedb.js"
crossorigin="anonymous"
></script>
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Jonathan Woollett-Light's CV" />
<title>Jonathan Woollett-Light</title>
<link rel="icon" type="image/x-icon" href="./favicon.ico" />
<style>
/* Hide specific items when printing */
@media print {
.no-print,
.no-print * {
display: none !important;
}
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div id="main" class="col s12 m9 l10 offset-m3 offset-l2">
<h3>Jonathan Woollett-Light</h3>
<p>
<i class="fa-solid fa-location-dot"></i
><a href="https://maps.app.goo.gl/epiRn7Y88kgLSxiAA">
9 Strathcarron Court, Cambrigde, Cambridgeshire, CB4 2UZ</a
>
</p>
<p><i class="fa-solid fa-phone"></i> +44 7941 079483</p>
<p>
<i class="fa-solid fa-envelope"></i> jonathanwoollettlight@gmail.com
</p>
<p>
<i class="fa-brands fa-github"></i
><a href="https://github.com/JonathanWoollett-Light">
JonathanWoollett-Light</a
>
</p>
<p>
<i class="fa-brands fa-linkedin"></i
><a href="https://www.linkedin.com/in/jonathan-wl/"> jonathan-wl</a>
</p>
<p>
<i class="fa-brands fa-youtube"></i
><a href="https://www.youtube.com/@alittlemorethananintroduct1604">
A little more than an introduction to</a
>
</p>
<div id="programming_experience" class="section scrollspy">
<h4>Programming experience</h4>
<p>
I am an expert in Rust, I am experienced in C++, C and Python, and
I am familiar with Zig, Ada, aarch64 asm, RISC-V asm, JavaScript
and CSS3+HTML5. I am a frequent Open-Source contributor having
contributed to ziglang, rustlang and popular Rust crates. I have a
small educational YouTube channel where I very infrequently post
videos about technical topics I find interesting (A little more
than an introduction to - YouTube).
</p>
<img
height="160"
alt="Code written on GitHub by language"
src="https://github-readme-stats.vercel.app/api/top-langs/?username=JonathanWoollett-Light&layout=compact&langs_count=10&exclude_repo=CSC327-A2&theme=transparent&hide_title=true&hide=html,css,scss,ejs,jupyter%20notebook"
/>
<img
height="160"
alt="GitHub contribution statistics"
src="https://github-readme-stats.vercel.app/api?username=JonathanWoollett-Light&hide_rank=true&theme=transparent&show_icons=true&hide_title=true"
/>
<h5><a href="https://cimetrics.io/">CI Metrics</a></h5>
<strong
>November 2023 - Current, Rust JavaScript, & HTML+CSS</strong
>
<p>
A product to track performance metrics (also known as continuous
benchmarking) and integrate with GitHub. An
<a href="https://github.com/tokio-rs/axum">Axum</a> backend
deployed to AWS EC2 with a MongoDB database, implemented with
~3.5k LoC. Currently development is focussed on experimentation
with optimization algorithms for anomaly detection to produce a
solution that accomplishes what
<a href="https://aws.amazon.com/lookout-for-metrics/"
>AWS Lookout for Metrics</a
>
does, but at a much lower cost and complexity. Aimed at possible
wide adoption by developers. This project was motivated by my
experience working on
<a href="https://github.com/firecracker-microvm/firecracker"
>Firecracker</a
>
at AWS where regressions that could have cost millions in
production were almost missed, and certainly some were.
</p>
<h5>
<a href="https://jonathanwoollett-light.github.io/language/"
>My programming language</a
>
</h5>
<p><strong>August 2023 - Current, Rust & Assembly</strong></p>
<p>
A language aiming to be as simple as C, as safe as Ada Spark and
as convenient as Python. Formal verification is integrated into
the compiler supporting full type inference removing the need for
any generics/templates.
</p>
<h5>My web server</h5>
<p><strong>February 2023 - Current, Rust</strong></p>
<p>
A server framework implementing live migration. A new server
process can succeed a local old process in milliseconds with
shared memory (or remotely in seconds over TCP) without dropping
client streams. This can be used as a database server with
in-memory data storage akin to Redis where queries are compiled as
new functions.
</p>
<h5>
<a href="https://github.com/JonathanWoollett-Light/rust-ad"
>RUST-AD</a
>
</h5>
<p><strong>December 2021 - January 2022, Rust</strong></p>
<p>
Auto-differentiation library with code transformation for both
forward and reverse auto-diff.
</p>
<h5>Mathematics Site</h5>
<p>
<strong
>April 2021 - June 2022, Rust, Python, JavaScript &
HTML+CSS</strong
>
</p>
<p>
A PWA to automate mathematics digitisation, enabling automated
marking. An Actix backend using a PyTorch semantic segmentation
model, deployed with AWS, with a MongoDB database. This is my
largest personal project at ~32k lines and ~170k line changes.
This project was a victim of my student ambition while in
university, I came to the conclusion that while I had learned a
great amount and built a cool project it was too big to make it
into a valuable product on my own. This led me to focus on smaller
but more complex projects moving forward.
</p>
<h5>
<a href="https://github.com/JonathanWoollett-Light/GLSL-BLAS"
>GLSL BLAS</a
>
</h5>
<p><strong>September 2020 - April 2021, GLSL & C++</strong></p>
<p>
GLSL code for non-complex BLAS operations with Vulkan. My final
year masters project. I took advantage of modern C++ features to
offer extensive compile-time evaluation to ensure shaders were as
correct as possible.
</p>
<h5>
<a href="https://jonathanwoollett-light.github.io/BLAS/"
>BLAS website</a
>
</h5>
<p>
<strong
>September 2021 - October 2021, Python, JavaScript &
HTML+CSS</strong
>
</p>
<p>
A website documenting BLAS operations. While working on GLSL BLAS
I found
<a href="https://www.netlib.org/blas/">the older website</a> used
to document BLAS to be a little uncomfortable, so I made this.
</p>
<h5>
<a href="https://github.com/JonathanWoollett-Light/cogent"
>Cogent</a
>
</h5>
<p><strong>September 2019 - March 2021, Rust</strong></p>
<p>
A simple library for training simple neural networks, a small
Keras. A component of my final year bachelors project.
</p>
<h5>Genetic Draughts AI</h5>
<p><strong>2016, C++</strong></p>
<p>
A simple tree search program to play draughts using a genetic
algorithm to judge board positions. My first ever venture into
optimisation, I still remember the moment it beat me.
</p>
</div>
<div id="work_experience" class="section scrollspy">
<h4>Work experience</h4>
<h5><a href="https://aws.amazon.com/">Amazon Web Services</a></h5>
<strong
><a href="https://maps.app.goo.gl/Drok6UA7W5empdoY6">Cambrigde</a>
- Software development engineer</strong
>
<p>
I work on Firecracker, a memory efficient, fast booting VMM that
allows AWS lambda to be profitable.
<br /><br />
Firecracker supports snapshotting a VM; a VM can be saved and
restored much faster than booting a new one and much faster than
any other VMM. I spent time working on the safety and
configurability of this feature, this involved evaluating whether
a snapshot could be safely restored on a given CPU considering its
specified features and security mitigations, and those of the
target. This involved analysis of the performance and security
effects of CPU features on both x86-64 and aarch64, and ensuring
we had an implementation that aligned with the specifications.
<br /><br />
Firecracker supports a feature called CPU templates that allows a
user configurability of most of how the CPU is presented to the
guest OS. This work required understanding the Intel x86-64, AMD
x86-64 and Arm aarch64 specifications. Development involved
thorough discussion with customers and within our team both
focused on usability, security and robustness. I rewrote how
Firecracker handles static CPU templates to support runtime CPU
templates and wrote the foundational implementation for runtime
CPU templates. I also implemented thorough compatibility checks
for x86-64.
<br /><br />
I was the owner of an initiative to performance test Firecracker
in production-like scenarios, through this we discovered and fixed
significant performance regressions that may have costed AWS
Lambda millions of dollars if they went live. This work involved
coordinating across teams and diving deep into the deployment and
management of resources to setup the required environment and
execute the useful tests.
<br /><br />
In this role I and another team member adopted responsibility for
maintenance of the
<a href="https://github.com/rust-vmm">rust-vmm</a> open source
organization that maintained components used by Firecracker and
other VMMs such as
<a href="https://github.com/cloud-hypervisor/cloud-hypervisor"
>cloud-hypervisor</a
>.
</p>
<h5><a href="https://www.renishaw.com/">Renishaw</a></h5>
<strong
><a href="https://maps.app.goo.gl/d1S4cdULwPKQcSf98"
>Wotton-under-Edge</a
>
- Software placement</strong
>
<p>
I worked on building C++ components forming an internal standard
library. This involved extensive testing and performance
consideration.
</p>
<h5><a href="https://www.renishaw.com/">Renishaw</a></h5>
<strong
><a href="https://maps.app.goo.gl/d1S4cdULwPKQcSf98"
>Wotton-under-Edge</a
>
- Work experience</strong
>
<p>
My work experience focused on development with FPGAs and VHDL.
</p>
</div>
<div id="education" class="section scrollspy">
<h4>Education</h4>
<h5><a href="https://www.swansea.ac.uk/">Swansea University</a></h5>
<strong>MEng Computing & Bachelors 2.1</strong>
<p>
I competed with the university Taekwondo society, at times
internationally.
</p>
<h5>
<a href="https://www.bhasvic.ac.uk/"
>Brighton and Hove Sixth Form College</a
>
</h5>
<strong
>A levels - Mathematics: B, Modern History: B, Computer Science:
C</strong
>
<p>
I did an Extended Project Qualification discussing the question
'Is the development and completion of an AGI (Artificial General
Intelligence) likely within the next 80 years?'.
</p>
<h5>
<a
href="https://en.wikipedia.org/wiki/St_Andrew%27s_High_School,_Worthing"
>St Andrew's High School</a
>
</h5>
<strong>GCSEs 11 A*-C including mathematics and english</strong>
<p>
I founded the computing club, the debating club and was elected
deputy head boy by students.
</p>
</div>
</div>
<div class="col hide-on-small-only m3 l2 pinned no-print">
<ul class="section table-of-contents">
<li><a href="#programming_experience">Programming</a></li>
<li><a href="#work_experience">Work</a></li>
<li><a href="#education">Education</a></li>
</ul>
<button class="btn outlined" onClick="window.print()">
Save as PDF
</button>
<div>
<a id="theme-switch" href="#" class="is-dark" title="Switch to light mode">
<i class="material-icons">light_mode</i>
</a>
</div>
</div>
</div>
</div>
<!-- Compiled and minified JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/@materializecss/materialize@2.1.0/dist/js/materialize.min.js"></script>
<script>
// Initialize scrollspy.
document.addEventListener("DOMContentLoaded", function () {
var elems = document.querySelectorAll(".scrollspy");
var instances = M.ScrollSpy.init(elems, {});
});
// Theme switch
const currentTheme = localStorage.getItem('theme');
const switchElem = document.querySelector('#theme-switch');
const setTheme = (isDark) => {
if (isDark) {
switchElem.classList.add('is-dark');
switchElem.querySelector('i').innerText = 'light_mode';
switchElem.title = 'Switch to light mode';
}
else {
switchElem.classList.remove('is-dark');
switchElem.querySelector('i').innerText = 'dark_mode';
switchElem.title = 'Switch to dark mode';
}
}
if (switchElem) {
if (currentTheme) setTheme(true); // Load set theme.
switchElem.addEventListener('click', e => {
e.preventDefault();
if (!switchElem.classList.contains('is-dark')) {
console.log("setting dark theme");
document.documentElement.setAttribute('theme', 'dark');
localStorage.setItem('theme', 'dark');
setTheme(true);
}
else {
console.log("setting light theme");
document.documentElement.removeAttribute('theme');
localStorage.removeItem('theme');
setTheme(false);
}
});
}
// Printing logic
window.addEventListener("beforeprint", (event) => {
document.getElementById("main").classList = "col s12";
});
window.addEventListener("afterprint", (event) => {
document.getElementById("main").classList =
"col s8 m9 l10 offset-m3 offset-l2 print";
});
</script>
</body>
</html>