mirror of
https://github.com/soconnor0919/resume-cv.git
synced 2026-02-05 05:16:31 -05:00
Compare commits
3 Commits
release-21
...
release-23
| Author | SHA1 | Date | |
|---|---|---|---|
| 56f3bbca75 | |||
| e21e945cd5 | |||
| 55afdad907 |
22
.github/workflows/compile-latex.yml
vendored
22
.github/workflows/compile-latex.yml
vendored
@@ -67,9 +67,29 @@ jobs:
|
|||||||
resume.pdf
|
resume.pdf
|
||||||
cv.pdf
|
cv.pdf
|
||||||
name: Latest PDFs
|
name: Latest PDFs
|
||||||
tag_name: release-${{ github.run_number }}
|
tag_name: latest
|
||||||
body: |
|
body: |
|
||||||
Latest version of resume and CV (public version)
|
Latest version of resume and CV (public version)
|
||||||
|
|
||||||
|
This release is automatically updated with each push to main. For versioned releases, see the numbered releases.
|
||||||
|
prerelease: false
|
||||||
|
draft: false
|
||||||
|
fail_on_unmatched_files: true
|
||||||
|
generate_release_notes: false
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
# Create a numbered release for version history
|
||||||
|
- name: Create Numbered Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
resume.pdf
|
||||||
|
cv.pdf
|
||||||
|
name: Release ${{ github.run_number }}
|
||||||
|
tag_name: release-${{ github.run_number }}
|
||||||
|
body: |
|
||||||
|
Version ${{ github.run_number }} of resume and CV (public version)
|
||||||
prerelease: false
|
prerelease: false
|
||||||
draft: false
|
draft: false
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
|
|||||||
29
README.md
29
README.md
@@ -12,12 +12,29 @@ This project demonstrates professional DevOps practices while providing a beauti
|
|||||||
- Containerized local development with Docker
|
- Containerized local development with Docker
|
||||||
- Clean separation of content and styling
|
- Clean separation of content and styling
|
||||||
|
|
||||||
|
## Latest PDFs
|
||||||
|
|
||||||
|
The most recent public versions are always available at:
|
||||||
|
- Resume: `https://github.com/USERNAME/resume-cv/releases/download/latest/resume.pdf`
|
||||||
|
- CV: `https://github.com/USERNAME/resume-cv/releases/download/latest/cv.pdf`
|
||||||
|
|
||||||
|
Replace `USERNAME` with your GitHub username after forking.
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
.
|
.
|
||||||
├── cv.tex # Extended CV template
|
├── cv.tex # Extended CV template
|
||||||
├── resume.tex # Resume template
|
├── resume.tex # Resume template (subset of CV)
|
||||||
|
├── shared/ # Shared components
|
||||||
|
│ ├── style/ # Common LaTeX styles
|
||||||
|
│ │ └── common.tex # Shared style definitions
|
||||||
|
│ └── sections/ # Shared content sections
|
||||||
|
│ ├── header.tex # Contact information
|
||||||
|
│ ├── education.tex
|
||||||
|
│ ├── skills.tex
|
||||||
|
│ ├── coursework.tex
|
||||||
|
│ └── publications.tex
|
||||||
├── .secrets # Personal information (git-ignored)
|
├── .secrets # Personal information (git-ignored)
|
||||||
├── build-local.sh # Local build script
|
├── build-local.sh # Local build script
|
||||||
└── subfiles/
|
└── subfiles/
|
||||||
@@ -33,11 +50,19 @@ This project demonstrates professional DevOps practices while providing a beauti
|
|||||||
- Private version includes all personal details from `.secrets`
|
- Private version includes all personal details from `.secrets`
|
||||||
- The script automatically generates and cleans up temporary files
|
- The script automatically generates and cleans up temporary files
|
||||||
|
|
||||||
|
## Modifying Content
|
||||||
|
|
||||||
|
The project uses a modular structure to avoid duplication:
|
||||||
|
- Common sections are stored in `shared/sections/`
|
||||||
|
- Styling is defined in `shared/style/common.tex`
|
||||||
|
- The resume is a subset of the CV, reusing shared components
|
||||||
|
- Add new sections by creating files in `shared/sections/` and including them with `\input{}`
|
||||||
|
|
||||||
## CI/CD Pipeline
|
## CI/CD Pipeline
|
||||||
|
|
||||||
The repository showcases modern DevOps practices through GitHub Actions:
|
The repository showcases modern DevOps practices through GitHub Actions:
|
||||||
- Automated PDF generation on every push
|
- Automated PDF generation on every push
|
||||||
- Public version published as GitHub release
|
- Public version published as GitHub release with stable URLs
|
||||||
- Private version securely generated for repository owner
|
- Private version securely generated for repository owner
|
||||||
- Environment variables managed through GitHub Secrets
|
- Environment variables managed through GitHub Secrets
|
||||||
|
|
||||||
|
|||||||
88
build-docker.sh
Executable file
88
build-docker.sh
Executable file
@@ -0,0 +1,88 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Source secrets if the file exists
|
||||||
|
if [ -f .secrets ]; then
|
||||||
|
source .secrets
|
||||||
|
else
|
||||||
|
echo "Warning: .secrets file not found. Building public version only."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set defaults for missing variables
|
||||||
|
PERSONAL_NAME=${PERSONAL_NAME:-$(whoami)}
|
||||||
|
PERSONAL_EMAIL=${PERSONAL_EMAIL:-""}
|
||||||
|
PERSONAL_WEBSITE=${PERSONAL_WEBSITE:-""}
|
||||||
|
PERSONAL_SCHOOL_EMAIL=${PERSONAL_SCHOOL_EMAIL:-""}
|
||||||
|
PERSONAL_PHONE=${PERSONAL_PHONE:-""}
|
||||||
|
PERSONAL_HOME_ADDRESS_LINE1=${PERSONAL_HOME_ADDRESS_LINE1:-""}
|
||||||
|
PERSONAL_HOME_ADDRESS_LINE2=${PERSONAL_HOME_ADDRESS_LINE2:-""}
|
||||||
|
PERSONAL_SCHOOL_ADDRESS_LINE1=${PERSONAL_SCHOOL_ADDRESS_LINE1:-""}
|
||||||
|
PERSONAL_SCHOOL_ADDRESS_LINE2=${PERSONAL_SCHOOL_ADDRESS_LINE2:-""}
|
||||||
|
PERSONAL_SCHOOL_ADDRESS_LINE3=${PERSONAL_SCHOOL_ADDRESS_LINE3:-""}
|
||||||
|
|
||||||
|
# Function to cleanup
|
||||||
|
cleanup() {
|
||||||
|
rm -f *.aux *.log *.out *.fls *.fdb_latexmk *.synctex.gz *.bbl *.blg personal_info.tex
|
||||||
|
if [ -f personal_info.tex.bak ]; then
|
||||||
|
mv personal_info.tex.bak personal_info.tex
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup EXIT
|
||||||
|
mkdir -p output
|
||||||
|
|
||||||
|
# Backup current personal_info.tex if it exists
|
||||||
|
if [ -f personal_info.tex ]; then
|
||||||
|
cp personal_info.tex personal_info.tex.bak
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build private version (if secrets are available)
|
||||||
|
if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$PERSONAL_SCHOOL_ADDRESS_LINE1" ]; then
|
||||||
|
echo "Building private version..."
|
||||||
|
cat > personal_info.tex << EOL
|
||||||
|
% Private version of personal information
|
||||||
|
\newcommand{\personalName}{$PERSONAL_NAME}
|
||||||
|
\newcommand{\personalEmail}{$PERSONAL_EMAIL}
|
||||||
|
\newcommand{\personalPhone}{$PERSONAL_PHONE}
|
||||||
|
\newcommand{\personalWebsite}{$PERSONAL_WEBSITE}
|
||||||
|
\newcommand{\personalSchoolEmail}{$PERSONAL_SCHOOL_EMAIL}
|
||||||
|
\newcommand{\personalHomeAddressLineOne}{$PERSONAL_HOME_ADDRESS_LINE1}
|
||||||
|
\newcommand{\personalHomeAddressLineTwo}{$PERSONAL_HOME_ADDRESS_LINE2}
|
||||||
|
\newcommand{\personalSchoolAddressLineOne}{$PERSONAL_SCHOOL_ADDRESS_LINE1}
|
||||||
|
\newcommand{\personalSchoolAddressLineTwo}{$PERSONAL_SCHOOL_ADDRESS_LINE2}
|
||||||
|
\newcommand{\personalSchoolAddressLineThree}{$PERSONAL_SCHOOL_ADDRESS_LINE3}
|
||||||
|
EOL
|
||||||
|
|
||||||
|
docker build --platform linux/arm64 -t resume-builder .
|
||||||
|
docker run --platform linux/arm64 --rm \
|
||||||
|
-v "$(pwd):/workspace" \
|
||||||
|
-v "$(pwd)/output:/workspace/output" \
|
||||||
|
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv *.pdf output/"
|
||||||
|
|
||||||
|
mv output/resume.pdf output/resume-private.pdf 2>/dev/null || true
|
||||||
|
mv output/cv.pdf output/cv-private.pdf 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build public version
|
||||||
|
echo "Building public version..."
|
||||||
|
cat > personal_info.tex << EOL
|
||||||
|
% Public version of personal information
|
||||||
|
\newcommand{\personalName}{$PERSONAL_NAME}
|
||||||
|
\newcommand{\personalEmail}{$PERSONAL_EMAIL}
|
||||||
|
\newcommand{\personalPhone}{~}
|
||||||
|
\newcommand{\personalWebsite}{$PERSONAL_WEBSITE}
|
||||||
|
\newcommand{\personalSchoolEmail}{$PERSONAL_SCHOOL_EMAIL}
|
||||||
|
\newcommand{\personalHomeAddressLineOne}{~}
|
||||||
|
\newcommand{\personalHomeAddressLineTwo}{~}
|
||||||
|
\newcommand{\personalSchoolAddressLineOne}{~}
|
||||||
|
\newcommand{\personalSchoolAddressLineTwo}{~}
|
||||||
|
\newcommand{\personalSchoolAddressLineThree}{~}
|
||||||
|
EOL
|
||||||
|
|
||||||
|
docker run --platform linux/arm64 --rm \
|
||||||
|
-v "$(pwd):/workspace" \
|
||||||
|
-v "$(pwd)/output:/workspace/output" \
|
||||||
|
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv resume.pdf output/resume-public.pdf && mv cv.pdf output/cv-public.pdf"
|
||||||
|
|
||||||
|
echo "Build complete!"
|
||||||
|
echo "Generated files in output/:"
|
||||||
|
ls -l output/
|
||||||
@@ -30,11 +30,35 @@ cleanup() {
|
|||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
mkdir -p output
|
mkdir -p output
|
||||||
|
|
||||||
|
# Check if required LaTeX tools are available locally
|
||||||
|
check_latex_tools() {
|
||||||
|
command -v latexmk >/dev/null 2>&1 || return 1
|
||||||
|
command -v pdflatex >/dev/null 2>&1 || return 1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to build using local tools
|
||||||
|
build_local() {
|
||||||
|
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to build using Docker
|
||||||
|
build_docker() {
|
||||||
|
echo "Local LaTeX tools not found, falling back to Docker..."
|
||||||
|
./build-docker.sh
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
|
|
||||||
# Backup current personal_info.tex if it exists
|
# Backup current personal_info.tex if it exists
|
||||||
if [ -f personal_info.tex ]; then
|
if [ -f personal_info.tex ]; then
|
||||||
cp personal_info.tex personal_info.tex.bak
|
cp personal_info.tex personal_info.tex.bak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check if we can use local tools, otherwise fall back to Docker
|
||||||
|
if ! check_latex_tools; then
|
||||||
|
build_docker
|
||||||
|
fi
|
||||||
|
|
||||||
# Build private version (if secrets are available)
|
# Build private version (if secrets are available)
|
||||||
if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$PERSONAL_SCHOOL_ADDRESS_LINE1" ]; then
|
if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$PERSONAL_SCHOOL_ADDRESS_LINE1" ]; then
|
||||||
echo "Building private version..."
|
echo "Building private version..."
|
||||||
@@ -52,14 +76,11 @@ if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$P
|
|||||||
\newcommand{\personalSchoolAddressLineThree}{$PERSONAL_SCHOOL_ADDRESS_LINE3}
|
\newcommand{\personalSchoolAddressLineThree}{$PERSONAL_SCHOOL_ADDRESS_LINE3}
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
docker build --platform linux/arm64 -t resume-builder .
|
build_local resume.tex
|
||||||
docker run --platform linux/arm64 --rm \
|
build_local cv.tex
|
||||||
-v "$(pwd):/workspace" \
|
|
||||||
-v "$(pwd)/output:/workspace/output" \
|
|
||||||
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv *.pdf output/"
|
|
||||||
|
|
||||||
mv output/resume.pdf output/resume-private.pdf 2>/dev/null || true
|
mv resume.pdf output/resume-private.pdf 2>/dev/null || true
|
||||||
mv output/cv.pdf output/cv-private.pdf 2>/dev/null || true
|
mv cv.pdf output/cv-private.pdf 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Build public version
|
# Build public version
|
||||||
@@ -78,10 +99,11 @@ cat > personal_info.tex << EOL
|
|||||||
\newcommand{\personalSchoolAddressLineThree}{~}
|
\newcommand{\personalSchoolAddressLineThree}{~}
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
docker run --platform linux/arm64 --rm \
|
build_local resume.tex
|
||||||
-v "$(pwd):/workspace" \
|
build_local cv.tex
|
||||||
-v "$(pwd)/output:/workspace/output" \
|
|
||||||
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv resume.pdf output/resume-public.pdf && mv cv.pdf output/cv-public.pdf"
|
mv resume.pdf output/resume-public.pdf
|
||||||
|
mv cv.pdf output/cv-public.pdf
|
||||||
|
|
||||||
echo "Build complete!"
|
echo "Build complete!"
|
||||||
echo "Generated files in output/:"
|
echo "Generated files in output/:"
|
||||||
|
|||||||
113
cv.tex
113
cv.tex
@@ -1,78 +1,15 @@
|
|||||||
\documentclass{article}
|
\documentclass{article}
|
||||||
\setlength{\parindent}{0pt}
|
|
||||||
\setlength{\parskip}{0em}
|
|
||||||
\usepackage{enumitem}
|
|
||||||
\usepackage{hyperref}
|
|
||||||
\usepackage[utf8]{inputenc}
|
|
||||||
\usepackage[T1]{fontenc}
|
|
||||||
\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
|
|
||||||
|
|
||||||
% Define spacing variables
|
% Include common style
|
||||||
\newlength{\sectspaceabove}
|
\input{shared/style/common}
|
||||||
\newlength{\sectspacebelow}
|
|
||||||
\setlength{\sectspaceabove}{-0em} % Space before section titles
|
|
||||||
\setlength{\sectspacebelow}{-0.5em} % Space after section titles
|
|
||||||
|
|
||||||
\usepackage{etoolbox}
|
|
||||||
\patchcmd{\thebibliography}{\section*{\refname}}{}{}{}
|
|
||||||
|
|
||||||
% Hide page numbers
|
|
||||||
\pagestyle{empty}
|
|
||||||
|
|
||||||
% Custom macro for small caps and bold
|
|
||||||
\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}}
|
|
||||||
|
|
||||||
% Custom macro for section headers with controlled spacing
|
|
||||||
\newcommand{\resumesection}[1]{%
|
|
||||||
\vspace{\sectspaceabove}%
|
|
||||||
\begin{center}
|
|
||||||
\textscbf{#1}
|
|
||||||
\end{center}%
|
|
||||||
\vspace{\sectspacebelow}%
|
|
||||||
}
|
|
||||||
|
|
||||||
% Include personal information
|
% Include personal information
|
||||||
\input{personal_info}
|
\input{personal_info}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\begin{center}
|
|
||||||
{\large \textscbf{\personalName}}
|
|
||||||
\end{center}
|
|
||||||
|
|
||||||
\vspace{0.5em}
|
% Header with contact information
|
||||||
|
\input{shared/sections/header}
|
||||||
\noindent
|
|
||||||
\begin{minipage}[t]{0.33\textwidth}
|
|
||||||
\raggedright
|
|
||||||
\ifx\personalSchoolAddressLineOne\empty\else
|
|
||||||
\mbox{}\par\nobreak\vspace{-\baselineskip}
|
|
||||||
\personalSchoolAddressLineOne\\%
|
|
||||||
\personalSchoolAddressLineTwo\\%
|
|
||||||
\personalSchoolAddressLineThree%
|
|
||||||
\fi
|
|
||||||
\end{minipage}%
|
|
||||||
\hfill%
|
|
||||||
\begin{minipage}[t]{0.33\textwidth}
|
|
||||||
\centering
|
|
||||||
\href{mailto:\personalEmail}{\personalEmail}%
|
|
||||||
\ifx\personalSchoolEmail\empty\else
|
|
||||||
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
|
|
||||||
\fi
|
|
||||||
\\\href{https://\personalWebsite}{\personalWebsite}%
|
|
||||||
\ifx\personalPhone\empty\else
|
|
||||||
\\\personalPhone%
|
|
||||||
\fi
|
|
||||||
\end{minipage}%
|
|
||||||
\hfill%
|
|
||||||
\begin{minipage}[t]{0.33\textwidth}
|
|
||||||
\raggedleft
|
|
||||||
\ifx\personalHomeAddressLineOne\empty\else
|
|
||||||
\personalHomeAddressLineOne\\%
|
|
||||||
\personalHomeAddressLineTwo%
|
|
||||||
\fi
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
\vspace{1em}
|
|
||||||
|
|
||||||
% Professional Summary Section
|
% Professional Summary Section
|
||||||
\noindent
|
\noindent
|
||||||
@@ -82,14 +19,8 @@
|
|||||||
Published researcher in human-robot interaction with experience in both academic and commercial software development.
|
Published researcher in human-robot interaction with experience in both academic and commercial software development.
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
\resumesection{Education}
|
% Education section
|
||||||
|
\input{shared/sections/education}
|
||||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
|
||||||
|
|
||||||
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\resumesection{Experience}
|
\resumesection{Experience}
|
||||||
|
|
||||||
@@ -119,7 +50,6 @@
|
|||||||
\item Managed live production during race events, coordinating camera operators, replay, and graphics control
|
\item Managed live production during race events, coordinating camera operators, replay, and graphics control
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present}
|
\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present}
|
||||||
@@ -131,7 +61,7 @@
|
|||||||
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – Present}
|
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Designed and implemented an automated data collection system using a microcontroller and C++ to collect real-time temperature, pressure, and humidity data in harsh environments
|
\item Designed and implemented an automated data collection system using a microcontroller and C++ to collect real-time temperature, pressure, and humidity data in harsh environments
|
||||||
\item Currently integrating robotic arm into existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
|
\item Currently assisting in robotic hardware integration into an existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{Computer Science Teaching Assistant} \hfill \textbf{Jan 2024 - Present}
|
\textbf{Computer Science Teaching Assistant} \hfill \textbf{Jan 2024 - Present}
|
||||||
@@ -164,7 +94,6 @@
|
|||||||
\item Assisted staff in one-laptop per person deployment and support in response to the COVID-19 pandemic, teaching students how to fully utilize newly-available remote learning tools and programs
|
\item Assisted staff in one-laptop per person deployment and support in response to the COVID-19 pandemic, teaching students how to fully utilize newly-available remote learning tools and programs
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\resumesection{Activities}
|
\resumesection{Activities}
|
||||||
|
|
||||||
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
|
||||||
@@ -225,29 +154,9 @@
|
|||||||
\item Presented the design of our car in a poster session, heavily focusing on the safety-related aspects of our design
|
\item Presented the design of our car in a poster session, heavily focusing on the safety-related aspects of our design
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
% Shared sections
|
||||||
\resumesection{Publications}
|
\input{shared/sections/publications}
|
||||||
|
\input{shared/sections/coursework}
|
||||||
\nocite{*}
|
\input{shared/sections/skills}
|
||||||
\bibliography{subfiles/refs.bib}
|
|
||||||
\bibliographystyle{plain}
|
|
||||||
|
|
||||||
\resumesection{Relevant Coursework}
|
|
||||||
|
|
||||||
\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security
|
|
||||||
|
|
||||||
\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing
|
|
||||||
|
|
||||||
\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining
|
|
||||||
|
|
||||||
\resumesection{Skills \& Interests}
|
|
||||||
|
|
||||||
\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL
|
|
||||||
|
|
||||||
\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2
|
|
||||||
|
|
||||||
\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD
|
|
||||||
|
|
||||||
\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
140
resume.tex
140
resume.tex
@@ -1,87 +1,18 @@
|
|||||||
\documentclass{article}
|
\documentclass{article}
|
||||||
\setlength{\parindent}{0pt}
|
|
||||||
\setlength{\parskip}{0em}
|
|
||||||
\usepackage{enumitem}
|
|
||||||
\usepackage{hyperref}
|
|
||||||
\usepackage[utf8]{inputenc}
|
|
||||||
\usepackage[T1]{fontenc}
|
|
||||||
\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
|
|
||||||
|
|
||||||
% Define spacing variables
|
% Include common style
|
||||||
\newlength{\sectspaceabove}
|
\input{shared/style/common}
|
||||||
\newlength{\sectspacebelow}
|
|
||||||
\setlength{\sectspaceabove}{-0.5em} % Space before section titles
|
|
||||||
\setlength{\sectspacebelow}{-0.5em} % Space after section titles
|
|
||||||
|
|
||||||
\usepackage{etoolbox}
|
|
||||||
\patchcmd{\thebibliography}{\section*{\refname}}{}{}{}
|
|
||||||
|
|
||||||
% Hide page numbers
|
|
||||||
\pagestyle{empty}
|
|
||||||
|
|
||||||
% Custom macro for small caps and bold
|
|
||||||
\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}}
|
|
||||||
|
|
||||||
% Custom macro for section headers with controlled spacing
|
|
||||||
\newcommand{\resumesection}[1]{%
|
|
||||||
\vspace{\sectspaceabove}%
|
|
||||||
\begin{center}
|
|
||||||
\textscbf{#1}
|
|
||||||
\end{center}%
|
|
||||||
\vspace{\sectspacebelow}%
|
|
||||||
}
|
|
||||||
|
|
||||||
% Include personal information
|
% Include personal information
|
||||||
\input{personal_info}
|
\input{personal_info}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\begin{center}
|
|
||||||
{\large \textscbf{\personalName}}
|
|
||||||
\end{center}
|
|
||||||
|
|
||||||
\vspace{0.5em}
|
% Header with contact information
|
||||||
|
\input{shared/sections/header}
|
||||||
|
|
||||||
\noindent
|
% Education section
|
||||||
\begin{minipage}[t]{0.33\textwidth}
|
\input{shared/sections/education}
|
||||||
\raggedright
|
|
||||||
\ifx\personalSchoolAddressLineOne\empty\else
|
|
||||||
\mbox{}\par\nobreak\vspace{-\baselineskip}
|
|
||||||
\personalSchoolAddressLineOne\\%
|
|
||||||
\personalSchoolAddressLineTwo\\%
|
|
||||||
\personalSchoolAddressLineThree%
|
|
||||||
\fi
|
|
||||||
\end{minipage}%
|
|
||||||
\hfill%
|
|
||||||
\begin{minipage}[t]{0.33\textwidth}
|
|
||||||
\centering
|
|
||||||
\href{mailto:\personalEmail}{\personalEmail}%
|
|
||||||
\ifx\personalSchoolEmail\empty\else
|
|
||||||
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
|
|
||||||
\fi
|
|
||||||
\\\href{https://\personalWebsite}{\personalWebsite}%
|
|
||||||
\ifx\personalPhone\empty\else
|
|
||||||
\\\personalPhone%
|
|
||||||
\fi
|
|
||||||
\end{minipage}%
|
|
||||||
\hfill%
|
|
||||||
\begin{minipage}[t]{0.33\textwidth}
|
|
||||||
\raggedleft
|
|
||||||
\ifx\personalHomeAddressLineOne\empty\else
|
|
||||||
\personalHomeAddressLineOne\\%
|
|
||||||
\personalHomeAddressLineTwo%
|
|
||||||
\fi
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
\vspace{1em}
|
|
||||||
|
|
||||||
\resumesection{Education}
|
|
||||||
|
|
||||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
|
||||||
|
|
||||||
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\resumesection{Experience}
|
\resumesection{Experience}
|
||||||
|
|
||||||
@@ -95,28 +26,6 @@
|
|||||||
\item Orchestrated migration to containerized architecture using Docker and implemented automated backup systems to improve reliability
|
\item Orchestrated migration to containerized architecture using Docker and implemented automated backup systems to improve reliability
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
%\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
|
||||||
%
|
|
||||||
%\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present}
|
|
||||||
%\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
% \item Co-founded an interdisciplinary research lab and meeting group, engaging peers in the world of human-robot interaction
|
|
||||||
% \item Led ongoing development of a platform for Human-Robot Interaction experiments, resulting in a first-author publication
|
|
||||||
%\end{itemize}
|
|
||||||
%
|
|
||||||
%\textbf{Teaching Assistant and Tutor - Computer Science, Engineering, and Physics} \hfill \textbf{Aug 2023 - Present}
|
|
||||||
%\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
%\item Mentored diverse student groups in Java programming, Arduino development, and physics lab experiments, adapting teaching methods to various learning styles
|
|
||||||
%\item Guided engineering teams through agile development cycles while emphasizing ethical design considerations and proper documentation
|
|
||||||
%\item Supported data analysis across disciplines using Excel, Logger Pro, and custom software tools
|
|
||||||
%\item Fostered inclusive learning environments through hands-on workshops and one-on-one tutoring sessions
|
|
||||||
%\end{itemize}
|
|
||||||
%
|
|
||||||
%\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – Present}
|
|
||||||
%\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
% \item Developed sensor systems to improve data collection in coffee-related biochemical research, enhancing accuracy and efficiency of experiments using custom software tools to streamline data analysis.
|
|
||||||
%\end{itemize}
|
|
||||||
%
|
|
||||||
|
|
||||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present}
|
\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present}
|
||||||
@@ -128,7 +37,7 @@
|
|||||||
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – Present}
|
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Designed and implemented an automated data collection system using a microcontroller and C++ to collect real-time temperature, pressure, and humidity data in harsh environments
|
\item Designed and implemented an automated data collection system using a microcontroller and C++ to collect real-time temperature, pressure, and humidity data in harsh environments
|
||||||
\item Currently integrating robotic arm into existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
|
\item Currently assisting in robotic hardware integration into an existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{Teaching Assistant \& Engineering Tutor} \hfill \textbf{Aug 2023 - Present}
|
\textbf{Teaching Assistant \& Engineering Tutor} \hfill \textbf{Aug 2023 - Present}
|
||||||
@@ -138,16 +47,8 @@
|
|||||||
\item Provided technical mentorship at the Engineering Study Spot, focusing on programming concepts and system design
|
\item Provided technical mentorship at the Engineering Study Spot, focusing on programming concepts and system design
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\resumesection{Activities}
|
\resumesection{Activities}
|
||||||
|
|
||||||
%\textscbf{Bucknell Coffee Society} \hfill \textscbf{Lewisburg, PA}
|
|
||||||
%
|
|
||||||
%\textbf{Treasurer} \hfill \textbf{Oct 2023 – Present}
|
|
||||||
%\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
% \item Co-established and launched a new campus organization, managing financial operations and coordinating event logistics.
|
|
||||||
%\end{itemize}
|
|
||||||
|
|
||||||
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
\textbf{President, Electrical and Mechanical Team Lead} \hfill \textbf{Jan 2023 – Present}
|
\textbf{President, Electrical and Mechanical Team Lead} \hfill \textbf{Jan 2023 – Present}
|
||||||
@@ -156,28 +57,9 @@
|
|||||||
\item Implemented finite state machine architecture integrating spectrometer readings, relay control, and LED feedback for real-time reaction monitoring in isolated chamber conditions
|
\item Implemented finite state machine architecture integrating spectrometer readings, relay control, and LED feedback for real-time reaction monitoring in isolated chamber conditions
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\resumesection{Publications}
|
% Shared sections
|
||||||
|
\input{shared/sections/publications}
|
||||||
\nocite{*}
|
\input{shared/sections/coursework}
|
||||||
\bibliography{subfiles/refs.bib}
|
\input{shared/sections/skills}
|
||||||
\bibliographystyle{plain}
|
|
||||||
|
|
||||||
\resumesection{Relevant Coursework}
|
|
||||||
|
|
||||||
\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security
|
|
||||||
|
|
||||||
\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing
|
|
||||||
|
|
||||||
\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining
|
|
||||||
|
|
||||||
\resumesection{Skills \& Interests}
|
|
||||||
|
|
||||||
\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL
|
|
||||||
|
|
||||||
\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2
|
|
||||||
|
|
||||||
\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD
|
|
||||||
|
|
||||||
\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
7
shared/sections/coursework.tex
Normal file
7
shared/sections/coursework.tex
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
\resumesection{Relevant Coursework}
|
||||||
|
|
||||||
|
\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security
|
||||||
|
|
||||||
|
\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing
|
||||||
|
|
||||||
|
\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining
|
||||||
8
shared/sections/education.tex
Normal file
8
shared/sections/education.tex
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
\resumesection{Education}
|
||||||
|
|
||||||
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
|
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024
|
||||||
|
\end{itemize}
|
||||||
38
shared/sections/header.tex
Normal file
38
shared/sections/header.tex
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
\begin{center}
|
||||||
|
{\large \textscbf{\personalName}}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
\vspace{0.5em}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
\begin{minipage}[t]{0.33\textwidth}
|
||||||
|
\raggedright
|
||||||
|
\ifx\personalSchoolAddressLineOne\empty\else
|
||||||
|
\mbox{}\par\nobreak\vspace{-\baselineskip}
|
||||||
|
\personalSchoolAddressLineOne\\%
|
||||||
|
\personalSchoolAddressLineTwo\\%
|
||||||
|
\personalSchoolAddressLineThree%
|
||||||
|
\fi
|
||||||
|
\end{minipage}%
|
||||||
|
\hfill%
|
||||||
|
\begin{minipage}[t]{0.33\textwidth}
|
||||||
|
\centering
|
||||||
|
\href{mailto:\personalEmail}{\personalEmail}%
|
||||||
|
\ifx\personalSchoolEmail\empty\else
|
||||||
|
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
|
||||||
|
\fi
|
||||||
|
\\\href{https://\personalWebsite}{\personalWebsite}%
|
||||||
|
\ifx\personalPhone\empty\else
|
||||||
|
\\\personalPhone%
|
||||||
|
\fi
|
||||||
|
\end{minipage}%
|
||||||
|
\hfill%
|
||||||
|
\begin{minipage}[t]{0.33\textwidth}
|
||||||
|
\raggedleft
|
||||||
|
\ifx\personalHomeAddressLineOne\empty\else
|
||||||
|
\personalHomeAddressLineOne\\%
|
||||||
|
\personalHomeAddressLineTwo%
|
||||||
|
\fi
|
||||||
|
\end{minipage}
|
||||||
|
|
||||||
|
\vspace{1em}
|
||||||
5
shared/sections/publications.tex
Normal file
5
shared/sections/publications.tex
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
\resumesection{Publications}
|
||||||
|
|
||||||
|
\nocite{*}
|
||||||
|
\bibliography{subfiles/refs.bib}
|
||||||
|
\bibliographystyle{plain}
|
||||||
9
shared/sections/skills.tex
Normal file
9
shared/sections/skills.tex
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
\resumesection{Skills \& Interests}
|
||||||
|
|
||||||
|
\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL
|
||||||
|
|
||||||
|
\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2
|
||||||
|
|
||||||
|
\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD
|
||||||
|
|
||||||
|
\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI
|
||||||
31
shared/style/common.tex
Normal file
31
shared/style/common.tex
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
\setlength{\parindent}{0pt}
|
||||||
|
\setlength{\parskip}{0em}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage[T1]{fontenc}
|
||||||
|
\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
|
||||||
|
|
||||||
|
% Define spacing variables
|
||||||
|
\newlength{\sectspaceabove}
|
||||||
|
\newlength{\sectspacebelow}
|
||||||
|
\setlength{\sectspaceabove}{-0.5em} % Space before section titles
|
||||||
|
\setlength{\sectspacebelow}{-0.5em} % Space after section titles
|
||||||
|
|
||||||
|
\usepackage{etoolbox}
|
||||||
|
\patchcmd{\thebibliography}{\section*{\refname}}{}{}{}
|
||||||
|
|
||||||
|
% Hide page numbers
|
||||||
|
\pagestyle{empty}
|
||||||
|
|
||||||
|
% Custom macro for small caps and bold
|
||||||
|
\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}}
|
||||||
|
|
||||||
|
% Custom macro for section headers with controlled spacing
|
||||||
|
\newcommand{\resumesection}[1]{%
|
||||||
|
\vspace{\sectspaceabove}%
|
||||||
|
\begin{center}
|
||||||
|
\textscbf{#1}
|
||||||
|
\end{center}%
|
||||||
|
\vspace{\sectspacebelow}%
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user