Compare commits
10 commits
c8f8735323
...
ec6441c0f9
| Author | SHA1 | Date | |
|---|---|---|---|
| ec6441c0f9 | |||
| 0e35c08122 | |||
| 1aa88bc56c | |||
| a42221678e | |||
| 95de19315d | |||
| 54258175b3 | |||
| d0269753d2 | |||
| ee9adddbca | |||
| 4c0ab6ba79 | |||
| 5bb981af7e |
11 changed files with 233 additions and 905 deletions
BIN
.DS_Store
vendored
Normal file
BIN
.DS_Store
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
assets/abbott.png
Normal file
BIN
assets/abbott.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6 KiB |
BIN
assets/iosevka-fixed-regular.woff2
Normal file
BIN
assets/iosevka-fixed-regular.woff2
Normal file
Binary file not shown.
BIN
assets/mr.png
Normal file
BIN
assets/mr.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
BIN
assets/uic.png
Normal file
BIN
assets/uic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
assets/visionable.png
Normal file
BIN
assets/visionable.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
old resume.pdf
BIN
old resume.pdf
Binary file not shown.
803
res.cls
803
res.cls
|
|
@ -1,803 +0,0 @@
|
|||
% RESUME DOCUMENT STYLE -- Released 23 Nov 1989
|
||||
% for LaTeX version 2.09
|
||||
% Copyright (C) 1988,1989 by Michael DeCorte
|
||||
|
||||
\typeout{Document Style `res' <26 Sep 89>.}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% res.sty
|
||||
%
|
||||
% \documentstyle{res}
|
||||
%
|
||||
% Copyright (c) 1988 by Michael DeCorte
|
||||
% Permission to copy all or part of this work is granted, provided
|
||||
% that the copies are not made or distributed for resale, and that
|
||||
% the copyright notice and this notice are retained.
|
||||
%
|
||||
% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
|
||||
% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
|
||||
% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
|
||||
% FOR ANY PARTICULAR PURPOSE.
|
||||
%
|
||||
% If you make any improvements, I'd like to hear about them.
|
||||
%
|
||||
% Michael DeCorte
|
||||
% P.O. Box 652
|
||||
% Potsdam NY 13676
|
||||
% mrd@sun.soe.clarkson.edu
|
||||
% mrd@clutx.bitnet
|
||||
%
|
||||
% Changes for LaTeX2e -- Venkat Krishnamurthy (Aug 7, 2001)
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% You can have multiple style options the legal options ones are:
|
||||
%
|
||||
% centered the name and address are centered at the top of the
|
||||
% page (default)
|
||||
%
|
||||
% line the name is the left with a horizontal line then
|
||||
% the address to the right
|
||||
%
|
||||
% overlapped the section titles overlap the body text (default)
|
||||
%
|
||||
% margin the section titles are to the left of the body text
|
||||
%
|
||||
% 11pt use 11 point fonts instead of 10 point fonts
|
||||
%
|
||||
% 12pt use 12 point fonts instead of 10 point fonts
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Commands
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% \Resume prints the word resume but typeset nicely
|
||||
%
|
||||
% \newsectionwidth{dimen}
|
||||
% defines the amount of space the labels extend
|
||||
% into the left margin.
|
||||
% DO NOT TRY to change any of the dimensions
|
||||
% yourself. You will probably confuse the style file.
|
||||
%
|
||||
% \name{text} defines your name
|
||||
%
|
||||
% \address{text}
|
||||
% defines your address
|
||||
% this can be called twice if you have two addresses
|
||||
% use \\'s to indicate where either line breaks or
|
||||
% comas should go
|
||||
%
|
||||
% \opening this prints your name and address at that spot
|
||||
% this is not normally needed, as \begin{resume}
|
||||
% does this but is provided just in case you need
|
||||
% to do something odd
|
||||
%
|
||||
% \begin{resume} ... \end{resume}
|
||||
% all of the resume should go inside of this
|
||||
% environment
|
||||
%
|
||||
% \section{text}
|
||||
% This prints 'text' in the left hand margin.
|
||||
% Its exact placement depends on what the style
|
||||
% options has been set to. (overlapped or margin)
|
||||
% You should use \\ to start a new line. If the
|
||||
% style option is margin, the \\ is converted
|
||||
% to a space.
|
||||
% To use this in any of the list environments, put
|
||||
% the \section after the \item[] but before the
|
||||
% text.
|
||||
% Eg.
|
||||
% \begin{itemize}
|
||||
% \item\section{text}
|
||||
% text
|
||||
% \end{itemize}
|
||||
%
|
||||
% \begin{ncolumn}{n} ... \end{ncolumn}
|
||||
% creates a tabular environment with n equally
|
||||
% spaced columns. Separate columns by & and
|
||||
% end them with \\
|
||||
%
|
||||
% \begin{position} ... \end{position}
|
||||
% this is used to print a job description. There should
|
||||
% be only one job description in it. Information
|
||||
% related to the job (such as title, dates...) will
|
||||
% be printed.
|
||||
%
|
||||
% \begin{format} ... \end{format}
|
||||
% used to change the default format for the position
|
||||
% environment. Within it the recognized commands are:
|
||||
% \title{option}
|
||||
% \employer{option}
|
||||
% \location{option}
|
||||
% \dates{option}
|
||||
% \body
|
||||
% \\
|
||||
% where option is one of l,r,c standing for left, right, center.
|
||||
% The format will eventually be used to make several
|
||||
% tabular environments and you are defining the number of columns
|
||||
% and the placement of text within the columns of the tabulars.
|
||||
% Each row is terminated by a \\. Any number of options can
|
||||
% be on a line, they will each be set in their own columns.
|
||||
% Any of the options except \body may be left out.
|
||||
%
|
||||
% Eg.
|
||||
% \begin{format}
|
||||
% \title{l}\employer{r}\\
|
||||
% \dates{r}\\
|
||||
% \body\\
|
||||
% \location{l}\\
|
||||
% \end{format}
|
||||
%
|
||||
% In this example the title and employer information
|
||||
% are set in 2 columns left justified and right justified
|
||||
% respectively. Then the date is set right justified.
|
||||
% Then the body is set. Then the location is set left
|
||||
% justified.
|
||||
%
|
||||
% \employer{text}
|
||||
% \title{text}
|
||||
% \dates{text}
|
||||
% \location{text}
|
||||
% declare text for the next invocation of the position
|
||||
% environment
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Glue
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% sectionskip the amount of horizontal before a section
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Dimensions
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% sectionwidth the amount that the section titles go in the
|
||||
% left margin
|
||||
%
|
||||
% resumewidth the width of the total resume from the left
|
||||
% margin to the right. Don't use textwidth
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Definitions
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%
|
||||
% sectionfont the font used to print section titles
|
||||
% use \renewcommand to change it
|
||||
%
|
||||
% namefont the font used to print your name
|
||||
% use \renewcommand to change it
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% THINGS TO DO
|
||||
%
|
||||
% add lm,rm options to format style to allow things to be placed
|
||||
% in the left or right margin respectivly
|
||||
%
|
||||
% add capability so that \body doesn't have to be proceeded (followed)
|
||||
% by a \\ allowing part of the description (eg. location) to be the
|
||||
% first (last) thing of the body
|
||||
%
|
||||
% clean up the list building procedures
|
||||
%
|
||||
% write docs to tell people how to use this
|
||||
|
||||
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
||||
\ProvidesClass{res}[2000/05/19 v1.4b Resume class]
|
||||
|
||||
%\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
|
||||
%\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
|
||||
|
||||
\PassOptionsToClass{11pt,12pt}{article}
|
||||
\LoadClassWithOptions{article}
|
||||
|
||||
\newif\if@line
|
||||
\newif\if@margin
|
||||
|
||||
\DeclareOption{line}{\@linetrue}
|
||||
\DeclareOption{centered}{\@linefalse}
|
||||
|
||||
\DeclareOption{margin}{\@margintrue}
|
||||
\DeclareOption{overlapped}{\@marginfalse}
|
||||
|
||||
\ExecuteOptions{overlapped,centered}
|
||||
\ProcessOptions\relax
|
||||
|
||||
\nofiles % resume's don't need .aux files
|
||||
|
||||
|
||||
\newtoks\tabular@text % holds the current list being processed
|
||||
\newtoks\tabular@head % holds the head tabular list
|
||||
\newtoks\tabular@tail % holds the tail tabular list
|
||||
\newtoks\@ta % used by \@append
|
||||
\newtoks\undefined@token\undefined@token={}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% prints a centered name with the address centered
|
||||
% or the two address on opposite sides of the page
|
||||
%
|
||||
\def\@printcentername{\begingroup
|
||||
% print the name centered
|
||||
\leavevmode\hbox to \textwidth{\hfil\@tablebox{\namefont\@name}\hfil}\par
|
||||
\@ifundefined{@addressone}{%
|
||||
% do nothing
|
||||
}{%
|
||||
\@ifundefined{@addresstwo}{
|
||||
% only one address
|
||||
\leavevmode\hbox to \textwidth{\hfil\@tablebox{\@addressone}\hfil}\par
|
||||
}{
|
||||
% two addresses
|
||||
\leavevmode\hbox to \textwidth{\@tablebox{\@addressone}\hfil
|
||||
\@tablebox{\@addresstwo}}\par
|
||||
}%
|
||||
}%
|
||||
\endgroup}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% this is used to print the name and address at the top of
|
||||
% the page with a hline in between
|
||||
%
|
||||
\def\namefont{\large\bf}
|
||||
\def\@linename{\begingroup
|
||||
\def\\{, }
|
||||
{\namefont\@name}
|
||||
\vskip 2pt
|
||||
\fullline
|
||||
\vskip 2pt
|
||||
% where do you live?
|
||||
\@ifundefined{@addressone}{%
|
||||
% do nothing
|
||||
}{%
|
||||
\leavevmode\hbox to \textwidth
|
||||
{\hfill\vbox{\hbox{\@addressone}
|
||||
\hbox{\@addresstwo}
|
||||
}%
|
||||
}\par
|
||||
}
|
||||
\endgroup}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% HEADINGS:
|
||||
% There are two types of headings:
|
||||
% 1) one with the name centered and the address centered or
|
||||
% in the left and right side if there are two address
|
||||
% 2) one where the name is in the upper left corner
|
||||
% the a line accross the paper
|
||||
% then the address all on one line in the right corner
|
||||
% the second address will be directly below the first if defined
|
||||
%
|
||||
\let\print@name\relax
|
||||
\def\ds@centered{\ifx\print@name\relax\let\print@name\@printcentername\fi}
|
||||
\def\ds@line{\ifx\print@name\relax\let\print@name\@linename\fi}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Use this to set the sectionwidth.
|
||||
% It adjust the width of the text as well as the hoffset
|
||||
% You probably shouldn't touch any of the size paramaters
|
||||
% unless you really understand all of this but it is not
|
||||
% hard. Either way, it can only be executed once
|
||||
%
|
||||
\def\sectionfont{\bf}
|
||||
\newdimen\sectionwidth
|
||||
\newskip\sectionskip
|
||||
\newdimen\resumewidth
|
||||
|
||||
\resumewidth=6.5in
|
||||
\sectionskip=3.5ex plus 1ex minus -.2ex % values stolen from LaTeX
|
||||
|
||||
\def\newsectionwidth#1{%
|
||||
\sectionwidth=#1
|
||||
\textwidth=\resumewidth
|
||||
\advance\textwidth-\sectionwidth
|
||||
\hsize=\textwidth
|
||||
\hoffset=\sectionwidth
|
||||
}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% This is for sectiontitles that are entirely in the left margin.
|
||||
% multiline sectiontitles are permited and will be broken by
|
||||
% \TeX{} to fit into a box \verb|\sectionwidth| wide. It is advised
|
||||
% that \verb|\\| be used to break the lines by hand as \TeX{} will
|
||||
% probably not do what you want.
|
||||
%
|
||||
% When using this with {\tt tabbing} and {\tt list} (or anything
|
||||
% that is made out of {\tt list}) put the \section's inside of
|
||||
% the \verb|\begin{}| and the \verb|\item|Eg.
|
||||
% \begin{verbatim}
|
||||
% \begin{trivlist}
|
||||
% \item[]
|
||||
% \section{foo}
|
||||
% text
|
||||
% \end{trivlist}
|
||||
% \end{verbatim}
|
||||
%
|
||||
\def\boxed@sectiontitle#1{%
|
||||
% this macro may be called in a tabular. Special code must be written
|
||||
% to accomodate this. In LaTeX, a tabular is made out of hboxes.
|
||||
% TeX never goes into horizontal mode because of this; it only
|
||||
% gets into vertical mode and restricted horizontal mode. Certain
|
||||
% indenting problems must be handled because of this. They
|
||||
% are delt with at the end of this routine.
|
||||
% It is also necessary to close the hbox that was created before
|
||||
% the \section and create a new one when this macro has ended.
|
||||
% This macro therefore simulates a \kill, so that any text before
|
||||
% the \section not be printed. The proper use is therefore
|
||||
% ...
|
||||
% text\\
|
||||
% \section{foo}
|
||||
% more text\\
|
||||
% ...
|
||||
\ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge)
|
||||
\@stopfield % the is the first part of a \kill
|
||||
\else
|
||||
\@@par % This will end the previous paragraph if needed and
|
||||
% go into vertical mode. If this was already in
|
||||
% vertical mode then the \par does nothing.
|
||||
|
||||
\fi
|
||||
\begingroup
|
||||
\everypar={}%
|
||||
\def\par{\@@par}%
|
||||
\let\\=\@normalcr
|
||||
\addpenalty{\@secpenalty} % this would be a good place for a page break
|
||||
% \@secpenalty is what LaTeX uses before its
|
||||
% section's. It happens to be -300
|
||||
\addvspace{\sectionskip} % put in a bit of glue
|
||||
% The following hbox will be contributed to the page list without going
|
||||
% into horizontal mode. Therefore, any \parindent's, \parshape's, \leftskip
|
||||
% will be ignored but \hoffset's are not. The result is that the box will
|
||||
% only by \hoffset. This is what I want
|
||||
\hbox to 0pt{%
|
||||
\hss % this is an llap. In other words, this glue
|
||||
% will shrink by the width of the stuff in the vbox
|
||||
% (\sectionwidth) into the left margin and then
|
||||
% insert the contents of the vbox.
|
||||
\vtop to 0pt{% make a 0pt height paragraph, with the baseline at the
|
||||
% lined up with the baseline of the first box in the list
|
||||
\leftskip=0pt
|
||||
\hsize=\sectionwidth
|
||||
\textwidth=\sectionwidth
|
||||
\raggedright % you don't want this filled out to the right margin
|
||||
\sectionfont
|
||||
#1\vss % Go into horizontal mode; do the paragraph;
|
||||
% go into vertical mode; add some negative glue
|
||||
% to give a box of 0pt height and depth
|
||||
}%
|
||||
}%
|
||||
\addpenalty{-\@secpenalty} % this would be a bad place for a page break
|
||||
\vskip-\baselineskip % when the next box is processed, baselineskip glue
|
||||
% glue will be added (the box has no depth because of
|
||||
% the \vss; therefore, we don't have to worry about
|
||||
% \lineskiplimit). This -\baselineskip glue
|
||||
% is to undo this. \nointerlineskip doesn't
|
||||
% work because the baseline of this line would be lined
|
||||
% up with the top of the top of the next box. We
|
||||
% want the baselines lined up.
|
||||
%
|
||||
% It may have been possible to do this by forcing the
|
||||
% baseline of this box to be the top of the box but
|
||||
% then the interline skip between this box and the
|
||||
% previous box would be off as the baselines of the
|
||||
% this box (the one that being made above) and the
|
||||
% previous line would be separated by \baselineskip
|
||||
% (probably, it may be separted by the depth of the
|
||||
% previous box + \lineskip) but as the baseline of
|
||||
% this box has been moved to the top, the box's would
|
||||
% separted by to much glue. The exact amount being
|
||||
% the height of this box.
|
||||
\endgroup
|
||||
\ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge)
|
||||
% this is the second part of the \kill; it starts the next tabbing line
|
||||
% Because this routine will never get into paragraph mode when used in
|
||||
% tabbing the \parskip that is discussed below will never be inserted.
|
||||
% Therefore it should not be negated as done below.
|
||||
\@startline
|
||||
\ignorespaces
|
||||
\else
|
||||
\vskip-\parskip % The next thing to be contributed will be a paragraph.
|
||||
% Right before being contributed though a \vskip\parskip
|
||||
% will be inserted. This is to negate it.
|
||||
%
|
||||
% I do consider this to be a bit of a cludge but
|
||||
% I can not find a way to write \unskipfutureskip
|
||||
% or a way to make TeX think that nothing has
|
||||
% been contributed to the page list.
|
||||
\fi
|
||||
}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% This is for sectiontitles that are entirely above the section text
|
||||
%
|
||||
\def\unboxed@sectiontitle#1{%
|
||||
\ifx\\\@tabcr % see boxed@sectiontitle for explation
|
||||
\@stopfield
|
||||
\else
|
||||
\@@par
|
||||
\fi
|
||||
\begingroup
|
||||
\everypar={}%
|
||||
\def\par{\@@par}%
|
||||
\def\\{ }
|
||||
\addpenalty{\@secpenalty}
|
||||
\addvspace{\sectionskip}
|
||||
\hbox to 0pt{\hss\hbox to \sectionwidth{\sectionfont#1\hss}}
|
||||
\addpenalty{-\@secpenalty} % this would be a bad place for a page break
|
||||
\endgroup
|
||||
\ifx\\\@tabcr % see boxed@sectiontitle for explation
|
||||
\@startline
|
||||
\else
|
||||
\vskip-\parskip
|
||||
\fi
|
||||
\ignorespaces
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% There are two types of section headings:
|
||||
% 1) the section heading is all on one line and directly
|
||||
% below it, is the body of the text
|
||||
% 2) the section heading is entirely in the left margin
|
||||
% (possibly taking multiple lines) with the body of
|
||||
% the text next to it
|
||||
%
|
||||
\let\@@section\relax
|
||||
\def\ds@overlapped{\ifx\@@section\relax\newsectionwidth{0.5in}\let
|
||||
\@@section\unboxed@sectiontitle\fi}
|
||||
\def\ds@margin{\ifx\@@section\relax\newsectionwidth{1.3in}\let
|
||||
\@@section\boxed@sectiontitle\fi}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% DEFAULTS: (some of them)
|
||||
%
|
||||
% centered name
|
||||
% overlapped section titles
|
||||
%
|
||||
% format is:
|
||||
% title employer
|
||||
% location dates
|
||||
% body
|
||||
% with everything in the left of its column
|
||||
|
||||
%\input article.sty
|
||||
|
||||
\if@line\ds@line\else\ds@centered\fi
|
||||
\if@margin\ds@margin\else\ds@overlapped\fi
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% typeset resume all nice and pretty
|
||||
%
|
||||
\def\Resume{{R\'{e}sum\'{e}}}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% makes a line of width \textwidth starting at -\hoffset
|
||||
%
|
||||
\def\fullline{ % hrules only listen to \hoffset
|
||||
\nointerlineskip % so I have this code
|
||||
\moveleft\hoffset\vbox{\hrule width\textwidth}
|
||||
\nointerlineskip
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% create a multiline box.
|
||||
%
|
||||
\def\@tablebox#1{\begin{tabular}[t]{@{}l@{\extracolsep{\fill}}}#1\end{tabular}}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% use this to define your name
|
||||
%
|
||||
\def\name#1{\def\@name{#1}}
|
||||
|
||||
\def\@name{}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% use this to define your address, this may be called more than once.
|
||||
%
|
||||
\let\@addressone\relax
|
||||
\let\@addresstwo\relax
|
||||
|
||||
\def\address#1{
|
||||
\@ifundefined{@addressone}{\def\@addressone{#1}}{\def\@addresstwo{#1}}}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% if you want to print your name and address is a slightly
|
||||
% different format than sugessted, then this can be used
|
||||
% to place it exactly where you want
|
||||
%
|
||||
\def\opening{\def\@opening{}
|
||||
\begingroup
|
||||
\leftskip=-\hoffset % I use leftskip to move things to the left as
|
||||
\advance\textwidth\hoffset % changing hoffset doesn't work. But this
|
||||
\hsize=\textwidth % doesn't really work as hboxes are rules
|
||||
% are unaffeted
|
||||
\let\par=\@@par
|
||||
\parindent=0pt
|
||||
\parskip=0pt
|
||||
\print@name
|
||||
\endgroup
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% all of the resume goes in the resume environment
|
||||
%
|
||||
\newenvironment{resume}{\begingroup
|
||||
\@ifundefined{@opening}{\opening}{}
|
||||
}{\endgroup}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% gives you a tabular environment with n equally spaced columns
|
||||
% \begin{ncolumn}{#} ... \end{ncolumn}
|
||||
%
|
||||
% The p option of LaTeX is broken in all but the newest verion
|
||||
% of latex.tex, this is how to fix it
|
||||
%
|
||||
\def\@endpbox{\par\egroup\hfil}
|
||||
\let\@@endpbox=\@endpbox
|
||||
|
||||
\newdimen\@columnwidth % the width of each column equal to
|
||||
\def\ncolumn#1{%
|
||||
% \@columnwidth = \textwidth / #1
|
||||
\@columnwidth=\textwidth \divide\@columnwidth by #1
|
||||
\begin{tabular*}{\textwidth}[t]%
|
||||
{*{#1}{@{}p{\@columnwidth}@{\extracolsep{\fill}}}}
|
||||
}
|
||||
|
||||
\def\endncolumn{\end{tabular*}}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% \employer{text} defines employer to be text
|
||||
% \location{text} defines location to be text
|
||||
% \dates{text} defines dates to be text
|
||||
% \title{text} defines title to be text
|
||||
% \body
|
||||
%
|
||||
|
||||
\def\employer#1{\def\@employer{\print@employer{#1}}}
|
||||
\def\location#1{\def\@location{\print@location{#1}}}
|
||||
\def\dates#1{\def\@dates{\print@dates{#1}}}
|
||||
\def\title#1{\def\@title{\print@title{#1}}}
|
||||
|
||||
\let\l@justify\raggedright
|
||||
\let\r@justify\raggedleft
|
||||
\let\c@justify\centering
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% \@format{name}{justify}
|
||||
% will define \print@#1 to print it's one argument
|
||||
% justified according to #2 which can be
|
||||
% l = left
|
||||
% r = right
|
||||
% c = center
|
||||
%
|
||||
% eg.
|
||||
% \@format{employer}{c}
|
||||
% is the same as \def\print@employer#1{{\centering #1\par}}
|
||||
%
|
||||
\def\@format#1#2{%
|
||||
\expandafter\gdef\csname print@#1\endcsname##1{%
|
||||
{\csname#2@justify\endcsname##1\par}}
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% this is used to define how the position environment should
|
||||
% formated.
|
||||
%
|
||||
% \begin{format} positioning text \end{format}
|
||||
% where positioning text may be
|
||||
% \employer{pos}
|
||||
% \location{pos}
|
||||
% \dates{pos}
|
||||
% \title{pos}
|
||||
% \body (for the body of the position environment)
|
||||
% where pos is
|
||||
% l for left
|
||||
% r for right
|
||||
% c for center
|
||||
% use \\ to break the line
|
||||
% you don't have to use all of the options.
|
||||
% on any one line, you should indicate what you want on that line
|
||||
% and where it should go within its column.
|
||||
% eg.
|
||||
% the following prints the employer in the left with the location
|
||||
% centered within that its column. It then prints the date on the
|
||||
% right. Then it prints the body of the position environment. Then
|
||||
% it prints the title centered within its column; as there is only
|
||||
% one column here it is really just centered.
|
||||
%
|
||||
% \begin{format}
|
||||
% \employer{l}\location{c}\\
|
||||
% \dates{r}\\
|
||||
% \body\\
|
||||
% \title{c}\\
|
||||
% \end{format}
|
||||
|
||||
\newcounter{numberofcolumns}
|
||||
\newenvironment{format}{%
|
||||
\def\end@line@head{\append@tabular@head{tabular@text}\tabular@text={}%
|
||||
\c@numberofcolumns 0}
|
||||
\def\end@line@tail{\append@tabular@tail{tabular@text}\tabular@text={}%
|
||||
\c@numberofcolumns 0}
|
||||
\tabular@text={}
|
||||
\tabular@head={}
|
||||
\tabular@tail={}
|
||||
\c@numberofcolumns 0
|
||||
\let\\=\end@line@head
|
||||
\def\employer##1{\advance\c@numberofcolumns 1
|
||||
\@format{employer}{##1}
|
||||
\append@tabular@text{employer}}
|
||||
\def\location##1{\advance\c@numberofcolumns 1
|
||||
\@format{location}{##1}
|
||||
\append@tabular@text{location}}
|
||||
\def\dates##1{\advance\c@numberofcolumns 1
|
||||
\@format{dates}{##1}
|
||||
\append@tabular@text{dates}}
|
||||
\def\title##1{\advance\c@numberofcolumns 1
|
||||
\@format{title}{##1}
|
||||
\append@tabular@text{title}}
|
||||
\def\body{\iftoks\tabular@head\undefined@token\then
|
||||
\else
|
||||
\@append{\noexpand\\}\to\tabular@head
|
||||
\skotfi
|
||||
\let\\=\end@line@tail}}{}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%taken from page 378 of TeXbook but freely hacked
|
||||
%
|
||||
% appends the expansion of #1 to the token list #2
|
||||
|
||||
\def\@append#1\to#2{%
|
||||
\@ta=\expandafter{#1}%
|
||||
\xdef\@append@temp{\the#2\the\@ta}
|
||||
\global#2=\expandafter{\@append@temp}%
|
||||
}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% CHAA006%vaxb.rhbnc.ac.uk@NSS.Cs.Ucl.AC.UK
|
||||
% texhax.88.078
|
||||
% is used to see if two token lists are equal
|
||||
% there must be a better way
|
||||
%
|
||||
|
||||
\let \then = \empty
|
||||
\def \iftoks #1#2\then #3\else #4\skotfi{
|
||||
\edef \1{\the #1}
|
||||
\edef \2{\the #2}
|
||||
\ifx \1\2\then #3\else #4\fi}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% \append@tabular@text{command}
|
||||
%
|
||||
% appends command to the end of \tabular@text.
|
||||
% NOTE: command MUST be a command but without the \
|
||||
% Eg. \append@tabular@text{relax}
|
||||
%
|
||||
% used to define \tabular@text for the tabular environment
|
||||
% used by append@tabular@head and append@tabular@tail
|
||||
%
|
||||
|
||||
\def\append@tabular@text#1{%
|
||||
\iftoks\tabular@text\undefined@token\then
|
||||
\global\tabular@text=\expandafter{\csname @#1\endcsname}
|
||||
\else
|
||||
\@append{&}\to\tabular@text
|
||||
\@append{\csname @#1\endcsname}\to\tabular@text
|
||||
\skotfi
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% append@tabular@head
|
||||
%
|
||||
% appends command to the end of \tabular@text@head
|
||||
% NOTE: command MUST be a command but without the \
|
||||
% Eg. \append@tabular@head{relax}
|
||||
%
|
||||
% used to define \tabular@head for the tabular environment
|
||||
% used by the position environment
|
||||
%
|
||||
\def\append@tabular@head#1{%
|
||||
\ifnum\the\c@numberofcolumns=0\relax
|
||||
\else
|
||||
\iftoks\tabular@head\undefined@token\then
|
||||
\relax
|
||||
\else
|
||||
\@append{\noexpand\\}\to\tabular@head
|
||||
\@append{\noexpand\penalty-\@secpenalty}\to\tabular@head
|
||||
\skotfi
|
||||
\@append{\noexpand\begin{ncolumn}}\to\tabular@head
|
||||
\@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@head
|
||||
\@append{\the\csname#1\endcsname}\to\tabular@head
|
||||
\@append{\noexpand\end{ncolumn}}\to\tabular@head
|
||||
\fi
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% append@tabular@tail
|
||||
%
|
||||
% appends command to the end of \tabular@text@htail
|
||||
% NOTE: command MUST be a command but without the \
|
||||
% Eg. \append@tabular@tail{relax}
|
||||
%
|
||||
% used to define \tabular@tail for the tabular environment
|
||||
% used by the position environment
|
||||
%
|
||||
\def\append@tabular@tail#1{%
|
||||
\ifnum\the\c@numberofcolumns=0\relax
|
||||
\else
|
||||
\iftoks\tabular@tail\undefined@token\then
|
||||
\else
|
||||
\@append{\noexpand\\}\to\tabular@tail
|
||||
\@append{\noexpand\penalty-\@secpenalty}\to\tabular@tail
|
||||
\skotfi
|
||||
\@append{\noexpand\begin{ncolumn}}\to\tabular@tail
|
||||
\@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@tail
|
||||
\@append{\the\csname#1\endcsname}\to\tabular@tail
|
||||
\@append{\noexpand\end{ncolumn}}\to\tabular@tail
|
||||
\fi
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% put the actual job descriptions here
|
||||
% \begin{postion} ... \end{position}
|
||||
% in the ... describe the position.
|
||||
% don't put the \dates \location etc in here. define them before hand
|
||||
\newenvironment{position}%
|
||||
{%
|
||||
\begingroup
|
||||
\par
|
||||
\the\tabular@head
|
||||
% \addpenalty{-\@secpenalty}% bad place for a page break
|
||||
\penalty -\@secpenalty % bad place for a page break
|
||||
\penalty 10000
|
||||
\ignorespaces
|
||||
}{%
|
||||
\the\tabular@tail
|
||||
% \addpenalty{\@secpenalty}% good place for a page break
|
||||
\penalty \@secpenalty % good place for a page break
|
||||
\endgroup
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% DEFAULTS: (the rest of them)
|
||||
%
|
||||
% centered name
|
||||
% overlapped section titles
|
||||
%
|
||||
% format is:
|
||||
% title employer
|
||||
% location dates
|
||||
% body
|
||||
% with everything in the left of its column
|
||||
|
||||
\@secpenalty = -500
|
||||
\topmargin 0pt
|
||||
\headheight 0pt
|
||||
\headsep 0pt
|
||||
\textheight 9in
|
||||
\parindent 0pt
|
||||
\topmargin 0in
|
||||
\oddsidemargin 0pt
|
||||
\evensidemargin 0pt
|
||||
\marginparwidth 0pt
|
||||
\parindent 0pt
|
||||
\parskip \baselineskip
|
||||
\setcounter{secnumdepth}{0}
|
||||
\def\@listI{\leftmargin\leftmargini
|
||||
\topsep 0pt
|
||||
\parskip 0pt
|
||||
\partopsep 2pt plus 2pt
|
||||
\parsep 2pt plus 2pt
|
||||
\itemsep \parsep}
|
||||
|
||||
\pagestyle{empty} % don't want page numbers
|
||||
|
||||
\begin{format}
|
||||
\title{l}\employer{r}\\
|
||||
\location{l}\dates{r}\\
|
||||
\body\\
|
||||
\end{format}
|
||||
|
||||
\let\section\@@section
|
||||
|
||||
233
resume.html
Normal file
233
resume.html
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Dustin Swan - Resume</title>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script src="https://kit.fontawesome.com/024d65f707.js" crossorigin="anonymous"></script>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/daisyui@4.10.2/dist/full.min.css" type="text/css" />
|
||||
|
||||
<link rel="stylesheet" href="https://code.cdn.mozilla.net/fonts/fira.css">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🦢</text></svg>">
|
||||
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Iosevka/6.0.0/iosevka/iosevka.min.css"> -->
|
||||
|
||||
<style type="text/tailwindcss">
|
||||
@font-face {
|
||||
font-family: "Iosevka Web";
|
||||
src: url("assets/iosevka-fixed-regular.woff2") format("woff2");
|
||||
}
|
||||
body {
|
||||
font-family: "Fira Sans", sans-serif;
|
||||
}
|
||||
.section-title {
|
||||
@apply uppercase font-semibold text-lg border-b-2 mb-4;
|
||||
font-family: "Iosevka Web";
|
||||
}
|
||||
.subtitle {
|
||||
@apply uppercase font-bold text-sm my-1;
|
||||
font-family: "Iosevka Web";
|
||||
}
|
||||
.sidebar a {
|
||||
@apply text-cyan-400 hover:text-cyan-200 transition-colors;
|
||||
}
|
||||
.main a {
|
||||
@apply text-cyan-700 hover:text-cyan-500 transition-colors dark:text-cyan-200 dark:hover:text-cyan-300;
|
||||
}
|
||||
.sidebar ul {
|
||||
@apply mb-6;
|
||||
}
|
||||
.sidebar li {
|
||||
@apply mb-2;
|
||||
font-family: "Iosevka Web";
|
||||
}
|
||||
.main li {
|
||||
list-style-type: "› ";
|
||||
@apply mb-1;
|
||||
}
|
||||
span[data-tip] {
|
||||
@apply border-b border-dashed cursor-pointer;
|
||||
}
|
||||
.tooltip:before {
|
||||
max-width: 15rem;
|
||||
}
|
||||
.tooltip:first-child:before {
|
||||
max-width: 10rem;
|
||||
}
|
||||
/*
|
||||
.badge {
|
||||
@apply inline-flex items-center rounded-md bg-teal-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10
|
||||
}
|
||||
*/
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="bg-slate-300 dark:bg-slate-900 h-full">
|
||||
<div class="h-full lg:container lg:mx-auto lg:flex min-h-screen lg:shadow-xl">
|
||||
<section class="main p-8 lg:px-12 lg:py-9 bg-slate-100 dark:bg-slate-700 dark:text-slate-200">
|
||||
<h1 class="text-4xl mb-4 uppercase font-semibold border-b-2 py-2">Dustin Swan</h1>
|
||||
|
||||
<article class="pb-8">
|
||||
<p class="py-1"><strong>Software Engineer</strong> with over 15 years experience architecting, implementing, and shipping secure, cross-platform applications & APIs. Proficient in functional and object-oriented programming paradigms; delivering clean, maintainable code; utilizing modern, standards-based web technologies.
|
||||
</article>
|
||||
|
||||
<h3 class="section-title">Experience</h3>
|
||||
|
||||
<article class="pb-8">
|
||||
<img src="assets/mr.png" class="w-12 float-left mt-2 ml-1 mr-3" />
|
||||
<h4 class="text-lg font-bold">Lead Software Developer</h4>
|
||||
<div><a href="https://www.majorrocket.com" target="_blank">Major Rocket</a> | Jan 2024 - present</div>
|
||||
|
||||
<p class="mt-1 md:ml-14">
|
||||
<span class="badge">PHP</span>
|
||||
<span class="badge">MySQL</span>
|
||||
<span class="badge">JavaScript</span>
|
||||
<span class="badge">Less</span>
|
||||
<span class="badge">AWS</span>
|
||||
<span class="badge">Laravel</span>
|
||||
</p>
|
||||
|
||||
<ul class="clear-left m-4 ml-0 lg:ml-16">
|
||||
<li>Developed multiple full-stack PHP & JavaScript e-commerce web applications, interfacing with Shopify, PayPal, & Braintree</li>
|
||||
<li>Integrated new features on existing infrastructure; creating new APIs, databases, & backend logic</li>
|
||||
<li>Collaborated closely with sales, B2B teams, and designers to build products aligned with business requirements</li>
|
||||
<li>Implemented front-end designs and UI components across responsive web applications</li>
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="pb-8">
|
||||
<img src="assets/visionable.png" class="w-12 float-left mt-1 mr-4" />
|
||||
<h4 class="text-lg font-bold">Front End & API Lead <span class="max-md:hidden">Software Engineer</span></h4>
|
||||
<div><a href="https://www.visionable.com" target="_blank">Visionable UK Ltd</a> | 2009 - 2024</div>
|
||||
|
||||
<p class="mt-1 md:ml-14">
|
||||
<span class="badge">JavaScript</span>
|
||||
<span class="badge">React</span>
|
||||
<span class="badge">Vue.js</span>
|
||||
<span class="badge">Angular</span>
|
||||
<span class="badge">MobX</span>
|
||||
<span class="badge">Electron</span>
|
||||
<span class="badge">Node.js</span>
|
||||
<span class="badge">Next.js</span>
|
||||
<span class="badge">PHP</span>
|
||||
<span class="badge">PostgreSQL</span>
|
||||
<span class="badge">C++</span>
|
||||
<span class="badge">Qt</span>
|
||||
<span class="badge">AWS</span>
|
||||
<span class="badge">Laravel</span>
|
||||
</p>
|
||||
|
||||
<ul class="clear-left m-4 ml-0 lg:ml-16">
|
||||
<li>Designed & developed our flagship responsive, cross-platform JavaScript video conferencing application</li>
|
||||
<li>Architected, developed & documented our REST APIs</li>
|
||||
<li>Lead a team of 7 front- & back-end developers, creating an AWS SaaS API platform and a React + NextJS web application</li>
|
||||
<li>Worked closely with Product & Design teams to quickly turn ideas into functional prototypes</li>
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<article class="pb-8">
|
||||
<img src="assets/abbott.png" class="w-12 float-left mr-4" />
|
||||
<h4 class="text-lg font-bold">Validation Engineer</h4>
|
||||
<div><a href="https://www.abbott.com/" target="_blank">Abbott Laboratories</a> | 2007 - 2009</div>
|
||||
|
||||
<ul class="clear-left m-4 ml-0 lg:ml-16">
|
||||
<li>Managed projects and assembled cross-functional teams to construct change plans and assess product impact</li>
|
||||
<li>Authored changes to testing documentation and product design records</li>
|
||||
<li>Processed changes to quality system and product documents to comply with medical device regulatory requirements</li>
|
||||
<li>Programmed automated testing control procedures using the Laboratory Information Management System (LIMS)</li>
|
||||
</ul>
|
||||
</article>
|
||||
|
||||
<h3 class="section-title">Education</h3>
|
||||
|
||||
<article class="pb-8">
|
||||
<img src="assets/uic.png" class="w-12 float-left mt-1 mr-4 mb-1" />
|
||||
<h4 class="text-lg font-bold">Bachelor of Science in Bioengineering</h4>
|
||||
<i>with minors in Computer Science & Math</i>
|
||||
<div><a href="https://www.uic.edu/" target="_blank">University of Illinois Chicago (UIC)</a> | 2007</div>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section class="sidebar p-8 mb-8 lg:mb-0 lg:pt-16 lg:p-12 bg-slate-800 text-slate-100 lg:w-96 shrink-0 lg:order-first">
|
||||
<h3 class="section-title">Contact</h3>
|
||||
|
||||
<ul class="md:max-lg:columns-4">
|
||||
<li class="truncate">
|
||||
<i class="mr-1 fa-solid fa-fw fa-envelope"></i>
|
||||
<a href="mailto:dustin@dustinswan.com">dustin@dustinswan.com</a>
|
||||
</li>
|
||||
|
||||
<li class="truncate">
|
||||
<i class="mr-1 fa-solid fa-fw fa-map-marker"></i>
|
||||
Albuquerque NM, USA
|
||||
</li>
|
||||
|
||||
<li class="truncate">
|
||||
<i class="mr-1 fa-solid fa-fw fa-link"></i>
|
||||
<a href="https://www.dustinswan.com" target="_blank">dustinswan.com</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<i class="md:max-lg:hidden mr-1 fa-solid fa-fw fa-ellipsis"></i>
|
||||
<a title="git" class="mr-1" href="https://git.dustinswan.com" target="_blank"><i class="mr-1 fa-brands fa-fw fa-git"></i></a>
|
||||
<a title="LinkedIn" class="mr-1" href="https://www.linkedin.com/in/dustinswan" target="_blank"><i class="mr-1 fa-brands fa-fw fa-linkedin"></i></a>
|
||||
<a title="Twitter" class="mr-1" href="https://twitter.com/dustinswan" target="_blank"><i class="mr-1 fa-brands fa-fw fa-twitter"></i></a>
|
||||
<a title="Mastodon" class="mr-1" href="https://mastodon.social/@dustinswan" target="_blank"><i class="mr-1 fa-brands fa-fw fa-mastodon"></i></a>
|
||||
<a title="PGP" class="mr-1" href="https://pgp.mit.edu/pks/lookup?op=get&search=0xAB49BD6B2B3A6377" target="_blank"><i class="mr-1 fa-solid fa-fw fa-lock"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 class="section-title">Technologies</h3>
|
||||
|
||||
<div class="md:max-lg:columns-3">
|
||||
<h4 class="subtitle text-fuchsia-400">Expert in</h4>
|
||||
|
||||
<ul class="text-fuchsia-100">
|
||||
<li>
|
||||
<span class="tooltip tooltip-accent" data-tip="I'd choose TypeScript for any new projects, but I still like good old JavaScript">JavaScript</span> /
|
||||
<span class="tooltip tooltip-accent" data-tip="And Deno. Loving the Typescript support in Deno. I'll try Bun next, it looks promising">NodeJS</span> /
|
||||
HTML /
|
||||
<span class="tooltip tooltip-accent" data-tip="I ♡ CSS. Flexbox has increased my quality of life in a big way. I've also used a few preprocessors like Sass & Less, and I tried out Tailwind for the first time on this page - I think I like it!">CSS</a>
|
||||
</li>
|
||||
<li>
|
||||
<span class="tooltip tooltip-accent" data-tip="I built a video conferencing web application using WebRTC. For the first few years it was a constant battle with Browsers changing their APIs every version, but that has mostly settled down. Safari is still awful, of course.">WebRTC</span> /
|
||||
WebSockets /
|
||||
REST /
|
||||
AJAX
|
||||
</li>
|
||||
<li>React / MobX / MUI / NextJS / PHP</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="subtitle text-emerald-400">Skilled in</h4>
|
||||
|
||||
<ul class="text-emerald-100">
|
||||
<li>TypeScript / Electron / AWS</li>
|
||||
<li>Redux / RxJS / Zustand</li>
|
||||
<li>MySQL / Postgres / SQLite / ODBC</li>
|
||||
<li>Git / Perforce / Jira / Bugzilla</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="subtitle text-amber-200">Excited About</h4>
|
||||
|
||||
<ul class="text-amber-50">
|
||||
<li>Haskell / PureScript / Elm / Unison</li>
|
||||
<li>
|
||||
<span class="tooltip tooltip-accent" data-tip="I did Advent of Code 2020 in OCaml (see my Git repo), and it was SO GREAT">OCaml</span> /
|
||||
<span class="tooltip tooltip-accent" data-tip="Then I did AoC 2021 in Racket. It was my first real Lisp. I'm a fan">Racket</span> /
|
||||
<span class="tooltip tooltip-accent" data-tip="Still (constantly) learning Rust. I did AoC 2022 in Rust and it was.. painful. Steep learning curve">Rust</span> /
|
||||
<span class="tooltip tooltip-accent" data-tip="And most recently, I tried AoC 2023 in Zig. What a nice little language!">Zig</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="tooltip tooltip-accent" data-tip="Huge fan of Nix. I've replaced Homebrew on MacOS with Nix, I run NixOS on my VMs, and I use home-manager to manage my dotfiles. So good!">NixOS</span> /
|
||||
<span class="tooltip tooltip-accent" data-tip="I've been using vi since I can remember. I used Emacs for a few years (mostly for Org-mode), but came back to vi when Neovim started getting good. I'm also excited about a few other editors: Helix, Kakoune, Zed.. so many good ones out there!">Neovim</span> /
|
||||
Command Line ♡
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
102
resume.tex
102
resume.tex
|
|
@ -1,102 +0,0 @@
|
|||
\documentclass[margin]{res}
|
||||
|
||||
\usepackage{vwcol}
|
||||
\usepackage{calc}
|
||||
\usepackage[none]{hyphenat}
|
||||
|
||||
\topmargin=-0.25in
|
||||
\addtolength{\textwidth}{.5in}
|
||||
\addtolength{\textheight}{.75in}
|
||||
\addtolength{\oddsidemargin}{-.25in}
|
||||
\addtolength{\topmargin}{-.25in}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{resume}
|
||||
|
||||
\moveleft.5\hoffset\centerline{\large\bf Dustin Swan}
|
||||
\smallskip
|
||||
%\moveleft.5\hoffset\centerline{318 Thompson Rd.}
|
||||
%\moveleft.5\hoffset\centerline{Moriarty, NM 87035}
|
||||
\moveleft.5\hoffset\centerline{dustinswan@gmail.com}
|
||||
\smallskip
|
||||
\moveleft.5\hoffset\centerline{(312) 608-2957}
|
||||
|
||||
\newlength{\summarylength}
|
||||
\setlength{\summarylength}{\textwidth+1.25in}
|
||||
|
||||
\parshape 1 -\sectionwidth \summarylength
|
||||
Passionate Software Engineer with eight years of experience architecting,
|
||||
implementing, and shipping secure, cross-platform applications. Proficient in
|
||||
functional and object-oriented programming paradigms; delivering clean,
|
||||
maintainable codebases; utilizing modern, full-stack, web technologies.
|
||||
|
||||
\section{LANGUAGES \& APIS}
|
||||
{\sl Expert in} JavaScript ES6, HTML5, CSS, AJAX, REST, WebRTC, WebSockets \\
|
||||
{\sl Comfortable with} Elm, Haskell, Python, Ruby, PHP, Lisp, Bash \\
|
||||
{\sl Past experience with} C, C++, Objective C, Java
|
||||
|
||||
\section{LIBRARIES \& FRAMEWORKS}
|
||||
jQuery, Underscore/lodash, React, RxJS, AngularJS, Grunt, Jasmine, \\
|
||||
LESS/Sass/SCSS, Rails, Node.js, Express, Sails.js, Qt, PhoneGap
|
||||
|
||||
\section{SOFTWARE \& SERVICES}
|
||||
\begin{vwcol}[widths={0.2,0.8}, sep=.1cm, justify=flush,rule=0pt,indent=1em,lines=4]
|
||||
{\sl OS \& Tools:} \\
|
||||
{\sl Databases:} \\
|
||||
{\sl Version Control:} \\
|
||||
{\sl Services:} \\
|
||||
Linux, Mac OS X, Vim, Emacs, Xcode, Eclipse, Microsoft Office \\
|
||||
MongoDB, MySQL, PostgreSQL, SQLite, ODBC \\
|
||||
Git, Perforce, Subversion \\
|
||||
Github, Heroku, AWS
|
||||
\end{vwcol}
|
||||
|
||||
\section{EXPERIENCE}
|
||||
{\sl Software Engineer} \hfill 2009 - Present \\
|
||||
\smallskip
|
||||
{\bf IOCOM Integrated Communications, Chicago, IL}
|
||||
|
||||
\begin{itemize} \itemsep -1pt
|
||||
\item Worked closely with backend developers and QA engineers to create a cross-platform, web-based video conferencing application suite.
|
||||
\item Efficiently designed \& developed the video conferencing single-page JavaScript application and UI
|
||||
\item Programming \& maintained the iOS PhoneGap application
|
||||
\item Developed \& maintained the PHP server management web pages
|
||||
\item Implemented a WebRTC audio \& video web application and JavaScript API
|
||||
\item Created an in-house JavaScript framework for automated application testing
|
||||
\item Continually refactored existing codebase for maintainability and
|
||||
reliability, utilizing modern practices and standards
|
||||
\end{itemize}
|
||||
|
||||
{\sl Validation Engineer} \hfill 2007 - 2009 \\
|
||||
{\bf Abbott Laboratories, Abbott Park, IL}
|
||||
\smallskip
|
||||
|
||||
\begin{itemize} \itemsep -1pt
|
||||
\item Managed projects and assembled cross-functional teams to construct change plans and assess product impact
|
||||
\item Authored changes to testing documentation and product design records
|
||||
\item Processed changes to quality system and product documents to comply with medical device regulatory requirements
|
||||
\item Programmed automated testing control procedures using the Laboratory Information Management System (LIMS)
|
||||
\end{itemize}
|
||||
|
||||
\section{EDUCATION}
|
||||
{\sl Bachelor of Science} \hfill 2007 \\
|
||||
University of Illinois at Chicago (UIC), Chicago, IL \\
|
||||
Major: Bioengineering \\
|
||||
Minors: Computer Science \& Mathematics
|
||||
|
||||
\section{COURSEWORK}
|
||||
|
||||
\begin{vwcol}[widths={0.2,0.8}, sep=.1cm, justify=flush,rule=0pt,indent=1em,lines=5]
|
||||
{\sl Math:} \\
|
||||
{\sl Comp. Sci.:} \\
|
||||
{\sl Electronics:} \\
|
||||
{\sl Biology:} \\ \\
|
||||
Calculus I - IV, Differential Equations, Linear Algebra \\
|
||||
Algorithms, Languages and Automata, Data Structures \\
|
||||
Pattern Recognition, Signal Analysis, Discrete Continuous Signals \& Systems \\
|
||||
Modeling Physiological Data \& Systems, Bioinformatics, Biostatistics, \\ Bioinstrumentation, Genetics, Biomaterials
|
||||
\end{vwcol}
|
||||
|
||||
\end{resume}
|
||||
\end{document}
|
||||
Loading…
Add table
Add a link
Reference in a new issue