mirror of
https://github.com/soconnor0919/resume-cv.git
synced 2026-02-04 21:06:31 -05:00
Compare commits
7 Commits
release-38
...
release-45
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad46c2ba70 | ||
|
|
5b99a95078 | ||
|
|
fa5d42251d | ||
|
|
61258bf16e | ||
|
|
066d84c5b8 | ||
|
|
59f172bd0b | ||
| e54a0e36e6 |
68
.github/workflows/compile-latex.yml
vendored
68
.github/workflows/compile-latex.yml
vendored
@@ -64,30 +64,64 @@ jobs:
|
||||
- name: List generated PDFs
|
||||
run: ls -la *.pdf
|
||||
|
||||
- name: Upload Public PDFs as Release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
# --- GITHUB RELEASES (Run only on GitHub) ---
|
||||
- name: Upload Public PDFs as Release (GitHub)
|
||||
if: github.server_url == 'https://github.com'
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: "*.pdf"
|
||||
artifacts: "resume.pdf,cv.pdf"
|
||||
tag: latest
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
name: Latest PDFs
|
||||
body: |
|
||||
Latest version of resume and CV (public version)
|
||||
Latest compiled resume and CV (public versions)
|
||||
|
||||
This release is automatically updated with each push to main. For versioned releases, see the numbered releases.
|
||||
Built from commit ${{ github.sha }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
allowUpdates: true
|
||||
removeArtifacts: true
|
||||
replacesArtifacts: true
|
||||
|
||||
# Create a numbered release for version history
|
||||
- name: Create Numbered Release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
- name: Create Numbered Release (GitHub)
|
||||
if: github.server_url == 'https://github.com'
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: "*.pdf"
|
||||
artifacts: "resume.pdf,cv.pdf"
|
||||
tag: release-${{ github.run_number }}
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
name: Release ${{ github.run_number }}
|
||||
body: |
|
||||
Version ${{ github.run_number }} of resume and CV (public version)
|
||||
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: |
|
||||
resume.pdf
|
||||
cv.pdf
|
||||
name: Latest PDFs
|
||||
tag_name: latest
|
||||
prerelease: false
|
||||
draft: false
|
||||
|
||||
- name: Create Numbered Release (Gitea)
|
||||
if: github.server_url != 'https://github.com'
|
||||
uses: akkuman/gitea-release-action@v1
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
files: |
|
||||
resume.pdf
|
||||
cv.pdf
|
||||
name: Release ${{ github.run_number }}
|
||||
tag_name: release-${{ github.run_number }}
|
||||
prerelease: false
|
||||
draft: false
|
||||
|
||||
build-private:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -150,7 +184,7 @@ jobs:
|
||||
run: ls -la *.pdf
|
||||
|
||||
- name: Upload Private PDFs
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: private-documents
|
||||
path: |
|
||||
|
||||
41
.gitignore
vendored
41
.gitignore
vendored
@@ -1,38 +1,19 @@
|
||||
# LaTeX build files
|
||||
# Ignore build artifacts
|
||||
build/
|
||||
output/
|
||||
|
||||
# LaTeX temporary files
|
||||
*.aux
|
||||
*.lof
|
||||
*.log
|
||||
*.lot
|
||||
*.fls
|
||||
*.out
|
||||
*.toc
|
||||
*.fmt
|
||||
*.fot
|
||||
*.cb
|
||||
*.cb2
|
||||
.*.lb
|
||||
*.pdf
|
||||
*.dvi
|
||||
*.xdv
|
||||
*-converted-to.*
|
||||
.pdf
|
||||
*.fls
|
||||
*.fdb_latexmk
|
||||
*.synctex.gz
|
||||
*.bbl
|
||||
*.blg
|
||||
*.synctex.gz
|
||||
*.fdb_latexmk
|
||||
|
||||
# GitHub Secrets
|
||||
# Personal information
|
||||
.secrets
|
||||
|
||||
# Private information
|
||||
personal_info_private.tex
|
||||
personal_info.tex
|
||||
|
||||
# macOS system files
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Editor files
|
||||
.vscode/
|
||||
.idea/
|
||||
# OS files
|
||||
.DS_Store
|
||||
@@ -7,11 +7,10 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt-get update && apt-get install -y \
|
||||
texlive-full \
|
||||
latexmk \
|
||||
make \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /workspace
|
||||
|
||||
COPY . .
|
||||
|
||||
# For build
|
||||
CMD ["latexmk", "-pdf", "-file-line-error", "-halt-on-error", "-interaction=nonstopmode", "resume.tex", "cv.tex"]
|
||||
# Default command runs make
|
||||
CMD ["make", "all"]
|
||||
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"
|
||||
49
README.md
49
README.md
@@ -9,7 +9,7 @@ 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:
|
||||
- Automated builds via GitHub Actions for continuous deployment
|
||||
- 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
|
||||
|
||||
## Latest PDFs
|
||||
@@ -39,10 +39,13 @@ Replace `USERNAME` with your GitHub username after forking.
|
||||
│ ├── skills.tex
|
||||
│ ├── coursework.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)
|
||||
├── build-local.sh # Local build script
|
||||
├── build-docker.sh # Docker build script
|
||||
├── generate-standalone-cv.sh # Generate standalone CV PDF
|
||||
├── Makefile # Build system
|
||||
├── Dockerfile # Docker build environment
|
||||
└── subfiles/
|
||||
└── refs.bib # BibTeX references
|
||||
```
|
||||
@@ -51,10 +54,44 @@ Replace `USERNAME` with your GitHub username after forking.
|
||||
|
||||
1. Fork this repository
|
||||
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
|
||||
- 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
|
||||
|
||||
|
||||
@@ -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/
|
||||
124
build-local.sh
124
build-local.sh
@@ -1,124 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if building specific CV variant
|
||||
CV_VARIANT=""
|
||||
if [ "$1" = "cv-upenn" ]; then
|
||||
CV_VARIANT="cv-upenn"
|
||||
echo "Building UPenn-optimized CV..."
|
||||
fi
|
||||
|
||||
# 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 specific CV variant if requested
|
||||
if [ "$CV_VARIANT" = "cv-upenn" ]; then
|
||||
build_local cv-upenn.tex
|
||||
mv cv-upenn.pdf output/cv-upenn.pdf
|
||||
echo "UPenn CV build complete! Generated: output/cv-upenn.pdf"
|
||||
else
|
||||
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/
|
||||
fi
|
||||
31
cv.tex
31
cv.tex
@@ -3,8 +3,8 @@
|
||||
% Include common style
|
||||
\input{shared/style/common}
|
||||
|
||||
% Include personal information
|
||||
\input{personal_info}
|
||||
% Include personal information (check build/ first, then root)
|
||||
\IfFileExists{build/personal_info.tex}{\input{build/personal_info}}{\input{personal_info}}
|
||||
|
||||
\begin{document}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
\resumesection{Research Interests}
|
||||
|
||||
I'm passionate about human-robot interaction and developing technologies that make robots better collaborators with humans. My work focuses on creating reproducible research methodologies, particularly through Wizard-of-Oz experiments, and building platforms that lower barriers for HRI researchers. I'm especially interested in how we can make robot behaviors more trustworthy and explainable, and how to design effective frameworks for studying human-robot collaboration across different contexts and applications.
|
||||
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.
|
||||
|
||||
% Education section
|
||||
\input{shared/sections/education}
|
||||
@@ -28,12 +28,16 @@ I'm passionate about human-robot interaction and developing technologies that ma
|
||||
\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 Designed modular architecture enabling cross-platform robot control without specialized programming knowledge, lowering technical barriers for HRI researchers across disciplines
|
||||
\item Implemented comprehensive data logging and playback capabilities for experimental analysis, supporting rigorous scientific methodology in human-robot interaction studies
|
||||
\item Currently developing honors thesis evaluating platform effectiveness and impact on interdisciplinary HRI research accessibility
|
||||
\item Conducted literature review identifying key challenges in WoZ methodology reproducibility, informing platform design decisions and feature prioritization
|
||||
\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}
|
||||
@@ -95,6 +99,15 @@ I'm passionate about human-robot interaction and developing technologies that ma
|
||||
|
||||
\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
|
||||
@@ -216,8 +229,8 @@ I'm passionate about human-robot interaction and developing technologies that ma
|
||||
\resumesection{Honors \& Awards}
|
||||
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Dean's List (5 semesters): Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025
|
||||
\item Engineering GPA: 3.86/4.0
|
||||
\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}
|
||||
|
||||
|
||||
70
resume.tex
70
resume.tex
@@ -3,8 +3,8 @@
|
||||
% Include common style
|
||||
\input{shared/style/common}
|
||||
|
||||
% Include personal information
|
||||
\input{personal_info}
|
||||
% Include personal information (check build/ first, then root)
|
||||
\IfFileExists{build/personal_info.tex}{\input{build/personal_info}}{\input{personal_info}}
|
||||
|
||||
\begin{document}
|
||||
|
||||
@@ -14,71 +14,57 @@
|
||||
% Education section
|
||||
\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}
|
||||
|
||||
\textbf{Software Developer} \hfill \textbf{Oct 2020 – Present}
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Developed real-time statistics platform serving 1500+ concurrent users and 250k monthly website visits
|
||||
\item Built payment processing platform handling \$100,000+ in transactions with automated content management
|
||||
\item Modernized infrastructure through containerization and automation for reliable operations
|
||||
\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 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 Designed and implemented RESTful APIs for mobile applications and third-party integrations, processing 10M+ API requests monthly
|
||||
\item Built automated CI/CD pipelines with GitHub Actions and monitoring systems, maintaining 99.9\% uptime across racing season
|
||||
\end{itemize}
|
||||
|
||||
\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]
|
||||
\item Led research and authored first-author papers at IEEE RO-MAN 2024 and 2025 conferences
|
||||
\item Developed web-based HRIStudio platform addressing reproducibility challenges in Wizard-of-Oz studies
|
||||
\item Mentor 150+ students across software engineering, design patterns, and embedded systems (Arduino, microcontrollers)
|
||||
\item Developed automated testing frameworks and grading tools, improving learning outcomes while streamlining assessment processes
|
||||
\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]
|
||||
\item Built automated data collection tools enabling researchers to focus on analysis over manual gathering
|
||||
\end{itemize}
|
||||
|
||||
\textbf{Teaching Assistant \& Engineering Tutor} \hfill \textbf{Aug 2023 - Present}
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Mentored 200+ students across CS, engineering, and physics connecting theory to real-world applications
|
||||
\item Created automated testing frameworks with personalized feedback streamlining assessment processes
|
||||
\end{itemize}
|
||||
|
||||
\resumesection{Activities}
|
||||
|
||||
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Bucknell University}
|
||||
|
||||
\textbf{Former President, Electrical and Mechanical Team Lead} \hfill \textbf{Jan 2023 – Present}
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Designed custom microcontroller control system for hydrogen fuel cell regulation using finite state machine architecture
|
||||
\end{itemize}
|
||||
|
||||
\textscbf{Bucknell Coffee Society} \hfill \textscbf{Bucknell University}
|
||||
|
||||
\textbf{Co-Founder and Treasurer} \hfill \textbf{Oct 2023 – Present}
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Manage financial operations, budgeting, and event coordination for campus coffee organization
|
||||
\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 Architected modular plugin system with WebSocket-based teleoperation and RESTful API integrating ROS for NAO, Pepper, and custom robots
|
||||
\end{itemize}
|
||||
|
||||
\resumesection{Selected Projects}
|
||||
|
||||
\textbf{beenvoice - Professional Invoicing Application} \hfill \textbf{TypeScript/Next.js}
|
||||
\textbf{Computer System from Scratch - Nand2Tetris} \hfill \textbf{HDL/Assembly/Java}
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Built full-stack invoicing app with secure authentication, client management, and invoice generation
|
||||
\item Designed complete computer system from hardware (NAND gates → CPU) through software (assembler → OS), demonstrating full-stack systems understanding critical for robotics applications
|
||||
\end{itemize}
|
||||
|
||||
\textbf{Formula One Performance Prediction Using Machine Learning} \hfill \textbf{Python/ML}
|
||||
\textbf{Autonomous Vehicle Control - Chem-E-Car Competition} \hfill \textbf{C++/Arduino}
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Developed ensemble machine learning models (LightGBM, XGBoost, Random Forest) to predict F1 lap times with high accuracy
|
||||
\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)
|
||||
\end{itemize}
|
||||
|
||||
\textbf{HRIStudio Research Platform} \hfill \textbf{Next.js/TypeScript}
|
||||
\textbf{HRIStudio Research Platform} \hfill \textbf{Next.js/TypeScript/ROS}
|
||||
\begin{itemize}[noitemsep,topsep=2pt]
|
||||
\item Developed web-based platform for Wizard-of-Oz experiments with WebSocket-based robot control and comprehensive data logging
|
||||
\item Full-stack web application for managing HRI experiments with WebSocket robot control and comprehensive data logging
|
||||
\end{itemize}
|
||||
|
||||
% Shared sections
|
||||
\input{shared/sections/coursework}
|
||||
\input{shared/sections/skills}
|
||||
% Technical Skills
|
||||
\input{shared/sections/skills-resume}
|
||||
|
||||
\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,11 +1,11 @@
|
||||
\resumesection{Relevant Coursework}
|
||||
|
||||
\textbf{Artificial Intelligence \& Data Science:} Data Mining, Algorithm Design \& Analysis
|
||||
\textbf{Robotics \& Human-Robot Interaction:} Human-Robot Interaction, Individual Study in HRI (3.5 credits)
|
||||
|
||||
\textbf{Systems \& Software Engineering:} Software Engineering \& Design, Computer Systems, Operating Systems Design, Programming Language Design
|
||||
\textbf{Artificial Intelligence \& Machine Learning:} Artificial Intelligence with Neural Nets (in progress), Data Mining, Image Processing \& Analysis (in progress)
|
||||
|
||||
\textbf{Research \& Analysis:} Research Methods in Computer Science, Probability \& Statistics, Experimental Design
|
||||
\textbf{Systems \& Embedded:} Operating Systems Design, Computer Systems, Embedded Computer Systems, Real-time Control Systems
|
||||
|
||||
\textbf{Mathematics \& Theory:} Linear Algebra, Discrete Mathematics
|
||||
\textbf{Software Engineering:} Software Engineering \& Design, Algorithm Design \& Analysis, Programming Language Design
|
||||
|
||||
\textbf{Networks \& Security:} Computer Networks \& Security
|
||||
\textbf{Research Methods:} Research Methods in Computer Science, Probability \& Statistics, Experimental Design
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||
|
||||
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected May 2026}
|
||||
\textbf{Bachelor of Science in Computer Science} \hfill \textbf{Expected May 2026}
|
||||
|
||||
Engineering GPA: 3.86/4.0 \textbullet{} 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
|
||||
|
||||
@@ -1,38 +1,16 @@
|
||||
\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
|
||||
|
||||
\vspace{0.3em}
|
||||
|
||||
\href{mailto:\personalEmail}{\personalEmail}%
|
||||
\ifx\personalSchoolEmail\empty\else
|
||||
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
|
||||
\ \textbullet\ \href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
|
||||
\fi
|
||||
\\\href{https://\personalWebsite}{\personalWebsite}%
|
||||
\ifx\personalPhone\empty\else
|
||||
\\\personalPhone%
|
||||
\ \textbullet\ \href{https://\personalWebsite}{\personalWebsite}%
|
||||
\ifx\personalPhone\empty\else%
|
||||
\ \textbullet\ \personalPhone%
|
||||
\fi
|
||||
\end{minipage}%
|
||||
\hfill%
|
||||
\begin{minipage}[t]{0.33\textwidth}
|
||||
\raggedleft
|
||||
\ifx\personalHomeAddressLineOne\empty\else
|
||||
\personalHomeAddressLineOne\\%
|
||||
\personalHomeAddressLineTwo%
|
||||
\fi
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
\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,13 +1,15 @@
|
||||
\resumesection{Technical Skills}
|
||||
|
||||
\textbf{Programming Languages:} Python, C/C++, JavaScript/TypeScript, Java, MATLAB, SQL, Bash, LaTeX
|
||||
\textbf{Robotics \& HRI:} ROS/ROS2, Gazebo, NAO/Pepper SDK, WebSockets, Wizard-of-Oz Methodology, Robot Teleoperation, Computer Vision
|
||||
|
||||
\textbf{Robotics \& HRI:} ROS/ROS2, Gazebo, NAO/Pepper SDK, WebSockets, Robot Operating System (ROS)
|
||||
\textbf{Embedded Systems \& Hardware:} Arduino, Raspberry Pi, I2C/SPI Protocols, Sensor Integration, Real-time Control, Finite State Machines
|
||||
|
||||
\textbf{Machine Learning \& AI:} PyTorch, TensorFlow, scikit-learn, LightGBM, XGBoost, OpenCV, pandas, numpy, Jupyter
|
||||
|
||||
\textbf{Research Tools:} Git/GitHub, Docker, Statistical Analysis (R), Experimental Design, Data Visualization
|
||||
\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
|
||||
|
||||
\textbf{Hardware/Embedded:} Arduino, Raspberry Pi, I2C/SPI, Sensor Integration, Real-time Systems
|
||||
|
||||
Reference in New Issue
Block a user