Introduction
My name is Paul Struble, and I am a software engineer and data scientist in the San Francisco Bay Area. I am currently an undergrad at UC Berkeley double majoring in Computer Science & Data Science. I have over 4 years of programming experience and have been involved in other areas of tech, namely PC hardware, for far longer. Most recently, I have been building skills for full‑stack web development, but my interests and skills remain diverse.
Skills
Programming Languages
Development
Data Science
Design
IDEs
Projects
An automated webscraping tool for UC Berkeley's maintenance database. bWork is a suite of utilities for scraping work orders and work order requests directly from the UC Berkeley maintenance website to a local database. The program can automatically deploy parallel processes for high efficiency scraping, and an optional headless mode means that bWork can run silently in the background as well. bWork is currently the only way to access the entire database of 460,000+ work order requests and 740,000+ work orders.
My personal portfolio website. Personal info, contact info, projects, and everything else you see here. Everything on the site from HTML to vector graphics is designed and developed by me. This is my first web development project and uses raw HTML, CSS and JavaScript for the whole site.
Course Projects
NGordNet
A webapp to visualize, explore, and analyze English word usage data over time and the semantic relationships between English words. The project involved designing various backend algorithms for the app, primarily focusing on efficient time series and graph traversal.
Build Your Own World
A basic 2D game with procedurally generated worlds consisting of pseudo-random rooms and hallways. The game features keyboard input for player movement, interactive menus, seed-based world generation, saving/loading, and a replay module.
Deques
Implemented efficient custom linked list and arraylist data structures in Java from scratch as well as additional methods/features for each. Tested implementations for efficiency and to ensure accuracy. Used these custom data structures to create a basic guitar-string synthesizer.
Ants vs. Some Bees
Designed and implemented the backend for a realtime browser-based tower defense game styled after Plants vs. Zombies. Design was focused on the effective use of OOP in Python to make a modular and easily-expandable game environment.
Snek
A pure-C implementation of the classic "snake" game. The game runs out of the terminal and renders the board using ASCII characters which are updated each frame. Features multiplayer and custom playing boards.
CS61CPU
Designed a functional RISC-V CPU with a complete pipelined datapath in Logisim Evolution. Designed modular datapath components and control logic from basic logic/circuit components.
C.A.T.S.
CS61A Autocorrected Typing Software: Designed and implemented the backend for a web-based type-racing game. The game features multiplayer, a WPM tracker, accuracy tracker, timer, (optional) auto-correct, topic search, leaderboard, and other features.
Awakening of Azathoth
An extension of the traditional "hangman" game written in Java. The game features a regular "hangman" mode, automated algorithms to play the game optimally, and an alternate "evil" gamemode in which the selected word is secretely changed after each guess so that the player always loses.
CS61Classify
A basic machine learning algorithm to classify handwritten digits coded completely in RISC-V assembly. Dot product, matrix multiplication, and other elementary operations were all implemented from scratch using only RISC-V primitive operations.
CS61kaChow
A project focused on low-level optimization of the convolution (e.g. matmul) operation in pure C. The goal was to highly optimize the runtime of the convolution operation using various techniques such as SIMD operations, multithreading, algorithmic optimization, etc.
Home Price Predictor
Developed a linear regression machine learning model to predict home prices in Cook County Michigan based on data published by the county. Development involved various data analysis, data engineering, and optimization techniques.
Spam Email Classifier
Developed a simple binary logistic regression model to classify emails as either "spam" or "not spam". Features were extracted and engineered from a large labeled dataset of real emails.