diff --git a/README.md b/README.md index 8ce588f..9d6c99f 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,4 @@ This is the code for my personal website and resume. The main branch of this rep ## License -I reserve all rights to the code in this repository except `resume.tex` and `resume.sty`. Please do not copy this code without my permission. If you would like permission, feel free to email me: mail@nsood.in. - -The license for `resume.tex` and `resume.sty` is in a comment header in those files. +I reserve all rights to the code in this repository. Please do not copy this code without my permission. If you would like permission, feel free to email me: mail@nsood.in. diff --git a/coverletter.pdf b/coverletter.pdf deleted file mode 100644 index 3d3e26d..0000000 Binary files a/coverletter.pdf and /dev/null differ diff --git a/coverletter.tex b/coverletter.tex deleted file mode 100644 index 0f33a14..0000000 --- a/coverletter.tex +++ /dev/null @@ -1,44 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% LaTeX Template: Curriculum Vitae -% -% Original template from: http://www.howtotex.com/ -% Modified for use by Naman Sood. -% -% Feel free to distribute this template, but please keep the -% referral to HowToTeX.com. -% -% HowToTeX seems to be dead, but the unmodified template can -% be found at: -% https://www.overleaf.com/latex/templates/your-new-cv/xqzhcmqkqrtw -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\documentclass{article} -\usepackage[margin=0.65in,top=0.3in,bottom=0.5in]{geometry} -\usepackage{resume} -\setlength\parindent{0pt} - -\begin{document} - -\MyName{Naman Sood} -{\hfill \href{mailto:mail@nsood.in}{mail@nsood.in} | - \href{https://www.nsood.in}{www.nsood.in} | - \href{https://linkedin.com/in/namansood}{linkedin.com/in/namansood} | - \href{https://github.com/namansood}{github.com/namansood} -\hfill} - -\vspace{12pt} -\rule{7.2in}{1pt} - - -\setlength\parskip{12pt plus 4pt minus 4pt} - -\textbf{Company Name, Inc.} \hfill Octuary 42nd, 1984 \\ \emph{34 Example Way N \\ Dunnsburg, OFF 1A3 5B7} - -To the recruiting team at Company Name, - -Please hire me. - -Yours sincerely,\\ -Naman Sood. - - -\end{document} diff --git a/css/resume.css b/css/resume.css new file mode 100644 index 0000000..828602e --- /dev/null +++ b/css/resume.css @@ -0,0 +1,244 @@ +@charset "UTF-8"; +*, *:before, *:after { + box-sizing: border-box; +} + +body { + margin: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +button#print { + margin: 2rem auto; + border: none; + font-size: 9pt; + font-family: "IBM Plex Sans"; + background: #eee; + color: #425580; + padding: 0.5rem 1rem; + border-radius: 0.2rem; + box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.1), 0 0.1rem 0.2rem rgba(0, 0, 0, 0.1); +} +button#print:hover { + box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.1), 0 0.1rem 0.2rem rgba(0, 0, 0, 0.2); +} +button#print:active { + background: #e0e0e0; +} +button#print i { + font-size: 7pt; + margin-right: 3pt; +} + +#page { + width: 8.5in; + height: 11in; + margin: 0 auto 4rem; + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1), 0 0 0.5rem rgba(0, 0, 0, 0.2); + font-family: "IBM Plex Sans", sans-serif; + font-weight: 400; + font-size: 9pt; + line-height: 14pt; + background-size: 14pt 14pt; + background-repeat: repeat; + background-position: center top; +} +#page .page-contents { + padding: 14pt 42pt 28pt; +} + +@media print { + #page { + box-shadow: none; + height: auto; + width: auto; + margin: 0; + } + + button#print { + display: none; + } +} +@page { + margin: 0; +} +p { + margin: 0; +} + +h1.name { + margin: 0; + text-align: center; + font-size: 24pt; + line-height: 21pt; + padding-top: 7pt; + height: 28pt; + font-weight: 600; +} + +nav.links { + display: flex; + justify-content: center; + align-items: stretch; + padding-top: 7pt; + height: 21pt; +} +nav.links a { + display: block; + color: inherit; + display: block; + padding: 0 7pt; + height: 14pt; + line-height: 14pt; + text-decoration: none; + font-size: 9pt; +} + +a { + color: inherit; + text-decoration: none; +} +a i.fa { + font-size: 6pt; + margin: 0 0.5pt -1.5pt; + line-height: 9.24pt; + position: relative; + width: 9.24pt; + height: 9.24pt; +} +a i.fa:before { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +h2 { + margin: 0; + position: relative; + padding-top: 7pt; + line-height: 14pt; + height: 21pt; + font-size: 13pt; + font-weight: 900; + display: block; + padding-right: 0; + align-self: flex-start; + width: 100%; +} +h2:before { + content: ""; + position: absolute; + bottom: -2pt; + left: 0; + width: 100%; + box-sizing: content-box; + height: 0; + border-top: 1.5pt solid #8ecfd5; + z-index: -1; +} + +h3 { + margin: 0; + font-size: 11pt; +} +h3 a i.fa { + font-size: 7pt; + margin: 0 0 -1.5pt 3pt; +} + +h4 { + margin: 0; + font-style: italic; + font-weight: 400; + font-size: 9pt; + display: flex; + width: 100%; + justify-content: space-between; +} + +strong { + font-weight: 600; +} + +section { + display: flex; + flex-direction: column; +} + +section.skills p { + height: 14pt; +} +section.skills p:first-of-type { + margin-top: 7pt; +} +section.skills strong { + display: inline-block; + width: 80pt; +} + +ul { + margin: 0; + padding: 0 0 0 14pt; +} +ul li { + display: block; + position: relative; +} +ul li:before { + content: "·"; + height: 14pt; + width: 14pt; + display: block; + position: absolute; + top: 0; + left: -14pt; + text-align: center; + line-height: 14pt; + font-weight: bold; + font-size: 12pt; +} + +section.experience article.work-exp { + position: relative; + margin: 7pt 0 0; +} + +aside.date { + position: absolute; + right: 0; + top: 0; + height: 14pt; + line-height: 14pt; +} + +aside.languages { + color: #444; + font-style: italic; + font-weight: 400; +} + +section.projects article.project { + height: 28pt; +} +section.projects article.project:first-of-type { + margin-top: 7pt; +} +section.projects div.project-title { + display: flex; + align-items: baseline; + height: 14pt; +} +section.projects div.project-title h3 { + padding-right: 3pt; +} + +section.education article.institution { + position: relative; + margin-top: 7pt; +} + +/*# sourceMappingURL=resume.css.map */ diff --git a/css/resume.scss b/css/resume.scss new file mode 100644 index 0000000..30ad680 --- /dev/null +++ b/css/resume.scss @@ -0,0 +1,276 @@ +*, *:before, *:after { + box-sizing: border-box; +} + +body { + margin: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +$ls: 14pt; + +button#print { + margin: 2rem auto; + border: none; + font-size: 9pt; + font-family: 'IBM Plex Sans'; + background: #eee; + color: #425580; + padding: 0.5rem 1rem; + border-radius: 0.2rem; + box-shadow: 0 0.2rem 0.5rem rgba(0,0,0,0.1), 0 0.1rem 0.2rem rgba(0,0,0,0.1); + + &:hover { + box-shadow: 0 0.2rem 0.5rem rgba(0,0,0,0.1), 0 0.1rem 0.2rem rgba(0,0,0,0.2); + } + + &:active { + background: #e0e0e0; + } + + i { + font-size: 7pt; + margin-right: 3pt; + } +} + +#page { + width: 8.5in; + height: 11in; + margin: 0 auto 4rem; + box-shadow: 0 0.25rem 0.75rem rgba(0,0,0,0.1), 0 0 0.5rem rgba(0,0,0,0.2); + font-family: 'IBM Plex Sans', sans-serif; + font-weight: 400; + font-size: 9pt; + line-height: $ls; + $fade: #ccc; + $main: #aaa; + //background-image: linear-gradient(white 45%, $fade 45%, $fade 50%, white 50%, white 95%, $main 95%); + background-size: $ls $ls; + background-repeat: repeat; + background-position: center top; + + .page-contents { + padding: $ls 3*$ls 2*$ls; + } +} + +@media print { + #page { + box-shadow: none; + height: auto; + width: auto; + margin: 0; + } + + button#print { + display: none; + } +} + +// print margins +@page { + margin: 0; +} + +p { + margin: 0; +} + +h1.name { + margin: 0; + text-align: center; + font-size: 24pt; + line-height: 1.5*$ls; + padding-top: 0.5*$ls; + height: 2*$ls; + font-weight: 600; +} + +nav.links { + display: flex; + justify-content: center; + align-items: stretch; + padding-top: 0.5*$ls; + height: 1.5*$ls; + + a { + display: block; + color: inherit; + display: block; + padding: 0 0.5*$ls; + height: $ls; + line-height: $ls; + text-decoration: none; + font-size: 9pt; + } +} + +a { + color: inherit; + text-decoration: none; + + i.fa { + font-size: 6pt; + margin: 0 0.5pt -1.5pt; + line-height: 0.66*$ls; + position: relative; + width: 0.66*$ls; + height: 0.66*$ls; + + &:before { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } +} + +h2 { + margin: 0; + position: relative; + padding-top: 0.5*$ls; + line-height: $ls; + height: 1.5*$ls; + font-size: 13pt; + font-weight: 900; + display: block; + padding-right: 0; + align-self: flex-start; + width: 100%; + + &:before { + content: ''; + position: absolute; + bottom: -2pt; + left: 0; + width: 100%; + box-sizing: content-box; + //height: 1.5pt; + height: 0; + border-top: 1.5pt solid #8ecfd5; + z-index: -1; + } +} + +h3 { + margin: 0; + font-size: 11pt; + + a i.fa { + font-size: 7pt; + margin: 0 0 -1.5pt 3pt; + } +} + +h4 { + margin: 0; + font-style: italic; + font-weight: 400; + font-size: 9pt; + display: flex; + width: 100%; + justify-content: space-between; +} + +strong { + font-weight: 600; +} + +section { + display: flex; + flex-direction: column; +} + +section.skills { + p { + height: $ls; + } + p:first-of-type { + margin-top: 0.5*$ls; + } + strong { + display: inline-block; + width: 80pt; + } +} + +ul { + margin: 0; + padding: 0 0 0 $ls; + + li { + display: block; + position: relative; + &:before { + content: '·'; + height: $ls; + width: $ls; + display: block; + position: absolute; + top: 0; + left: -$ls; + text-align: center; + line-height: $ls; + font-weight: bold; + font-size: 12pt; + } + } +} + +section.experience { + article.work-exp { + position: relative; + margin: 0.5*$ls 0 0; + } +} + +aside.date { + position: absolute; + right: 0; + top: 0; //calc($ls / 2); + height: $ls; + line-height: $ls; + // $offset: $4pt; + // top: -$offset; + // background: black; + // color: white; + // padding: $offset 1.5*$offset; + // height: $ls + 2*$offset; +} + +aside.languages { + color: #444; + font-style: italic; + font-weight: 400; +} + +section.projects { + article.project { + &:first-of-type { + margin-top: 0.5*$ls; + } + height: 2*$ls; + } + + div.project-title { + display: flex; + align-items: baseline; + height: $ls; + + h3 { + padding-right: 3pt; + } + } +} + +section.education { + article.institution { + position: relative; + margin-top: 0.5*$ls; + } +} diff --git a/js/resume.js b/js/resume.js new file mode 100644 index 0000000..e7bcd18 --- /dev/null +++ b/js/resume.js @@ -0,0 +1,7 @@ +document.querySelectorAll('main a').forEach(el => { + const icon = document.createElement('i'); + icon.classList.add('fa', 'fa-solid', 'fa-arrow-up-right-from-square'); + el.appendChild(icon); +}); + +document.querySelector('#print').addEventListener('click', () => window.print()); \ No newline at end of file diff --git a/resume.html b/resume.html new file mode 100644 index 0000000..15db077 --- /dev/null +++ b/resume.html @@ -0,0 +1,132 @@ + + + + + + + + + + Naman Sood – Resume + + + +
+
+
+

Naman Sood

+ +
+
+
+

Education

+
+

University of Waterloo

+

Bachelor of Computer Science – 3.91 GPA

+ +
    +
  • Relevant Coursework: Operating Systems, Concurrency, Networks, Security, Data Structures & Algorithms
  • +
+
+
+
+

Skills

+

LanguagesJavaScript, Go, Rust, C++, C, Python, Scala, HTML/CSS, Shell, Haskell

+

TechnologiesGit, Docker, Kubernetes, AWS EC2/S3, gRPC/Protobuf, React, SQL, MongoDB

+
+
+

Experience

+
+

data.world

+

Software Engineer Intern Austin, TX

+ +
    +
  • Spearheaded Databricks and Apache Spark support in Java-based data catalog service by integrating JDBC database drivers.
  • +
  • Boosted user productivity in code editing workspace by generating autocompletions for RDF classes and properties.
  • +
  • Delivered key usability improvements to code workspace in areas like error visibility and autogeneration of code snippets.
  • +
  • Refined syntax highlighting for SPARQL queries by improving regular expressions used to parse language constructs.
  • +
+
+
+

Carta

+

Software Engineer Intern, Infrastructure Kitchener, ON

+ +
    +
  • Designed distributed gRPC logging system using Apache Fluent for scalable auditing and compliance across organization.
  • +
  • Created proof-of-concept for logging system using Kubernetes DaemonSets, with ConfigMaps to deploy custom configurations.
  • +
  • Enforced standardization of Protobuf definitions for over 300 microservices by designing static analysis tool in Go.
  • +
  • Optimized build times by 10x for Docker images by simplifying package requirements to allow precompiled dependencies.
  • +
  • Improved system availability by identifying and removing bottlenecks in Redis server connections in Python library.
  • +
+
+
+

Tailscale

+

Software Engineer Intern Toronto, ON

+ +
    +
  • Introduced cloud/serverless support by emulating TCP/IP stack in userspace for Docker containers, using Google gVisor.
  • +
  • Enabled standardized communication using SOCKS5 protocol over Tailscale VPN by implementing proxy server in Go.
  • +
  • Simplified deployments in cloud environments by creating single-session authentication keys with auto-cleanup.
  • +
  • Developed a GitHub Action for end-users that allows plug-and-play security for CI/CD pipelines.
  • +
  • Expanded outreach within the technical community by writing long-form content for corporate blog.
  • +
+
+
+

University of Waterloo

+

Research Associate Waterloo, ON

+ +
    +
  • Optimized Go consensus system to 3x throughput by increasing maximum transaction count sent in each message.
  • +
  • Streamlined deployment of project by using Docker images to generate repeatable builds across diverse environments.
  • +
  • Unified similar codebases by migrating duplicate components to a single C++ project.
  • +
  • Assisted distributed systems research by conducting experiments on AWS EC2 and analyzing performance data in gnuplot.
  • +
+
+ +
+

The Girl Code

+

Volunteer Full Stack Developer New Delhi, India

+ +
    +
  • Developed online platform to interactively teach programming in 10+ workshops across 3 countries using NodeJS.
  • +
+
+
+
+

Projects

+
+
+

CHIP8-rust

+ +
+

Emulator for CHIP-8 microprocessor. Simulated behavior of machine instructions with Rust, created graphics in framebuffer.

+
+
+
+

Clay

+ +
+

A minimal x86 operating system. Handled tasks like interrupts, timers, paging, while balancing performance and maintainability.

+
+
+
+

cmdmap

+ +
+

Node module to map CLI programs to a JSON API. Designed abstraction over standard library features for improved security.

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/resume.pdf b/resume.pdf index 422a519..730d8f5 100644 Binary files a/resume.pdf and b/resume.pdf differ diff --git a/resume.sty b/resume.sty deleted file mode 100644 index 430b520..0000000 --- a/resume.sty +++ /dev/null @@ -1,106 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% LaTeX Template: Curriculum Vitae -% -% Original template from: http://www.howtotex.com/ -% Modified for use by Naman Sood. -% -% Feel free to distribute this template, but please keep the -% referal to HowToTeX.com. -% -% HowToTeX seems to be dead, but the unmodified template can -% be found at: -% https://www.overleaf.com/latex/templates/your-new-cv/xqzhcmqkqrtw -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\usepackage[english]{babel} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{lmodern} -\usepackage[protrusion=true]{microtype} -\usepackage[svgnames]{xcolor} % Colours by their 'svgnames' -\usepackage{url} -\usepackage{lmodern} % Allow arbitrary font sizes -\usepackage{textcomp} -\usepackage{hyperref} -\usepackage{enumitem} -\usepackage{sectsty} -\usepackage{fontawesome} -\usepackage{xcolor} - -% using arbitrary fonts requires XeLaTeX, but that is -% incompatible with the ATS hack below. uncomment with -% caution -%\usepackage{fontspec} -%\setsansfont{Roboto} - -% ATS hack: makes resumes easier to parse for machines -\input{glyphtounicode} -\pdfgentounicode=1 - -% remove paragraph indents -\setlength\parindent{0pt} - -\newcommand{\linkIcon}{{\footnotesize \faExternalLink}} - -\newcommand{\MyName}[1]{ - \begin{center} - \Huge\usefont{OT1}{phv}{b}{n} #1 - \end{center} - \par -} - -\newcommand{\NewPart}[1]{ - \vspace{-5mm} - \section*{\large \uppercase{#1}} - \vspace{-1mm} - \normalsize -} - -\newcommand{\SkillsEntry}[2]{ - \baselineskip=14pt\hangindent=0em\hangafter=0 - \makebox[1.75cm][l]{ - \textbf{#1} - } - \hspace{2em} #2 - \par -} - -\newcommand{\WorkEntry}[4]{ - \textbf{\large #1} \hfill #2 \par - \vspace{0.5mm} - \textit{#3} \par - \hangindent=2em\hangafter=0 #4 - \par -} - -\newcommand{\EducationEntry}[4]{ - \WorkEntry{#1}{#2}{#3}{#4} -} - -\newcommand{\ProjectEntry}[4]{ - \href{#2}{{\large \textbf{#1}} \linkIcon} - \textit{#3} - \par - \vspace{0.5mm} - #4 - \par -} - -% reduce large font size a bit -\renewcommand\large{\@setfontsize\Large{11pt}{18}} - -% remove page numbers/headers/footers -\pagestyle{empty} - -% remove link borders -\hypersetup{pdfborder=0 0 0} - -\renewcommand{\familydefault}{\sfdefault} -\setlist[itemize]{leftmargin=*} - -% Custom sectioning (sectsty package) -\sectionfont{ - \vspace{-1mm} - \usefont{OT1}{phv}{b}{n} - \sectionrule{0pt}{0pt}{-5pt}{1pt} -}