~dricottone/blog

ae09e17cc980df9e0a6ef2037121890deba3cf24 — Dominic Ricottone 2 years ago a2e1720
Automated generation of PDF CV based on Markdown CV
5 files changed, 220 insertions(+), 48 deletions(-)

M .gitignore
M Makefile
M content/cv.md
A scripts/cv.awk
D static/files/dominic-ricottone.pdf
M .gitignore => .gitignore +5 -0
@@ 2,4 2,9 @@ public/
resources/
themes/
.hugo_build.lock
**/*.aux
**/*.log
**/*.out
**/*.tex
**/*.pdf


M Makefile => Makefile +15 -9
@@ 1,21 1,27 @@
TARGET_USER=deploy
TARGET_HOST=deploy-aws2

.PHONY: dev
dev:
.PHONY: clean dev build sync

clean:
	rm -rf public resources themes
	rm -rf scripts/cv.aux scripts/cv.log scripts/cv.out scripts/cv.tex

static/files/dominic-ricottone.pdf: content/cv.md
	sed content/cv.md \
		-e 's/南山大学/\\begin{CJK}{UTF8}{min}&\\end{CJK}/' \
		| scripts/cv.awk > scripts/cv.tex
	cd scripts && pdflatex cv.tex
	mv scripts/cv.pdf static/files/dominic-ricottone.pdf

dev: static/files/dominic-ricottone.pdf
	hugo server --buildDrafts --bind 127.0.0.1 --port 8080

.PHONY: build
build: clean
build: clean static/files/dominic-ricottone.pdf
	hugo

.PHONY: sync
sync: build
	rsync --recursive --links --compress --delete \
		--chown=$(TARGET_USER):$(TARGET_USER) \
		public/ $(TARGET_HOST):/var/deploy/webroot/

.PHONY: clean
clean:
	rm -rf public resources themes


M content/cv.md => content/cv.md +19 -39
@@ 4,104 4,86 @@ site_title: true
toc: true
---


**Download:** [PDF](https://www.dominic-ricottone.com/files/dominic-ricottone.pdf) | [HTML](https://www.dominic-ricottone.com/files/dominic-ricottone.html)

**Contact:** [me@dominic-ricottone.com](mailto:me@dominic-ricottone.com)

Three years experience in survey research operations. Training in econometric analysis and quantitative methods. Self-trained programmer and systems administrator. Proficient in diverse set of programming languages and statistical software.

Five years experience in survey research operations.
Training in econometric analysis and quantitative methods.
Self-trained programmer and systems administrator.
Proficient in diverse set of programming languages and statistical software.

------


## Employment


### Fors Marsh Group

*A market research company primarily working federal contracts. A majority of the time, I'm working with the Department of Defense (ex. JAMRS' Youth Poll survey) and Department of Commerce (ex. NIST's Manufacturing Extension Partnership survey). I hold a Common Access Card (CAC) in service of my military contracts.*
*A market research company primarily working federal contracts.
A majority of the time, I'm working with
the Department of Defense (ex. JAMRS' Youth Poll survey)
and
Department of Commerce (ex. NIST's Manufacturing Extension Partnership survey).
I hold a Common Access Card (CAC) in service of my military contracts.*

 + #### Data Management Analyst

   *February 2019 to present*

   + Cleaning and processing large (1M+) sample files, including international addresses
   + Validating multi-modal survey instruments and data with SPSS, Stata, and Python
   + Integrating web portals and backend databases through Python, R, SPSS, and Microsoft Access SQL
   + Managing protection of Personally Identifiable Information (PII) and Protected Health Information (PHI)


### The Harris Poll

*Market research company specializing in brand evaluation and concept testing. A decades-old firm entering into public polling and political reporting in collaboration with Harvard CAPS and Yahoo News.*
*Market research company specializing in brand evaluation and concept testing.
A decades-old firm entering into public polling and political reporting in collaboration with Harvard CAPS and Yahoo News.*

 + #### Junior Survey Programmer

   *November 2018 to February 2019*

   + Programming web surveys with the Decipher platform

 + #### Data Processing Programmer

   *September 2017 to November 2018*

   + Validating web survey instruments and data with SPSS and Quantum
   + Raking data to generate survey weights
   + Development of automation, especially syntax generation, through Python and Perl
   + Maintaining production software and Linux servers


### Chris Harris & Associates

*Political consultancy firm working with Democratic officials across Western New York. Specialties in campaign finance law and fundraising strategy.*
*Political consultancy firm working with Democratic officials across Western New York.
Specialties in campaign finance law and fundraising strategy.*

 + #### Campaign Finance Intern

   *August 2017 to September 2017*

   + Aggregating data from internal operations and external databases into actionable samples
   + Scraping contribution disclosures from government websites and PDF filings
   + Organizing fundraisers for elected officials including Monroe and Erie County Democratic Committee Chairs, Monroe County Sheriff Todd Baxter, and the late Congresswoman Louise Slaughter


### University of Rochester

*Research university established in 1850. The largest single employer in the Rochester area. I worked under the Record Verification and Workers' Compensation teams.*
*Research university established in 1850.
The largest single employer in the Rochester area.
I worked under the Record Verification and Workers' Compensation teams.*

 + #### Human Resources Office Assistant

   *May 2016 to May 2017*

   + Maintaining primary copies of all employment records
   + Managing flow of protected files throughout HR department
   + Administering multiple modernization and digitization projects


### Cancer Care of Western New York

*Cancer treatment facility based in Buffalo. I worked with Dr. Roehmholdt as he explored publishing a case report on penile melanoma.*
*Cancer treatment facility based in Buffalo.
I worked with Dr. Roehmholdt as he explored publishing a case report on penile melanoma.*

 + #### Research Assistant

   *May 2013 to August 2013*

   + Researching the academic literature on penile melanoma
   + Data entry of patient records
   + Scrubbing Protected Health Information (PHI) from patient records in preparation for sharing with external principal researchers


------


## Education

### University of Rochester

 + #### B.A. Political Science, Economics

   *August 2013 to May 2017*

   + Overall GPA of 3.43
   + Represented the student body for three years in varying levels of student government, including multiple executive appointments
   + Focuses in:


@@ 111,8 93,6 @@ Three years experience in survey research operations. Training in econometric an
### 南山大学 (Nanzan University)

 + #### Intensive Japanese Language Studies Program

   *January 2016 to May 2016*

   + Intensive study of the Japanese language in a Japanese university


A scripts/cv.awk => scripts/cv.awk +181 -0
@@ 0,0 1,181 @@
#!/bin/awk -f

function end_introduction() {
  print "\\end{minipage}";
  in_introduction=0;
}

function end_subsubsection() {
  print "\\end{minipage}";
  in_subsubsection=0;
}

function end_paragraph() {
  in_paragraph=0;
}

function end_description() {
  #print "\\vspace{.1in}\\hfill\\begin{minipage}{\\dimexpr\\textwidth-.25in}";
  in_description=0;
}

function invalid_end_description() {
  print "%WARNING: this description was not properly terminated";
  print "}";
  #print "\\vspace{.1in}\\hfill\\begin{minipage}{\\dimexpr\\textwidth-.25in}";
  in_description=0;
}

function end_bullets() {
  print "\\end{itemize}";
  in_bullets=0;
}

function end_subbullets() {
  print "\t\\end{itemize}";
  in_subbullets=0;
}

BEGIN {
  ignore=1;
  in_introduction=0;
  in_subsection=0;
  in_subsubsection=0;
  in_paragraph=0;
  in_bullets=0;
  in_subbullets=0;

  print "\\documentclass[12pt]{article}";
  print "\\usepackage[letterpaper, total={7.5in,10in}, centering]{geometry}";
  print "\\usepackage[compact]{titlesec} % compact headers";
  print "\\pagenumbering{gobble} % suppresses pagination";
  print "\\setlength{\\parindent}{0pt} % suppressed paragraph indent";
  print "\\usepackage{enumitem} % exports macros for below";
  print "\\setitemize{topsep=0pt,parsep=0pt,partopsep=0pt} % compact itemize";
  print "\\usepackage{CJKutf8}";
  print "\\begin{document}";
  print "\\section*{Dominic Ricottone}";
  print "\\vspace{.05in}";
}
{
  if (ignore==0) {

    gsub("&","\\\\&");

    # start of a subsection
    if ($0 ~ /^## /) {
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
      if (in_description==1) invalid_end_description();
      if (in_paragraph==1) end_paragraph();
      if (in_subsubsection==1) end_subsubsection();

      print "\\subsection*{" substr($0,4) "}";
      in_subsection=1;
    }

    # start of a subsubsection
    else if ($0 ~ /^### /) {
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
      if (in_description==1) invalid_end_description();
      if (in_paragraph==1) end_paragraph();

      # only for 2nd+ subsubsection
      if (in_subsubsection==1) {
        end_subsubsection();
        print "\\vspace{.05in}";
      }

      print "\\subsubsection*{" substr($0,5) "}";
      in_subsubsection=1;
    }

    # start of a paragraph
    else if ($0 ~ /^ \+ #### /) {
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
      if (in_description==1) invalid_end_description();
      if (in_paragraph==1) end_paragraph();
      else print "\\vspace{.1in}\\hfill\\begin{minipage}{\\dimexpr\\textwidth-.25in}";

      print "\\paragraph*{" substr($0,9) "}";
      in_paragraph=1;
    }

    # start of a description
    else if ($0 ~ /^\*/) {
      # if description is a one-liner
      if ($0 ~ /\*$/) {
        gsub(/\*/,"");
        print "\\textit{" $0 "}";
        end_description();
      }
      else {
        sub(/\*/,"");
        print "\\textit{" $0;
        in_description=1;
      }
    }

    # end of a multi-line description
    else if (in_description==1 && $0 ~ /\*$/) {
      sub(/\*/,"");
      print $0 "}";
      end_description();
    }

    # date range (always a one-liner)
    else if ($0 ~ /^ +\*.+\*/) {
      gsub(/ *\*/,"");
      sub(/to/,"---");
      print "\\textit{" $0 "}";
      print "\\vspace{.05in}";
    }

    # bullets (may be start of or a member of)
    else if ($0 ~ /^   \+ /) {
      if (in_subbullets==1) end_subbullets();

      if (in_bullets==0) print "\\begin{itemize}";
      sub(/ +\+ /,"");
      print "\t\\item " $0;
      in_bullets=1;
    }

    # subbullets (may be start of or a member of)
    else if ($0 ~ /^     \+ /) {
      if (in_subbullets==0) print "\t\\begin{itemize}";
      sub(/ +\+ /,"");
      print "\t\t\\item " $0;
      in_subbullets=1;
    }

    # blank line (can be an end of certain sections)
    else if ($0 ~ /^$/) {
      if (in_introduction==1) end_introduction();
      if (in_description==1) invalid_end_description();
      if (in_bullets==1) end_bullets();
      if (in_subbullets==1) end_subbullets();

      print $0;
    }

    else if ($0 !~ /^-----+$/) {
      if (in_subsection==0 && in_introduction==0) {
        print "\\hfill\\begin{minipage}{\\dimexpr\\textwidth-.25in}";
        in_introduction=1;
      }

      print $0;
    }
  }
  else if ($0 ~ /Contact:/) ignore=0;
}

END {
  if (in_description==1) invalid_end_description();
  if (in_bullets==1) end_bullets();
  if (in_subsubsection==1) end_subsubsection();
  print "\\end{document}";
}

D static/files/dominic-ricottone.pdf => static/files/dominic-ricottone.pdf +0 -0