summaryrefslogtreecommitdiff
path: root/download
diff options
context:
space:
mode:
authormattkae <mattkae@protonmail.com>2022-10-22 17:15:20 -0400
committermattkae <mattkae@protonmail.com>2022-10-22 17:15:20 -0400
commit9032a5ce5d55ec392b1328ac6d8b28a546405074 (patch)
treed1f210854293327ff752cd97925e8f9a7fd1851c /download
parent0b48323783a37059c9af13a5bda403465b1fea14 (diff)
Updated resume, and now it automatically generates
Diffstat (limited to 'download')
-rw-r--r--download/build.js38
-rw-r--r--download/cv.pdfbin75008 -> 74267 bytes
-rw-r--r--download/resume_dl.css154
-rw-r--r--download/resume_dl.html308
4 files changed, 344 insertions, 156 deletions
diff --git a/download/build.js b/download/build.js
new file mode 100644
index 0000000..7e18973
--- /dev/null
+++ b/download/build.js
@@ -0,0 +1,38 @@
+
+
+const fs = require('fs');
+const childProcess = require('child_process');
+
+const resumeHtml = fs.readFileSync('../resume.html').toString();
+const resumeCss = fs.readFileSync('./resume_dl.css').toString();
+
+function getRidofTagsBetween(start, end, html) {
+ let si = newHtml.indexOf(start);
+ let ei = newHtml.indexOf(end, si) + end.length;
+ return html.substring(0, si) + newHtml.substring(ei);
+}
+
+const newHeader = `
+ <head>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <meta charset="UTF-8" />
+ <script src="https://twemoji.maxcdn.com/2/twemoji.min.js?11.2"></script>
+ <script>window.onload = function () { twemoji.parse(document.body);}</script>
+<style>
+${resumeCss}
+</style>
+</head>
+`
+
+const startHead = resumeHtml.indexOf('<head>');
+const endHead = resumeHtml.indexOf('</head>') + '</head>'.length;
+
+let newHtml = resumeHtml.substring(0, startHead) + newHeader + resumeHtml.substring(endHead);
+
+newHtml = getRidofTagsBetween('<header>', '</header>', newHtml);
+newHtml = getRidofTagsBetween(`<div id='resume_button_container'>`, '</div>', newHtml);
+
+fs.writeFileSync('./resume_dl.html', newHtml);
+
+childProcess.exec('wkhtmltopdf --encoding \'UTF-8\' ./resume_dl.html cv.pdf ')
diff --git a/download/cv.pdf b/download/cv.pdf
index 25d5b86..a81cea8 100644
--- a/download/cv.pdf
+++ b/download/cv.pdf
Binary files differ
diff --git a/download/resume_dl.css b/download/resume_dl.css
new file mode 100644
index 0000000..b9d277e
--- /dev/null
+++ b/download/resume_dl.css
@@ -0,0 +1,154 @@
+html {
+ overflow-y: overlay;
+}
+
+body {
+ font-size: 14px !important;
+ padding-top: 72px;
+ padding-left: 48px;
+ padding-right: 48px;
+ font-family: Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;
+}
+
+header {
+ padding-bottom: 1rem;
+}
+
+#actions_container {
+ padding-bottom: 1rem;
+
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+}
+
+#resume {
+ position: relative;
+ text-align: left;
+ background-color: white;
+ color: black;
+ line-height: 1.2rem;
+ padding-bottom: 1rem;
+}
+
+#resume_header {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+}
+
+#resume_header > h1 {
+ font-size: 24px;
+ padding: 0;
+ margin: 0;
+ font-weight: 500;
+}
+
+#resume_header_contact {
+ font-size: 12px;
+}
+
+#resume_header_contact span {
+ margin-right: 0.5rem;
+ margin-left: 0.5rem;
+}
+
+img.emoji {
+ height: 1em;
+ width: 1em;
+ margin: 0 .05em 0 .1em;
+ vertical-align: -0.1em;
+}
+
+#resume_header_contact i {
+ margin-right: 0.25rem;
+ font-style: normal;
+}
+
+.resume_section {
+ width: 100%;
+ text-align: left;
+}
+
+.resume_section > h2 {
+ font-size: 18px !important;
+ font-variant: small-caps;
+ font-weight: bold;
+ padding: 0;
+ margin: 0;
+ padding: 10px;
+ background-color: #2E4C6D;
+ color: white;
+}
+
+.resume_section_content {
+ padding: 0.5rem;
+}
+
+.skill-section {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.skill-section > div {
+ width: 75%;
+}
+
+.experience-header > div {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.experience-item li {
+ width: 100%;
+}
+
+.experience-tech {
+ font-size: 14px;
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+}
+
+.experience-tech > svg {
+ margin-right: 8px;
+ width: 20px;
+ height: 20px;
+}
+
+
+/** Web-only **/
+#resume_button_container {
+ width: 100%;
+ text-align: right;
+ margin-right: 1rem;
+ margin-bottom: 1rem;
+
+}
+
+#resume_button_container > button {
+ border: none;
+ background-color: transparent;
+ font-size: 20px;
+}
+
+#resume_button_container > button:hover {
+ cursor: pointer;
+ opacity: 0.8;
+}
+
+#resume.resume_fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ padding: 2rem;
+ width: calc(100vw - 4rem);
+ height: calc(100vh - 4rem);
+ overflow: auto;
+}
diff --git a/download/resume_dl.html b/download/resume_dl.html
index 36d57bf..aafe63d 100644
--- a/download/resume_dl.html
+++ b/download/resume_dl.html
@@ -1,169 +1,174 @@
<html>
- <head>
+
+ <head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta charset="UTF-8" />
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?11.2"></script>
<script>window.onload = function () { twemoji.parse(document.body);}</script>
- <style>
- html {
- overflow-y: overlay;
- }
+<style>
+html {
+ overflow-y: overlay;
+}
- body {
- font-size: 14px !important;
- padding-top: 72px;
- padding-left: 48px;
- padding-right: 48px;
- font-family: Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;
- }
+body {
+ font-size: 14px !important;
+ padding-top: 72px;
+ padding-left: 48px;
+ padding-right: 48px;
+ font-family: Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;
+}
- header {
- padding-bottom: 1rem;
- }
+header {
+ padding-bottom: 1rem;
+}
- #actions_container {
- padding-bottom: 1rem;
-
- display: flex;
- flex-direction: row;
- justify-content: flex-end;
- }
+#actions_container {
+ padding-bottom: 1rem;
+
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+}
- #resume {
- position: relative;
- text-align: left;
- background-color: white;
- color: black;
- line-height: 1.2rem;
- padding-bottom: 1rem;
- }
+#resume {
+ position: relative;
+ text-align: left;
+ background-color: white;
+ color: black;
+ line-height: 1.2rem;
+ padding-bottom: 1rem;
+}
- #resume_header {
- width: 100%;
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: space-between;
- }
+#resume_header {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+}
- #resume_header > h1 {
- font-size: 24px;
- padding: 0;
- margin: 0;
- font-weight: 500;
- }
+#resume_header > h1 {
+ font-size: 24px;
+ padding: 0;
+ margin: 0;
+ font-weight: 500;
+}
- #resume_header_contact {
- font-size: 12px;
- }
+#resume_header_contact {
+ font-size: 12px;
+}
- #resume_header_contact span {
- margin-right: 0.5rem;
- margin-left: 0.5rem;
- }
+#resume_header_contact span {
+ margin-right: 0.5rem;
+ margin-left: 0.5rem;
+}
- img.emoji {
- height: 1em;
- width: 1em;
- margin: 0 .05em 0 .1em;
- vertical-align: -0.1em;
- }
+img.emoji {
+ height: 1em;
+ width: 1em;
+ margin: 0 .05em 0 .1em;
+ vertical-align: -0.1em;
+}
- #resume_header_contact i {
- margin-right: 0.25rem;
- font-style: normal;
- }
+#resume_header_contact i {
+ margin-right: 0.25rem;
+ font-style: normal;
+}
- .resume_section {
- width: 100%;
- text-align: left;
- }
+.resume_section {
+ width: 100%;
+ text-align: left;
+}
- .resume_section > h2 {
- font-size: 18px !important;
- font-variant: small-caps;
- font-weight: bold;
- padding: 0;
- margin: 0;
- padding: 10px;
- background-color: #2E4C6D;
- color: white;
- }
+.resume_section > h2 {
+ font-size: 18px !important;
+ font-variant: small-caps;
+ font-weight: bold;
+ padding: 0;
+ margin: 0;
+ padding: 10px;
+ background-color: #2E4C6D;
+ color: white;
+}
- .resume_section_content {
- padding: 0.5rem;
- }
+.resume_section_content {
+ padding: 0.5rem;
+}
- .skill-section {
- width: 100%;
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- }
+.skill-section {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
- .skill-section > div {
- width: 75%;
- }
+.skill-section > div {
+ width: 75%;
+}
- .experience-header > div {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- }
+.experience-header > div {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
- .experience-item li {
- width: 100%;
- }
+.experience-item li {
+ width: 100%;
+}
- .experience-tech {
- font-size: 14px;
- width: 100%;
- display: flex;
- flex-direction: row;
- justify-content: flex-start;
- }
+.experience-tech {
+ font-size: 14px;
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+}
- .experience-tech > svg {
- margin-right: 8px;
- width: 20px;
- height: 20px;
- }
+.experience-tech > svg {
+ margin-right: 8px;
+ width: 20px;
+ height: 20px;
+}
- /** Web-only **/
- #resume_button_container {
- width: 100%;
- text-align: right;
- margin-right: 1rem;
- margin-bottom: 1rem;
-
- }
+/** Web-only **/
+#resume_button_container {
+ width: 100%;
+ text-align: right;
+ margin-right: 1rem;
+ margin-bottom: 1rem;
+
+}
- #resume_button_container > button {
- border: none;
- background-color: transparent;
- font-size: 20px;
- }
+#resume_button_container > button {
+ border: none;
+ background-color: transparent;
+ font-size: 20px;
+}
- #resume_button_container > button:hover {
- cursor: pointer;
- opacity: 0.8;
- }
+#resume_button_container > button:hover {
+ cursor: pointer;
+ opacity: 0.8;
+}
+
+#resume.resume_fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ padding: 2rem;
+ width: calc(100vw - 4rem);
+ height: calc(100vh - 4rem);
+ overflow: auto;
+}
+
+</style>
+</head>
- #resume.resume_fullscreen {
- position: fixed;
- top: 0;
- left: 0;
- padding: 2rem;
- width: calc(100vw - 4rem);
- height: calc(100vh - 4rem);
- overflow: auto;
- }
- </style>
- </head>
<body>
+
<section id='resume'>
+
<header id="resume_header">
<h1>Matthew Kosarek</h1>
@@ -171,7 +176,7 @@
<span><i>πŸ–₯️</i> Computer Programmer</span>
<span><i>☎️</i> +1-201-400-2699</span>
<span><i>πŸ“§</i> mkosare1@gmail.com</span>
- <span><i>πŸ‡ΊπŸ‡Έ</i> US Citizen</span>
+ <span><i>πŸ‡ΊπŸ‡Έ</i> United States Citizen</span>
</div>
</header>
@@ -179,13 +184,13 @@
<h2>Skills</h2>
<div class="resume_section_content">
<div class="skill-section">
- <b>Languages & Frameworks</b><div>C/C++, C#, TypeScript/JavaScript, React, HTML & CSS, Java, OpenGL, ASP.NET, Linux, LaTeX</div>
+ <b>Languages & Frameworks</b><div>C, C++, C#, ASP.NET, JavaScript, TypeScript, React, HTML, CSS, Java, OpenGL</div>
</div>
<div class="skill-section">
- <b>Tools</b><div>git, npm, Webpack, Visual Studio Professional/Code, Unity, AWS, Emacs, LaTeX</div>
+ <b>Tools</b><div>git, Linux, npm, Webpack, Unity, AWS, Emacs, Visual Studio Professional</div>
</div>
</div>
- </section>
+ </section>
<section class='resume_section'>
<h2>Experience</h2>
@@ -211,22 +216,22 @@
</div>
<ul>
<li>
- Led a team in the development of client-facing industrial software applications including cobot palletizers, cartesian palletizers, and CNC machines
+ Led a team in the development of industrial software applications including robot palletizers, cartesian palletizers, and CNC machines
</li>
<li>
- Developed and shipped a number of time-sensitive client projects
+ Developed and shipped a number of client projects which are now being used everyday in factories
</li>
<li>
- Architected and implemented the core infrastructure required for the development of client-facing applications
+ Architected and developed a framework for all future client projects
</li>
<li>
- Interacted extensively with other teams to align on business goals and meet deadlines
+ Interacted with other teams on a daily basis to align on business goals and meet deadlines
</li>
<li>
- Planned and organized projects and tasks for the team including long-term vision and day-to-day goals
+ Planned, scoped, and organized daily tasks and long-term projects
</li>
<li>
- Individually contributed across many facets of the company, from firmware to the engine of a code-free programming languge to the application-level
+ Individually contributed across many levels of the codebase, from firmware to the application layer
</li>
</ul>
</div>
@@ -263,12 +268,6 @@
<li>
Implemented game features on all parts of the stack, including tools, Unity client, and game servers
</li>
- <li>
- Met weekly with various disciplines to discuss ways to improve the UX of the company's tools
- </li>
- <li>
- Initiated company-wide React and TypeScript code sharing via a private npm repository
- </li>
</ul>
</div>
<div class="experience-item">
@@ -333,7 +332,7 @@
</div>
<ul>
<li>
- Developed a framework for profiling the game systems in <i>Dropzone</i>
+ Developed a profiling framework for the game systems in <i>Dropzone</i>
</li>
</ul>
</div>
@@ -346,7 +345,7 @@
<div class="experience-item">
<div class="experience-header">
<div>
- <span><b>Johns Hopkins University</b></span>
+ <span><b>BSc Computer Engineering at Johns Hopkins University</b></span>
<span>Baltimore, MD</span>
</div>
<div>
@@ -355,10 +354,7 @@
</div>
<ul>
<li>
- B.S. in Computer Engineering (Magna Cum Laude)
- </li>
- <li>
- 3.53 GPA
+ 3.53 GPA (Magna Cum Laude)
</li>
<li>
<i>Relevant Coursework</i>: Computer Graphics, Object Oriented Software Engineering, Linear Algebra, Video Game Engines and Design, Operating Systems, Data Structures, Introduction to Renewable Energy Engineering