Compare commits

...

No commits in common. 'master' and 'gh-pages' have entirely different histories.

  1. 145
      .gitignore
  2. 71
      .gitlab-ci.yml
  3. 223
      DPSResume.css
  4. 0
      DPSResume.outline
  5. BIN
      DPSResume.pdf
  6. 0
      README
  7. 11
      README.md
  8. BIN
      ResumeSite.tar.gz
  9. 5
      base.min.css
  10. BIN
      bg1.png
  11. 7
      compatibility.min.js
  12. 44
      cover_letters/2019-09-CL-Elastic-Senior-Java-Engineer-Security.tex
  13. 72
      cover_letters/CL-Mozilla-RE.tex
  14. 66
      cover_letters/template.tex
  15. 356
      datenumber.sty
  16. 53
      datenumberUSenglish.ldf
  17. 57
      datenumberenglish.ldf
  18. BIN
      f1.woff
  19. BIN
      f2.woff
  20. BIN
      f3.woff
  21. BIN
      f4.woff
  22. BIN
      f5.woff
  23. BIN
      f6.woff
  24. BIN
      f7.woff
  25. BIN
      f8.woff
  26. 5
      fancy.min.css
  27. 32
      helvetica.sty
  28. 32
      index.html
  29. BIN
      pdf2htmlEX-64x64.png
  30. 27
      pdf2htmlEX.min.js
  31. 137
      pipeline.yml
  32. 805
      res.cls
  33. 9
      resume.tex
  34. 9
      resume_for_recruiters.tex
  35. 26
      scripts/build
  36. 4
      scripts/build-and-deploy-resume.sh
  37. 17
      scripts/build-html-resume-docker.sh
  38. 13
      scripts/build-html-resume.sh
  39. 18
      scripts/build-pdf-cover-letter-docker.sh
  40. 16
      scripts/build-pdf-cover-letter.sh
  41. 11
      scripts/build-pdf-resume-docker.sh
  42. 11
      scripts/build-pdf-resume-for-recruiters-docker.sh
  43. 13
      scripts/build-pdf-resume-for-recruiters.sh
  44. 28
      scripts/build-pdf-resume-with-cover-letter-docker.sh
  45. 13
      scripts/build-pdf-resume-with-cover-letter.sh
  46. 13
      scripts/build-pdf-resume.sh
  47. 3
      scripts/cleanup-latex.sh
  48. 41
      scripts/package-and-deploy.sh
  49. 7
      tex_parts/resume_address.tex
  50. 5
      tex_parts/resume_address_recruiters.tex
  51. 15
      tex_parts/resume_body.tex
  52. 6
      tex_parts/resume_body/achievements.tex
  53. 7
      tex_parts/resume_body/education.tex
  54. 64
      tex_parts/resume_body/experience.tex
  55. 9
      tex_parts/resume_body/intro.tex
  56. 4
      tex_parts/resume_body/references.tex
  57. 12
      tex_parts/resume_body/skills.tex
  58. 86
      tex_parts/resume_commands.tex
  59. 15
      tex_parts/resume_head.tex
  60. 11
      tex_parts/resume_preamble.tex
  61. 8
      upload_pipeline.sh

145
.gitignore

@ -1,145 +0,0 @@
out/
*.tar.gz
*~
*.xref
*.lg
*.idv
*.4ct
*.4tc
*.tmp
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
## Intermediate documents:
*.dvi
*-converted-to.*
# these rules might exclude image files for figures etc.
*.ps
*.eps
*.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.brf
*.run.xml
### Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Auxiliary and intermediate files from other packages:
## algorithms
*.alg
*.loa
## achemso
acs-*.bib
## amsthm
*.thm
## beamer
*.nav
*.snm
*.vrb
##(e)ledmac/(e)ledpar
*.end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
## glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
## gnuplottex
*-gnuplottex-*
## hyperref
*.brf
## knitr
*-concordance.tex
*.tikz
*-tikzDictionary
## listings
*.lol
## makeidx
*.idx
*.ilg
*.ind
*.ist
## minitoc
*.maf
*.mtc
*.mtc[0-9]
*.mtc[1-9][0-9]
## minted
_minted*
*.pyg
## morewrites
*.mw
## mylatexformat
*.fmt
## nomencl
*.nlo
## sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
## sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
## TikZ & PGF
*.dpth
*.md5
*.auxlock
## todonotes
*.tdo
## xindy
*.xdy
## WinEdt
*.bak
*.sav

71
.gitlab-ci.yml

@ -1,71 +0,0 @@
stages:
- build
- deploy
build-resume:
stage: build
script:
- ./scripts/build-pdf-resume.sh
- ./scripts/build-pdf-resume-for-recruiters.sh
- ./scripts/build-html-resume.sh
only:
- master
tags:
- linux
artifacts:
paths:
- resume.pdf
- resume_for_recruiters.pdf
- ResumeSite.tar.gz
deploy-resume-site:
image: sothr.com/deploy:ubuntu
stage: deploy
variables:
TARGET_DIRECTORY: "/srv/www/sothr.com/resume"
script:
- eval `ssh-agent -s`
- ssh-add <(echo "$SSH_DEPLOY_KEY")
- mkdir -p ~/.ssh
- ssh-keyscan -p $DEPLOY_PORT sothr.com >> ~/.ssh/known_hosts
- mkdir /tmp/deploy
- tar -xvf ResumeSite.tar.gz -C /tmp/deploy
- cp resume.pdf /tmp/deploy
- cp resume_for_recruiters.pdf /tmp/deploy
- rsync -avz --delete-delay -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $DEPLOY_PORT" --progress /tmp/deploy/* $DEPLOY_USER@$DEPLOY_HOST:$TARGET_DIRECTORY
only:
- master
tags:
- docker
environment: production
deploy-resume-github:
image: sothr.com/deploy:ubuntu
stage: deploy
variables:
GIT_REPO: git@github.com:warricksothr/resume.git
script:
- eval `ssh-agent -s`
- ssh-add <(echo "$SSH_DEPLOY_KEY")
- mkdir -p ~/.ssh
- ssh-keyscan github.com >> ~/.ssh/known_hosts
- git clone $GIT_REPO /tmp/deploy
- pushd /tmp/deploy
- git checkout -b gh-pages origin/gh-pages
- git config --global user.email "warrick@sothr.com"
- git config --global user.name "Drew Short"
- rm -rf *
- popd
- tar -xvf ResumeSite.tar.gz -C /tmp/deploy
- cp resume.pdf /tmp/deploy
- cp resume_for_recruiters.pdf /tmp/deploy
- pushd /tmp/deploy
- git add .
- git commit -am"$CI_COMMIT_MESSAGE"
- git push
- popd
only:
- master
tags:
- docker
environment: production

223
DPSResume.css

@ -0,0 +1,223 @@
.ff0{font-family:sans-serif;visibility:hidden;}
@font-face{font-family:ff1;src:url(f1.woff)format("woff");}.ff1{font-family:ff1;line-height:0.943000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff2;src:url(f2.woff)format("woff");}.ff2{font-family:ff2;line-height:0.947000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff3;src:url(f3.woff)format("woff");}.ff3{font-family:ff3;line-height:0.864000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff4;src:url(f4.woff)format("woff");}.ff4{font-family:ff4;line-height:0.854000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff5;src:url(f5.woff)format("woff");}.ff5{font-family:ff5;line-height:0.388000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff6;src:url(f6.woff)format("woff");}.ff6{font-family:ff6;line-height:0.939000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff7;src:url(f7.woff)format("woff");}.ff7{font-family:ff7;line-height:0.752000;font-style:normal;font-weight:normal;visibility:visible;}
@font-face{font-family:ff8;src:url(f8.woff)format("woff");}.ff8{font-family:ff8;line-height:0.939000;font-style:normal;font-weight:normal;visibility:visible;}
.m0{transform:matrix(0.375000,0.000000,0.000000,0.375000,0,0);-ms-transform:matrix(0.375000,0.000000,0.000000,0.375000,0,0);-webkit-transform:matrix(0.375000,0.000000,0.000000,0.375000,0,0);}
.m1{transform:matrix(1.500000,0.000000,0.000000,1.500000,0,0);-ms-transform:matrix(1.500000,0.000000,0.000000,1.500000,0,0);-webkit-transform:matrix(1.500000,0.000000,0.000000,1.500000,0,0);}
.v0{vertical-align:0.000000px;}
.ls0{letter-spacing:0.000000px;}
.sc_{text-shadow:none;}
.sc0{text-shadow:-0.015em 0 transparent,0 0.015em transparent,0.015em 0 transparent,0 -0.015em transparent;}
@media screen and (-webkit-min-device-pixel-ratio:0){
.sc_{-webkit-text-stroke:0px transparent;}
.sc0{-webkit-text-stroke:0.015em transparent;text-shadow:none;}
}
.ws0{word-spacing:0.000000px;}
._1{margin-left:-7.173120px;}
._3{margin-left:-4.662497px;}
._a{margin-left:-3.227882px;}
._2{margin-left:-2.191772px;}
._9{margin-left:-1.099842px;}
._f{width:7.452025px;}
._7{width:9.444545px;}
._8{width:10.480655px;}
._6{width:11.636317px;}
._0{width:13.724570px;}
._4{width:15.065254px;}
._e{width:17.334924px;}
._12{width:18.530436px;}
._5{width:19.922800px;}
._b{width:80.019603px;}
._15{width:105.852154px;}
._16{width:420.180750px;}
._10{width:446.979010px;}
._13{width:480.329310px;}
._c{width:521.704714px;}
._19{width:592.416046px;}
._1a{width:631.902834px;}
._17{width:737.830156px;}
._11{width:745.800236px;}
._14{width:753.889867px;}
._d{width:819.643027px;}
._18{width:1135.497298px;}
.fc1{color:rgb(0,0,255);}
.fc0{color:rgb(0,0,0);}
.fs0{font-size:39.850400px;}
.fs1{font-size:47.820800px;}
.y31{bottom:45.235500px;}
.y30{bottom:110.899500px;}
.y2f{bottom:148.135500px;}
.y2d{bottom:153.366000px;}
.y2e{bottom:168.309000px;}
.y2c{bottom:171.298500px;}
.y2b{bottom:208.533000px;}
.y2a{bottom:226.465500px;}
.y29{bottom:263.701500px;}
.y28{bottom:283.876500px;}
.y27{bottom:304.050000px;}
.y0{bottom:319.500000px;}
.y26{bottom:325.420500px;}
.y25{bottom:342.904500px;}
.y24{bottom:374.287500px;}
.y23{bottom:392.220000px;}
.y22{bottom:412.393500px;}
.y21{bottom:430.326000px;}
.y20{bottom:450.501000px;}
.y1f{bottom:468.433500px;}
.y1e{bottom:488.608500px;}
.y1d{bottom:506.541000px;}
.y1c{bottom:527.911500px;}
.y1b{bottom:545.395500px;}
.y1a{bottom:576.777000px;}
.y19{bottom:594.709500px;}
.y18{bottom:614.884500px;}
.y17{bottom:632.817000px;}
.y16{bottom:652.992000px;}
.y15{bottom:670.924500px;}
.y14{bottom:692.295000px;}
.y13{bottom:709.779000px;}
.y12{bottom:747.013500px;}
.y11{bottom:764.947500px;}
.y10{bottom:782.880000px;}
.yf{bottom:800.812500px;}
.ye{bottom:838.047000px;}
.yd{bottom:855.981000px;}
.yc{bottom:876.154500px;}
.yb{bottom:894.087000px;}
.ya{bottom:914.262000px;}
.y9{bottom:932.194500px;}
.y8{bottom:950.127000px;}
.y7{bottom:953.116500px;}
.y6{bottom:971.049000px;}
.y5{bottom:1008.283500px;}
.y4{bottom:1026.217500px;}
.y3{bottom:1047.123000px;}
.y1{bottom:1055.940000px;}
.y2{bottom:1056.015000px;}
.h2{height:29.369745px;}
.h4{height:29.529146px;}
.h3{height:35.243930px;}
.h1{height:724.500000px;}
.h0{height:1188.000000px;}
.w1{width:729.000000px;}
.w0{width:918.000000px;}
.x0{left:93.000000px;}
.x8{left:233.457000px;}
.x9{left:255.873000px;}
.xa{left:270.816000px;}
.x6{left:309.333000px;}
.x7{left:313.486500px;}
.xb{left:625.486500px;}
.x1{left:760.621500px;}
.x3{left:772.801500px;}
.x2{left:774.601500px;}
.x5{left:813.478500px;}
.x4{left:815.278500px;}
@media print{
.v0{vertical-align:0.000000pt;}
.ls0{letter-spacing:0.000000pt;}
.ws0{word-spacing:0.000000pt;}
._1{margin-left:-6.376107pt;}
._3{margin-left:-4.144442pt;}
._a{margin-left:-2.869229pt;}
._2{margin-left:-1.948242pt;}
._9{margin-left:-0.977637pt;}
._f{width:6.624022pt;}
._7{width:8.395151pt;}
._8{width:9.316138pt;}
._6{width:10.343393pt;}
._0{width:12.199617pt;}
._4{width:13.391337pt;}
._e{width:15.408821pt;}
._12{width:16.471499pt;}
._5{width:17.709156pt;}
._b{width:71.128536pt;}
._15{width:94.090804pt;}
._16{width:373.494000pt;}
._10{width:397.314675pt;}
._13{width:426.959386pt;}
._c{width:463.737524pt;}
._19{width:526.592041pt;}
._1a{width:561.691408pt;}
._17{width:655.849028pt;}
._11{width:662.933543pt;}
._14{width:670.124326pt;}
._d{width:728.571580pt;}
._18{width:1009.330931pt;}
.fs0{font-size:35.422578pt;}
.fs1{font-size:42.507378pt;}
.y31{bottom:40.209333pt;}
.y30{bottom:98.577333pt;}
.y2f{bottom:131.676000pt;}
.y2d{bottom:136.325333pt;}
.y2e{bottom:149.608000pt;}
.y2c{bottom:152.265333pt;}
.y2b{bottom:185.362667pt;}
.y2a{bottom:201.302667pt;}
.y29{bottom:234.401333pt;}
.y28{bottom:252.334667pt;}
.y27{bottom:270.266667pt;}
.y0{bottom:284.000000pt;}
.y26{bottom:289.262667pt;}
.y25{bottom:304.804000pt;}
.y24{bottom:332.700000pt;}
.y23{bottom:348.640000pt;}
.y22{bottom:366.572000pt;}
.y21{bottom:382.512000pt;}
.y20{bottom:400.445333pt;}
.y1f{bottom:416.385333pt;}
.y1e{bottom:434.318667pt;}
.y1d{bottom:450.258667pt;}
.y1c{bottom:469.254667pt;}
.y1b{bottom:484.796000pt;}
.y1a{bottom:512.690667pt;}
.y19{bottom:528.630667pt;}
.y18{bottom:546.564000pt;}
.y17{bottom:562.504000pt;}
.y16{bottom:580.437333pt;}
.y15{bottom:596.377333pt;}
.y14{bottom:615.373333pt;}
.y13{bottom:630.914667pt;}
.y12{bottom:664.012000pt;}
.y11{bottom:679.953333pt;}
.y10{bottom:695.893333pt;}
.yf{bottom:711.833333pt;}
.ye{bottom:744.930667pt;}
.yd{bottom:760.872000pt;}
.yc{bottom:778.804000pt;}
.yb{bottom:794.744000pt;}
.ya{bottom:812.677333pt;}
.y9{bottom:828.617333pt;}
.y8{bottom:844.557333pt;}
.y7{bottom:847.214667pt;}
.y6{bottom:863.154667pt;}
.y5{bottom:896.252000pt;}
.y4{bottom:912.193333pt;}
.y3{bottom:930.776000pt;}
.y1{bottom:938.613333pt;}
.y2{bottom:938.680000pt;}
.h2{height:26.106440pt;}
.h4{height:26.248130pt;}
.h3{height:31.327937pt;}
.h1{height:644.000000pt;}
.h0{height:1056.000000pt;}
.w1{width:648.000000pt;}
.w0{width:816.000000pt;}
.x0{left:82.666667pt;}
.x8{left:207.517333pt;}
.x9{left:227.442667pt;}
.xa{left:240.725333pt;}
.x6{left:274.962667pt;}
.x7{left:278.654667pt;}
.xb{left:555.988000pt;}
.x1{left:676.108000pt;}
.x3{left:686.934667pt;}
.x2{left:688.534667pt;}
.x5{left:723.092000pt;}
.x4{left:724.692000pt;}
}

0
DPSResume.outline

BIN
DPSResume.pdf

0
README

11
README.md

@ -1,11 +0,0 @@
# Drew's Resume
[![Concourse](https://concourse.nulloctet.com/api/v1/teams/sothr/pipelines/resume/jobs/publish/badge)](https://concourse.nulloctet.com/teams/sothr/pipelines/resume)
# Github Links
## [View Resume](https://warricksothr.github.io/resume)
## [Download Resume](https://warricksothr.github.io/resume/resume.pdf)
# Personal Site
## [Site](https://sothr.com)
## [View Resume](https://sothr.com/resume/)
## [Download Resume](https://sothr.com/resume/resume.pdf)

BIN
ResumeSite.tar.gz

5
base.min.css

@ -0,0 +1,5 @@
/*!
* Base CSS for pdf2htmlEX
* Copyright 2012,2013 Lu Wang <coolwanglu@gmail.com>
* https://github.com/coolwanglu/pdf2htmlEX/blob/master/share/LICENSE
*/#sidebar{position:absolute;top:0;left:0;bottom:0;width:250px;padding:0;margin:0;overflow:auto}#page-container{position:absolute;top:0;left:0;margin:0;padding:0;border:0}@media screen{#sidebar.opened+#page-container{left:250px}#page-container{bottom:0;right:0;overflow:auto}.loading-indicator{display:none}.loading-indicator.active{display:block;position:absolute;width:64px;height:64px;top:50%;left:50%;margin-top:-32px;margin-left:-32px}.loading-indicator img{position:absolute;top:0;left:0;bottom:0;right:0}}@media print{@page{margin:0}html{margin:0}body{margin:0;-webkit-print-color-adjust:exact}#sidebar{display:none}#page-container{width:auto;height:auto;overflow:visible;background-color:transparent}.d{display:none}}.pf{position:relative;background-color:white;overflow:hidden;margin:0;border:0}.pc{position:absolute;border:0;padding:0;margin:0;top:0;left:0;width:100%;height:100%;overflow:hidden;display:block;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0}.pc.opened{display:block}.bf{position:absolute;border:0;margin:0;top:0;bottom:0;width:100%;height:100%;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;user-select:none}.bi{position:absolute;border:0;margin:0;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;user-select:none}@media print{.pf{margin:0;box-shadow:none;page-break-after:always;page-break-inside:avoid}@-moz-document url-prefix(){.pf{overflow:visible;border:1px solid #fff}.pc{overflow:visible}}}.c{position:absolute;border:0;padding:0;margin:0;overflow:hidden;display:block}.t{position:absolute;white-space:pre;font-size:1px;transform-origin:0 100%;-ms-transform-origin:0 100%;-webkit-transform-origin:0 100%;unicode-bidi:bidi-override;-moz-font-feature-settings:"liga" 0}.t:after{content:''}.t:before{content:'';display:inline-block}.t span{position:relative;unicode-bidi:bidi-override}._{display:inline-block;color:transparent;z-index:-1}::selection{background:rgba(127,255,255,0.4)}::-moz-selection{background:rgba(127,255,255,0.4)}.pi{display:none}.d{position:absolute;transform-origin:0 100%;-ms-transform-origin:0 100%;-webkit-transform-origin:0 100%}.it{border:0;background-color:rgba(255,255,255,0.0)}.ir:hover{cursor:pointer}

BIN
bg1.png

After

Width: 972  |  Height: 966  |  Size: 4.1 KiB

7
compatibility.min.js

@ -0,0 +1,7 @@
/*
Copyright 2012 Mozilla Foundation
Copyright 2013 Lu Wang <coolwanglu@gmail.com>
Apachine License Version 2.0
*/
(function(){function b(a,b,e,f){var c=(a.className||"").split(/\s+/g);""===c[0]&&c.shift();var d=c.indexOf(b);0>d&&e&&c.push(b);0<=d&&f&&c.splice(d,1);a.className=c.join(" ");return 0<=d}if(!("classList"in document.createElement("div"))){var e={add:function(a){b(this.element,a,!0,!1)},contains:function(a){return b(this.element,a,!1,!1)},remove:function(a){b(this.element,a,!1,!0)},toggle:function(a){b(this.element,a,!0,!0)}};Object.defineProperty(HTMLElement.prototype,"classList",{get:function(){if(this._classList)return this._classList;
var a=Object.create(e,{element:{value:this,writable:!1,enumerable:!0}});Object.defineProperty(this,"_classList",{value:a,writable:!1,enumerable:!1});return a},enumerable:!0})}})();

44
cover_letters/2019-09-CL-Elastic-Senior-Java-Engineer-Security.tex

@ -1,44 +0,0 @@
% Cover letter using letter.sty
\documentclass{letter} % Uses 10pt
%Use \documentstyle[newcent]{letter} for New Century Schoolbook postscript font
% the following commands control the margins:
\topmargin=-1in % Make letterhead start about 1 inch from top of page
\textheight=8in % text height can be bigger for a longer letter
\oddsidemargin=0pt % leftmargin is 1 inch
\textwidth=6.5in % textwidth of 6.5in leaves 1 inch for right margin
\begin{document}
\signature{\vspace{-30pt} Drew Short} % name for signature
\longindentation=0pt % needed to get closing flush left
\let\raggedleft\raggedright % needed to get date flush left
\begin{letter}{Elastic \\
3300 N Interstate 35, 7th Floor \\
Austin, TX 78705}
\begin{flushleft}
{\large\bf Drew Short}
\end{flushleft}
\medskip\hrule height 1pt
\begin{tabular*}{\textwidth}{@{}l@{\extracolsep{\fill}}r@{}}
drew@sothr.com & 1430 Taylor Ave W \\
(651) 285-4565 & Saint Paul, MN 55104
\end{tabular*}
\vfill % forces letterhead to top of page
\opening{Dear Hiring Manager for the Senior Java Engineer - Security Position:}
\noindent I've been an avid supporter of Elastic products stretching back to my push for the ELK stack as a log aggregation, searching, and data visualization platform within Cargill Risk Management. So, when I found your open Senior Java Engineer position through the LinkedIn job boards I was excited to consider the possibility of directly contributing to the Elasticsearch platform.
\noindent In my 8 years of professional software engineering experience, I've moved through testing, development, mentoring and leadership roles and have spent a significant amount of that time addressing performance and security issues within both large Spring applications and Spring Boot microservices. I recently transitioned to a lead role within a DevOps group as part of a long term initiative to align the operations team with the technical architecture team. As a result of that role change I've also been responsible for the technical analysis, triaging, and assignment of security issues to domain teams. Security is a complicated field and often a series of innocuous choices lead to a vulnerabilities. I believe with my varied experience I can offer unique insights and solutions.
\noindent I look forward to connecting about this opportunity. Please feel free to reach out to me at (651) 285-4565 or drew@sothr.com
\closing{Thank you for your time,}
%\encl{} % Enclosures
\end{letter}
\end{document}

72
cover_letters/CL-Mozilla-RE.tex

@ -1,72 +0,0 @@
% Cover letter using letter.sty
\documentclass{letter} % Uses 10pt
%Use \documentstyle[newcent]{letter} for New Century Schoolbook postscript font
% the following commands control the margins:
\topmargin=-1in % Make letterhead start about 1 inch from top of page
\textheight=8in % text height can be bigger for a longer letter
\oddsidemargin=0pt % leftmargin is 1 inch
\textwidth=6.5in % textwidth of 6.5in leaves 1 inch for right margin
\begin{document}
\signature{Drew P. Short} % name for signature
\longindentation=0pt % needed to get closing flush left
\let\raggedleft\raggedright % needed to get date flush left
\begin{letter}{
Mozilla Corporation \\
331 E. Evelyn Avenue \\
Mountain View, CA 94041}
\begin{flushleft}
{\large\bf Drew P. Short}
\end{flushleft}
\medskip\hrule height 1pt
\begin{flushright}
\hfill 1430 Taylor Ave W, Saint Paul, MN 55104 \\
\hfill (651) 285-4565
\end{flushright}
\vfill % forces letterhead to top of page
\opening{Dear Hiring Manager for the Research Engineer Position:}
\noindent I found your open Research Engineer position through the
Mozilla career site and am applying because this role aligns with my
future goals as a software engineer. As a loyal user of Mozilla
products I deeply resonate with Mozilla's goal of building a better
Internet and am excited about the possibility to work for a company
that has changed the Internet so profoundly.
\noindent For the past 3 years I have been expanding and maintaining
a large Java Spring web application for Cargill Inc. Risk Management.
This has made me sensitive to the difficulties in providing a unified
experience on the web. I would like to use my skills and ambitions
to make the web a better place for everyone; developers, designers and users
alike. I have hobbyist experience with Rust and love the work I
have done in the language so far, I think it has a very bright future
ahead of it.
\noindent I would love to have an opportunity to share my experience,
discuss the position, and explore the unique background I can bring
to the team.
\closing{Thanks for your time,}
%\encl{} % Enclosures
\end{letter}
\end{document}

66
cover_letters/template.tex

@ -1,66 +0,0 @@
% Cover letter using letter.sty
\documentclass{letter} % Uses 10pt
%Use \documentstyle[newcent]{letter} for New Century Schoolbook postscript font
% the following commands control the margins:
\topmargin=-1in % Make letterhead start about 1 inch from top of page
\textheight=8in % text height can be bigger for a longer letter
\oddsidemargin=0pt % leftmargin is 1 inch
\textwidth=6.5in % textwidth of 6.5in leaves 1 inch for right margin
\begin{document}
\signature{\vspace{-30pt} Drew Short} % name for signature
\longindentation=0pt % needed to get closing flush left
\let\raggedleft\raggedright % needed to get date flush left
\begin{letter}{Ms. Terri Roberts \\
Senior Staff Recruiter \\
XYZ Corporation \\
Rt. 56 \\
Anytown, New Jersey 05867}
\begin{flushleft}
{\large\bf Susan R. Bumpershoot}
\end{flushleft}
\medskip\hrule height 1pt
\begin{tabular*}{\textwidth}{@{}l@{\extracolsep{\fill}}r@{}}
drew@sothr.com & 1430 Taylor Ave W \\
(651) 285-4565 & Saint Paul, MN 55104
\end{tabular*}
\vfill % forces letterhead to top of page
\opening{Dear Ms. Roberts:}
\noindent PARAGRAPH ONE: State reason for letter, name the position or type
of work you are applying for and identify source from which you
learned of the opening. (i.e. Career Development Center,
newspaper, employment service, personal contact).
\noindent PARAGRAPH TWO: Indicate why you are interested in the position,
the company, its products, services - above all, stress what you
can do for the employer. If you are a recent graduate, explain
how your academic background makes you a qualified candidate for
the position. If you have practical work experience, point out
specific achievements or unique qualifications. Try not to repeat
the same information the reader will find in the resume. Refer
the reader to the enclosed resume or application which summarizes
your qualifications, training, and experiences. The purpose of
this section is to strengthen your resume by providing details
which bring your experiences to life.
\noindent PARAGRAPH THREE: Request a personal interview and indicate your
flexibility as to the time and place. Repeat your phone number in
the letter and offer assistance to help in a speedy response. For
example, state that you will be in the city where the company is
located on a certain date and would like to set up an interview.
Or, state that you will call on a certain date to set up an
interview. End the letter by thanking the employer for taking
time to consider your credentials.
\closing{Sincerely yours,}
\encl{} % Enclosures
\end{letter}
\end{document}

356
datenumber.sty

@ -1,356 +0,0 @@
%%
%% This is file `datenumber.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% datenumber.dtx (with options: `datenumber')
%%
%% This file is part of the `datenumber' package,
%%
%% Copyright (C) 2001 J"org-Michael Schr"oder.
%%
%% IMPORTANT NOTICE:
%%
%% This program may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.2
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.2 or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% This program consists of all files listed in README.txt.
%%
%% For error reports, or offers to help make this a more powerful
%% tool, please contact me on schrj020@mail.uni-mainz.de
%%
\def\fileversion{v0.02}
\def\filedate{2001/08/06}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{datenumber}[\filedate \fileversion]
\DeclareOption{english}{\input datenumberenglish.ldf}
\DeclareOption{USenglish}{\input datenumberUSenglish.ldf}
\DeclareOption{french}{\input datenumberfrench.ldf}
\DeclareOption{italian}{\input datenumberitalian.ldf}
\DeclareOption{spanish}{\input datenumberspanish.ldf}
\DeclareOption{german}{\input datenumbergerman.ldf}
\DeclareOption{ngerman}{\input datenumbergerman.ldf}
\input datenumberUSenglish.ldf
\ProcessOptions
\newcounter{@dayscnt}
\newcounter{@startyear}
\def\setstartyear#1{%
\ifnum#1<1
\errmessage{Package datenumber: startyear < 1}%
\fi
\setcounter{@startyear}{#1}%
\setdatetoday
}
\def\thestartyear{\the@startyear}
\def\setmydatenumber#1#2#3#4{%
\ifvaliddate{#2}{#3}{#4}%
\else
\errmessage{\@errmessage}%
\fi
\ifnum\the@startyear<1
\errmessage{Package datenumber: startyear < 1}%
\fi
\ifnum#2<\the@startyear
\errmessage{Package datenumber: datenumber < startyear (#2 < \the@startyear)}%
\fi
\setcounter{@dayscnt}{0}%
\ifnum#2>\the@startyear
\relax\@yearloop{#2}%
\fi
\addtocounter{@dayscnt}{%
\ifcase #3%
\or 0\or 31\or 59
\or 90\or 120\or 151
\or 181\or 212\or 243
\or 273\or 304\or 334
\fi
}%
\ifleapyear{#2}%
\ifnum#3>2
\addtocounter{@dayscnt}{1}%
\fi
\fi
\ifnum#2=1582
\ifnum#3>10
\addtocounter{@dayscnt}{-10}%
\fi
\ifnum#3=10
\ifnum#4>14
\addtocounter{@dayscnt}{-10}%
\fi
\fi
\fi
\addtocounter{@dayscnt}{#4}%
\setcounter{#1}{\the@dayscnt}%
}
\def\setmydatebynumber#1#2#3#4{%
\ifnum\the@startyear<1
\errmessage{Package datenumber: startyear < 1}%
\fi
\ifnum#1<1
\errmessage{Package datenumber: datenumber < 1}%
\fi
\setcounter{#2}{\the@startyear}%
\setcounter{@dayscnt}{1}%
\loop
\ifleapyear{\thedateyear}%
\@tempcnta=366
\else
\@tempcnta=365
\fi
\ifnum\thedateyear=1582
\@tempcnta=355
\fi
\addtocounter{@dayscnt}{\the\@tempcnta}%
\ifnum\the@dayscnt<#1\addtocounter{dateyear}{1}%
\repeat
\addtocounter{@dayscnt}{-\the\@tempcnta}%
%
\setcounter{#3}{1}%
\setcounter{#4}{1}%
\setmydatenumber{@dayscnt}{\value{#2}}{\value{#3}}{\value{#4}}%
\ifnum#1>\the@dayscnt\relax
\loop
\mynextdate{#2}{#3}{#4}%
\addtocounter{@dayscnt}{1}%
\ifnum\the@dayscnt<#1\relax
\repeat
\setmydatenumber{@dayscnt}{\value{#2}}{\value{#3}}{\value{#4}}%
\fi
}
\def\mynextdate#1#2#3{%
\ifvaliddate{\value{#1}}{\value{#2}}{\value{#3}}%
\else
\errmessage{\@errmessage}%
\fi
\addtocounter{#3}{1}%
\ifleapyear{\value{#1}}%
\@tempcnta=29
\else
\@tempcnta=28
\fi
\ifnum\value{#3}>%
\ifcase\value{#2}\or31\or\@tempcnta\or31\or30\or31\or30%
\or31\or31\or30\or31\or30\else31%
\fi\relax
\setcounter{#3}{1}%
\addtocounter{#2}{1}%
\ifnum\value{#2}>12
\setcounter{#2}{1}%
\addtocounter{#1}{1}%
\fi
\fi
\ifnum\value{#1}=1582
\ifnum\value{#2}=10
\ifnum\value{#3}=5
\setcounter{#3}{15}%
\fi
\fi
\fi
}
\def\myprevdate#1#2#3{%
\ifvaliddate{\value{#1}}{\value{#2}}{\value{#3}}%
\else
\errmessage{\@errmessage}%
\fi
\addtocounter{#3}{-1}%
\ifleapyear{\value{#1}}%
\@tempcnta=29
\else
\@tempcnta=28
\fi
\ifnum\value{#3}=0
\addtocounter{#2}{-1}%
\ifnum\value{#2}=0
\addtocounter{#1}{-1}%
\setcounter{#2}{12}%
\fi
\setcounter{#3}{%
\ifcase\value{#2}\or 31\or\the\@tempcnta\or 31\or 30\or 31\or 30
\or 31\or 31\or 30\or 31\or 30\else 31
\fi
}%
\fi
\ifnum\value{#1}=1582
\ifnum\value{#2}=10
\ifnum\value{#3}=14
\setcounter{#3}{4}%
\fi
\fi
\fi
}
\newcounter{datenumber}
\newcounter{dateyear}
\newcounter{datemonth}
\newcounter{dateday}
\newcounter{datedayname}
\def\setdatenumber#1#2#3{%
\setmydatenumber{datenumber}{#1}{#2}{#3}%
\setcounter{dateyear}{#1}%
\setcounter{datemonth}{#2}%
\setcounter{dateday}{#3}%
\setdaynamebynumber{\thedatenumber}%
\setmonthname{\thedatemonth}%
}
\def\setdatebynumber#1{%
\setmydatebynumber{#1}{dateyear}{datemonth}{dateday}%
\setcounter{datenumber}{#1}%
\setdaynamebynumber{\thedatenumber}%
\setmonthname{\thedatemonth}%
}
\def\nextdate{%
\mynextdate{dateyear}{datemonth}{dateday}%
\setdate{\thedateyear}{\thedatemonth}{\thedateday}%
}
\def\prevdate{%
\myprevdate{dateyear}{datemonth}{dateday}%
\setdate{\thedateyear}{\thedatemonth}{\thedateday}%
}
\def\setdate#1#2#3{%#1 year, #2 month, #3 day
\setdatenumber{#1}{#2}{#3}%
}
\def\setdatetoday{%
\setdatenumber{\the\year}{\the\month}{\the\day}%
}
\def\setmonthname#1{%
\def\datemonthname{\@monthname{#1}}%
}
\def\setdayname#1{%
\def\datedayname{\@dayname{#1}}%
}
\def\setdaynamebynumber#1{%
\@tempcnta=#1\relax
\ifnum\the@startyear=1800\advance \@tempcnta by 1\fi
\ifnum\the@startyear=1900\advance \@tempcnta by 6\fi
\ifnum\the@startyear=2000\advance \@tempcnta by 4\fi
\@modulo{\the\@tempcnta}{7}%
\setcounter{datedayname}{\the\@den}%
\addtocounter{datedayname}{1}%
\setdayname{\thedatedayname}%
}
\def\datedate{\@datedate}%
\def\dateselectlanguage#1{%
\csname @datelanguage#1\endcsname
\setdayname{\thedatedayname}%
\setmonthname{\thedatemonth}%
}
\def\ifleapyear#1{%#1 year
\ifnum#1>1500
\@modulo{#1}{100}%
\ifnum\@den=0
\@modulo{#1}{400}%
\else
\@modulo{#1}{4}%
\fi
\else
\@modulo{#1}{4}%
\fi
\ifnum\@den=0
}
\def\ifvaliddate#1#2#3{%
\ifleapyear{#1}%
\@tempcnta=29
\else
\@tempcnta=28
\fi
\gdef\@errmessage{}%
\ifnum#1<1
\gdef\@errmessage{Package datenumber: %
invalid date: year < 1, #1/#2/#3}%
\fi%
\ifnum#2<1
\gdef\@errmessage{Package datenumber: %
invalid date: month < 1, #1/#2/#3}%
\fi%
\ifnum#2>12
\gdef\@errmessage{Package datenumber: %
invalid date: month > 12, #1/#2/#3}%
\fi%
\ifnum#3<1
\gdef\@errmessage{Package datenumber: %
invalid date: day < 1, #1/#2/#3}%
\fi%
\@tempcntb=
\ifcase#2 31\or 31\or\the\@tempcnta\or 31\or 30\or 31\or 30
\or 31\or 31\or 30\or 31\or 30\else 31
\fi\relax
\ifnum#3>\@tempcntb
\gdef\@errmessage{Package datenumber: %
invalid date: day > \the\@tempcntb, #1/#2/#3}%
\fi%
\ifnum#1=1582
\ifnum#2=10
\ifnum#3>4
\ifnum#3<15
\gdef\@errmessage{Package datenumber: %
invalid date: #1/#2/#3}%
\fi
\fi
\fi
\fi
\ifx\@errmessage\empty
}
\def\@yearloop#1{%
\@tempcnta=\the@startyear%
\loop
\ifleapyear{\@tempcnta}%
\addtocounter{@dayscnt}{366}%
\else
\addtocounter{@dayscnt}{365}%
\fi
\ifnum\@tempcnta=1582
\addtocounter{@dayscnt}{-10}%
\fi
\advance \@tempcnta by 1
\ifnum\@tempcnta=#1\else
\repeat
}
\newcount\@nom\newcount\@den
\def\@modulo#1#2{%
\@nom=#1\relax
\@den=#2\relax
\divide\@nom by \@den%
\multiply\@nom by \@den%
\@den=#1%
\advance\@den by -\@nom%
}
\setstartyear{1800}
\endinput
%%
%% End of file `datenumber.sty'.

53
datenumberUSenglish.ldf

@ -1,53 +0,0 @@
%%
%% This is file `datenumberUSenglish.ldf',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% datenumber.dtx (with options: `USenglish')
%%
%% This file is part of the `datenumber' package,
%%
%% Copyright (C) 2001 J"org-Michael Schr"oder.
%%
%% IMPORTANT NOTICE:
%%
%% This program may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.2
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.2 or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% This program consists of all files listed in README.txt.
%%
%% For error reports, or offers to help make this a more powerful
%% tool, please contact me on schrj020@mail.uni-mainz.de
%%
\ProvidesFile{datenumberUSenglish.ldf}
\def\@datelanguageUSenglish{%
\def\@dayname{\@daynameUSenglish}
\def\@monthname{\@monthnameUSenglish}%
\def\@datedate{\@datedateUSenglish}%
}
\def\@monthnameUSenglish#1{%
\ifcase#1\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi}%
\def\@daynameUSenglish#1{%
\ifcase#1\or
Monday\or Tuesday\or Wednesday\or Thursday\or
Friday\or Saturday\or Sunday\fi}
\def\@datedateUSenglish{\datemonthname\space\thedateday, \thedateyear}
\@datelanguageUSenglish
\endinput
%%
%% End of file `datenumberUSenglish.ldf'.

57
datenumberenglish.ldf

@ -1,57 +0,0 @@
%%
%% This is file `datenumberenglish.ldf',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% datenumber.dtx (with options: `english')
%%
%% This file is part of the `datenumber' package,
%%
%% Copyright (C) 2001 J"org-Michael Schr"oder.
%%
%% IMPORTANT NOTICE:
%%
%% This program may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.2
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.2 or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% This program consists of all files listed in README.txt.
%%
%% For error reports, or offers to help make this a more powerful
%% tool, please contact me on schrj020@mail.uni-mainz.de
%%
\ProvidesFile{datenumberenglish.ldf}
\def\@datelanguageenglish{%
\def\@dayname{\@daynameenglish}
\def\@monthname{\@monthnameenglish}%
\def\@datedate{\@datedateenglish}%
}
\def\@monthnameenglish#1{%
\ifcase#1\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi}%
\def\@daynameenglish#1{%
\ifcase#1\or
Monday\or Tuesday\or Wednesday\or Thursday\or
Friday\or Saturday\or Sunday\fi}
\def\@datedateenglish{\thedateday \ifcase\thedateday \or
st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or
th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or
st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or
st\fi~\datemonthname \space\thedateyear}
\@datelanguageenglish
\endinput
%%
%% End of file `datenumberenglish.ldf'.

BIN
f1.woff

BIN
f2.woff

BIN
f3.woff

BIN
f4.woff

BIN
f5.woff

BIN
f6.woff

BIN
f7.woff

BIN
f8.woff

5
fancy.min.css

@ -0,0 +1,5 @@
/*!
* Fancy styles for pdf2htmlEX
* Copyright 2012,2013 Lu Wang <coolwanglu@gmail.com>
* https://github.com/coolwanglu/pdf2htmlEX/blob/master/share/LICENSE
*/@keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes swing{0{transform:rotate(0)}10%{transform:rotate(0)}90%{transform:rotate(720deg)}100%{transform:rotate(720deg)}}@-webkit-keyframes swing{0{-webkit-transform:rotate(0)}10%{-webkit-transform:rotate(0)}90%{-webkit-transform:rotate(720deg)}100%{-webkit-transform:rotate(720deg)}}@media screen{#sidebar{background-color:#2f3236;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0IiBoZWlnaHQ9IjQiPgo8cmVjdCB3aWR0aD0iNCIgaGVpZ2h0PSI0IiBmaWxsPSIjNDAzYzNmIj48L3JlY3Q+CjxwYXRoIGQ9Ik0wIDBMNCA0Wk00IDBMMCA0WiIgc3Ryb2tlLXdpZHRoPSIxIiBzdHJva2U9IiMxZTI5MmQiPjwvcGF0aD4KPC9zdmc+")}#outline{font-family:Georgia,Times,"Times New Roman",serif;font-size:13px;margin:2em 1em}#outline ul{padding:0}#outline li{list-style-type:none;margin:1em 0}#outline li>ul{margin-left:1em}#outline a,#outline a:visited,#outline a:hover,#outline a:active{line-height:1.2;color:#e8e8e8;text-overflow:ellipsis;white-space:nowrap;text-decoration:none;display:block;overflow:hidden;outline:0}#outline a:hover{color:#0cf}#page-container{background-color:#9e9e9e;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPgo8cmVjdCB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBmaWxsPSIjOWU5ZTllIj48L3JlY3Q+CjxwYXRoIGQ9Ik0wIDVMNSAwWk02IDRMNCA2Wk0tMSAxTDEgLTFaIiBzdHJva2U9IiM4ODgiIHN0cm9rZS13aWR0aD0iMSI+PC9wYXRoPgo8L3N2Zz4=");-webkit-transition:left 500ms;transition:left 500ms}.pf{margin:13px auto;box-shadow:1px 1px 3px 1px #333;border-collapse:separate}.pc.opened{-webkit-animation:fadein 100ms;animation:fadein 100ms}.loading-indicator.active{-webkit-animation:swing 1.5s ease-in-out .01s infinite alternate none;animation:swing 1.5s ease-in-out .01s infinite alternate none}.checked{background:no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goQDSYgDiGofgAAAslJREFUOMvtlM9LFGEYx7/vvOPM6ywuuyPFihWFBUsdNnA6KLIh+QPx4KWExULdHQ/9A9EfUodYmATDYg/iRewQzklFWxcEBcGgEplDkDtI6sw4PzrIbrOuedBb9MALD7zv+3m+z4/3Bf7bZS2bzQIAcrmcMDExcTeXy10DAFVVAQDksgFUVZ1ljD3yfd+0LOuFpmnvVVW9GHhkZAQcxwkNDQ2FSCQyRMgJxnVdy7KstKZpn7nwha6urqqfTqfPBAJAuVymlNLXoigOhfd5nmeiKL5TVTV+lmIKwAOA7u5u6Lped2BsbOwjY6yf4zgQQkAIAcedaPR9H67r3uYBQFEUFItFtLe332lpaVkUBOHK3t5eRtf1DwAwODiIubk5DA8PM8bYW1EU+wEgCIJqsCAIQAiB7/u253k2BQDDMJBKpa4mEon5eDx+UxAESJL0uK2t7XosFlvSdf0QAEmlUnlRFJ9Waho2Qghc1/U9z3uWz+eX+Wr+lL6SZfleEAQIggA8z6OpqSknimIvYyybSCReMsZ6TislhCAIAti2Dc/zejVNWwCAavN8339j27YbTg0AGGM3WltbP4WhlRWq6Q/btrs1TVsYHx+vNgqKoqBUKn2NRqPFxsbGJzzP05puUlpt0ukyOI6z7zjOwNTU1OLo6CgmJyf/gA3DgKIoWF1d/cIY24/FYgOU0pp0z/Ityzo8Pj5OTk9PbwHA+vp6zWghDC+VSiuRSOQgGo32UErJ38CO42wdHR09LBQK3zKZDDY2NupmFmF4R0cHVlZWlmRZ/iVJUn9FeWWcCCE4ODjYtG27Z2Zm5juAOmgdGAB2d3cBADs7O8uSJN2SZfl+WKlpmpumaT6Yn58vn/fs6XmbhmHMNjc3tzDGFI7jYJrm5vb29sDa2trPC/9aiqJUy5pOp4f6+vqeJ5PJBAB0dnZe/t8NBajx/z37Df5OGX8d13xzAAAAAElFTkSuQmCC)}}

32
helvetica.sty

@ -1,32 +0,0 @@
%%
%% This is file `helvetica.sty', based on helvet.sty extended to include
%% definitions for rm and tt. This means commands such as \textbf, \textit,
%% etc. will appear in Helvetica.
%% Changes added by Harriet Borton on <1995/12/11>
%%
%% The original source files were:
%%
%% psfonts.dtx (with options: `helvet')
%%
%% Copyright (C) 1994 Sebastian Rahtz
%% All rights reserved.
%%
%% The original file is part of the PSNFSS2e package.
%% -----------------------------------------
%%
%% This is a generated file. Permission is granted to to customize the
%% declarations in this file to serve the needs of your installation.
%% However, no permission is granted to distribute a modified version of
%% this file under its original name.
\def\fileversion{4.2}
\def\filedate{94/11/11}
\def\docdate {94/11/06}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{helvetica}[\filedate\space\fileversion\space
Helvetica PSNFSS2e package]
\renewcommand{\sfdefault}{phv}
\renewcommand{\rmdefault}{phv}
\renewcommand{\ttdefault}{pcr}
\endinput
%%
%% End of file `helvetica.sty'.

32
index.html
File diff suppressed because it is too large
View File

BIN
pdf2htmlEX-64x64.png

After

Width: 64  |  Height: 64  |  Size: 3.3 KiB

27
pdf2htmlEX.min.js

@ -0,0 +1,27 @@
(function(){/*
pdf2htmlEX.js: Core UI functions for pdf2htmlEX
Copyright 2012,2013 Lu Wang <coolwanglu@gmail.com> and other contributors
https://github.com/coolwanglu/pdf2htmlEX/blob/master/share/LICENSE
*/
var pdf2htmlEX=window.pdf2htmlEX=window.pdf2htmlEX||{},CSS_CLASS_NAMES={page_frame:"pf",page_content_box:"pc",page_data:"pi",background_image:"bi",link:"l",input_radio:"ir",__dummy__:"no comma"},DEFAULT_CONFIG={container_id:"page-container",sidebar_id:"sidebar",outline_id:"outline",loading_indicator_cls:"loading-indicator",preload_pages:3,render_timeout:100,scale_step:0.9,key_handler:!0,hashchange_handler:!0,view_history_handler:!0,__dummy__:"no comma"},EPS=1E-6;
function invert(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[3]*a[4])/b,(a[1]*a[4]-a[0]*a[5])/b]}function transform(a,b){return[a[0]*b[0]+a[2]*b[1]+a[4],a[1]*b[0]+a[3]*b[1]+a[5]]}function get_page_number(a){return parseInt(a.getAttribute("data-page-no"),16)}function disable_dragstart(a){for(var b=0,c=a.length;b<c;++b)a[b].addEventListener("dragstart",function(){return!1},!1)}
function clone_and_extend_objs(a){for(var b={},c=0,e=arguments.length;c<e;++c){var h=arguments[c],d;for(d in h)h.hasOwnProperty(d)&&(b[d]=h[d])}return b}
function Page(a){if(a){this.shown=this.loaded=!1;this.page=a;this.num=get_page_number(a);this.original_height=a.clientHeight;this.original_width=a.clientWidth;var b=a.getElementsByClassName(CSS_CLASS_NAMES.page_content_box)[0];b&&(this.content_box=b,this.original_scale=this.cur_scale=this.original_height/b.clientHeight,this.page_data=JSON.parse(a.getElementsByClassName(CSS_CLASS_NAMES.page_data)[0].getAttribute("data-data")),this.ctm=this.page_data.ctm,this.ictm=invert(this.ctm),this.loaded=!0)}}
Page.prototype={hide:function(){this.loaded&&this.shown&&(this.content_box.classList.remove("opened"),this.shown=!1)},show:function(){this.loaded&&!this.shown&&(this.content_box.classList.add("opened"),this.shown=!0)},rescale:function(a){this.cur_scale=0===a?this.original_scale:a;this.loaded&&(a=this.content_box.style,a.msTransform=a.webkitTransform=a.transform="scale("+this.cur_scale.toFixed(3)+")");a=this.page.style;a.height=this.original_height*this.cur_scale+"px";a.width=this.original_width*this.cur_scale+
"px"},view_position:function(){var a=this.page,b=a.parentNode;return[b.scrollLeft-a.offsetLeft-a.clientLeft,b.scrollTop-a.offsetTop-a.clientTop]},height:function(){return this.page.clientHeight},width:function(){return this.page.clientWidth}};function Viewer(a){this.config=clone_and_extend_objs(DEFAULT_CONFIG,0<arguments.length?a:{});this.pages_loading=[];this.init_before_loading_content();var b=this;document.addEventListener("DOMContentLoaded",function(){b.init_after_loading_content()},!1)}
Viewer.prototype={scale:1,cur_page_idx:0,first_page_idx:0,init_before_loading_content:function(){this.pre_hide_pages()},initialize_radio_button:function(){for(var a=document.getElementsByClassName(CSS_CLASS_NAMES.input_radio),b=0;b<a.length;b++)a[b].addEventListener("click",function(){this.classList.toggle("checked")})},init_after_loading_content:function(){this.sidebar=document.getElementById(this.config.sidebar_id);this.outline=document.getElementById(this.config.outline_id);this.container=document.getElementById(this.config.container_id);
this.loading_indicator=document.getElementsByClassName(this.config.loading_indicator_cls)[0];for(var a=!0,b=this.outline.childNodes,c=0,e=b.length;c<e;++c)if("ul"===b[c].nodeName.toLowerCase()){a=!1;break}a||this.sidebar.classList.add("opened");this.find_pages();if(0!=this.pages.length){disable_dragstart(document.getElementsByClassName(CSS_CLASS_NAMES.background_image));this.config.key_handler&&this.register_key_handler();var h=this;this.config.hashchange_handler&&window.addEventListener("hashchange",
function(a){h.navigate_to_dest(document.location.hash.substring(1))},!1);this.config.view_history_handler&&window.addEventListener("popstate",function(a){a.state&&h.navigate_to_dest(a.state)},!1);this.container.addEventListener("scroll",function(){h.update_page_idx();h.schedule_render(!0)},!1);[this.container,this.outline].forEach(function(a){a.addEventListener("click",h.link_handler.bind(h),!1)});this.initialize_radio_button();this.render()}},find_pages:function(){for(var a=[],b={},c=this.container.childNodes,
e=0,h=c.length;e<h;++e){var d=c[e];d.nodeType===Node.ELEMENT_NODE&&d.classList.contains(CSS_CLASS_NAMES.page_frame)&&(d=new Page(d),a.push(d),b[d.num]=a.length-1)}this.pages=a;this.page_map=b},load_page:function(a,b,c){var e=this.pages;if(!(a>=e.length||(e=e[a],e.loaded||this.pages_loading[a]))){var e=e.page,h=e.getAttribute("data-page-url");if(h){this.pages_loading[a]=!0;var d=e.getElementsByClassName(this.config.loading_indicator_cls)[0];"undefined"===typeof d&&(d=this.loading_indicator.cloneNode(!0),
d.classList.add("active"),e.appendChild(d));var f=this,g=new XMLHttpRequest;g.open("GET",h,!0);g.onload=function(){if(200===g.status||0===g.status){var b=document.createElement("div");b.innerHTML=g.responseText;for(var d=null,b=b.childNodes,e=0,h=b.length;e<h;++e){var p=b[e];if(p.nodeType===Node.ELEMENT_NODE&&p.classList.contains(CSS_CLASS_NAMES.page_frame)){d=p;break}}b=f.pages[a];f.container.replaceChild(d,b.page);b=new Page(d);f.pages[a]=b;b.hide();b.rescale(f.scale);disable_dragstart(d.getElementsByClassName(CSS_CLASS_NAMES.background_image));
f.schedule_render(!1);c&&c(b)}delete f.pages_loading[a]};g.send(null)}void 0===b&&(b=this.config.preload_pages);0<--b&&(f=this,setTimeout(function(){f.load_page(a+1,b)},0))}},pre_hide_pages:function(){var a="@media screen{."+CSS_CLASS_NAMES.page_content_box+"{display:none;}}",b=document.createElement("style");b.styleSheet?b.styleSheet.cssText=a:b.appendChild(document.createTextNode(a));document.head.appendChild(b)},render:function(){for(var a=this.container,b=a.scrollTop,c=a.clientHeight,a=b-c,b=
b+c+c,c=this.pages,e=0,h=c.length;e<h;++e){var d=c[e],f=d.page,g=f.offsetTop+f.clientTop,f=g+f.clientHeight;g<=b&&f>=a?d.loaded?d.show():this.load_page(e):d.hide()}},update_page_idx:function(){var a=this.pages,b=a.length;if(!(2>b)){for(var c=this.container,e=c.scrollTop,c=e+c.clientHeight,h=-1,d=b,f=d-h;1<f;){var g=h+Math.floor(f/2),f=a[g].page;f.offsetTop+f.clientTop+f.clientHeight>=e?d=g:h=g;f=d-h}this.first_page_idx=d;for(var g=h=this.cur_page_idx,k=0;d<b;++d){var f=a[d].page,l=f.offsetTop+f.clientTop,
f=f.clientHeight;if(l>c)break;f=(Math.min(c,l+f)-Math.max(e,l))/f;if(d===h&&Math.abs(f-1)<=EPS){g=h;break}f>k&&(k=f,g=d)}this.cur_page_idx=g}},schedule_render:function(a){if(void 0!==this.render_timer){if(!a)return;clearTimeout(this.render_timer)}var b=this;this.render_timer=setTimeout(function(){delete b.render_timer;b.render()},this.config.render_timeout)},register_key_handler:function(){var a=this;window.addEventListener("DOMMouseScroll",function(b){if(b.ctrlKey){b.preventDefault();var c=a.container,
e=c.getBoundingClientRect(),c=[b.clientX-e.left-c.clientLeft,b.clientY-e.top-c.clientTop];a.rescale(Math.pow(a.config.scale_step,b.detail),!0,c)}},!1);window.addEventListener("keydown",function(b){var c=!1,e=b.ctrlKey||b.metaKey,h=b.altKey;switch(b.keyCode){case 61:case 107:case 187:e&&(a.rescale(1/a.config.scale_step,!0),c=!0);break;case 173:case 109:case 189:e&&(a.rescale(a.config.scale_step,!0),c=!0);break;case 48:e&&(a.rescale(0,!1),c=!0);break;case 33:h?a.scroll_to(a.cur_page_idx-1):a.container.scrollTop-=
a.container.clientHeight;c=!0;break;case 34:h?a.scroll_to(a.cur_page_idx+1):a.container.scrollTop+=a.container.clientHeight;c=!0;break;case 35:a.container.scrollTop=a.container.scrollHeight;c=!0;break;case 36:a.container.scrollTop=0,c=!0}c&&b.preventDefault()},!1)},rescale:function(a,b,c){var e=this.scale;this.scale=a=0===a?1:b?e*a:a;c||(c=[0,0]);b=this.container;c[0]+=b.scrollLeft;c[1]+=b.scrollTop;for(var h=this.pages,d=h.length,f=this.first_page_idx;f<d;++f){var g=h[f].page;if(g.offsetTop+g.clientTop>=
c[1])break}g=f-1;0>g&&(g=0);var g=h[g].page,k=g.clientWidth,f=g.clientHeight,l=g.offsetLeft+g.clientLeft,m=c[0]-l;0>m?m=0:m>k&&(m=k);k=g.offsetTop+g.clientTop;c=c[1]-k;0>c?c=0:c>f&&(c=f);for(f=0;f<d;++f)h[f].rescale(a);b.scrollLeft+=m/e*a+g.offsetLeft+g.clientLeft-m-l;b.scrollTop+=c/e*a+g.offsetTop+g.clientTop-c-k;this.schedule_render(!0)},fit_width:function(){var a=this.cur_page_idx;this.rescale(this.container.clientWidth/this.pages[a].width(),!0);this.scroll_to(a)},fit_height:function(){var a=this.cur_page_idx;
this.rescale(this.container.clientHeight/this.pages[a].height(),!0);this.scroll_to(a)},get_containing_page:function(a){for(;a;){if(a.nodeType===Node.ELEMENT_NODE&&a.classList.contains(CSS_CLASS_NAMES.page_frame)){a=get_page_number(a);var b=this.page_map;return a in b?this.pages[b[a]]:null}a=a.parentNode}return null},link_handler:function(a){var b=a.target,c=b.getAttribute("data-dest-detail");if(c){if(this.config.view_history_handler)try{var e=this.get_current_view_hash();window.history.replaceState(e,
"","#"+e);window.history.pushState(c,"","#"+c)}catch(h){}this.navigate_to_dest(c,this.get_containing_page(b));a.preventDefault()}},navigate_to_dest:function(a,b){try{var c=JSON.parse(a)}catch(e){return}if(c instanceof Array){var h=c[0],d=this.page_map;if(h in d){for(var f=d[h],h=this.pages[f],d=2,g=c.length;d<g;++d){var k=c[d];if(null!==k&&"number"!==typeof k)return}for(;6>c.length;)c.push(null);var g=b||this.pages[this.cur_page_idx],d=g.view_position(),d=transform(g.ictm,[d[0],g.height()-d[1]]),
g=this.scale,l=[0,0],m=!0,k=!1,n=this.scale;switch(c[1]){case "XYZ":l=[null===c[2]?d[0]:c[2]*n,null===c[3]?d[1]:c[3]*n];g=c[4];if(null===g||0===g)g=this.scale;k=!0;break;case "Fit":case "FitB":l=[0,0];k=!0;break;case "FitH":case "FitBH":l=[0,null===c[2]?d[1]:c[2]*n];k=!0;break;case "FitV":case "FitBV":l=[null===c[2]?d[0]:c[2]*n,0];k=!0;break;case "FitR":l=[c[2]*n,c[5]*n],m=!1,k=!0}if(k){this.rescale(g,!1);var p=this,c=function(a){l=transform(a.ctm,l);m&&(l[1]=a.height()-l[1]);p.scroll_to(f,l)};h.loaded?
c(h):(this.load_page(f,void 0,c),this.scroll_to(f))}}}},scroll_to:function(a,b){var c=this.pages;if(!(0>a||a>=c.length)){c=c[a].view_position();void 0===b&&(b=[0,0]);var e=this.container;e.scrollLeft+=b[0]-c[0];e.scrollTop+=b[1]-c[1]}},get_current_view_hash:function(){var a=[],b=this.pages[this.cur_page_idx];a.push(b.num);a.push("XYZ");var c=b.view_position(),c=transform(b.ictm,[c[0],b.height()-c[1]]);a.push(c[0]/this.scale);a.push(c[1]/this.scale);a.push(this.scale);return JSON.stringify(a)}};
pdf2htmlEX.Viewer=Viewer;})();

137
pipeline.yml

@ -1,137 +0,0 @@
---
resources:
- name: resume-git
type: git
icon: git
source:
uri: ssh://git@git.nulloctet.com:8437/warricksothr/resume.git
private_key: |
((pull_key))
ignore_paths:
- pipeline.yml
- upload_pipeline.sh
- README.md
- name: resume-github-gh-pages
type: git
icon: github-circle
source:
uri: git@github.com:warricksothr/resume.git
private_key: |
((push_key_github))
branch: gh-pages
jobs:
- name: publish
plan:
- get: resume-git
trigger: true
- get: resume-github-gh-pages
- task: build-resume-pdf
config:
platform: linux
image_resource:
type: registry-image
source: { repository: schickling/latex, tag: "latest" }
inputs:
- name: resume-git
outputs:
- name: resume-pdf
run:
path: /bin/sh
args:
- -c
- |
cd resume-git
latex --output-format pdf resume.tex
latex --output-format pdf resume_for_recruiters.tex
mv resume.pdf ../resume-pdf/
mv resume_for_recruiters.pdf ../resume-pdf/
- task: build-resume-html
config:
platform: linux
image_resource:
type: registry-image
source:
repository: ((nexus_docker_read.host))/sothr/pdf2htmlex
tag: "stable"
username: ((nexus_docker_read.username))
password: ((nexus_docker_read.password))
inputs:
- name: resume-pdf
outputs:
- name: resume-html
run:
path: /bin/sh
args:
- -c
- |
cd resume-pdf
pdf2htmlEX --zoom 1.5 --embed cfijo --dest-dir out resume.pdf
mv out/resume.html out/index.html
tar -czvf resume_site.tgz -C out/ .
mv resume_site.tgz ../resume-html/
- task: publish-site
config:
platform: linux
image_resource:
type: registry-image
source:
repository: ((nexus_docker_read.host))/sothr/deploy
tag: "stable"
username: ((nexus_docker_read.username))
password: ((nexus_docker_read.password))
inputs:
- name: resume-pdf
- name: resume-html
params:
DEPLOY_KEY: ((deploy.key))
DEPLOY_HOST: ((deploy.host))
DEPLOY_PORT: ((deploy.port))
DEPLOY_USER: ((deploy.user))
DEPLOY_TARGET: ((deploy.target))
run:
path: /bin/bash
args:
- -c
- |
eval `ssh-agent -s`
ssh-add <(echo "${DEPLOY_KEY}")
mkdir -p ~/.ssh
ssh-keyscan -p ${DEPLOY_PORT} ${DEPLOY_HOST} >> ~/.ssh/known_hosts
mkdir /tmp/deploy
tar -xzvf resume-html/resume_site.tgz -C /tmp/deploy
cp resume-pdf/resume.pdf /tmp/deploy
cp resume-pdf/resume_for_recruiters.pdf /tmp/deploy
rsync -avz --delete-delay -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${DEPLOY_PORT}" --progress /tmp/deploy/* ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_TARGET}
- task: publish-gh-pages
config:
platform: linux
image_resource:
type: registry-image
source: { repository: alpine/git }
inputs:
- name: resume-pdf
- name: resume-html
- name: resume-github-gh-pages
outputs:
- name: updated-resume-github-gh-pages
run:
path: /bin/sh
args:
- -c
- |
git config --global user.email "concourse@warrick.sothr.com"
git config --global user.name "Concourse"
git clone resume-github-gh-pages updated-resume-github-gh-pages
cd resume-html
mkdir -p /tmp/resume_site
tar -zxvf resume_site.tgz -C /tmp/resume_site
cd ../updated-resume-github-gh-pages
rm -rf *
mv /tmp/resume_site/* .
cp ../resume-pdf/*.pdf .
git add .
git commit -m"Auto update of resume page"
- put: resume-github-gh-pages
params:
repository: updated-resume-github-gh-pages

805
res.cls

@ -1,805 +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 4pt
% 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.75in
%\sectionskip=3.5ex plus 1ex minus -.2ex % values stolen from LaTeX
\resumewidth=6.75in
\sectionskip=3.0ex 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 12pt
\headsep 0pt
\textheight 9in
\parindent 0pt
\topmargin 0in
\oddsidemargin -10pt
\evensidemargin -10pt
\marginparwidth -10pt
\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

9
resume.tex

@ -1,9 +0,0 @@
\input{tex_parts/resume_head.tex}
\begin{document}
\input{tex_parts/resume_address.tex}
\input{tex_parts/resume_body.tex}
\end{document}

9
resume_for_recruiters.tex

@ -1,9 +0,0 @@
\input{tex_parts/resume_head.tex}
\begin{document}
\input{tex_parts/resume_address_recruiters.tex}
\input{tex_parts/resume_body.tex}
\end{document}

26
scripts/build

@ -1,26 +0,0 @@
#!/usr/bin/env bash
function print_help {
echo "Resume Build Utility"
echo "usage: ./build resume pdf"
echo "usage: ./build resume html [package, deploy]"
echo "usage: ./build coverletter pdf <cover letter file name>"
echo "usage: ./build combined pdf <cover letter file name>"
}
if [ -z "$1" ]; then
echo "Must supply a build command"
print_help
fi
case "$1" in
"resume")
;;
"coverletter")
;;
"combined")
;;
*)
print_help
;;
esac

4
scripts/build-and-deploy-resume.sh

@ -1,4 +0,0 @@
#!/usr/bin/env bash
# Simple script to build he PDF, build the html, and deploy them to the gh-pages branch
./build-pdf-resume.sh && ./build-pdf-resume-for-recruiters.sh && ./build-html-resume.sh && ./package-and-deploy.sh

17
scripts/build-html-resume-docker.sh

@ -1,17 +0,0 @@
#!/usr/bin/env bash
cd /source
userid="$(cat userid.info)"
# Script to build an HTML site from the PDF source
pdf2htmlEX --zoom 1.5 --embed cfijo --dest-dir out resume.pdf
chown -R $userid:$userid out/
chmod -R 666 out/
chmod u+x out/
mv out/resume.html out/index.html
tar -czvf ResumeSite.tar.gz -C out/ .
chown $userid:$userid ResumeSite.tar.gz
chmod 666 ResumeSite.tar.gz
rm -rf out

13
scripts/build-html-resume.sh

@ -1,13 +0,0 @@
#!/usr/bin/env bash
echo "$(id -u)" > userid.info
# Script to build an HTML site from the PDF source
docker run \
-v $(pwd):/source \
sothr/pdf2htmlex \
/usr/bin/env bash /source/scripts/build-html-resume-docker.sh
./scripts/cleanup-latex.sh
rm userid.info

18
scripts/build-pdf-cover-letter-docker.sh

@ -1,18 +0,0 @@
#!/usr/bin/env bash
set -e
set -x
cd /source
userid="$(cat userid.info)"
# Script to build a PDF from the latex source
latex --output-format pdf "${1}"
outfile="$(basename -- ${1} | cut -f1 -d'.')"
chown $userid:$userid ${outfile}.pdf
chmod 666 ${outfile}.pdf
mv "${outfile}.pdf" "cover_letters/${outfile}.pdf"
rm ${outfile}.log
rm ${outfile}.aux

16
scripts/build-pdf-cover-letter.sh

@ -1,16 +0,0 @@
#!/usr/bin/env bash
set -e
set -x
echo "$(id -u)" > userid.info
# Script to build a PDF from the latex source
docker run -it \
-v $(pwd):/source \
schickling/latex \
/usr/bin/env bash /source/scripts/build-pdf-cover-letter-docker.sh $1
./scripts/cleanup-latex.sh
rm userid.info

11
scripts/build-pdf-resume-docker.sh

@ -1,11 +0,0 @@
#!/usr/bin/env bash
cd /source
userid="$(cat userid.info)"
# Script to build a PDF from the latex source
latex --output-format pdf resume.tex
chown $userid:$userid resume.pdf
chmod 666 resume.pdf
rm resume.log

11
scripts/build-pdf-resume-for-recruiters-docker.sh

@ -1,11 +0,0 @@
#!/usr/bin/env bash
cd /source
userid="$(cat userid.info)"
# Script to build a PDF from the latex source
latex --output-format pdf resume_for_recruiters.tex
chown $userid:$userid resume_for_recruiters.pdf
chmod 666 resume_for_recruiters.pdf
rm resume_for_recruiters.log

13
scripts/build-pdf-resume-for-recruiters.sh

@ -1,13 +0,0 @@
#!/usr/bin/env bash
echo "$(id -u)" > userid.info
# Script to build a PDF from the latex source
docker run \
-v $(pwd):/source:Z \
schickling/latex \
/usr/bin/env bash /source/scripts/build-pdf-resume-for-recruiters-docker.sh
./scripts/cleanup-latex.sh
rm userid.info

28
scripts/build-pdf-resume-with-cover-letter-docker.sh

@ -1,28 +0,0 @@
#!/usr/bin/env bash
cd /source
userid="$(cat userid.info)"
# Get PDFJam to combine the pdf's
#curl -LSO http://www2.warwick.ac.uk/fac/sci/statistics/staff/academic/firth/software/pdfjam/pdfjam_latest.tgz
#tar -zxvf pdfjam_latest.tgz
#export PATH="$PWD/pdfjam/bin:$PATH"
# Script to build a PDF from the latex source
latex --output-format pdf resume.tex
chown $userid:$userid resume.pdf
chmod 666 resume.pdf
latex --output-format pdf ${1}.tex
chown $userid:$userid ${1}.pdf
chmod 666 ${1}.pdf
outfile="${1}_with_resume.pdf"
pdfjam --fitpaper 'true' --rotateoversize 'false' --suffix joined --no-landscape --outfile $outfile ${1}.pdf resume.pdf
#pdfjoin ${1}.pdf DPSResume.pdf --no-landscape --outfile $outfile
chown $userid:$userid $outfile
chmod 666 $outfile
rm resume.log
rm ${1}.log

13
scripts/build-pdf-resume-with-cover-letter.sh

@ -1,13 +0,0 @@
#!/usr/bin/env bash
echo "$(id -u)" > userid.info
# Script to build a PDF from the latex source
docker run \
-v $(pwd):/source \
schickling/latex \
/usr/bin/env bash /source/scripts/build-pdf-resume-with-cover-letter-docker.sh $1
./scripts/cleanup-latex.sh
rm userid.info

13
scripts/build-pdf-resume.sh

@ -1,13 +0,0 @@
#!/usr/bin/env bash
echo "$(id -u)" > userid.info
# Script to build a PDF from the latex source
docker run \
-v $(pwd):/source:Z \
schickling/latex \
/usr/bin/env bash /source/scripts/build-pdf-resume-docker.sh
./scripts/cleanup-latex.sh
rm userid.info

3
scripts/cleanup-latex.sh

@ -1,3 +0,0 @@
#!/usr/bin/env bash
rm -f *.aux *.4ct *.4tc *.dvi *.idv *.lg *.tmp *.xref

41
scripts/package-and-deploy.sh

@ -1,41 +0,0 @@
#!/usr/bin/env bash
# Script to package the PDF and the html.
# Store them.
# flush the current directory
# checkout the gh-pages branch
# extract the updated site over the current
# add the changes
# commit the changes
# push the changes to github
mkdir -p ~/tmp
cp resume.pdf ~/tmp
cp resume_for_recruiters.pdf ~/tmp
cp ResumeSite.tar.gz ~/tmp
# Prepare the current directory
git clean -fq .
git clean -fXq
git checkout .
#Checkout the deployment directory
git checkout gh-pages
# Move and extract the files
tar -zxvf ~/tmp/ResumeSite.tar.gz .
rm ~/tmp/ResumeSite.tar.gz
mv ~/tmp/resume.pdf .
mv ~/tmp/resume_for_recruiters.pdf .
# Add the files
git add .
git commit -m "Auto updating resume site files"
git push ssh://git@gitlab.sothr.com:9141/warricksothr/resume.git HEAD:gh-pages --force
# Prepare the current directory
git clean -fq .
git clean -fdXq
git checkout master
git pull

7
tex_parts/resume_address.tex

@ -1,7 +0,0 @@
\name{Drew Short}
\address{
\textifsymbol{18} St. Paul MN |
\Mobilefone \hspace{1 pt} (612)-361-1019 |
\Letter \hspace{1 pt} \href{mailto:drew@sothr.com?subject=Concerning Your Resume}{drew@sothr.com} |
\Mundus \hspace{1 pt} \url{https://www.sothr.com}
}

5
tex_parts/resume_address_recruiters.tex

@ -1,5 +0,0 @@
\name{Drew Short}
\address{
\textifsymbol{18} Minneapolis/St. Paul MN |
\Mundus \hspace{1 pt} \href{https://www.linkedin.com/in/drew-short-5188033a/a}{LinkedIn}
}

15
tex_parts/resume_body.tex

@ -1,15 +0,0 @@
\begin{resume}
\input{tex_parts/resume_body/intro.tex}
\input{tex_parts/resume_body/skills.tex}
\input{tex_parts/resume_body/experience.tex}
\input{tex_parts/resume_body/education.tex}
\input{tex_parts/resume_body/achievements.tex}
\input{tex_parts/resume_body/references.tex}
\end{resume}

6
tex_parts/resume_body/achievements.tex

@ -1,6 +0,0 @@
\section{NOTABLE ACHIEVEMENTS}
\begin{itemize} \itemsep -0.5pt %reduce space between items-2pt %reduce space between items
\item \textbf{\emph{Eagle Scout \hfill 2007}}
\item BSA Leadership Instructor \hfill Summers 2004-2007
\end{itemize}

7
tex_parts/resume_body/education.tex

@ -1,7 +0,0 @@
\section{EDUCATION}
{\sl Bachelor of Science}, IT (May 2013) \hfill Minnesota State University \\
% \sl will be bold italic in New Century Schoolbook (or
% any postscript font) and just slanted in
% Computer Modern (default) font
Software Engineering \& Ethics \hfill Mankato, MN

64
tex_parts/resume_body/experience.tex

@ -1,64 +0,0 @@
\section{EXPERIENCE}
{\bf Senior Platform Engineer} \hfill {\bf Flywheel Exchange, LLC} \\
\begin{tabular*}{1.0\linewidth}{@{}c@{\extracolsep{\fill}}r@{}}
Minneapolis, MN & 2020 - {\the\year} (\difftoday{2020}{02}{17}) \\
\hline
\end{tabular*}
\begin{itemize} \itemsep -0.5pt % reduce space between items
\item Lead team meetings, planning sessions, retrospectives, postmortems, gamedays, and brown bag learning sessions.
\item Developed Terraform + Helm + Kubernetes based replacement for the existing Manual + Bash + Docker Compose deployments.
\item Migrated legacy pet VMs to highly available metrics and build Kubernetes clusters managed through Terraform.
\item Lead development effort that moved customer site log collection into centralized GCP Stackdriver and customer supplied logging infrastructure.
\item Wrote management tooling for support to connect/maintain/upgrade Kubernetes deployments.
\item Currated and maintained support documentation for maintaining, upgrading, and migrating customer deployments.
\item Mentored platform engineers, software engineers, and interns on Terraform, Helm, Kubernetes, Scalable Code Patterns, and monitoring tooling.
\end{itemize}
\vspace*{-5pt}
{\bf Senior Software Engineer} \hfill {\bf Optum} \\
\begin{tabular*}{1.0\linewidth}{@{}c@{\extracolsep{\fill}}r@{}}
Eden Prairie, MN & 2017 - 2020 (\diffdates{2017}{08}{01}{2020}{01}{30}) \\
& (Contracted) 2016 - 2017 (\diffdates{2016}{12}{12}{2017}{07}{30}) \\
\hline
\end{tabular*}
\begin{itemize} \itemsep -0.5pt % reduce space between items
\item Replaced slow legacy REST API services with hoizontally scaling services and provided guidance and support for the migration process.
\item Led efforts to triage critical security issues in production Spring services, taking accountability for identified issues and assigning security work to engineers.
\item Developed report tooling to group and assign security issues to domain teams, reducing touch time and missed assignments.
\item Led the conversion work of legacy in-line JSON deserialization to Jackson powered DTO for the communication of internal data structures via web API and message queues between services managed by the team.
\item Improved code generation of an internal framework built on top of Spring. Significantly reducing configuration required for engineers to leverage message based workflows.
\end{itemize}
% manually split the page here. TODO fix this so layout is less manual
\newpage
\vspace*{5pt}
\vspace*{-5pt}
{\bf Software Engineer} \hfill {\bf Cargill Incorporated, Risk Management} \\
\begin{tabular*}{1.0\linewidth}{@{}c@{\extracolsep{\fill}}r@{}}
Hopkins, MN & 2013 - 2016 (\diffdates{2013}{06}{01}{2016}{12}{9}) \\
\hline
\end{tabular*}
\begin{itemize} \itemsep -0.5pt % reduce space between items
\item Led a small (3-5 person) team to retool and support a migration system in preparation of an extended cut-over testing period.
\item Architected a Python REST API to integrate an Oracle data source with a third-party suite of back, middle and front office tools.
\item Redesigned management system for '\emph{Risk Products}', delivering improved control over the individual components.
\item Maintained/upgraded a 10+ year Spring web application. Modernized interface, improved the back end, started work to move to modern build tools/process.
\end{itemize}
\vspace*{-5pt}
{\bf Software Engineer Intern} \hfill (Under Contract To) {\bf FPX LLC} \\
\begin{tabular*}{1.0\linewidth}{@{}c@{\extracolsep{\fill}}r@{}}
Mankato, MN & 2011 - 2013 (\diffdates{2011}{04}{01}{2013}{05}{03}) \\
\hline
\end{tabular*}
\begin{itemize} \itemsep -0.5pt %reduce space between items
\item Expanded a REST API and implemented continuous integration testing.
\item Developed a DSL and tooling for internal auditing, testing and reporting.
\item Developed a '\emph{playback}' system that facilitated debugging of client systems.
\end{itemize}

9
tex_parts/resume_body/intro.tex

@ -1,9 +0,0 @@
\section{SOFTWARE ENGINEER}
Object Oriented Design and Development | Relational Database Systems
\begin{itemize} \itemsep -0.5pt
\item \emph{Exceptional Software Engineer} - 11+ years of experience with the entire software development lifcycle. Dedicated to the delivery of innovative solutions for today's problems, using tomorrow's tools.
\item \emph{Excellent troubleshooting and analysis skills} - Quick to analyze the root cause of issues and work towards both immediate and long term solutions.
\item \emph{Expert in backend/middle system design \& implementation} - Years of experience in validating, processing, and marshalling data across varied systems.
\end{itemize}

4
tex_parts/resume_body/references.tex

@ -1,4 +0,0 @@
\section{REFERENCES}
\centering
Available Upon Request

12
tex_parts/resume_body/skills.tex

@ -1,12 +0,0 @@
\section{COMPUTER \\ SKILLS}
{\bf Languages \& Software:} Go, Python, Java, Kotlin, Groovy, SQL,
Poetry, Maven, Gradle,
pytest, JUnit, Spock,
Spring Framework, Spring Boot, Spring Cloud Stream, Hibernate,
Kubernetes, Helm, Terraform,
GitLab CI/CD, Jenkins, Concourse,
Docker, Tomcat, Nginx,
Oracle, MySQL, SQLite. \\
{\bf Cloud Providers:} GCP, AWS, Azure. \\
{\bf Operating Systems:} Windows, Linux (Ubuntu, Fedora, RHEL), OSX.

86
tex_parts/resume_commands.tex

@ -1,86 +0,0 @@
\newcounter{datetoday}
\newcounter{diffyears}
\newcounter{diffmonths}
\newcounter{diffdays}
% Function curtesy of Martin Scharrer
% http://tex.stackexchange.com/questions/14518/difference-between-two-dates
\newcommand{\difftoday}[3]{%
\setmydatenumber{datetoday}{\the\year}{\the\month}{\the\day}%
\setmydatenumber{diffdays}{#1}{#2}{#3}%
\addtocounter{diffdays}{-\thedatetoday}%
\ifnum\value{diffdays}>0
\def\diffbefore{in }%
\def\diffafter{}%
\else
\def\diffbefore{}%
\def\diffafter{}%
\setcounter{diffdays}{-\value{diffdays}}%
\fi
\setcounter{diffyears}{\value{diffdays}/365}%
\setcounter{diffdays}{\value{diffdays}-365*\value{diffyears}}%
\setcounter{diffmonths}{\value{diffdays}/30}%
\setcounter{diffdays}{\value{diffdays}-30*\value{diffmonths}}%
%
\diffbefore
\ifnum\value{diffyears}=0
\else
\ifnum\value{diffyears}>1
\thediffyears\space years\ignorespacesafterend
\else
\thediffyears\space year\ignorespacesafterend
\fi
\fi
\ifnum\value{diffmonths}=0
\else
\ifnum\value{diffyears}>0
,
\fi
\ifnum\value{diffmonths}>1
\thediffmonths\space months\ignorespacesafterend
\else
\thediffmonths\space month\ignorespacesafterend
\fi
\fi
\diffafter
}
\newcommand{\diffdates}[6]{%
\setmydatenumber{datetoday}{#4}{#5}{#6}%
\setmydatenumber{diffdays}{#1}{#2}{#3}%
\addtocounter{diffdays}{-\thedatetoday}%
\ifnum\value{diffdays}>0
\def\diffbefore{in }%
\def\diffafter{}%
\else
\def\diffbefore{}%
\def\diffafter{}%
\setcounter{diffdays}{-\value{diffdays}}%
\fi
\setcounter{diffyears}{\value{diffdays}/365}%
\setcounter{diffdays}{\value{diffdays}-365*\value{diffyears}}%
\setcounter{diffmonths}{\value{diffdays}/30}%
\setcounter{diffdays}{\value{diffdays}-30*\value{diffmonths}}%
%
\diffbefore
\ifnum\value{diffyears}=0
\else
\ifnum\value{diffyears}>1
\thediffyears\space years\ignorespacesafterend
\else
\thediffyears\space year\ignorespacesafterend
\fi
\fi
\ifnum\value{diffmonths}=0
\else
\ifnum\value{diffyears}>0
,
\fi
\ifnum\value{diffmonths}>1
\thediffmonths\space months\ignorespacesafterend
\else
\thediffmonths\space month\ignorespacesafterend
\fi
\fi
\diffafter
}

15
tex_parts/resume_head.tex

@ -1,15 +0,0 @@
\input{tex_parts/resume_preamble}
\input{tex_parts/resume_commands}
% Hyperref setup
\hypersetup{
colorlinks=true,
urlcolor=blue
}
\pagestyle{fancy} % Makes sure we have footers
\renewcommand{\headrulewidth}{0pt} % clear the header
\rfoot{Last Updated: \today} % set the right footer
\rhead{\vspace{13pt}\textbf{\Resume}} % Put Resume in the upper right
\pagenumbering{gobble} % Hide page numbering

11
tex_parts/resume_preamble.tex

@ -1,11 +0,0 @@
% LaTeX resume using res.cls
\documentclass[line,margin]{res}
\usepackage{helvetica} % uses helvetica postscript font (download helvetica.sty)
\usepackage{newcent} % uses new century schoolbook postscript font
\usepackage{fancyhdr} % FancyHDR package for footers
\usepackage{hyperref} % HyperRef package to get fancy hyperlinks
\usepackage{marvosym} % Symbol library
\usepackage{ctable} % For special line rules
\usepackage{datenumber} % For date calculations
\usepackage{calc}
\usepackage{ifsym}

8
upload_pipeline.sh

@ -1,8 +0,0 @@
#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
pushd "${DIR}"
fly -t sothr set-pipeline --pipeline resume --config pipeline.yml
popd
Loading…
Cancel
Save