~dricottone/blog

bd12a2fbd087ad63213370041065c3532548d93a — Dominic Ricottone 2 years ago d44855f
Automated generation of HTML CV based on Markdown CV
4 files changed, 159 insertions(+), 124 deletions(-)

M .gitignore
M Makefile
A scripts/cv_html.awk
D static/files/dominic-ricottone.html
M .gitignore => .gitignore +8 -3
@@ 1,10 1,15 @@
# hugo generation artifacts
public/
resources/
themes/
.hugo_build.lock

# script-generated files
static/files/dominic-ricottone.html
static/files/dominic-ricottone.pdf

# (la|odf)?tex compilation artifacts
**/*.aux
**/*.log
**/*.out
**/*.tex
**/*.pdf
**/*.tex


M Makefile => Makefile +2 -2
@@ 18,10 18,10 @@ static/files/dominic-ricottone.html: content/cv.md
	cat content/cv.md \
		| scripts/cv_html.awk > static/files/dominic-ricottone.html

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

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

sync: build

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

function end_section() {
  print "</ul>";
  in_section=0;
}

function end_subsection() {
  print "</li>";
  in_subsection=0;
}

function end_paragraph() {
  print "</p>";
  in_paragraph=0;
}

function end_bullets() {
  print "</ul>";
  in_bullets=0;
}

function end_subbullets() {
  print "</ul>";
  in_subbullets=0;
}

BEGIN {
  ignore=1;
  in_section=0;
  in_subsection=0;
  in_bullets=0;
  in_subbullets=0;
  in_paragraph=0;

  print "<!doctype html>";
  print "<html lang=\"en\">";
  print "<head>";
  print "<meta charset=\"utf-8\" name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
  print "<title>CV | Dominic Ricottone</title>";
  print "</head>";
  print "<body>";
  print "<main>";
  print "<h1>Dominic Ricottone</h1>";
}

{
  if (ignore==0) {

    gsub("&","\\&amp;");
    gsub("'","\\&rsquo;");

    if ($0 ~ /^## /) {
      if (in_paragraph==1) end_paragraph();
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
      if (in_subsection==1) end_subsection();
      if (in_section==1) end_section();

      print "<h2>" substr($0,4) "</h2>";
    }

    # start of a section (which is a pair of a paragraph and an unordered list)
    else if ($0 ~ /^### /) {
      if (in_paragraph==1) end_paragraph();
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
      if (in_subsection==1) end_subsection();
      if (in_section==1) end_section();

      print "<h3>" substr($0,5) "</h3>";
      in_section=1;
    }

    # start of a subsection (which is a list item)
    else if ($0 ~ /^ \+ #### /) {
      if (in_paragraph==1) end_paragraph();
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
      if (in_subsection==1) end_subsection();
      else print "<ul>";

      print "<li>";
      print "<h4>" substr($0,9) "</h4>";
      in_subsection=1;
    }

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

      if (in_bullets==0) print "<ul>";
      sub(/ +\+ /,"");
      print "<li>" $0 "</li>";
      in_bullets=1;
    }

    # subbullets (may be start of or a member of)
    else if ($0 ~ /^     \+ /) {
      if (in_paragraph==1) end_paragraph();

      if (in_subbullets==0) print "<ul>";
      sub(/ +\+ /,"");
      print "<li>" $0 "</li>";
      in_subbullets=1;
    }

    # blank line (end of paragraphs)
    else if ($0 ~ /^$/) {
      if (in_paragraph==1) end_paragraph();
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
    }

    # horizontal rules (also end of paragraphs)
    else if ($0 ~ /^-----+$/) {
      if (in_paragraph==1) end_paragraph();
      if (in_subbullets==1) end_subbullets();
      if (in_bullets==1) end_bullets();
      if (in_subsection==1) end_subsection();
      if (in_section==1) end_section();

      print "<hr />";
    }

    # paragraphs
    else {
      sub(/^ *\*/,"<em>");
      sub(/\*$/,"</em>");
      if (in_paragraph==0) print "<p>" $0;
      else print $0;
      in_paragraph=1;
    }
  }
  else if ($0 ~ /Ignore above content for PDF and HTML versions/) ignore=0;
}

END {
  if (in_paragraph==1) end_paragraph();
  if (in_subbullets==1) end_subbullets();
  if (in_bullets==1) end_bullets();
  if (in_subsection==1) end_subsection();
  if (in_section==1) end_section();

  print "</main>";
  print "</html>";
}


D static/files/dominic-ricottone.html => static/files/dominic-ricottone.html +0 -119
@@ 1,119 0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1">
<title>CV | Dominic Ricottone</title>
</head>
<body>
<main>
<div id="content">
<h1>Dominic Ricottone</h1>
<p>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.</p>
<hr>
<h1 id="employment">Employment</h1>
<h2 id="fors-marsh-group">Fors Marsh Group</h2>
<p><em>A market research company primarily working federal contracts. A majority of the time, I&rsquo;m working with the Department of Defense (ex. JAMRS&rsquo; Youth Poll survey) and Department of Commerce (ex. NIST&rsquo;s Manufacturing Extension Partnership survey). I hold a Common Access Card (CAC) in service of my military contracts.</em></p>
<ul>
<li>
<h3 id="data-management-analyst">Data Management Analyst</h3>
<p><em>February 2019 to present</em></p>
<ul>
<li>Cleaning and processing large (1M+) sample files, including international addresses</li>
<li>Validating multi-modal survey instruments and data with SPSS, Stata, and Python</li>
<li>Integrating web portals and backend databases through Python, R, SPSS, and Microsoft Access SQL</li>
<li>Managing protection of Personally Identifiable Information (PII) and Protected Health Information (PHI)</li>
</ul>
</li>
</ul>
<h2 id="the-harris-poll">The Harris Poll</h2>
<p><em>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.</em></p>
<ul>
<li>
<h3 id="junior-survey-programmer">Junior Survey Programmer</h3>
<p><em>November 2018 to February 2019</em></p>
<ul>
<li>Programming web surveys with the Decipher platform</li>
</ul>
</li>
<li>
<h3 id="data-processing-programmer">Data Processing Programmer</h3>
<p><em>September 2017 to November 2018</em></p>
<ul>
<li>Validating web survey instruments and data with SPSS and Quantum</li>
<li>Raking data to generate survey weights</li>
<li>Development of automation, especially syntax generation, through Python and Perl</li>
<li>Maintaining production software and Linux servers</li>
</ul>
</li>
</ul>
<h2 id="chris-harris--associates">Chris Harris &amp; Associates</h2>
<p><em>Political consultancy firm working with Democratic officials across Western New York. Specialties in campaign finance law and fundraising strategy.</em></p>
<ul>
<li>
<h3 id="campaign-finance-intern">Campaign Finance Intern</h3>
<p><em>August 2017 to September 2017</em></p>
<ul>
<li>Aggregating data from internal operations and external databases into actionable samples</li>
<li>Scraping contribution disclosures from government websites and PDF filings</li>
<li>Organizing fundraisers for elected officials including Monroe and Erie County Democratic Committee Chairs, Monroe County Sheriff Todd Baxter, and the late Congresswoman Louise Slaughter</li>
</ul>
</li>
</ul>
<h2 id="university-of-rochester">University of Rochester</h2>
<p><em>Research university established in 1850. The largest single employer in the Rochester area. I worked under the Record Verification and Workers&rsquo; Compensation teams.</em></p>
<ul>
<li>
<h3 id="human-resources-office-assistant">Human Resources Office Assistant</h3>
<p><em>May 2016 to May 2017</em></p>
<ul>
<li>Maintaining primary copies of all employment records</li>
<li>Managing flow of protected files throughout HR department</li>
<li>Administering multiple modernization and digitization projects</li>
</ul>
</li>
</ul>
<h2 id="cancer-care-of-western-new-york">Cancer Care of Western New York</h2>
<p><em>Cancer treatment facility based in Buffalo. I worked with Dr. Roehmholdt as he explored publishing a case report on penile melanoma.</em></p>
<ul>
<li>
<h3 id="research-assistant">Research Assistant</h3>
<p><em>May 2013 to August 2013</em></p>
<ul>
<li>Researching the academic literature on penile melanoma</li>
<li>Data entry of patient records</li>
<li>Scrubbing Protected Health Information (PHI) from patient records in preparation for sharing with external principal researchers</li>
</ul>
</li>
</ul>
<hr>
<h1 id="education">Education</h1>
<h2 id="university-of-rochester-1">University of Rochester</h2>
<ul>
<li>
<h3 id="ba-political-science-economics">B.A. Political Science, Economics</h3>
<p><em>August 2013 to May 2017</em></p>
<ul>
<li>Overall GPA of 3.43</li>
<li>Represented the student body for three years in varying levels of student government, including multiple executive appointments</li>
<li>Focuses in:
<ul>
<li>Mathematical modeling (Econometrics, Game Theory)</li>
<li>Interaction of government and the private sector (Public Finance, Political Economy, Health Economics, Economics of Globalization)</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="南山大学-nanzan-university">南山大学 (Nanzan University)</h2>
<ul>
<li>
<h3 id="intensive-japanese-language-studies-program">Intensive Japanese Language Studies Program</h3>
<p><em>January 2016 to May 2016</em></p>
<ul>
<li>Intensive study of the Japanese language in a Japanese university</li>
</ul>
</li>
</ul>
</div>
</main>
</html>