-
Notifications
You must be signed in to change notification settings - Fork 0
/
cv.html
603 lines (598 loc) · 24.1 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
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
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
---
about:
name: Andrew Wylie
headline: Computer Scientist
location: Canada
website: https://www.andrewwylie.net/
socials:
- name: github
slug: adwylie
icon: github-alt
domain: github.com/
- name: linkedin
slug: wyliea
icon: linkedin
domain: linkedin.com/in/
technologies:
- python
- java
- javascript
- git
- scrum
overview:
- I'm a computer scientist with 9+ years of professional software development
experience. After completing both a bachelor's and master's degree in
computer science I began my career, which has mainly consisted of
back-end and full-stack positions. Throughout this time I've mainly worked
with Java, Python, and the ecosystems supporting their use.
More recently I've also had the opportunity to gain considerable experience with
Amazon Web Services (AWS) while developing systems that utilize the platform.
experiences:
- position: Staff Software Engineer
company:
name: Western Digital
url: https://www.westerndigital.com/
logo: img/cv/logo-western-digital.png
start-date: 2020-05-11
end-date: 2023-07-28
technologies:
- php
- java
- kotlin
- amazon-web-services
- python
- docker
- git
- jira
- jenkins
- github-actions
- pulumi
description:
- "Over my three years at Western Digital I was involved in several main
activities: PHP-based server-side development to support the EdgeRover
application, Java cloud services development, and an overhaul of the CI/CD
process."
- During my first year at Western Digital I worked as part of a small
cross-functional team on the modification of an acquired PHP-based backend
service for content cataloguing and management. Our solution supported the
EdgeRover application by indexing and providing centralized access (via
OAuth flows) to user's files and their metadata as retrieved from multiple
3rd party sources (eg. Facebook, Flickr, Google Drive). Some highlights of
my contributions during this time include improvements to thumbnail
generation and increasing feature parity across integrations (Dropbox,
Flickr).
- After supporting the EdgeRover application our team joined the DevOps
group in an effort to improve the CI/CD process. Given a directive to
decrease build & deployment times we began by assessing our current tools
in comparison to possible alternatives, eventually opting to transition to
GitHub, GitHub Actions (GHA), Pulumi for IaC, and JFrog Artifactory. My
contributions on this project included architecture documentation and
recommendations for the code build automation tool, versioning approach,
and artifact storage, as well as templated workflows for GHA. By the end
of the project (cut short as it was put on hold) we had a successful proof
of concept available that when extended to all microservices would reduce
build & deployment times by an expected order of magnitude.
- The remainder of my time at Western Digital consisted of supporting the
cloud services. Specifically this meant bug fixes, security patches, minor
feature requests, and other maintenance items related to a few dozen Java
(Spring Boot) and NodeJS-based mircoservices that support the suite of WD
devices.
- position: Cloud Designer
company:
name: Nuvyyo
url: https://www.tablotv.com/
logo: img/cv/logo-nuvyyo.png
start-date: 2018-02-01
end-date: 2020-01-14
technologies:
- java
- amazon-web-services
- gradle
- git
- gwt
- docker
- junit
- mysql
- tomcat
- datanucleus
- logstash
- kibana
- python
- vaadin
- django
- postgresql
description:
- Recommended for the position by a colleague, I began work at Nuvyyo
with the primary responsibility of bringing in-house the previously
outsourced Cloud DVR project. The project itself consisted of a Java
application deployed on Amazon Web Services (AWS) EC2 which allowed
customer devices to record & watch television programs using cloud
storage as opposed to an external hard drive.
- position: Independent Contractor
company:
name: Nomad.Works
url: https://nomad.ca/
logo: img/cv/logo-nomad-works.png
start-date: 2017-07-01
end-date: 2017-11-01
technologies:
- python
- django
- d3.js
- postgresql
- twitter-bootstrap
- git
- agile
- jquery
- linux
- css
- gitlab
- javascript
description:
- Following contract and term positions at Espial, I was hired on as a
contractor at Nomad.Works to assist with Python/Django development.
Working as a full-stack developer, most of my time was spent
implementing billing and reporting features for an advanced
accommodation system.
- Specifically, this included all steps of the development process from
receiving client requirements to deployment; refining requirements for
better clarity, definition of Django models, implementation of the web
pages containing forms and optionally-generated data, implementation of
complex queries with post-processing, data transformation, customized
display via stacked bar chart using D3.js, generation of summary
statistics for revenue and occupancy rates over varying time frames,
and tests to ensure correct aggregation of guest data for the
implemented features.
- position: Cloud Developer
company:
name: Espial Group
url: https://www.espial.com/
logo: img/cv/logo-espial.gif
start-date: 2016-09-26
end-date: 2017-03-24
technologies:
- jira
- confluence
- bitbucket
- node.js
- docker
- jenkins
- javascript
- python
- linux
- svn
- git
- npm
- eslint
description:
- After working at Espial through a contract with Dever Domain Inc., I
was offered an additional six-month position as a Media Services
Platform (MSP) Cloud Developer directly through Espial. Joined by
another full-time colleague and a few co-op students, our scrum team
focused on internal tools and modernization (modularization and
containerization) of an older core product.
- Our work mainly dealt with improvements to our group’s software
engineering processes around software builds, version control, load
testing, internal metrics, and code standards.
- position: Software Developer
company:
name: Dever Domain Inc.
url: https://dever.ca/
logo: img/cv/logo-dever-domain.png
start-date: 2015-12-01
end-date: 2016-09-01
technologies:
- ant
- java
- rhel
- linux
- jira
- confluence
- redmine
- svn
- ubuntu
- eclipse
description:
- Hired on at DDI to assist with contract work at Espial, I was involved
in the development of a server-side application to integrate
system-level components for an Over-The-Top (OTT) Video On Demand (VOD)
solution for the German cable provider Tele Columbus.
- Placed as a lead developer of the Workflow Manager application, I
implemented several large pieces of the system along with carrying out
unit testing, and assisting in system testing. Responsibilities in this
role also included documentation of the application for eventual handoff
for maintenance, and providing training to those maintainers. Development
was made more interesting both as I had the opportunity to work directly
with the media content providers to determine a standard for content
metadata, as well as working within a distributed project team with
colleagues located in Ottawa, Cambridge, Berlin, and Leipzig.
- Lastly, while wrapping up the project I assisted in installation and
configuration of the system both remotely, and at the client site in
Leipzig.
- position: Software Developer
company:
name: Thales Group
url: https://www.thalesgroup.com/
logo: img/cv/logo-thales.jpeg
start-date: 2015-07-13
end-date: 2015-10-09
technologies:
- c#
- tfs
- arcgis
- visual-studio
- mef
- .net
- mvvm
description:
- While completing my master's degree I worked part-time at Thales Group.
At a high level, I was involved in the development of a Tactical Battle
Management System (TBMS) as part of one of several small scrum teams.
- Contributions I was able to provide mainly included improvements to the
GUI (eg. implementing paging on custom MVVM components for improved
responsiveness) along with bug fixes.
- position: Teaching Assistant
company:
name: Carleton University
url: https://www.carleton.ca/
logo: img/cv/logo-carleton-university.png
start-date: 2014-09-01
end-date: 2015-04-01
technologies:
- c
- valgrind
- gdb
- linux
description:
- During the 2014/2015 school year I was employed at Carleton University
as a Graduate Teaching Assistant.
- In both the fall and winter semester I assisted in teaching the
Introduction to Systems Programming course. The course itself covered
the C programming language (along with debugging via gdb & valgrind),
use of linux command-line utilities, and several basic computer
organization and systems programming concepts (bit models, threads, &c).
- For both terms, my duties included learning any new material before the
students, marking assignments, holding office hours, and both creating
& instructing the tutorials.
- position: Teaching Assistant
company:
name: Carleton University
url: https://www.carleton.ca/
logo: img/cv/logo-carleton-university.png
start-date: 2013-09-01
end-date: 2014-04-01
technologies:
- python
- pygame
- java
- javascript
- html
- css
- twitter-bootstrap
- node.js
- mongodb
- jade
- linux
description:
- During the 2013/2014 school year I was employed at Carleton University
as a Graduate Teaching Assistant.
- In the fall semester, I assisted teaching the Introduction to Computer
Science I course. The covered material began with an introduction to the
Python programming language, with the Pygame library being used in
several assignments. A basic introduction to algorithms (minimum,
maximum, and median finding) was also included in the course, as well
as a brief overview of Java.
- For the winter semester I was a teaching assistant for the Fundamentals
of Web Applications course, which focused mainly on development of web
applications using JavaScript with Node.js and Mongodb. The material was
introduced gradually, first focusing only on server-side JavaScript,
which was followed by integration of CSS styling, templating (Jade),
database usage, and client-side JavaScript. Assignments themselves dealt
with implementation and use of web forms, secure & persistent sessions,
web sockets, simple games, and a basic web server.
- For both terms, my duties included learning any new material before the
students, marking assignments, holding office hours, and teaching
tutorials to reinforce the material taught during lectures.
- position: Senior Systems Analyst
company:
name: NAV CANADA
url: https://www.navcanada.ca/
logo: img/cv/logo-nav-canada.png
start-date: 2012-07-01
end-date: 2013-06-01
technologies:
- jenkins
- trac
- java
- eclipse
- ant
- svn
- git
- javascript
- django
- python
- html
- css
- twitter-bootstrap
description:
- During this one year contract I worked with a medium-sized team on an
Air Traffic Services Data Management System (ATSDMS) for the Hong Kong
Civil Aviation Department. During my employment I was involved with
build management, software integration testing, system environment
configuration and deployment, project support, and implementation of a
user interface to manage system-wide access permissions.
- position: Software Developer
company:
name: NAV CANADA
url: https://www.navcanada.ca/
logo: img/cv/logo-nav-canada.png
start-date: 2011-05-01
end-date: 2011-08-01
technologies:
- git
- django
- python
- html
- css
- javascript
- postgresql
- postgis
- apache
- scrum
- agile
- linux
description:
- I was able to have my final placement (Carleton University Co-op) with
the same group as the previous placement, which was very exciting! I
continued to work with the same developers on an online collaborative
flight planning system (CFPS) to replace another decade-old system.
- This time around I worked more-so on fixing defects as the deadline for
the first release was nearing. Along with polishing the system, I was
still able to implement a few features; a basic CMS for site
administrators, and some PostGIS mapping for the start of the weather
system integration/development.
- position: Teaching Assistant
company:
name: Carleton University
url: https://www.carleton.ca/
logo: img/cv/logo-carleton-university.png
start-date: 2011-01-01
end-date: 2011-04-01
technologies:
- assembly
- digital-logic
- c
description:
- I was a teaching assistant for COMP 2003; Computer Organization. The
main topics covered were digital logic and Intel Architecture 32 bit
assembly language (including mixed mode programming!).
- This position involved marking of assignments and the midterm examination,
along with proctoring the midterm examination, and providing assistance
to students during the weekly office hours. To better help students
during my office hours I ended up working through the assignments myself
to help refresh the concepts and provide context when answering any
questions that may have surfaced.
- position: Software Developer
company:
name: NAV CANADA
url: https://www.navcanada.ca/
logo: img/cv/logo-nav-canada.png
start-date: 2010-05-01
end-date: 2010-08-01
technologies:
- git
- django
- python
- html
- css
- javascript
- twitter-bootstrap
- postgresql
- apache
- scrum
- agile
- linux
description:
- For this placement (Carleton University Co-op) I began work with a small
group of developers (~6) on an online collaborative flight planning
system (CFPS) at the beginning of its implementation stage. It was
designed to allow users to file flight plans from the web, replacing the
current method of either filling out a paper form or calling in to a
flight service station. Integration with weather and other systems is
also planned.
- The scrum (agile) development process was used with week-long sprints,
with development being done on linux fedora machines. A chroot
environment along with virtualenv was used to target the cluster
production environment, with python-django as the main
language/framework and twitter bootstrap to help with the ui.
- position: Hardware Support & Technical Writer
company:
name: NAV CANADA
url: https://www.navcanada.ca/
logo: img/cv/logo-nav-canada.png
start-date: 2009-05-01
end-date: 2009-12-01
technologies:
- documentation
- testing
- hardware
- html
- css
- php
- mysql
description:
- During my time with Nav Canada for this placement (Carleton University
Co-op) I worked mainly on the development and testing of several
modifications for domestically fielded air traffic control equipment.
The group I worked with was also responsible for some of the project
support for other software groups, which also influenced my
responsibilities.
- During my free time I also worked on developing a basic web application
for managing laboratory bookings for the group.
education:
- title: Master of Computer Science
institution:
name: Carleton University
url: https://www.carleton.ca/
logo: img/cv/logo-carleton-university.png
start-date: 2013
end-date: 2015
technologies:
- computer-science
- distributed-computing
- data-mining
- computational-geometry
- algorithm
- software-engineering
- machine-learning
- software-quality
description:
- For my thesis I implemented modifications the Apache Hadoop MapReduce
framework to allow generic, integrated, workflow scheduling. Along with
this, various deadline and budget-constrained algorithms were designed,
theoretically analyzed, and implemented. Specifically, two
budget-constrained algorithms and a deadline-optimizing algorithm were
proposed, followed by testing on a production-sized cluster running on
Amazon EC2.
- title: Bachelor of Computer Science
institution:
name: Carleton University
url: https://www.carleton.ca/
logo: img/cv/logo-carleton-university.png
start-date: 2007
end-date: 2012
technologies:
- computer-science
- math
- economics
- psychology
description:
- In addition to completion of my bachelor's degree with highest honors, I
also obtained a minor in mathematics, and participated in the cooperative
education option. Much of the work terms had me placed at Nav Canada,
where I participated in the implementation of a domestic web-based
flight-planning application (CFPS) which would eventually replace the
old method of faxing completed forms.
- My honors project consisted of a comparison of model-based testing
between a Microsoft Visual Studio extension and a custom-built framework
written by a previous PhD student.
artifacts:
- name: A Scheduling Algorithm for Hadoop MapReduce Workflows with Budget
Constraints in the Heterogeneous Cloud
event: 2016 IEEE International Parallel and Distributed Processing
Symposium Workshops (IPDPSW)
url: http://doi.ieeecomputersociety.org/10.1109/IPDPSW.2016.30
logo: img/cv/logo-2016-IPDPSW.jpg
date: May 2016
description:
- For our research, we consider the ever-increasingly popular Apache
Hadoop framework for scheduling workflows onto resources rented from
cloud service providers. Investigated in our work is budget-constrained
workflow scheduling on the Hadoop MapReduce platform, wherein we devise
both an optimal and a heuristic approach to minimize workflow makespan
while satisfying a given budget constraint. We have implemented
modifications to the Apache Hadoop framework to execute these approaches,
allowing fully integrated workflow scheduling.
---
<!DOCTYPE html>
<html>
<head>
<title>Andrew Wylie</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Personal blog and portfolio of Andrew Wylie.">
<meta name="keywords" content="carleton university ottawa gatineau quebec
canada computer science electronics consultant tutor diy hardware software
application app remote contract contractor ontario">
<link rel="stylesheet" href="./simple-grid.min.css">
<link rel="stylesheet" href="./styles.css">
<script src="https://use.fontawesome.com/cecd60003b.js"></script>
</head>
<body>
<div class="container timeline">
<div class="section section-info">
<h1>{{ page.about.name }}</h1>
<p>{{ page.about.headline }}</p>
<div><i class="fa fa-map-marker fa-fw"></i>{{ page.about.location }}</div>
<ul>
{% for social in page.about.socials %}
<li>
<i class="fa fa-{{ social.icon }} fa-fw"></i>
<span>{{ social.domain }}<a class="tag-link" href="https://{{ social.domain }}{{ social.slug }}">{{ social.slug }}</a></span>
</li>
{% endfor %}
</ul>
</div>
<div class="section section-technologies">
<h2>Technologies</h2>
<div>
<div>Preferred Technologies</div>
<div>{% for technology in page.technologies %}<span class="tag">{{ technology }}</span>{% endfor %}</div>
</div>
</div>
<div class="section section-overview">
<h2>Overview</h2>
<div>{% for paragraph in page.overview %}<p>{{ paragraph }}</p>{% endfor %}</div>
</div>
<div class="section section-experiences">
<h2>Experience ({{ page.experiences | size }})</h2>
<div>
{% for experience in page.experiences %}
<div class="flex">
<div class="cv-logo-container">
<div class="cv-logo">
<img class="cv-image" src="{{ experience.company.logo }}" alt="{{ experience.company.name }}"/>
</div>
</div>
<div>
<h3 class="position-title">{{ experience.position }}</h3>
<h4 class="company-url"><a href="{{ experience.company.url }}" rel="nofollow" title="{{ experience.company.name }}" target="_blank">{{ experience.company.name }}</a></h4>
<div class="dates">{{ experience.start-date | date: "%B %Y" }} → {% if experience.end-date %}{{ experience.end-date | date: "%B %Y" }}{% else %}Current{% endif %}</div>
<div class="technologies">{% for technology in experience.technologies %}<span class="tag">{{ technology }}</span>{% endfor %}</div>
<div class="content">{% for paragraph in experience.description %}<p>{{ paragraph }}</p>{% endfor %}</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="section section-education">
<h2>Education</h2>
{% for entry in page.education %}
<div class="flex">
<div class="cv-logo-container">
<div class="cv-logo">
<img class="cv-image" src="{{ entry.institution.logo }}" alt="{{ entry.institution.name }}"/>
</div>
</div>
<div>
<h3 class="position-title">{{ entry.title }}</h3>
<h4 class="company-url"><a href="{{ entry.institution.url }}" rel="nofollow" title="{{ entry.institution.name }}" target="_blank">{{ entry.institution.name }}</a></h4>
<div class="dates">{{ entry.start-date }} → {{ entry.end-date }}</div>
<div class="technologies">{% for technology in entry.technologies %}<span class="tag">{{ technology }}</span>{% endfor %}</div>
<div class="content">{% for paragraph in entry.description %}<p>{{ paragraph }}</p>{% endfor %}</div>
</div>
</div>
{% endfor %}
</div>
<div class="section section-artifacts">
<h2>Public Artifacts</h2>
{% for artifact in page.artifacts %}
<div class="flex">
<div class="cv-logo-container">
<div class="cv-logo">
<img class="cv-image" src="{{ artifact.logo }}"/>
</div>
</div>
<div>
<h3 class="position-title">{{ artifact.name }}</h3>
<h4 class="company-url"><a href="{{ artifact.url }}" rel="nofollow" target="_blank">{{ artifact.event }}</a></h4>
<div class="dates">{{ artifact.date }}</div>
<div class="content">{% for paragraph in artifact.description %}<p>{{ paragraph }}</p>{% endfor %}</div>
</div>
</div>
{% endfor %}
</div>
<div class="section section-social"></div>
</div>
</body>
</html>