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("&","\\&");
+ gsub("'","\\’");
+
+ 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’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.</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 & 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’ 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>