From 5be6c507018aeb0fa55dc689cd6dc288a4e663f7 Mon Sep 17 00:00:00 2001 From: Adriano Caloiaro Date: Sat, 28 May 2022 20:11:10 -0600 Subject: [PATCH] Initial commit --- .docker/resume.dockerfile | 5 ++ .dockerignore | 9 ++ .github/workflows/docker-update.yml | 55 ++++++++++++ .github/workflows/main.yml | 36 ++++++++ .gitignore | 4 + Makefile | 58 ++++++++++++ README.md | 97 ++++++++++++++++++++ actions/action.yml | 7 ++ actions/entrypoint.sh | 3 + docker-compose.yml | 13 +++ markdown/cover_letter.md | 25 ++++++ markdown/resume.md | 134 ++++++++++++++++++++++++++++ pdc-links-target-blank.lua | 15 ++++ styles/chmduquesne.css | 90 +++++++++++++++++++ styles/chmduquesne.tex | 113 +++++++++++++++++++++++ 15 files changed, 664 insertions(+) create mode 100644 .docker/resume.dockerfile create mode 100644 .dockerignore create mode 100644 .github/workflows/docker-update.yml create mode 100644 .github/workflows/main.yml create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 actions/action.yml create mode 100755 actions/entrypoint.sh create mode 100644 docker-compose.yml create mode 100644 markdown/cover_letter.md create mode 100644 markdown/resume.md create mode 100644 pdc-links-target-blank.lua create mode 100644 styles/chmduquesne.css create mode 100644 styles/chmduquesne.tex diff --git a/.docker/resume.dockerfile b/.docker/resume.dockerfile new file mode 100644 index 0000000..06a3334 --- /dev/null +++ b/.docker/resume.dockerfile @@ -0,0 +1,5 @@ +FROM pandoc/latex:2.9 + +RUN apk add make + +COPY actions/entrypoint.sh /entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cd4f39b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +*.tuc +*.log +*.pdf +*.html +resume.tex +*.swo +*.swp +*.docx +*.rtf diff --git a/.github/workflows/docker-update.yml b/.github/workflows/docker-update.yml new file mode 100644 index 0000000..da2b72b --- /dev/null +++ b/.github/workflows/docker-update.yml @@ -0,0 +1,55 @@ +# This workflow updates the docker container which has context and +# pandoc installed, and on which the resume documents are built. The +# workflow runs whenever the dockerfile is changed, and updates the +# container image in the Github Packages registry. + +name: Publish Docker Image + +# Controls when the action will run. +on: + # Triggers the workflow on push events but only for the master branch + push: + branches: [ master ] + paths-ignore: + - 'markdown/**' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Packages + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + steps: + - name: Check out the repo + uses: actions/checkout@v2 + + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and Push to GitHub Packages + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + context: . + file: .docker/resume.dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..2751290 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,36 @@ +# This is a basic workflow to help you get started with Actions + +name: build-resume + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ master ] + paths: + - 'markdown/**' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + build-resume: + runs-on: ubuntu-latest + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: Test directory contents + run: 'ls -al' + + - name: Build resume + uses: ./actions + + - name: Upload a Build Artifact + uses: actions/upload-artifact@v2.2.3 + with: + # Artifact name + name: Resume PDF # optional, default is artifact + # A file, directory or wildcard pattern that describes what to upload + path: output/*.pdf + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7ca69c2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.log +*.swo +*.swp +output/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b870d8a --- /dev/null +++ b/Makefile @@ -0,0 +1,58 @@ +OUT_DIR=output +IN_DIR=markdown +STYLES_DIR=styles +STYLE=chmduquesne + +all: html pdf docx rtf + +pdf: init + for f in $(IN_DIR)/*.md; do \ + FILE_NAME=`basename $$f | sed 's/.md//g'`; \ + echo $$FILE_NAME.pdf; \ + pandoc --standalone --template $(STYLES_DIR)/$(STYLE).tex \ + --from markdown --to context \ + --variable papersize=A4 \ + --output $(OUT_DIR)/$$FILE_NAME.tex $$f > /dev/null; \ + mtxrun --path=$(OUT_DIR) --result=$$FILE_NAME.pdf --script context $$FILE_NAME.tex > $(OUT_DIR)/context_$$FILE_NAME.log 2>&1; \ + done + +html: init + for f in $(IN_DIR)/*.md; do \ + FILE_NAME=`basename $$f | sed 's/.md//g'`; \ + echo $$FILE_NAME.html; \ + pandoc --standalone --include-in-header $(STYLES_DIR)/$(STYLE).css \ + --lua-filter=pdc-links-target-blank.lua \ + --from markdown --to html \ + --output $(OUT_DIR)/$$FILE_NAME.html $$f \ + --metadata pagetitle=$$FILE_NAME;\ + done + +docx: init + for f in $(IN_DIR)/*.md; do \ + FILE_NAME=`basename $$f | sed 's/.md//g'`; \ + echo $$FILE_NAME.docx; \ + pandoc --standalone $$SMART $$f --output $(OUT_DIR)/$$FILE_NAME.docx; \ + done + +rtf: init + for f in $(IN_DIR)/*.md; do \ + FILE_NAME=`basename $$f | sed 's/.md//g'`; \ + echo $$FILE_NAME.rtf; \ + pandoc --standalone $$SMART $$f --output $(OUT_DIR)/$$FILE_NAME.rtf; \ + done + +init: dir version + +dir: + mkdir -p $(OUT_DIR) + +version: + PANDOC_VERSION=`pandoc --version | head -1 | cut -d' ' -f2 | cut -d'.' -f1`; \ + if [ "$$PANDOC_VERSION" -eq "2" ]; then \ + SMART=-smart; \ + else \ + SMART=--smart; \ + fi \ + +clean: + rm -f $(OUT_DIR)/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..fc4a34e --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +The Markdown Resume +=================== + +### Instructions + +```bash +vim markdown/resume.md +``` + +#### Local + +Make everything + +```bash +make +``` + +Make specifics + +```bash +make pdf +make html +``` + +#### Dockerized + +Make everything + +```bash +docker-compose up -d +``` + +### Requirements + +If not using `docker` then you will need the following dependencies. + +* ConTeXt 0.6x +* pandoc 2.x + * 1.x is deprecated + +Last tested on the above versions and that's not to say the later versions won't work. Please try to use the latest versions when possible. + +#### Debian / Ubuntu + +```bash +sudo apt install pandoc context +``` + +#### Fedora +```bash +sudo dnf install pandoc texlive-collection-context +``` + +#### Arch +```bash +sudo pacman -S pandoc texlive-core +``` + +#### OSX +```bash +brew install pandoc +brew install --cask mactex +``` + +Make sure to add the directory `/Library/TeX/texbin/` to your path or `context` and `mtxrun` will not be found. + +``` +export PATH=$PATH:/Library/TeX/texbin/ +``` + +### Troubleshooting + +#### Get versions + +Check if the dependencies are up to date. + +``` +context --version +pandoc --version +``` + +#### Cannot process lua +Currently pandoc 1.x may be within your distro's repos and the latest version should be used. See the +[pandoc releases](https://github.com/jgm/pandoc/releases) for your distro. + +e.g. for Debian / Ubuntu +``` +wget https://github.com/jgm/pandoc/releases/download/2.2.1/pandoc-2.2.1-1-amd64.deb +sudo dpkg -i pandoc-2.2.1-1-amd64.deb +``` + +#### Context executable cannot be found +Some users have reported problems where their system does not properly find the ConTeXt +executable, leading to errors like `Cannot find context.lua` or similar. It has been found +that running `mtxrun --generate`, ([suggested on texlive-2011-context-problem]( +https://tex.stackexchange.com/questions/53892/texlive-2011-context-problem)), can fix the +issue. diff --git a/actions/action.yml b/actions/action.yml new file mode 100644 index 0000000..5da9ab1 --- /dev/null +++ b/actions/action.yml @@ -0,0 +1,7 @@ +# action.yml +name: 'Texlive Build' +description: 'Build a document using texlive' +runs: + using: 'docker' + image: 'docker://ghcr.io/mszep/pandoc_resume:master' + entrypoint: '/entrypoint.sh' diff --git a/actions/entrypoint.sh b/actions/entrypoint.sh new file mode 100755 index 0000000..eaedd5c --- /dev/null +++ b/actions/entrypoint.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +sh -c make pdf diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..70cfa75 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '2' + +services: + + resume-make: + build: + context: . + dockerfile: ./.docker/resume.dockerfile + command: make + container_name: resume-make + image: resume-make + volumes: + - .:/home/app/resume diff --git a/markdown/cover_letter.md b/markdown/cover_letter.md new file mode 100644 index 0000000..b8264c0 --- /dev/null +++ b/markdown/cover_letter.md @@ -0,0 +1,25 @@ +Adriano Caloiaro +================ + +---- + +> I'm a lifetime builder of software; it's both an occupation and a hobby. + +> Also a lifetime spender of time in the outdoors: cycling, trail running, skiing, and everything in between. + +--- + +> Email: [work@adriano.fyi](mailto:work@adriano.fyi) + +> Website: [https://adriano.fyi](https://adriano.fyi) + +> Linkedin: [https://www.linkedin.com/in/adrianocaloiaro](https://www.linkedin.com/in/adrianocaloiaro) + +--- + +I'm a software engineer by trade who has been working in leadership for the last several years. My primary goal is to return to a technical individual contributor role where I can do every day what I love the most: build software. Since joining leadership I have been working on side projects in my free time to scratch my itch to build things, and I'd like to get back to building things professionally. + +I'm looking to join a team of engineers who are both passionate about what they do professionally, and reserve time in their lives for what they're passionate about unprofessionally. I'm looking for a team of pragmatic software engineers who are low on ego, high on execution, and enjoy building systems in a cross-disciplinary setting. + +I'm looking for the type of company that has a concrete plan to feasibly make people's lives better in some way. That can be achieved through means as simple as humane and thoughtful employee policies, or it could be as lofty its commercials plans to improve Earth's environment. What's important to me is that the company cares about its employees and its greater impact on the world. + diff --git a/markdown/resume.md b/markdown/resume.md new file mode 100644 index 0000000..154bf53 --- /dev/null +++ b/markdown/resume.md @@ -0,0 +1,134 @@ +Adriano Caloiaro +================ + +---- + +> I'm a lifetime builder of software; it's both an occupation and a hobby. + +> Also a lifetime spender of time in the outdoors: cycling, trail running, skiing, and everything in between. + +--- + +> Email: [work@adriano.fyi](mailto:work@adriano.fyi) + +> Website: [https://adriano.fyi](https://adriano.fyi) + +> Linkedin: [https://www.linkedin.com/in/adrianocaloiaro](https://www.linkedin.com/in/adrianocaloiaro) + +--- + +BKCoin Capital (2021-2022) +-------------------------- + +**CTO** + +I joined BKCoin Capital -- a digital assets hedge fund -- to build its technology stack and automate its manual trade operations. + +The prospect of working in a new industry interested me, and I've truly learned a lot while building much of what powers BKCoin Capital's trading operations today. + +In additional to leading the development of key technical infrastructure, I am also responsible for IT policy-setting, firm cybersecurity, and collaborating both internally and externally to devise technical solutions that serve our client's investments. + +--- + +Greenhouse Software (2016-2021) +--------------------------------- + +**Senior/Engineering Manager** + +As a Senior Engineering manager at Greenhouse Software I lead a number of product engineering teams. The engineering manager role at Greenhouse comprises technical leadership, stewarding the careers of team members, and playing a key role in the evolution of the greater R&D organization. + +Engineering managers are hands-on at Greenhouse, allowing me to keep my technical skills fresh, from designing systems to implementing them. + +As a manager, I also continued my role as mentor to both engineers and aspiring engineers within the company. I met weekly with mentees in the hope of helping my coworkers develop fulfilling software engineering careers. + +--- + +**Senior/Software Engineer** + +As a senior software engineer at Greenhouse I built many product features, acted as a project technical lead, and mentored both engineers and aspiring engineers in the craft of software development. + + +I also helped shape many of the product development and incident response processes in place today. + +I worked in multiple tech stacks + +- (Ruby) Greenhouse Recruiting's monolithic Ruby on Rails/React.js application +- (Ruby) Business intelligence connector (BIC), an in-house ETL system for making companies' talent acquisition data available in multiple data syncs such as AWS S3, Redshift, Postgres, and flat-file repositories. +- (iOS/Android) Greenhouse's first mobile applications powering recruiting operations "on the go" +- (Golang) Built Dochouse, Greenhouse's [document processing system](https://medium.com/in-the-weeds/slaying-the-monolith-3b7a017faf02) + +Myatt & Johnson Inc. (2012-2014) +-------------------------------- + +**Partner/Software Engineer** + +Myatt & Johnson was an R&D firm aiming to commercialize novel technologies for the development and treatment of cancer. + +Over the course of four years we completed the design and development of a high-performance, web-based visual analytics platform fulfilling the obligations of a Small Business Innovation Research (SBIR) grant awarded by the National Institute of Health. + +The platform aims to improve the visual exploration of high-throughput screening data by leveraging intuitive user interface design and highly optimized and parallelized analytics algorithms + +Nine Nine Solutions (2010-2012) +------------------------------- + +**Founder** + +I founded Nine Nine Solutions out of a desire to work on new and interesting problems. After gathering a small team of like-minded individuals with a passion for challenges, we grew the business from zero to profitability in a matter of months. + +Over the course of two years we delivered everything from mobile applications and cloud infrastructure migrations to a flight computer (hardware and software) for sport plane pilots. + +Other Roles (2004-2010) +----------------------- + +Prior to 2010 I predominantly worked in a mix of web development and Linux System Administration roles (today what we might call an "SRE"). They were fulfilling years full of learning important lessons that I benefit from every day. + + +Technical Experience +-------------------- +Open Source +: While I can hardly consider myself a powerful figure in the open source community, I've always done my best to contribute back to the projects from which I've benefited. I've contributed to dozens of open source projects over the years in ways mostly small, but gratifying to me. + +Publication +: At Myatt & Johnson Inc. we helped develop a novel statistical method with applications to chemotherapy (albeit applied to financial data here). While my focus for this work was primarily computational, it was a wonderful opportunity to work with individuals much smarter than me: [https://wires.onlinelibrary.wiley.com/doi/abs/10.1002/wics.1382](https://wires.onlinelibrary.wiley.com/doi/abs/10.1002/wics.1382) + +My Personal Projects +: These are some of my personal projects that I've really enjoyed hacking on. There are countless others that did not and will not ever see the light of day, some including multi-thousands of lines of code that turned out to be nothing but a fun learning experience. + + - **di-tui**. I have bad taste in music, but I'm almost listening to something non-vocal and electronic to drown out background noise. Since I love TUIs and CLIs, a built a terminal based player for `di.fm`: [https://github.com/acaloiaro/di-tui](https://github.com/acaloiaro/di-tui) + - **struct**. I use this little CLI with surprising frequency. It transforms unstructured textual data into structured `JSON` or `CSV` data; particularly useful in combination with `jq`: [https://github.com/acaloiaro/struct](https://github.com/acaloiaro/struct) + - **topk-taupth**. This is an algorithm I'm really proud of. It proved that highly concordant subpopulations of variables could be discovered in `O(n^2)` instead of `O(n^3)`. Applied to subpopulations of chemical compounds for chemotherapy, it could result in novel discoveries. Following the dissolution of Myatt & Johnson Inc. we decided to open source it: [https://github.com/acaloiaro/topk-taupath](https://github.com/acaloiaro/topk-taupath). + + +Reasonably Competent SRE +: I consider myself a reasonably competent SRE. I began my first official role as a "Linux System Administrator" in the early 2000s and continued to refine my system operation skills over the years to include tools such as + + - The major AWS services, and even more obscure ones like Cloud 9 + - Hashicorp Terraform, Nomad, Waypoint, and Vault + - General Linux operation + - Docker / Containerization + - Ansible + + +Programming Languages +: **Golang:** I list Golang first among my languages, not because it is the one with which I have the most experience (it's not), but because I find it the most pleasant to work in. It has strong typing, it strives for simplicity, and it makes it difficult to shoot oneself in the foot. I really enjoy working in Golang. + +: **Ruby:** I have always found Ruby to be a very productive language. I have fairly considerable experience applying it to real-world problems. While I have my occasional qualms with Ruby -- I do find it to be a nice language. + +: **Javascript**: Javascript is that language that one can hardly get through their career without. It solves a lot of problems, it's embedded in a lot of important places. It gets the job done. + +: **Java**: It may not be the most trendy language, but it was my first language that I used professionally. It will always have a special place in my heart and I'd be happy to work in it professionally any day. + +: **Python**: Python has some really nice packages for solving domain-specific problems, particularly in statistics. I know the language decently well, and won't hesitate to be productive in it. + +: **SQL**: The world wouldn't run without it. + +: I also have a working knowledge of: **C**, **C++**, **Dart**, **Perl**, **PHP**, **Scala**, **Swift** + +Education +--------- + +2004-2008 +: **BS, Computer Information Systems**; Stetson University + + + diff --git a/pdc-links-target-blank.lua b/pdc-links-target-blank.lua new file mode 100644 index 0000000..d4f492b --- /dev/null +++ b/pdc-links-target-blank.lua @@ -0,0 +1,15 @@ +-- Add target="_blank" attributes to all http links in a Pandoc document + +local function add_target_blank (link) + if string.match(link.target, '^http') then -- here .target == href attribute + link.attributes.target = '_blank' -- here .target == traget attribute + end + return link +end + +-- remove lines 4 and 6 to add target="_blank" to all links, not just http(s) + +return { + { Link = add_target_blank } +} + diff --git a/styles/chmduquesne.css b/styles/chmduquesne.css new file mode 100644 index 0000000..5d51767 --- /dev/null +++ b/styles/chmduquesne.css @@ -0,0 +1,90 @@ + diff --git a/styles/chmduquesne.tex b/styles/chmduquesne.tex new file mode 100644 index 0000000..132f24f --- /dev/null +++ b/styles/chmduquesne.tex @@ -0,0 +1,113 @@ +% Copyright 2013 Christophe-Marie Duquesne +% Copyright 2014 Mark Szepieniec +% +% ConText style for making a resume with pandoc. Inspired by moderncv. +% +% This CSS document is delivered to you under the CC BY-SA 3.0 License. +% https://creativecommons.org/licenses/by-sa/3.0/deed.en_US + +\startmode[*mkii] + \enableregime[utf-8] + \setupcolors[state=start] +\stopmode +$if(mainlang)$ +\mainlanguage[$mainlang$] +$endif$ + +\setupcolor[hex] +\definecolor[titlegrey][h=757575] +\definecolor[sectioncolor][h=397249] +\definecolor[rulecolor][h=9cb770] + +% Enable hyperlinks +\setupinteraction[state=start, color=sectioncolor] + +\setuppapersize [$if(papersize)$$papersize$$else$letter$endif$][$if(papersize)$$papersize$$else$letter$endif$] +\setuplayout [width=middle, height=middle, + backspace=20mm, cutspace=0mm, + topspace=10mm, bottomspace=20mm, + header=0mm, footer=0mm] + +%\setuppagenumbering[location={footer,center}] + +\setupbodyfont[11pt, courier] + +\setupwhitespace[medium] + +\setupblackrules[width=31mm, color=rulecolor] + +\setuphead[chapter] [style=\tfd] +\setuphead[section] [style=\tfd\bf, color=titlegrey, align=middle] +\setuphead[subsection] [style=\tfb\bf, color=sectioncolor, align=right, + before={\leavevmode\blackrule\hspace}] +\setuphead[subsubsection][style=\bf] + +$if(number-sections)$ +$else$ +\setuphead[chapter, section, subsection, subsubsection][number=no] +$endif$ + +%\setupdescriptions[width=10mm] + +\definedescription + [description] + [headstyle=bold, style=normal, + location=hanging, width=20mm, distance=14mm, margin=0cm] + +\setupitemize[autointro, packed] % prevent orphan list intro +\setupitemize[indentnext=no] + +\defineitemgroup[enumerate] +\setupenumerate[each][fit][itemalign=left,distance=.5em,style={\feature[+][default:tnum]}] + +\setupfloat[figure][default={here,nonumber}] +\setupfloat[table][default={here,nonumber}] + +\setuptables[textwidth=max, HL=none] +\setupxtable[frame=off,option={stretch,width}] + +\setupthinrules[width=15em] % width of horizontal rules + +\setupdelimitedtext + [blockquote] + [before={\setupalign[middle]}, + indentnext=no, + ] + +$if(toc)$ +\setupcombinedlist[content][list={$placelist$}] + +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ + +\starttext +$if(title)$ +\startalignment[center] + \blank[2*big] + {\tfd $title$} +$if(author)$ + \blank[3*medium] + {\tfa $for(author)$$author$$sep$\crlf $endfor$} +$endif$ +$if(date)$ + \blank[2*medium] + {\tfa $date$} +$endif$ + \blank[3*medium] +\stopalignment +$endif$ +$for(include-before)$ +$include-before$ +$endfor$ +$if(toc)$ +\placecontent +$endif$ + +$body$ + +$for(include-after)$ +$include-after$ +$endfor$ +\stoptext