-
Notifications
You must be signed in to change notification settings - Fork 0
/
Resume - Devon Powell.tex
698 lines (537 loc) · 26.7 KB
/
Resume - Devon Powell.tex
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
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
\documentclass[10pt, letterpaper]{article}
\usepackage[utf8]{inputenc} % ensure UTF-8 encoding is used
\usepackage[letterpaper, margin=0.5in]{geometry} % document margins, `showframe` will display margins
\usepackage[english]{babel}
\usepackage{mathptmx} % Times New Roman font-family (`\usepackage{times}` is obsolete)
\usepackage{cmap} % cmap and the T1 font prevent LaTeX from fusing characters
\usepackage[T1]{fontenc} % into ligatures, e.g. "fi" becoming one character
% Alternative:
% \usepackage{microtype}
% % Only disable ligatures for "f" so that -- can be dash, double quotes can be a single character, etc.
% \DisableLigatures[f]{encoding=*, family=*}
\usepackage{textcomp} % Add `\textquotesingle` and `\textquotedbl` for straight quotation marks
% Replacing all curly quotation marks with straight ones is surprisingly difficult
% due to their usage in different environments (e.g. math `$f(x)' = dx$`) and meanings
% in different commands (e.g. default quote behavior using `quoted-text').
% Double-quotes can be solved with some packages (`upquote` + `textcomp`),
% but there aren't any for single-quotes.
%
% Because of this, we could either:
% - Wrap the whole `\begin{document}` in a new command:
% \newcommand\usestraightquotes{%
% \begingroup\lccode`~=`'
% \lowercase{\endgroup\let~}\textquotesingle
% \catcode`'=\active
% }
% which errors in math environments (i.e. `$f(x)' = dx$`).
% - Use `\begin{verbatim}` environment (verbose for conjunctions).
% - Use a regex replace (would interfere with math envs to make quotes not work).
% - Redefining the `'` symbol (would cause all of the above).
%
% See:
% - Closest to the answer (see answer with `\lccode`): https://tex.stackexchange.com/questions/436308/changing-all-single-quotes-to-be-straight-when-within-texttt
% - General straight-quotes question: https://tex.stackexchange.com/questions/52529/straight-quotes
% - Regex replace before compilation:
% - https://tex.stackexchange.com/questions/534581/tex-compilation-after-regex-replace
% - `stringstrings` package: https://tex.stackexchange.com/questions/185682/command-which-replaces-all-occurrences-of-a-certain-character-with-another-chara/185687#185687
% \newcommand{\replaceChar}[3]{\convertchar{#3}{#1}{#2}}
% \newcommand{\replaceSingleQuotes}[1]{\replaceChar{'}{\textquotesingle}{#1}}
% \newcommand{\replaceDoubleQuotes}[1]{\replaceChar{"}{\textquotedbl}{#1}}
% - Regex replace in environment: https://tex.stackexchange.com/questions/574473/replace-a-string-inside-an-environment
% - `upquote` package: https://stackoverflow.com/questions/1662037/how-to-write-programming-code-containing-the-character-in-latex
% - Changing font for only a single character: https://tex.stackexchange.com/questions/531615/switch-font-for-one-character-in-xelatex
% - Attempting Unicode replace (doesn't work due to quotes being ASCII): https://tex.stackexchange.com/questions/400955/add-unicode-character-to-document
% - `listings` package: https://stackoverflow.com/questions/432349/how-do-you-display-straight-quotes-instead-of-curly-quotes-when-using-latexs-l
% - `mint` package: https://tex.stackexchange.com/questions/46880/in-the-minted-package-how-do-i-enforce-straight-single-quotes
% - `microtype` package.
% - Redefining symbols: https://tex.stackexchange.com/questions/279772/how-to-redefine-the-plus-symbol
% \usepackage[compact]{titlesec}
\usepackage{multicol} % multicolumns usage: \begin{multicols}{#} ... \end{multicols}
% minipage for declaring column widths, multicols for equal widths
\usepackage{float} % prevent tables from being moved outside their section using [H]
\usepackage{enumitem} % custom itemize/enumerate styles
\usepackage[hidelinks, pdfpagemode=UseNone, pdfstartview=FitH]{hyperref}
% Create bookmarks, hide link outlines, start with bookmark pane closed
% make default PDF-opening view fit full width.
% Alt: Put configs in `\hypersetup{}` block.
% See: https://overleaf.com/learn/latex/Hyperlinks#Styles_and_colours
\usepackage{makecell} % multiline table cells
\usepackage{ifthen} % boolean expressions
\usepackage{tikz} % \foreach command for looping through args
\usepackage{expl3} % Adds ability to parse `:`, `_`, etc. as letters for function/variable names (see: `\ExplSyntaxOn` below)
\usepackage{xparse} % Adds ability to make functions with multiple optional params + named params
% Docs: https://texdoc.org/serve/xparse/0
\usepackage{xstring} % Adds `\StrSubstitute` command for (non-regex) text replacement
%-------------------Formatting-------------------%
% Command 10pt 11pt 12pt
% \tiny 5 6 6
% \scriptsize 7 8 8
% \footnotesize 8 9 10
% \small 9 10 10.95
% \normalsize 10 10.95 12
% \large 12 12 14.4
% \Large 14.4 14.4 17.28
% \LARGE 17.28 17.28 20.74
% \huge 20.74 20.74 24.88
% \Huge 24.88 24.88 24.88
%---------------Section Indentation--------------%
% Change what is shown in table of contents with:
% \setcounter{tocdepth}{n}
% \setcounter{secnumdepth}{n}
% Command N
% \part{part} -1
% \chapter{chapter} 0
% \section{section} 1
% \subsection{subsection} 2
% \subsubsection{subsubsection} 3
% \paragraph{paragraph} 4
% \subparagraph{subparagraph} 5
% Remove page numbering from all pages
\pagenumbering{gobble}
% Pages use \flushbottom by default to force all pages to have the same vertical ending location.
% This results in pages that don't fill the entire vertical space on the page to spread their content
% evenly to fill it instead of spacing content normally
\raggedbottom % allow page content to end wherever it wants
% \setlength{\parskip}{0em} % space between paragraphs and \\
% Change default \(sub(sub))section styling.
% Define new functions since \usepackage{titlesec} doesn't support \tableofcontents (see: https://tex.stackexchange.com/a/56025/164369).
% This unfortunately removes the ability to see the sections in "Bookmarks" tab of PDF readers, but it's only one page
% so this is acceptable
%
% Attempts were made, but exact formatting for what I wanted could not be obtained.
% These are the titlesec notes taken during attempts
%
% \titleformat{command}{font alterations}{display}{not sure}{before-text display, e.g. numbering}
%
% \titleformat{\section}{\normalfont\Large\bfseries}{
% \noindent \textbf{\Large \thesection}
% \hr
% }{1em}{}
%
% \titlespacing{command}{left spacing}{before spacing}{after spacing}[right]
% \titleformat{\section}{\Large}{\thesection}{*0}{}
% \titlespacing*{\section}{0pt}{*0}{*0}
\newboolean{debug}
\setboolean{debug}{true}
\NewDocumentCommand{\console}{s m}{{%
\ifthenelse
{\boolean{debug}}
{\IfBooleanTF
{#1}
{%
\typeout{}%
\typeout{#2}%
\typeout{}%
}
{%
\typeout{#2}%
}%
}
{}%
}}
\newcommand{\ressection}[2][12.5]{
\vspace{#1pt} % option to add an amount of space above section title
\noindent {\LARGE \ \textbf{#2}}
\vspace{0pt}
\hr
}
\newcommand{\ressubsection}[4][]{
% \parbox is the same as minipage, just with simpler syntax
% that doesn't allow for some commands/styles to be used inside it.
% \ragged(side) floats text to that side. Use \centering for centered text
\vspace{8pt}
\noindent
\parbox[c]{.8\textwidth}{
% large, underlined title with languages in parentheses
% insert extra space ( ) to slightly indent title
\raggedright \ \underline{\large #2} \phantomsection \label{#2} \ (#3) \
\ifthenelse
{\equal{#1}{}} % add <URL> if optional #1 != null
{}
{\small{$<$\url{#1}$>$}}
}
% total width of both parboxes needs to be < 1
\parbox[c]{.19\textwidth}{
% dates floated to the right
\raggedleft (#4)
}
}
% Remove extra space between \underline and text
\let\oldunderline\underline
\renewcommand{\underline}[1]{\oldunderline{\smash{#1}}}
% make URLs font and size the same as regular text
\urlstyle{same}
% Overwrite old \url command to underline it (since `hidelinks` is active in hyperref)
\let\oldurl\url
% Allows `:`, `_`, and some other chars to be recognized as "letters" in function
% and variable names, which is required for `\tl_X`, `\cs_X`, `\regex_X`, etc.
% See:
% - https://tex.stackexchange.com/questions/108696/what-do-explsyntaxon-and-explsyntaxoff-do
\ExplSyntaxOn
% Use `xparse` enhanced `\renewcommand` to make arg-parsing easier for
% asterisk, multiple optional args, multiple mandatory ones, etc.
%
% See:
% - https://tex.stackexchange.com/questions/422765/overloading-command-parameters-in-latex
% - https://www.texdev.net/2010/05/23/from-newcommand-to-newdocumentcommand
% - Special commands in LaTeX: https://doxygen.nl/manual/commands.html
\RenewDocumentCommand{\url}{s O{} m} {{%
% Note: Though we extract the args to named "vars" here,
% they won't work in commands that require the raw types,
% e.g. `\IfBooleanTF{}` because those types of commands will see the
% type as `\def` (which is basically a function) but will see the correct
% type if using the arg directly.
\def\hideProtocol{#1}
\def\displayString{#2}
\def\urlString{#3}
% Default the displayed text to that of the URL.
% `\IfNoValueTF` didn't work here for some reason, not exactly sure why, but
% it would register as True even if the value was blank.
% Maybe it's because of `\def` instead of reading the raw value directly?
\ifthenelse
{\equal{\displayString}{}}
{\edef\displayString{\urlString}}
{}
% If a `\url` call is accidentally passed into another `\url` call (e.g.
% due to nested/multiple wrapper util commands), then strip out the URL
% from it and don't call the nested `\url`.
%
% See:
% - https://tex.stackexchange.com/questions/534581/tex-compilation-after-regex-replace
\regex_match:nnTF
{\c{url}[^\{]*\{} % `\c{regex}` matches a command call by name
{#3}
{%
% Overwrite `\displayString` with that of nested `\url[DisplayString]`
% if it exists
\regex_replace_once:nnN {\c{url}\s*\[(.*)\]\s*\{.*} {\1} \displayString
\regex_replace_once:nnN {\c{url}[^\{]*\{(.*)\}\s*$} {\1} \urlString
}
{}%
% Must use `\let` instead of `\def` because `\def` is more of a pointer
% than `\let` and will change its output if the containing code block
% changes the value of the var it was pointing to.
%
% In other words, we use `\let` to get the value of the var as it is now
% since the call here is possibly executed way later (since
% LaTeX, unlike other programming languages, doesn't actually execute code
% in the same order it was called, but rather in order of when the display
% of that code is ready to be made).
%
% Also, this lets us feign the "correct" method of doing this, which is
% `\tl_set:Nn \urlProtocolRemoved { \urlString }`
% because `\let` makes a "true" variable whereas `\def` does not.
%
% See:
% - `\def` vs `\newcommand`: https://tex.stackexchange.com/a/658
% - `\def` vs `\let`: https://tex.stackexchange.com/questions/258/what-is-the-difference-between-let-and-def
% - `\def` scoping: https://tex.stackexchange.com/q/518894
% - Declaring local variables: https://tex.stackexchange.com/a/14411
% - Redefining with `\edef`: https://tex.stackexchange.com/a/592344
\let\urlProtocolRemoved\urlString
% Alternative:
% \StrSubstitute[0]{Text should be replaced here, here and here}{here}{Latex}
% See:
% - Regex replace example: https://tex.stackexchange.com/questions/534581/tex-compilation-after-regex-replace/534589#534589
% - `\tl_set` usage: https://tex.stackexchange.com/questions/578870/what-is-the-difference-between-tl-setnn-and-cs-setnpn/578874#578874
% - https://tex.stackexchange.com/a/213951
\regex_replace_all:nnN {\w+\:\/\/} {} \urlProtocolRemoved
\ifthenelse
{\equal{\displayString}{\urlString}}
{\IfBooleanT
{#1} % Again, can't use `\def` vars, must use raw vars directly
{%
% Use `\edef` to evaluate the new value immediately rather than
% waiting until when it's executed later (which could be after
% this command exits) to prevent endless loops
\edef\displayString{\urlProtocolRemoved}
}%
}
{}
% `\url` and `\href` are similar except that `\href` allows setting display text
% See:
% - https://tex.stackexchange.com/questions/51267/difference-between-pdf-code-produced-by-href-and-url/51293#51293
\href
{\urlString}
{\oldunderline{%
\displayString
}}%
}}
\ExplSyntaxOff
% enumitem package:
% Global:
% Remove separation between lists and the outside world
% Remove separation between items within lists
% Make each level of indention equal to what indenting a paragraph
% would be (0 for first level, 1 par indent for second level, etc)
\setlist[itemize]{nosep, itemsep=2pt, leftmargin=\parindent, label={\large\textbullet}}
% Local:
% Customize second-level bullet styles
\setlist[itemize,2]{label={\textbf{--}}}
% \setlist[itemize,2]{label={\large$\circ$}}
%-----------------------COMMANDS-----------------------%
%\newcommand{name}[number of args][default for optional]{definition}
\newcommand{\email}[1]{
\underline{\href{mailto:#1}{#1}}
}
\newcommand{\tab}[3][|r|l|]{
% [1] = Border style/format of table columns
% 2 = Title
% 3 = Table content
{ % extra bracket in order to group the \centering content
\begin{table}[H] %[H] means put table here, not where it fits best
\caption*{\textbf{#2}}
\vspace{-0.3cm} % remove extra space after caption
\centering
\begin{tabular}{#1}%
\hline
#3
\end{tabular}
\end{table}
}
}
% Use minipage to make multi-column entries of specified widths.
% Usage:
% \colswidthsof{
% .3/{
% Column 1 content
% },
% .7/{
% Column 2 content
% }
% }
\newcommand{\colswidthsof}[1]{
\foreach \w/\x in {#1} {
\begin{minipage}[t]{\w\textwidth}
\setlength{\parskip}{5cm}
\centering
\x
\end{minipage}
}
}
% Attempts at making \colswidthsof more user friendly by extracting widths to separate parameter
% \newcommand{\colsattempt}[2][]{
% TODO find out how to get items from optional #1 array
% \foreach \z in {#1} {
% \z \y \\ % requires newline b/c minipage requires newline to make new rows
% \foreach \w/\x in {#1/2} {
% \begin{minipage}[c]{.3\linewidth}
% \centering
% \x
% \end{minipage}
% }
% \foreach \w in {#1} {
% \begin{minipage}[c]{\w\linewidth}
% \centering
% \foreach \x in {#2} {
% \w \x
% }
% \end{minipage}
% }
% \newforeach[expand list] \x in {#1,2} {
% \begin{minipage}[c]{0.3\linewidth}
% \centering
% \x
% \end{minipage}
% }
% }
% Usage:
% \colsattempt[.3,.3,.4]{
% {
% Column 1 content
% },
% {
% Column 2 content
% },
% {
% Column 3 content
% }
% }
% Unordered lists
\newcommand{\ul}[1]{%
\begin{itemize}%
#1%
\end{itemize}%
}
% Ordered lists
\newcommand{\ol}[1]{%
\begin{enumerate}%
#1%
\end{enumerate}%
}
% Quotes
\newcommand{\q}[1]{``#1''}
% Code - Inline
% See:
% - https://tex.stackexchange.com/a/257615
% - https://tex.stackexchange.com/questions/46880/in-the-minted-package-how-do-i-enforce-straight-single-quotes
\newcommand{\code}[1]{\small{\texttt{#1}}}
% Tilde
\def\t{$\sim$}
% Horizontal line spreading the page width within margins
\def\hr{
% Per https://tex.stackexchange.com/questions/421791/preventing-letters-with-descenders-g-q-y-from-affecting-line-spacing
% remove extra vspace being added due to characters with descenders,
% e.g. "g", "y", "p", etc. that go below the normal bottom line of text.
% Other possible way of doing this: \noindent\rule{\textwidth}{.5pt}
\par\kern-\prevdepth\vspace{3pt}
\hrule height 1pt
\vspace{2pt}
}
% Link to sections of this article tagged with \label{name}
\newcommand{\secref}[1]{\underline{\nameref{#1}}}
% Link to non-sections of this article tagged with \phantomsection
\newcommand{\nonsecref}[1]{\hyperref[#1]{\underline{#1}}}
\begin{document}
\vspace{-1\multicolsep}
\begin{multicols}{3}
\noindent
\centering
\email{[email protected]} \\
(+1) 321-356-5260
\columnbreak
\smash{\textbf{\huge Devon Powell}} \\
\url{https://devon.is-a.dev}
\columnbreak
\url{https://github.com/D-Pow} \\
\url{https://linkedin.com/in/devon-powell}
\end{multicols}
\vspace{-1\multicolsep}
\ressection{Employment}
\ressubsection{Home Depot - Senior Software Engineer: Store Systems}{Spring, Java, React}{Oct 2023 -- Present}
\ul{
\item \textbf{Introduced WSL configuration to department} for enhanced dev experience for Windows users.
\ul {
\item \textbf{Reduced dev effort for local utilities} via aggregation and conversion of common Postman, zip file, and batch processes into Bash scripts for easy execution.
\item Added configs, scripts, and .profile logic to the onboarding docs for current and future devs to reference.
}
\item \textbf{Added HD Wallet/Pass} features for both point-of-sale and self-checkout.
\ul {
\item Allowed applicable customers to log in and use their saved payment information.
\item While still a WIP, this included the back-end wiring for logging in as well as the front-end displays for executing HD Pass payments.
}
\item Improved customer-lookup functionality, WebSocket communication, Mixpanel event logging, and Cypress end-to-end tests.
}
\vspace{3pt}
\ressubsection{Nextdoor - Lead Front-end Architect}{React, TypeScript, Flow, RTK, AWS, Bash, Docker}{June 2021 -- Sept 2022}
\ul{
\item Served at the intersection between front-end, back-end, pipelines, Bash/dev env, and Docker configuration, flowing wherever needed.
\item \textbf{Founded isomorphic SSR/CSR codebase} for entire site, accelerating build speed, client performance, and pipeline parallelization.
\ul {
\item \textbf{Reduced local dev resource consumption by 70\%} via novel dev-server to replace cumbersome Docker/Python/Webpack combo, improving dev experience and productivity across the entire company.
\item \textbf{Unified state and file structure}, aggregating common needs for many departments into a single source of truth.
\item \textbf{Solved org-wide unit-test issues plaguing devs for years} in a matter of weeks via customizable util functions for async logic, user interactions, redirects, and mocks.
}
\item \textbf{Mediated org's lack of QA} by building a custom system utilizing Docker for running the prod environment locally with your own code injected, allowing sensitive logic to be verified before CD deployment.
\item \textbf{Converted entire site from Flow to TypeScript}, consisting of millions of lines of code via homebrewed AST parser util.
\item \textbf{Constructed 5-year roadmap} to improve app performance and developer experience.
\ul {
\item Executed complete website analysis to discover and fix the largest CI/CD bottlenecks.
\item Laid out instructions/metrics for transitioning from a monolithic structure to micro-frontends.
\item Split shared component library to separate repo, published to AWS private registry, installed as dep in parents, and added local dev utils for auto-auth renewals.
}
% \item Upgraded website from \code{core-js@v2} to \code{core-js@v3}.
% \item Enhance developer experience through tooling improvements, code organization, feature modernization, and leading the move from JavaScript to TypeScript.
}
\vspace{3pt}
\ressubsection{E-Trade - Senior Full-Stack Software Engineer}{React/JavaScript, Spring/Java, Oracle/SQL}{July 2018 -- June 2021}
\ul{
\item \textbf{Mediated company-wide network issues} in personal time via novel \nonsecref{MockRequests} library (see Open-source below).
\ul{
\item \textbf{Eliminated largest front-end blocker} in the company: server rolls occurring twice per week that disable all API endpoints.
\item Improved developer productivity by 40\%.
\item Included in company-wide React/SCSS design-language library/boilerplate due to its efficiency.
}
\item Built 2 platforms for creating investment plans (first year netted \textbf{\$2.5 million, +37\% purchases, +15\% new customers}).
\ul{
\item \textbf{Boosted client performance by 50\%} through restructuring React/MobX global state management.
\item \textbf{Enhanced server scalability} by optimizing data aggregation logic and introducing multithreading.
\item Leveraged design pattern acumen to simplify client-server-DB communication by restructuring Spring DAOs, DTOs, \& logic.
}
% \item Developed a dashboard for analyzing internal systems before markets open (July -- Dec 2018).
% \ul{
% \item \textbf{Designed and spearheaded a novel Python architecture} to enhance data flow/maintainability, and reduce technical debt.
% }
\item \textbf{Augmented Java endpoint performance} by introducing multithreading.
\ul{
\item Utilized asynchronous Spring logic to streamline network/DB requests.
\item Added custom utilities to improve handling of async functionality in parent code.
}
\item Fostered a culture of learning and growth in the organization's developer community.
\ul{
\item \textbf{Primary mentor for onboarding all new hires}, including sessions for teaching git, libraries, and the development stack.
\item \textbf{Optimized team productivity} by engineering scripts for automating tasks, including Jira ticket autocompletion in git, using local text editors/IDEs to code on remote servers, remote file exchanges, cookie extraction/refresh during development, etc.
\item \textbf{Served as a panel leader} and contact point for the intern class of summer 2019.
\item \textbf{Inspired deeper collaboration} across various Slack channels, leading to improvements in coding practices.
}
}
\vspace{3pt}
\ressubsection[{\url[Google Play App]{https://play.google.com/store/apps/details?id=com.etrade.mobilepro.activity}}]{E-Trade - Android Engineer}{Java, Internship}{June -- Aug. 2017}
\ul{
\item Pioneered E-Trade's first Android Edge panel widget that displayed a user's watch lists and respective stock data.
\item Orchestrated the state management, authentication, and caching systems; Coordinated UI/UX design and testing.
\item Facilitated a seamless MVP hand-off to maintainers by writing guides, documentation, and descriptive git commit messages.
}
\ressection{Open-source}
\ressubsection[https://npmjs.com/package/mock-requests]{MockRequests}{JavaScript}{Sept. 2019}
\ul{
\item Launched the first lightweight, yet powerful, mocking library that \textbf{doesn't require changing source code or running local servers}.
\item \textbf{Boasts features other solutions seldom support}: Simple one-step configuration that automatically works throughout the entire application, language/library/environment agnostic, exceptionally performant, toggling mocks via CLI.
}
\ressection{Projects}
\ressubsection[https://github.com/D-Pow/anime-atsume]{Anime Atsume}{React/TypeScript, Spring Boot/Java}{June -- July 2020}
\ul{
\item Unique anime search engine providing the quickest possible path from searching titles to watching episodes, unlike most sites.
\item Full-stack: \textbf{PWA SPA React} front-end, \textbf{Spring Boot} back-end, \textbf{Docker} container, \textbf{AWS} host, \textbf{GitHub Actions} CI/CD.
}
\ressubsection{Picture Place}{React Native, Ionic, PWA, TypeScript}{June 2022 -- Present}
\ul{
\item Mobile app to automatically scan images taken of restaurants/menus, classify them with AI to add tags (cuisine, price, atmosphere, quality, etc.), and add them to an interactive map of places you want to visit.
\item Written as both a \textbf{native app} and \textbf{PWA} for cross-platform usability.
}
\ressubsection[https://atomsofconfusion.com]{Research -- Atoms of Confusion}{C, PHP, HTML/CSS}{Aug. 2016 -- May 2018}
\ul{
\item Determined code patterns that are objectively confusing, with implications for improving design principles and specifications.
}
% \newpage
\ressection{Education}
\vspace{2pt} % add some amount of \vspace like \ressubsection does
\vspace{-1\multicolsep} % remove extra space multicols introduces before its environment
% Set column separation width by wrapping `multicols` environment in:
% {\setlength\columnsep{7pt}
\begin{multicols}{2}
\noindent
\raggedright
\textbf{NYU Tandon School of Engineering} \ -- \ GPA: 3.8/4.0
\underline{Master of Science in Computer Science} (May 2018) {\small Brooklyn, NY}
\columnbreak
\textbf{New College of Florida, the State's Honors College}
\underline{Bachelor of Arts in Chemistry} (May 2016) {\small Sarasota, FL}
\end{multicols}
% \vspace{-1\multicolsep} % remove extra space multicols introduces after its environment
\ressection[6]{Skills}
\vspace{1pt}
\noindent Languages
\par
JavaScript/TypeScript, \ Java, \ HTML, \ SCSS, \ Python, \ SQL, \ PHP, \ LaTeX.
\noindent Technology
\par
React, \ Spring Boot, \ Git, \ RTK, \ MobX, \ Webpack, \ Jest, \ JUnit, \ Gradle, \ Maven, \ Linux, \ Bash, \ Regex, \ Docker, \ Oracle DB,
\par
Agile (Scrum), \ GitHub, \ BitBucket, \ Jira, \ CI/CD (GH Actions, CircleCI, Jenkins), \ AWS, \ GCP, \ Heroku, \ Automation Testing.
\ressection{Additional Relevant Activities}
\vspace{2pt}
\vspace{-1\multicolsep}
\begin{multicols}{2}
\noindent
\raggedright
\underline{Eagle Scout} (2011): Highest rank, top 2\% of all Boy Scouts.
\\
\underline{Cyber Security Club} (Sept. 2016 -- May 2017).
\columnbreak
\underline{NYU Healthcare Hackathon Winner} (Nov. 2016).
\\
\underline{Japanese} (2019 -- Present): Approaching N5 fluency.
\end{multicols}
\vspace{-1\multicolsep}
\end{document}