mirror of
https://github.com/soconnor0919/resume-cv.git
synced 2026-02-04 21:06:31 -05:00
Compare commits
21 Commits
release-25
...
release-45
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad46c2ba70 | ||
|
|
5b99a95078 | ||
|
|
fa5d42251d | ||
|
|
61258bf16e | ||
|
|
066d84c5b8 | ||
|
|
59f172bd0b | ||
| e54a0e36e6 | |||
| b055ed9d3d | |||
| ede400fd97 | |||
| 8aeb6a4745 | |||
| 7749d8c332 | |||
| 0549f77c4d | |||
| 7bebaea133 | |||
| 5f77e4e68c | |||
| 8f0ff2df68 | |||
| de9dfe2d7f | |||
| dd9c4c09ee | |||
| eed1e8714b | |||
| 7397a0177f | |||
| d0813ce1c6 | |||
| 1dfc70b1b4 |
108
.github/workflows/compile-latex.yml
vendored
108
.github/workflows/compile-latex.yml
vendored
@@ -12,9 +12,13 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-public:
|
build-public:
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-latest
|
||||||
|
container: ghcr.io/xu-cheng/texlive-alpine:latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Install system dependencies
|
||||||
|
run: apk add --no-cache git gettext bash nodejs
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Create public info file
|
- name: Create public info file
|
||||||
env:
|
env:
|
||||||
@@ -40,7 +44,7 @@ jobs:
|
|||||||
mv personal_info.tex.tmp personal_info.tex
|
mv personal_info.tex.tmp personal_info.tex
|
||||||
|
|
||||||
- name: Cache TeX Live
|
- name: Cache TeX Live
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/tmp/texlive
|
/tmp/texlive
|
||||||
@@ -52,56 +56,82 @@ jobs:
|
|||||||
- name: Create TeX Live directory
|
- name: Create TeX Live directory
|
||||||
run: mkdir -p /tmp/texlive
|
run: mkdir -p /tmp/texlive
|
||||||
|
|
||||||
- name: Set up TeX Live
|
- name: Compile LaTeX
|
||||||
uses: xu-cheng/latex-action@v3
|
run: |
|
||||||
with:
|
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex
|
||||||
root_file: |
|
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode cv.tex
|
||||||
resume.tex
|
|
||||||
cv.tex
|
- name: List generated PDFs
|
||||||
latexmk_use_xelatex: false
|
run: ls -la *.pdf
|
||||||
|
|
||||||
- name: Upload Public PDFs as Release
|
# --- GITHUB RELEASES (Run only on GitHub) ---
|
||||||
uses: softprops/action-gh-release@v1
|
- name: Upload Public PDFs as Release (GitHub)
|
||||||
|
if: github.server_url == 'https://github.com'
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
|
artifacts: "resume.pdf,cv.pdf"
|
||||||
|
tag: latest
|
||||||
|
name: Latest PDFs
|
||||||
|
body: |
|
||||||
|
Latest compiled resume and CV (public versions)
|
||||||
|
|
||||||
|
Built from commit ${{ github.sha }}
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
allowUpdates: true
|
||||||
|
removeArtifacts: true
|
||||||
|
replacesArtifacts: true
|
||||||
|
|
||||||
|
- name: Create Numbered Release (GitHub)
|
||||||
|
if: github.server_url == 'https://github.com'
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
artifacts: "resume.pdf,cv.pdf"
|
||||||
|
tag: release-${{ github.run_number }}
|
||||||
|
name: Release ${{ github.run_number }}
|
||||||
|
body: |
|
||||||
|
Automated release #${{ github.run_number }}
|
||||||
|
|
||||||
|
Built from commit ${{ github.sha }}
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
|
||||||
|
# --- GITEA RELEASES (Run only on Gitea) ---
|
||||||
|
- name: Upload Public PDFs as Release (Gitea)
|
||||||
|
if: github.server_url != 'https://github.com'
|
||||||
|
uses: akkuman/gitea-release-action@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITEA_TOKEN }}
|
||||||
files: |
|
files: |
|
||||||
resume.pdf
|
resume.pdf
|
||||||
cv.pdf
|
cv.pdf
|
||||||
name: Latest PDFs
|
name: Latest PDFs
|
||||||
tag_name: latest
|
tag_name: latest
|
||||||
body: |
|
|
||||||
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
|
prerelease: false
|
||||||
draft: 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 (Gitea)
|
||||||
- name: Create Numbered Release
|
if: github.server_url != 'https://github.com'
|
||||||
uses: softprops/action-gh-release@v1
|
uses: akkuman/gitea-release-action@v1
|
||||||
with:
|
with:
|
||||||
|
token: ${{ secrets.GITEA_TOKEN }}
|
||||||
files: |
|
files: |
|
||||||
resume.pdf
|
resume.pdf
|
||||||
cv.pdf
|
cv.pdf
|
||||||
name: Release ${{ github.run_number }}
|
name: Release ${{ github.run_number }}
|
||||||
tag_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
|
|
||||||
generate_release_notes: false
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
build-private:
|
build-private:
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-latest
|
||||||
|
container: ghcr.io/xu-cheng/texlive-alpine:latest
|
||||||
if: github.actor == github.repository_owner
|
if: github.actor == github.repository_owner
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Install system dependencies
|
||||||
|
run: apk add --no-cache git gettext bash nodejs
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Create private info file
|
- name: Create private info file
|
||||||
env:
|
env:
|
||||||
@@ -133,7 +163,7 @@ jobs:
|
|||||||
mv personal_info.tex.tmp personal_info.tex
|
mv personal_info.tex.tmp personal_info.tex
|
||||||
|
|
||||||
- name: Cache TeX Live
|
- name: Cache TeX Live
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/tmp/texlive
|
/tmp/texlive
|
||||||
@@ -145,13 +175,13 @@ jobs:
|
|||||||
- name: Create TeX Live directory
|
- name: Create TeX Live directory
|
||||||
run: mkdir -p /tmp/texlive
|
run: mkdir -p /tmp/texlive
|
||||||
|
|
||||||
- name: Set up TeX Live
|
- name: Compile LaTeX
|
||||||
uses: xu-cheng/latex-action@v3
|
run: |
|
||||||
with:
|
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex
|
||||||
root_file: |
|
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode cv.tex
|
||||||
resume.tex
|
|
||||||
cv.tex
|
- name: List generated PDFs
|
||||||
latexmk_use_xelatex: false
|
run: ls -la *.pdf
|
||||||
|
|
||||||
- name: Upload Private PDFs
|
- name: Upload Private PDFs
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
|||||||
41
.gitignore
vendored
41
.gitignore
vendored
@@ -1,38 +1,19 @@
|
|||||||
# LaTeX build files
|
# Ignore build artifacts
|
||||||
|
build/
|
||||||
|
output/
|
||||||
|
|
||||||
|
# LaTeX temporary files
|
||||||
*.aux
|
*.aux
|
||||||
*.lof
|
|
||||||
*.log
|
*.log
|
||||||
*.lot
|
|
||||||
*.fls
|
|
||||||
*.out
|
*.out
|
||||||
*.toc
|
*.fls
|
||||||
*.fmt
|
*.fdb_latexmk
|
||||||
*.fot
|
*.synctex.gz
|
||||||
*.cb
|
|
||||||
*.cb2
|
|
||||||
.*.lb
|
|
||||||
*.pdf
|
|
||||||
*.dvi
|
|
||||||
*.xdv
|
|
||||||
*-converted-to.*
|
|
||||||
.pdf
|
|
||||||
*.bbl
|
*.bbl
|
||||||
*.blg
|
*.blg
|
||||||
*.synctex.gz
|
|
||||||
*.fdb_latexmk
|
|
||||||
|
|
||||||
# GitHub Secrets
|
# Personal information
|
||||||
.secrets
|
.secrets
|
||||||
|
|
||||||
# Private information
|
# OS files
|
||||||
personal_info_private.tex
|
.DS_Store
|
||||||
personal_info.tex
|
|
||||||
|
|
||||||
# macOS system files
|
|
||||||
.DS_Store
|
|
||||||
.AppleDouble
|
|
||||||
.LSOverride
|
|
||||||
|
|
||||||
# Editor files
|
|
||||||
.vscode/
|
|
||||||
.idea/
|
|
||||||
@@ -7,11 +7,10 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
texlive-full \
|
texlive-full \
|
||||||
latexmk \
|
latexmk \
|
||||||
|
make \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /workspace
|
WORKDIR /workspace
|
||||||
|
|
||||||
COPY . .
|
# Default command runs make
|
||||||
|
CMD ["make", "all"]
|
||||||
# For build
|
|
||||||
CMD ["latexmk", "-pdf", "-file-line-error", "-halt-on-error", "-interaction=nonstopmode", "resume.tex", "cv.tex"]
|
|
||||||
94
Makefile
Normal file
94
Makefile
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
# Resume & CV Makefile
|
||||||
|
# Builds both public and private versions of resume and CV
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
LATEX = latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode
|
||||||
|
DOCKER_IMAGE = resume-builder
|
||||||
|
OUTPUT_DIR = output
|
||||||
|
BUILD_DIR = build
|
||||||
|
SCRIPTS_DIR = scripts
|
||||||
|
|
||||||
|
# Export BUILD_DIR for scripts
|
||||||
|
export BUILD_DIR
|
||||||
|
|
||||||
|
# Targets
|
||||||
|
.PHONY: all clean docker-build docker public private resume cv help
|
||||||
|
|
||||||
|
all: public private
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Resume & CV Build System"
|
||||||
|
@echo ""
|
||||||
|
@echo "Targets:"
|
||||||
|
@echo " make all - Build both public and private versions (default)"
|
||||||
|
@echo " make public - Build public versions only"
|
||||||
|
@echo " make private - Build private versions only"
|
||||||
|
@echo " make resume - Build resume only (both versions)"
|
||||||
|
@echo " make cv - Build CV only (both versions)"
|
||||||
|
@echo " make docker - Build using Docker (if LaTeX not installed)"
|
||||||
|
@echo " make clean - Remove build artifacts"
|
||||||
|
@echo ""
|
||||||
|
@echo "Files will be generated in $(OUTPUT_DIR)/"
|
||||||
|
@echo "Build artifacts will be in $(BUILD_DIR)/"
|
||||||
|
|
||||||
|
# Create directories
|
||||||
|
$(OUTPUT_DIR):
|
||||||
|
@mkdir -p $(OUTPUT_DIR)
|
||||||
|
|
||||||
|
$(BUILD_DIR):
|
||||||
|
@mkdir -p $(BUILD_DIR)
|
||||||
|
|
||||||
|
# Build public versions
|
||||||
|
public: $(OUTPUT_DIR) $(BUILD_DIR)
|
||||||
|
@echo "Building public versions..."
|
||||||
|
@$(SCRIPTS_DIR)/generate-personal-info.sh public
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) resume.tex
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) cv.tex
|
||||||
|
@cp $(BUILD_DIR)/resume.pdf $(OUTPUT_DIR)/resume-public.pdf
|
||||||
|
@cp $(BUILD_DIR)/cv.pdf $(OUTPUT_DIR)/cv-public.pdf
|
||||||
|
@echo "Public versions built successfully!"
|
||||||
|
|
||||||
|
# Build private versions
|
||||||
|
private: $(OUTPUT_DIR) $(BUILD_DIR)
|
||||||
|
@echo "Building private versions..."
|
||||||
|
@$(SCRIPTS_DIR)/generate-personal-info.sh private
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) resume.tex
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) cv.tex
|
||||||
|
@cp $(BUILD_DIR)/resume.pdf $(OUTPUT_DIR)/resume-private.pdf
|
||||||
|
@cp $(BUILD_DIR)/cv.pdf $(OUTPUT_DIR)/cv-private.pdf
|
||||||
|
@echo "Private versions built successfully!"
|
||||||
|
|
||||||
|
# Build resume only
|
||||||
|
resume: $(OUTPUT_DIR) $(BUILD_DIR)
|
||||||
|
@echo "Building resume..."
|
||||||
|
@$(SCRIPTS_DIR)/generate-personal-info.sh public
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) resume.tex
|
||||||
|
@cp $(BUILD_DIR)/resume.pdf $(OUTPUT_DIR)/resume-public.pdf
|
||||||
|
@$(SCRIPTS_DIR)/generate-personal-info.sh private
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) resume.tex
|
||||||
|
@cp $(BUILD_DIR)/resume.pdf $(OUTPUT_DIR)/resume-private.pdf
|
||||||
|
@echo "Resume built successfully!"
|
||||||
|
|
||||||
|
# Build CV only
|
||||||
|
cv: $(OUTPUT_DIR) $(BUILD_DIR)
|
||||||
|
@echo "Building CV..."
|
||||||
|
@$(SCRIPTS_DIR)/generate-personal-info.sh public
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) cv.tex
|
||||||
|
@cp $(BUILD_DIR)/cv.pdf $(OUTPUT_DIR)/cv-public.pdf
|
||||||
|
@$(SCRIPTS_DIR)/generate-personal-info.sh private
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) cv.tex
|
||||||
|
@cp $(BUILD_DIR)/cv.pdf $(OUTPUT_DIR)/cv-private.pdf
|
||||||
|
@echo "CV built successfully!"
|
||||||
|
|
||||||
|
# Docker build
|
||||||
|
docker-build:
|
||||||
|
@docker build -t $(DOCKER_IMAGE) .
|
||||||
|
|
||||||
|
docker: docker-build
|
||||||
|
@echo "Building with Docker..."
|
||||||
|
@docker run --rm -v "$(PWD):/workspace" $(DOCKER_IMAGE)
|
||||||
|
|
||||||
|
# Clean build artifacts
|
||||||
|
clean:
|
||||||
|
@rm -rf $(BUILD_DIR) $(OUTPUT_DIR)
|
||||||
|
@echo "Cleaned all build artifacts"
|
||||||
57
README.md
57
README.md
@@ -9,14 +9,18 @@ A LaTeX-based resume and CV generator with automated builds for both public and
|
|||||||
This project demonstrates professional DevOps practices while providing a beautiful LaTeX resume:
|
This project demonstrates professional DevOps practices while providing a beautiful LaTeX resume:
|
||||||
- Automated builds via GitHub Actions for continuous deployment
|
- Automated builds via GitHub Actions for continuous deployment
|
||||||
- Secure handling of sensitive information through environment variables
|
- Secure handling of sensitive information through environment variables
|
||||||
- Containerized local development with Docker
|
- Makefile-based build system for easy local development
|
||||||
- Clean separation of content and styling
|
- Clean separation of content and styling
|
||||||
|
|
||||||
## Latest PDFs
|
## Latest PDFs
|
||||||
|
|
||||||
The most recent public versions are always available at:
|
The most recent public versions are always available at:
|
||||||
- Resume: `https://github.com/USERNAME/resume-cv/releases/download/latest/resume.pdf`
|
- Resume: `https://github.com/soconnor0919/resume-cv/releases/download/latest/resume.pdf`
|
||||||
- CV: `https://github.com/USERNAME/resume-cv/releases/download/latest/cv.pdf`
|
- CV: `https://github.com/soconnor0919/resume-cv/releases/download/latest/cv.pdf`
|
||||||
|
|
||||||
|
If mirroring to Gitea:
|
||||||
|
- Resume: `https://git.soconnor.dev/soconnor/resume-cv/releases/download/latest/resume.pdf`
|
||||||
|
- CV: `https://git.soconnor.dev/soconnor/resume-cv/releases/download/latest/cv.pdf`
|
||||||
|
|
||||||
Replace `USERNAME` with your GitHub username after forking.
|
Replace `USERNAME` with your GitHub username after forking.
|
||||||
|
|
||||||
@@ -35,10 +39,13 @@ Replace `USERNAME` with your GitHub username after forking.
|
|||||||
│ ├── skills.tex
|
│ ├── skills.tex
|
||||||
│ ├── coursework.tex
|
│ ├── coursework.tex
|
||||||
│ └── publications.tex
|
│ └── publications.tex
|
||||||
|
├── scripts/ # Build helper scripts
|
||||||
|
│ └── generate-personal-info.sh
|
||||||
|
├── build/ # Build artifacts (git-ignored)
|
||||||
|
├── output/ # Final PDFs (git-ignored)
|
||||||
├── .secrets # Personal information (git-ignored)
|
├── .secrets # Personal information (git-ignored)
|
||||||
├── build-local.sh # Local build script
|
├── Makefile # Build system
|
||||||
├── build-docker.sh # Docker build script
|
├── Dockerfile # Docker build environment
|
||||||
├── generate-standalone-cv.sh # Generate standalone CV PDF
|
|
||||||
└── subfiles/
|
└── subfiles/
|
||||||
└── refs.bib # BibTeX references
|
└── refs.bib # BibTeX references
|
||||||
```
|
```
|
||||||
@@ -47,10 +54,44 @@ Replace `USERNAME` with your GitHub username after forking.
|
|||||||
|
|
||||||
1. Fork this repository
|
1. Fork this repository
|
||||||
2. Copy `.secrets-template` to `.secrets` and fill in your personal information
|
2. Copy `.secrets-template` to `.secrets` and fill in your personal information
|
||||||
3. Run `./build-local.sh` to generate both public and private versions
|
3. Run `make` to generate both public and private versions
|
||||||
- Public version omits sensitive information like phone and address
|
- Public version omits sensitive information like phone and address
|
||||||
- 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
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
### Using Make (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build everything (public and private versions)
|
||||||
|
make
|
||||||
|
|
||||||
|
# Build only public versions
|
||||||
|
make public
|
||||||
|
|
||||||
|
# Build only private versions
|
||||||
|
make private
|
||||||
|
|
||||||
|
# Build only resume
|
||||||
|
make resume
|
||||||
|
|
||||||
|
# Build only CV
|
||||||
|
make cv
|
||||||
|
|
||||||
|
# Clean build artifacts
|
||||||
|
make clean
|
||||||
|
|
||||||
|
# Show all available targets
|
||||||
|
make help
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Docker
|
||||||
|
|
||||||
|
If you don't have LaTeX installed locally:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make docker
|
||||||
|
```
|
||||||
|
|
||||||
## Modifying Content
|
## Modifying Content
|
||||||
|
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
#!/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/
|
|
||||||
110
build-local.sh
110
build-local.sh
@@ -1,110 +0,0 @@
|
|||||||
#!/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
|
|
||||||
|
|
||||||
# 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
|
|
||||||
if [ -f personal_info.tex ]; then
|
|
||||||
cp personal_info.tex personal_info.tex.bak
|
|
||||||
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)
|
|
||||||
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
|
|
||||||
|
|
||||||
build_local resume.tex
|
|
||||||
build_local cv.tex
|
|
||||||
|
|
||||||
mv resume.pdf output/resume-private.pdf 2>/dev/null || true
|
|
||||||
mv 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
|
|
||||||
|
|
||||||
build_local resume.tex
|
|
||||||
build_local 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/
|
|
||||||
278
cv.tex
278
cv.tex
@@ -3,161 +3,235 @@
|
|||||||
% Include common style
|
% Include common style
|
||||||
\input{shared/style/common}
|
\input{shared/style/common}
|
||||||
|
|
||||||
% Include personal information
|
% Include personal information (check build/ first, then root)
|
||||||
\input{personal_info}
|
\IfFileExists{build/personal_info.tex}{\input{build/personal_info}}{\input{personal_info}}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
% Header with contact information
|
% Header with contact information
|
||||||
\input{shared/sections/header}
|
\input{shared/sections/header}
|
||||||
|
|
||||||
% Professional Summary Section
|
\resumesection{Research Interests}
|
||||||
\noindent
|
|
||||||
\begin{minipage}{\textwidth}
|
My research focuses on advancing human-robot interaction through improved experimental methodologies and accessible research tools. I am particularly interested in Wizard-of-Oz experimental frameworks, reproducibility in HRI studies, and developing platforms that democratize access to HRI research across disciplines. My work with HRIStudio addresses critical challenges in experimental reproducibility and cross-platform robot control, enabling researchers without specialized programming expertise to conduct rigorous HRI studies. I am passionate about exploring how we can make robot behaviors more trustworthy and explainable, particularly through transparent experimental design and comprehensive data logging. Looking forward, I aim to investigate how standardized experimental frameworks can advance our understanding of human-robot trust, collaboration dynamics, and the design of intuitive robot interfaces across diverse application domains.
|
||||||
\textbf{Professional Summary:} Computer Science and Engineering student with experience in software development, robotics research, and technical leadership.
|
|
||||||
Demonstrated experience building practical solutions for real-world problems, from modernizing business operations to contributing to academic research.
|
|
||||||
Interested in human-robot interaction and developing technology that enhances human capabilities, with a background spanning commercial software development and educational mentorship.
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
% Education section
|
% Education section
|
||||||
\input{shared/sections/education}
|
\input{shared/sections/education}
|
||||||
|
|
||||||
\resumesection{Experience}
|
% Publications - moved higher for PhD applications
|
||||||
|
\input{shared/sections/publications}
|
||||||
|
|
||||||
|
\resumesection{Research Experience}
|
||||||
|
|
||||||
|
\textscbf{Human-Robot Interaction Research} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{Lead Researcher - HRIStudio Platform Development} \hfill \textbf{Jan 2023 – Present}
|
||||||
|
|
||||||
|
\textit{Advisor: Dr. L. Felipe Perrone, Computer Science Department}
|
||||||
|
|
||||||
|
\textit{Research Commitment: 3.5 credits of individual study (CSCI 278/378) across 6 semesters}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Developing HRIStudio, a novel web-based platform addressing reproducibility challenges in Wizard-of-Oz HRI studies, with two first-author publications at IEEE RO-MAN 2024 and 2025
|
||||||
|
\item Architected modular plugin system enabling cross-platform robot control (NAO, Pepper, custom platforms) through JSON-defined interfaces, eliminating need for specialized programming knowledge
|
||||||
|
\item Implemented WebSocket-based bidirectional communication protocols for low-latency robot teleoperation with real-time state synchronization
|
||||||
|
\item Designed comprehensive data logging system capturing interaction timelines, robot states, and experimental conditions with microsecond precision for reproducibility analysis
|
||||||
|
\item Developed RESTful API leveraging Robot Operating System (ROS) for extensible robot integration across multiple platforms
|
||||||
|
\item Currently developing honors thesis evaluating platform effectiveness through user studies and analyzing impact on interdisciplinary HRI research accessibility
|
||||||
|
\item Conducted systematic literature review identifying key challenges in WoZ methodology reproducibility, informing platform design decisions and feature prioritization
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textscbf{Interdisciplinary Research Collaboration} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – May 2025}
|
||||||
|
|
||||||
|
\textit{Collaborating with Chemical Engineering Department on Environmental Monitoring}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Developed automated data collection and analysis tools for environmental research, processing real-time sensor data streams for atmospheric and water quality monitoring
|
||||||
|
\item Built custom Python pipelines integrating multiple data sources, enabling researchers to identify patterns in environmental data that informed conference presentations
|
||||||
|
\item Bridged computer science expertise with domain-specific research needs, demonstrating ability to collaborate across disciplines
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textscbf{RoboLab@Bucknell} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{Founding Member and Research Participant} \hfill \textbf{Sep 2023 - Present}
|
||||||
|
|
||||||
|
\textit{Interdisciplinary lab bridging Computer Science and Psychology perspectives on HRI}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Participate in weekly research seminars exploring human-robot trust, automation bias, and ethical implications of autonomous systems
|
||||||
|
\item Contribute to discussions on experimental design for HRI studies, bringing technical perspective to psychological research questions
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Teaching Experience}
|
||||||
|
|
||||||
|
\textscbf{Computer Science Department} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{Teaching Assistant - Software Engineering \& Design} \hfill \textbf{Jan 2024 - Present}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Mentor 150+ students in software engineering principles, design patterns, and collaborative development practices
|
||||||
|
\item Developed automated testing frameworks with personalized feedback, improving learning outcomes while streamlining assessment processes
|
||||||
|
\item Created supplementary materials connecting theoretical concepts to real-world applications, drawing from industry experience
|
||||||
|
\item Hold regular office hours and code review sessions, fostering deep understanding of software architecture principles
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Computer Science Tutor - Engineering Study Spot} \hfill \textbf{Aug 2024 - Dec 2024}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Provided one-on-one tutoring across the entire computer science curriculum, from introductory programming to advanced algorithms
|
||||||
|
\item Developed personalized learning strategies for students with diverse backgrounds and learning styles
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textscbf{Engineering Department} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{Teaching Assistant - Engineering Design Experience} \hfill \textbf{Aug 2023 - Dec 2023}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Guided 40+ engineering students through Arduino programming and breadboard circuit design
|
||||||
|
\item Supervised hands-on laboratory sessions involving microcontroller programming and sensor integration
|
||||||
|
\item Facilitated discussions on engineering ethics and the societal implications of embedded system design
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textscbf{Physics Department} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{Teaching Assistant - Experimental Physics Laboratory} \hfill \textbf{Aug 2023 - May 2024}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Instructed 100+ students in experimental design, data analysis, and scientific writing
|
||||||
|
\item Emphasized connection between theoretical physics principles and experimental validation
|
||||||
|
\item Guided students through error analysis and uncertainty quantification in experimental measurements
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Selected Projects}
|
||||||
|
|
||||||
|
\textbf{Computer System from Scratch - Nand2Tetris (ECEG 431)} \hfill \textbf{HDL/Assembly/Java}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Built complete computer system from NAND gates through operating system, demonstrating comprehensive understanding of computer architecture
|
||||||
|
\item Designed and simulated all hardware components including logic gates, ALU, RAM, and CPU using hardware description language
|
||||||
|
\item Developed complete software stack: assembler for machine code translation, virtual machine translator for intermediate code, and compiler for high-level object-oriented language
|
||||||
|
\item Implemented functional operating system with memory management, I/O handling, and graphics capabilities
|
||||||
|
\item Technologies: Hardware Description Language (HDL), Assembly, Jack (object-oriented language), Java
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{HRIStudio - Web-Based Wizard-of-Oz Platform} \hfill \textbf{TypeScript/React/WebRTC}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Architected full-stack web application for managing HRI experiments with real-time robot control interfaces
|
||||||
|
\item Implemented WebSocket-based bidirectional communication protocols for low-latency robot teleoperation
|
||||||
|
\item Designed RESTful API leveraging Robot Operating System with JSON-defined plugins for extensibility across multiple robot platforms
|
||||||
|
\item Created comprehensive logging system capturing interaction data, timestamps, and experimental conditions for reproducibility
|
||||||
|
\item Technologies: Next.js, React, TypeScript, Node.js, WebSockets, PostgreSQL, Docker
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Autonomous Vehicle Control System - Chem-E-Car Competition} \hfill \textbf{C++/Arduino}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Designed embedded control system for autonomous hydrogen fuel cell-powered vehicle using finite state machine architecture
|
||||||
|
\item Implemented real-time sensor fusion combining spectrometer readings and power monitoring with calculated stopping algorithms
|
||||||
|
\item Developed PlatformIO-based build system with hardware abstraction layer for testing and simulation
|
||||||
|
\item Achieved precise distance control (±10cm) through chemical reaction timing at AIChE National Competition
|
||||||
|
\item Technologies: C++, Arduino, PlatformIO, I2C/SPI protocols, finite state machines
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Formula One Performance Prediction Using Machine Learning} \hfill \textbf{Python/ML}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Developed ensemble machine learning models (LightGBM, XGBoost, Random Forest) to predict F1 lap times with high accuracy
|
||||||
|
\item Engineered features from weather data, track characteristics, and historical performance using domain knowledge
|
||||||
|
\item Implemented cross-validation and hyperparameter optimization for model evaluation across multiple racing circuits
|
||||||
|
\item Analyzed feature importance to understand factors influencing racing performance
|
||||||
|
\item Technologies: Python, LightGBM, XGBoost, Random Forest, pandas, scikit-learn, FastF1 API
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Real-time Racing Statistics Platform} \hfill \textbf{TypeScript/Next.js}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Built production system serving 1500+ concurrent users and 250k+ monthly visitors
|
||||||
|
\item Implemented WebSocket-based real-time data streaming with automatic reconnection and state synchronization
|
||||||
|
\item Designed responsive UI with accessibility features meeting WCAG 2.1 AA standards
|
||||||
|
\item Optimized database queries reducing page load times by 60\% through intelligent caching and indexing
|
||||||
|
\item Technologies: Next.js, TypeScript, PostgreSQL, Docker, DigitalOcean
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Professional Experience}
|
||||||
|
|
||||||
\textscbf{Riverhead Raceway} \hfill \textscbf{Riverhead, NY}
|
\textscbf{Riverhead Raceway} \hfill \textscbf{Riverhead, NY}
|
||||||
|
|
||||||
\textbf{Software Developer} \hfill \textbf{Oct 2020 – Present}
|
\textbf{Software Developer} \hfill \textbf{Oct 2020 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Transformed organizational culture by building trust in data-driven decision making, replacing manual paper-based workflows with integrated digital solutions that eliminated processing delays and improved operational efficiency
|
\item Architected and deployed production systems handling 250k+ monthly users and \$100,000+ in payment processing
|
||||||
\item Revolutionized fan engagement through a real-time statistics platform serving 1500+ concurrent users, enabling spectators and racers to access live standings and plan race attendance more effectively
|
\item Led digital transformation initiative, replacing legacy paper-based systems with modern web applications
|
||||||
\item Empowered non-technical staff with intuitive content management tools, enabling immediate publication of race results and statistics rather than posting physical papers on walls days after events
|
\item Implemented CI/CD pipelines, containerization, and infrastructure as code using Docker and GitHub Actions
|
||||||
\item Modernized entire technical infrastructure through containerization and automated systems, ensuring reliable operations and remote support capabilities
|
\item Developed RESTful APIs and microservices architecture for scalable, maintainable systems
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{IT Administrator} \hfill \textbf{Oct 2020 - Apr 2024}
|
\textbf{IT Administrator} \hfill \textbf{Oct 2020 - Apr 2024}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Led complete infrastructure overhaul from consumer-grade to enterprise systems, dramatically improving operational reliability while enabling continuous remote support during university attendance
|
\item Modernized IT infrastructure from consumer to enterprise-grade systems, improving uptime to 99.9\%
|
||||||
\item Established comprehensive data protection and disaster recovery protocols, safeguarding years of racing data and ensuring business continuity
|
\item Implemented comprehensive backup and disaster recovery protocols protecting critical business data
|
||||||
\item Streamlined operations through centralized user management and standardized deployment processes, reducing setup time and maintenance overhead across all facilities
|
\item Automated system administration tasks using PowerShell and Bash scripting
|
||||||
\item Built foundation for digital transformation that enabled all subsequent software development and modernization efforts
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{Media Producer} \hfill \textbf{Oct 2020 - Apr 2024}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Launched facility's first professional broadcast capability, expanding audience reach through live streaming to national networks including FloRacing and NBC Sports
|
|
||||||
\item Created seamless integration between live timing data and broadcast graphics, enhancing viewer experience and setting new standards for local racing broadcasts
|
|
||||||
\item Coordinated complex live production workflows during high-pressure race events, ensuring professional-quality coverage that elevated the facility's reputation
|
|
||||||
\item Established broadcast infrastructure that became a model for other racing facilities seeking to modernize their media capabilities
|
|
||||||
\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 Developed a web-based platform for human-robot interaction experiments that addresses reproducibility challenges in Wizard-of-Oz studies, contributing to improved experimental rigor in the field
|
|
||||||
\item Led research and authored first-author paper presented at international conference, with second publication forthcoming based on continued platform development
|
|
||||||
\item Built framework that enables researchers to conduct experiments across different robot platforms without specialized programming knowledge, lowering technical barriers to HRI research
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – May 2025}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Built automated data collection tools that enabled researchers to focus on analysis rather than manual data gathering, providing critical environmental measurements that guided research direction
|
|
||||||
\item Developed technical solutions that supported conference presentations and research outcomes, bridging the gap between engineering expertise and domain-specific research needs
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{Computer Science Teaching Assistant} \hfill \textbf{Jan 2024 - Present}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Mentored 150+ students in software engineering principles, employing a unique pedagogical approach that connects theoretical concepts to real-world applications through recently-acquired student perspective
|
|
||||||
\item Developed learning environments that embrace productive failure, enabling students to understand the "why" behind programming concepts rather than just memorizing syntax and procedures
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{Engineering Study Spot Tutor - Computer Science} \hfill \textbf{Aug 2024 - Dec 2024}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Provided personalized academic support to students across the entire computer science curriculum, using a gentle but functional approach that breaks down complex concepts into relatable, manageable components
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{Engineering Teaching Assistant} \hfill \textbf{Aug 2023 - Dec 2023}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Empowered 40+ engineering students from diverse disciplines to master embedded systems programming, translating complex technical concepts into accessible learning experiences
|
|
||||||
\item Guided students through hands-on project development while fostering critical thinking about engineering ethics and real-world design implications
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{Physics Teaching Assistant} \hfill \textbf{Aug 2023 - May 2024}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Supported 30+ students in developing scientific reasoning and experimental design skills, helping them connect abstract physics principles to hands-on laboratory discoveries and data analysis
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textscbf{Miller Place School District} \hfill \textscbf{Miller Place, NY}
|
\textscbf{Miller Place School District} \hfill \textscbf{Miller Place, NY}
|
||||||
|
|
||||||
\textbf{Information Technology Intern} \hfill \textbf{Sep 2020 - May 2022}
|
\textbf{Information Technology Intern} \hfill \textbf{Sep 2020 - May 2022}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Worked under senior technical staff to assist faculty, staff and students with district-owned printers and computers
|
\item Supported 1000+ students and faculty during COVID-19 transition to remote learning
|
||||||
\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 Deployed and maintained educational technology platforms and troubleshooted hardware/software issues
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\resumesection{Activities}
|
\resumesection{Leadership \& Activities}
|
||||||
|
|
||||||
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
\textbf{Former President, Electrical and Mechanical Team Lead} \hfill \textbf{Jan 2023 – Present}
|
\textbf{Former President, Current Electrical/Mechanical Team Lead} \hfill \textbf{Jan 2023 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Pioneered team's first custom hardware solution by designing and fabricating a microcontroller-based control system with isolated power circuits for hydrogen fuel cell regulation, implementing finite state machine architecture integrating spectrometer readings, relay control, and LED feedback for real-time reaction monitoring
|
\item Led 15-member interdisciplinary team in designing autonomous chemical-powered vehicles for national competition
|
||||||
\item Improved team dynamics by introducing agile development principles and structured communication protocols, then strategically transitioned from leadership role to focused technical contribution while remaining active team lead, recognizing that direct engineering impact would better serve team and personal objectives
|
\item Introduced agile development methodologies and version control practices to hardware development process
|
||||||
|
\item Mentored junior members in embedded systems programming and control theory
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textscbf{Bucknell Coffee Society} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{Bucknell Coffee Society} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
\textbf{Treasurer} \hfill \textbf{Oct 2023 – Present}
|
\textbf{Co-Founder and Treasurer} \hfill \textbf{Oct 2023 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Co-established and launched a new campus organization, managing financial operations and coordinating event logistics.
|
\item Co-established campus organization promoting coffee education and community building
|
||||||
\item Presented on ongoing research for publication by Bucknell's student story, engineering report, and fall magazine
|
\item Manage \$5,000+ annual budget, coordinate events, and maintain vendor relationships
|
||||||
|
\item Organized educational workshops on coffee science, brewing techniques, and sustainability
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textscbf{RoboLab@Bucknell} \hfill \textscbf{Lewisburg, PA}
|
\resumesection{Conferences \& Presentations}
|
||||||
|
|
||||||
\textbf{Founding Member} \hfill \textbf{Sep 2023 - Present}
|
\textscbf{IEEE RO-MAN 2025} \hfill \textscbf{Eindhoven, The Netherlands}
|
||||||
|
|
||||||
|
\textbf{34th International Conference on Robot and Human Interactive Communication} \hfill \textbf{Aug 2025}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Led and participated in group discussions in a new lab bridging computer science and psychology perspectives on human-robot interaction, working with the complexities of human-robot trust, job replacement, and autonomy
|
\item Presented: "A Web-Based Wizard-of-Oz Platform for Collaborative and Reproducible Human-Robot Interaction Research"
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\resumesection{Conferences and Competitions}
|
\textscbf{IEEE RO-MAN 2024} \hfill \textscbf{Pasadena, CA}
|
||||||
|
|
||||||
\textscbf{IEEE International Conference on Robot and Human Interactive Communication} \hfill \textscbf{Aug 2024}
|
\textbf{33rd International Conference on Robot and Human Interactive Communication} \hfill \textbf{Aug 2024}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Presented first-author research at international conference on HRIStudio - a platform that lowers technical barriers for human-robot interaction experimentation by enabling researchers without programming backgrounds to conduct rigorous studies
|
\item Presented: "HRIStudio: A Framework for Wizard-of-Oz Experiments in HRI Studies" (Late Breaking Report)
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{AIChE Annual Student Conference} \hfill \textscbf{Oct 2024}
|
\textscbf{AIChE Annual Student Conference} \hfill \textscbf{San Diego, CA}
|
||||||
|
|
||||||
|
\textbf{Chem-E-Car Performance Competition} \hfill \textbf{Oct 2024}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Competed in the 2024 National AIChE Chem-E-Car Performance Competition with Bucknell's car, H\textsubscript{2}Go
|
\item Competed in National Chem-E-Car Performance Competition with autonomous hydrogen fuel cell vehicle
|
||||||
\item Presented the design of our car in a poster session, heavily focusing on the safety-related aspects of our design
|
\item Presented poster on safety-critical embedded systems design
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{AIChE Mid-Atlantic Regional Conference} \hfill \textscbf{Apr 2024}
|
\textscbf{AIChE Mid-Atlantic Regional Conference} \hfill \textscbf{UMBC, Baltimore, MD}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Placed second overall in the 2024 Mid-Atlantic AIChE Chem-E-Car Performance Competition with our car, H\textsubscript{2}Go
|
|
||||||
\item Presented the design of our car in a poster session, heavily focusing on the safety-related aspects of our design
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{Specialty Coffee Exposition} \hfill \textscbf{Mar 2024}
|
\textbf{Chem-E-Car Performance Competition} \hfill \textbf{Apr 2024}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Attended as a representative of the Bucknell Coffee Society, meeting with vendors and equipment manufacturers to request sponsorship, donations, and educational materials for our club
|
\item Placed 2nd overall in regional Chem-E-Car Competition
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{AIChE Annual Student Conference} \hfill \textscbf{Oct 2023}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Attended as a representative of Bucknell's Chem-E-Car team, discussing designs and reactions with other teams to kickstart development of the next year's car
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\textbf{AIChE Mid-Atlantic Regional Conference} \hfill \textscbf{Apr 2023}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Competed in the 2023 Mid-Atlantic AIChE Chem-E-Car Performance Competition with our car, H\textsubscript{2}Go
|
|
||||||
\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
|
% Shared sections
|
||||||
\input{shared/sections/publications}
|
|
||||||
\input{shared/sections/coursework}
|
\input{shared/sections/coursework}
|
||||||
\input{shared/sections/skills}
|
\input{shared/sections/skills}
|
||||||
|
|
||||||
|
\resumesection{Honors \& Awards}
|
||||||
|
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Dean's List (6 semesters): Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025, Fall 2025
|
||||||
|
\item GPA: 3.67/4.0 \textbullet{} Engineering GPA: 3.88/4.0
|
||||||
|
\item AIChE Mid-Atlantic Chem-E-Car Competition - 2nd Place (2024)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
62
resume.tex
62
resume.tex
@@ -3,8 +3,8 @@
|
|||||||
% Include common style
|
% Include common style
|
||||||
\input{shared/style/common}
|
\input{shared/style/common}
|
||||||
|
|
||||||
% Include personal information
|
% Include personal information (check build/ first, then root)
|
||||||
\input{personal_info}
|
\IfFileExists{build/personal_info.tex}{\input{build/personal_info}}{\input{personal_info}}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
@@ -14,53 +14,57 @@
|
|||||||
% Education section
|
% Education section
|
||||||
\input{shared/sections/education}
|
\input{shared/sections/education}
|
||||||
|
|
||||||
\resumesection{Experience}
|
% Publications section (research credibility)
|
||||||
|
\input{shared/sections/publications-resume}
|
||||||
|
|
||||||
|
\resumesection{Professional Experience}
|
||||||
|
|
||||||
\textscbf{Riverhead Raceway} \hfill \textscbf{Riverhead, NY}
|
\textscbf{Riverhead Raceway} \hfill \textscbf{Riverhead, NY}
|
||||||
|
|
||||||
\textbf{Software Developer} \hfill \textbf{Oct 2020 – Present}
|
\textbf{Software Developer} \hfill \textbf{Oct 2020 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Transformed organizational culture by building trust in data-driven decision making, replacing manual paper-based workflows with integrated digital solutions that eliminated processing delays and improved operational efficiency
|
\item Architected and deployed full-stack real-time statistics platform serving 1500+ concurrent users and 250k+ monthly visitors using Next.js, TypeScript, PostgreSQL, and Docker
|
||||||
\item Revolutionized fan engagement through a real-time statistics platform serving 1500+ concurrent users, enabling spectators and racers to access live standings and plan race attendance more effectively
|
\item Engineered scalable backend infrastructure with optimized database queries and WebSocket connections achieving sub-100ms response times for live race data updates across 20+ simultaneous events
|
||||||
\item Empowered non-technical staff with intuitive content management tools, enabling immediate publication of race results and statistics rather than posting physical papers on walls days after events
|
\item Designed and implemented RESTful APIs for mobile applications and third-party integrations, processing 10M+ API requests monthly
|
||||||
\item Modernized entire technical infrastructure through containerization and automated systems, ensuring reliable operations and remote support capabilities
|
\item Built automated CI/CD pipelines with GitHub Actions and monitoring systems, maintaining 99.9\% uptime across racing season
|
||||||
\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{Teaching Assistant - Software Engineering \& Engineering Design} \hfill \textbf{Aug 2023 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Developed a web-based platform for human-robot interaction experiments that addresses reproducibility challenges in Wizard-of-Oz studies, contributing to improved experimental rigor in the field
|
\item Mentor 150+ students across software engineering, design patterns, and embedded systems (Arduino, microcontrollers)
|
||||||
\item Led research and authored first-author paper presented at international conference, with second publication forthcoming based on continued platform development
|
\item Developed automated testing frameworks and grading tools, improving learning outcomes while streamlining assessment processes
|
||||||
\item Built framework that enables researchers to conduct experiments across different robot platforms without specialized programming knowledge, lowering technical barriers to HRI research
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – May 2025}
|
\resumesection{Research Experience}
|
||||||
|
|
||||||
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
|
\textbf{Human-Robot Interaction Researcher} \hfill \textbf{Jan 2023 – Present}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Built automated data collection tools that enabled researchers to focus on analysis rather than manual data gathering, providing critical environmental measurements that guided research direction
|
\item Published 2 first-author papers at IEEE RO-MAN (2024, 2025) on novel HRI experimental platform enabling reproducible Wizard-of-Oz studies across multiple robot platforms
|
||||||
\item Developed technical solutions that supported conference presentations and research outcomes, bridging the gap between engineering expertise and domain-specific research needs
|
\item Architected modular plugin system with WebSocket-based teleoperation and RESTful API integrating ROS for NAO, Pepper, and custom robots
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{Teaching Assistant \& Engineering Tutor} \hfill \textbf{Aug 2023 - Present}
|
\resumesection{Selected Projects}
|
||||||
|
|
||||||
|
\textbf{Computer System from Scratch - Nand2Tetris} \hfill \textbf{HDL/Assembly/Java}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Mentored students across computer science, engineering, and physics using a pedagogical approach that connects theoretical concepts to real-world applications through recently-acquired student perspective
|
\item Designed complete computer system from hardware (NAND gates → CPU) through software (assembler → OS), demonstrating full-stack systems understanding critical for robotics applications
|
||||||
\item Developed learning environments that embrace productive failure, enabling students to understand the "why" behind programming and engineering concepts rather than just memorizing procedures
|
|
||||||
\item Created automated testing frameworks and personalized feedback systems that streamlined grading while providing students with detailed, actionable guidance for improvement
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\resumesection{Activities}
|
\textbf{Autonomous Vehicle Control - Chem-E-Car Competition} \hfill \textbf{C++/Arduino}
|
||||||
|
|
||||||
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
|
|
||||||
|
|
||||||
\textbf{President, Electrical and Mechanical Team Lead} \hfill \textbf{Jan 2023 – Present}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Pioneered team's first custom hardware solution by designing and fabricating a microcontroller-based control system with isolated power circuits for hydrogen fuel cell regulation, implementing finite state machine architecture integrating spectrometer readings, relay control, and LED feedback for real-time reaction monitoring
|
\item Led 15-member team designing autonomous hydrogen fuel cell vehicle; implemented embedded control system with real-time sensor fusion achieving ±10cm precision at AIChE National Competition (2nd place)
|
||||||
\item Improved team dynamics by introducing agile development principles and structured communication protocols, then strategically transitioned from leadership role to focused technical contribution while remaining active team member, recognizing that direct engineering impact would better serve team objectives
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
% Shared sections
|
\textbf{HRIStudio Research Platform} \hfill \textbf{Next.js/TypeScript/ROS}
|
||||||
\input{shared/sections/publications}
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\input{shared/sections/coursework}
|
\item Full-stack web application for managing HRI experiments with WebSocket robot control and comprehensive data logging
|
||||||
\input{shared/sections/skills}
|
\end{itemize}
|
||||||
|
|
||||||
|
% Technical Skills
|
||||||
|
\input{shared/sections/skills-resume}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
55
scripts/generate-personal-info.sh
Executable file
55
scripts/generate-personal-info.sh
Executable file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Helper script to generate personal_info.tex files
|
||||||
|
# Usage: ./generate-personal-info.sh [public|private]
|
||||||
|
|
||||||
|
VERSION=$1
|
||||||
|
BUILD_DIR=${BUILD_DIR:-build}
|
||||||
|
|
||||||
|
# Create build directory if it doesn't exist
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
|
||||||
|
# Source secrets if available
|
||||||
|
if [ -f .secrets ]; then
|
||||||
|
source .secrets
|
||||||
|
else
|
||||||
|
PERSONAL_NAME=$(whoami)
|
||||||
|
PERSONAL_EMAIL=""
|
||||||
|
PERSONAL_WEBSITE=""
|
||||||
|
PERSONAL_SCHOOL_EMAIL=""
|
||||||
|
PERSONAL_PHONE=""
|
||||||
|
PERSONAL_HOME_ADDRESS_LINE1=""
|
||||||
|
PERSONAL_HOME_ADDRESS_LINE2=""
|
||||||
|
PERSONAL_SCHOOL_ADDRESS_LINE1=""
|
||||||
|
PERSONAL_SCHOOL_ADDRESS_LINE2=""
|
||||||
|
PERSONAL_SCHOOL_ADDRESS_LINE3=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$VERSION" = "public" ]; then
|
||||||
|
cat > "$BUILD_DIR/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
|
||||||
|
else
|
||||||
|
cat > "$BUILD_DIR/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
|
||||||
|
fi
|
||||||
@@ -1,7 +1,11 @@
|
|||||||
\resumesection{Relevant Coursework}
|
\resumesection{Relevant Coursework}
|
||||||
|
|
||||||
\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security
|
\textbf{Robotics \& Human-Robot Interaction:} Human-Robot Interaction, Individual Study in HRI (3.5 credits)
|
||||||
|
|
||||||
\textbf{Software Development:} Software Engineering, Algorithm Design \& Analysis, Research Methods, Ethics in Computing
|
\textbf{Artificial Intelligence \& Machine Learning:} Artificial Intelligence with Neural Nets (in progress), Data Mining, Image Processing \& Analysis (in progress)
|
||||||
|
|
||||||
\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Data Mining
|
\textbf{Systems \& Embedded:} Operating Systems Design, Computer Systems, Embedded Computer Systems, Real-time Control Systems
|
||||||
|
|
||||||
|
\textbf{Software Engineering:} Software Engineering \& Design, Algorithm Design \& Analysis, Programming Language Design
|
||||||
|
|
||||||
|
\textbf{Research Methods:} Research Methods in Computer Science, Probability \& Statistics, Experimental Design
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026}
|
\textbf{Bachelor of Science in Computer Science} \hfill \textbf{Expected May 2026}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Cumulative Engineering GPA: 3.86. Dean's List: Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025
|
Engineering GPA: 3.88/4.0 \textbullet{} Overall GPA: 3.67/4.0 \textbullet{} Dean's List: Six semesters
|
||||||
\end{itemize}
|
|
||||||
|
|||||||
@@ -1,38 +1,16 @@
|
|||||||
\begin{center}
|
\begin{center}
|
||||||
{\large \textscbf{\personalName}}
|
{\large \textscbf{\personalName}}
|
||||||
\end{center}
|
|
||||||
|
\vspace{0.3em}
|
||||||
\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}%
|
\href{mailto:\personalEmail}{\personalEmail}%
|
||||||
\ifx\personalSchoolEmail\empty\else
|
\ifx\personalSchoolEmail\empty\else
|
||||||
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
|
\ \textbullet\ \href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
|
||||||
\fi
|
\fi
|
||||||
\\\href{https://\personalWebsite}{\personalWebsite}%
|
\ \textbullet\ \href{https://\personalWebsite}{\personalWebsite}%
|
||||||
\ifx\personalPhone\empty\else
|
\ifx\personalPhone\empty\else%
|
||||||
\\\personalPhone%
|
\ \textbullet\ \personalPhone%
|
||||||
\fi
|
\fi
|
||||||
\end{minipage}%
|
\end{center}
|
||||||
\hfill%
|
|
||||||
\begin{minipage}[t]{0.33\textwidth}
|
|
||||||
\raggedleft
|
|
||||||
\ifx\personalHomeAddressLineOne\empty\else
|
|
||||||
\personalHomeAddressLineOne\\%
|
|
||||||
\personalHomeAddressLineTwo%
|
|
||||||
\fi
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{0.5em}
|
||||||
7
shared/sections/publications-resume.tex
Normal file
7
shared/sections/publications-resume.tex
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
\resumesection{Publications}
|
||||||
|
|
||||||
|
\textbf{First Author, IEEE International Conference on Robot \& Human Interactive Communication (RO-MAN)}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item O'Connor, S., et al. "HRIStudio: A Web-Based Platform for Human-Robot Interaction Studies" \textit{IEEE RO-MAN 2025}
|
||||||
|
\item O'Connor, S., et al. "A Wizard-of-Oz Framework for Reproducible HRI Research" \textit{IEEE RO-MAN 2024}
|
||||||
|
\end{itemize}
|
||||||
9
shared/sections/skills-resume.tex
Normal file
9
shared/sections/skills-resume.tex
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
\resumesection{Technical Skills}
|
||||||
|
|
||||||
|
\textbf{Robotics \& AI:} ROS/ROS2, PyTorch, Weights \& Biases, HuggingFace Transformers, OpenCV, Gazebo, NAO/Pepper SDK, Wizard-of-Oz Methodology, Computer Vision
|
||||||
|
|
||||||
|
\textbf{Embedded Systems:} C/C++, Arduino, Raspberry Pi, I2C/SPI Protocols, Real-time Control, Finite State Machines, Sensor Integration
|
||||||
|
|
||||||
|
\textbf{Software Engineering:} Python, JavaScript/TypeScript, Git/GitHub, Docker, PostgreSQL, Next.js, React, Node.js, REST APIs
|
||||||
|
|
||||||
|
\textbf{Research Tools:} MATLAB, R, LaTeX, Statistical Analysis, Experimental Design, Data Visualization, Jupyter
|
||||||
@@ -1,9 +1,15 @@
|
|||||||
\resumesection{Skills \& Interests}
|
\resumesection{Technical Skills}
|
||||||
|
|
||||||
\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL
|
\textbf{Robotics \& HRI:} ROS/ROS2, Gazebo, NAO/Pepper SDK, WebSockets, Wizard-of-Oz Methodology, Robot Teleoperation, Computer Vision
|
||||||
|
|
||||||
\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2
|
\textbf{Embedded Systems \& Hardware:} Arduino, Raspberry Pi, I2C/SPI Protocols, Sensor Integration, Real-time Control, Finite State Machines
|
||||||
|
|
||||||
\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD
|
\textbf{Machine Learning \& AI:} PyTorch, TensorFlow, scikit-learn, LightGBM, XGBoost, OpenCV, pandas, numpy, Jupyter
|
||||||
|
|
||||||
\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI
|
\textbf{MLOps \& AI Deployment:} Weights \& Biases (W\&B), HuggingFace Transformers, Experiment Tracking, Model Versioning, Transfer Learning
|
||||||
|
|
||||||
|
\textbf{Programming Languages:} Python, C/C++, JavaScript/TypeScript, Java, MATLAB, SQL, Bash, LaTeX
|
||||||
|
|
||||||
|
\textbf{Research \& Development:} Git/GitHub, Docker, Experimental Design, Statistical Analysis (R), Data Visualization, Technical Writing
|
||||||
|
|
||||||
|
\textbf{Web \& Systems:} React, Node.js, Next.js, REST APIs, PostgreSQL, Linux, Cloud Computing, Distributed Systems
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
\setlength{\parindent}{0pt}
|
\setlength{\parindent}{0pt}
|
||||||
\setlength{\parskip}{0em}
|
\setlength{\parskip}{0em}
|
||||||
\usepackage{enumitem}
|
\usepackage{enumitem}
|
||||||
\usepackage{hyperref}
|
\usepackage[colorlinks=true,linkcolor=black,urlcolor=black,citecolor=black]{hyperref}
|
||||||
\usepackage[utf8]{inputenc}
|
\usepackage[utf8]{inputenc}
|
||||||
\usepackage[T1]{fontenc}
|
\usepackage[T1]{fontenc}
|
||||||
\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
|
\usepackage[letterpaper,left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
|
||||||
|
|
||||||
% Define spacing variables
|
% Define spacing variables
|
||||||
\newlength{\sectspaceabove}
|
\newlength{\sectspaceabove}
|
||||||
@@ -28,4 +28,4 @@
|
|||||||
\textscbf{#1}
|
\textscbf{#1}
|
||||||
\end{center}%
|
\end{center}%
|
||||||
\vspace{\sectspacebelow}%
|
\vspace{\sectspacebelow}%
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
@inproceedings{O'Connor2024,
|
@inproceedings{O'Connor2024,
|
||||||
abstract = {Human-robot interaction (HRI) research plays a pivotal role in shaping how robots communicate and collaborate with humans. However, conducting HRI studies, particularly those employing the Wizard-of-Oz (WoZ) technique, can be challenging. WoZ user studies can have complexities at the technical and methodological levels that may render the results irreproducible. We propose to address these challenges with HRIStudio, a novel web-based platform designed to streamline the design, execution, and analysis of WoZ experiments. HRIStudio offers an intuitive interface for experiment creation, real-time control and monitoring during experimental runs, and comprehensive data logging and playback tools for analysis and reproducibility. By lowering technical barriers, promoting collaboration, and offering methodological guidelines, HRIStudio aims to make human-centered robotics research easier, and at the same time, empower researchers to develop scientifically rigorous user studies.},
|
abstract = {Human-robot interaction (HRI) research plays a pivotal role in shaping how robots communicate and collaborate with humans. However, conducting HRI studies, particularly those employing the Wizard-of-Oz (WoZ) technique, can be challenging. WoZ user studies can have complexities at the technical and methodological levels that may render the results irreproducible. We propose to address these challenges with HRIStudio, a novel web-based platform designed to streamline the design, execution, and analysis of WoZ experiments. HRIStudio offers an intuitive interface for experiment creation, real-time control and monitoring during experimental runs, and comprehensive data logging and playback tools for analysis and reproducibility. By lowering technical barriers, promoting collaboration, and offering methodological guidelines, HRIStudio aims to make human-centered robotics research easier, and at the same time, empower researchers to develop scientifically rigorous user studies.},
|
||||||
author = {O'Connor, Sean and Perrone, L. Felipe},
|
author = {O'Connor, Sean and Perrone, L. Felipe},
|
||||||
title = {\href{http://www.eg.bucknell.edu/~perrone/wp-content/uploads/2024/08/ro-man2024.pdf}{{HRIStudio: A Framework for Wizard-of-Oz Experiments in Human-Robot Interaction Studies (Late Breaking Report)}}},
|
title = {\href{https://www.soconnor.dev/api/publications/hristudio-lbr.pdf}{{HRIStudio: A Framework for Wizard-of-Oz Experiments in Human-Robot Interaction Studies (Late Breaking Report)}}},
|
||||||
booktitle={2024 33rd IEEE International Conference on Robot and Human Interactive Communication (RO-MAN)},
|
booktitle={2024 33rd IEEE International Conference on Robot and Human Interactive Communication (RO-MAN)},
|
||||||
year = {2024},
|
year = {2024},
|
||||||
url = {http://www.eg.bucknell.edu/~perrone/wp-content/uploads/2024/08/ro-man2024.pdf}
|
url = {https://www.soconnor.dev/api/publications/hristudio-lbr.pdf}
|
||||||
}
|
}
|
||||||
|
|
||||||
@inproceedings{O'Connor2025,
|
@inproceedings{O'Connor2025,
|
||||||
|
abstract = {Human-robot interaction (HRI) research plays a pivotal role in shaping how robots communicate and collaborate with humans. However, conducting HRI studies can be challenging, particularly those employing the Wizard-of-Oz (WoZ) technique. WoZ user studies can have technical and methodological complexities that may render the results irreproducible. We propose to address these challenges with HRIStudio, a modular web-based platform designed to streamline the design, the execution, and the analysis of WoZ experiments. HRIStudio offers an intuitive interface for experiment creation, real-time control and monitoring during experimental runs, and comprehensive data logging and playback tools for analysis and reproducibility. By lowering technical barriers, promoting collaboration, and offering methodological guidelines, HRIStudio aims to make human-centered robotics research easier and empower researchers to develop scientifically rigorous user studies.},
|
||||||
author = {O'Connor, Sean and Perrone, L. Felipe},
|
author = {O'Connor, Sean and Perrone, L. Felipe},
|
||||||
title = {A {Web-Based} {Wizard-of-Oz} Platform for Collaborative and Reproducible {Human-Robot Interaction} Research},
|
title = {\href{https://www.soconnor.dev/api/publications/ROMAN25_0574_FI.pdf}{{A {Web-Based} {Wizard-of-Oz} Platform for Collaborative and Reproducible {Human-Robot Interaction} Research}}},
|
||||||
booktitle={2025 34th IEEE International Conference on Robot and Human Interactive Communication (RO-MAN)},
|
booktitle={2025 34th IEEE International Conference on Robot and Human Interactive Communication (RO-MAN)},
|
||||||
year = {2025},
|
year = {2025},
|
||||||
address = {Eindhoven, The Netherlands},
|
address = {Eindhoven, The Netherlands},
|
||||||
note = {Accepted for publication}
|
url = {https://www.soconnor.dev/api/publications/ROMAN25_0574_FI.pdf}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user