Clayton Hickey

I'm currently studying Bioengineering and Computer Science at the University of Pennsylvania. I'm currently developing a language learning app, Tutor Engine. The app's development is being documented on my blog. Below you can find an abbreviated history of my over 11 years of programming projects.

Headshot of Clayton Hickey

Experiences

Projects

a simple example of Conway's game of life

Started: July 13, 2022; Completed: July 13, 2022

skills: Rust, BUI (my core gui lib), BUI Basic (my gui framework), WGPU, WGSL, compute shaders, desktop software, Windows software, Linux software, Winit

Conway's Game of Life computed and rendered on the GPU using WGPU. Written with my own gui framework, BUI Basic.

Started: February 22, 2022

skills: Rust, BUI (my core gui lib), GUI framework design, cross-platform (mobile, desktop, web)

Simplified wrapper around bui for building guis without sacrificing any performance.

Won 1st place wth a perfect score at the PJAS state competition.

I'm a little bit disenchanted with this. I think there will need to be innovations (that I'm working on) in programming languges to actually achieve the ideal this project seeks.

Note: Latest update is not pushed

Started: August 13, 2021

skills: Rust, WGPU, WGSL, render shaders, cross-platform (mobile, desktop, web)

A performant WGPU (currently - plan to support multiple backends) GUI rendering library.

Note: Latest update is not pushed.

Students playing Micro VSRG with RC robots

Started: November 12, 2021; Completed: November 28, 2021

skills: Rust, microcontrollers, Raspberry Pi, dynamic parsing

A rhythm game for Raspberry Pi - specifically the Raspberry Pi 3B+. Imports 4k osu!mania maps (no hold notes). Single player (2 player may be added). I completed this project for a Raspberry Pi 3. This game is meant to be played with wheeled robots hitting the notes and sacrifices were made for that. However, it can be easily modified to fit one's requirements. The game dynamically reads and parses osu!mania (a popular and now open source rhythm game for desktop operating systems) set/map files that the user can choose from to play on startup.

Started: November 15, 2023; Completed: November 16, 2023

skills: websites, JavaScript, HTML, CSS, web hosting, Linode, Nginx, DNS, Cloudflare, Nix, static sites, Web Components

A portfolio website (this website) created in raw HTML, CSS, and JS using web components

Started: July 5, 2021; Completed: July 5, 2021

skills: websites, Rust, Maud, static sites, HTML, CSS, web hosting, Linode, Nginx, DNS, Cloudflare, Nix

The old version of this site was generated statically with Rust and the Maud templating engine. Deployed with Nix.

screenshot of a word search solved with Word Search Cheats

Completed: February 1, 2019

skills: websites, web apps, algorithms, OCR, JavaScript, p5.js, HTML, CSS

A tool to solve word searching using OCR which allows users to upload pictures of word searches so they can solve them quickly. Developed because I am very bad at word searches.

skills: Rust, Rocket.rs, fullstack web, DNS, Cloudflare, web hosting, Linode, Linux, Ubuntu, Nginx, server-side rendering, web templating, Maud, Google SEO, Bing SEO, dynamic sitemap, HTML, CSS, websites

My personal website to show off projects. Has gone through many rewrites. The current version is made with Rust using the backend framework, Rocket, and the compile-time templating engine, Maud. The website is hosted on Linode and put behind a Cloudflare proxy to protect from the surprisingly common DDOS attacks. It's also behind a reverse proxy, nginx, to allow for other sites to be hosted on the same Ubuntu Linode server Gets 100% on Google Lighthouse. Previous version used NodeJS, expressJS, and a custom web framework/templator.

the car AI making a turn towards the exit

Started: April 7, 2019; Completed: April 7, 2019

skills: Unity Engine, C#, AI, ML, custom ML, desktop software, Windows software, Linux software, Mac software, web apps

I created a custom neural net/machine learning procedure to train a neural net to drive through a track. It's inefficient but it works. I made a video describing how I developed it and how it works.

Crab Rave visualized with Sound Galaxy as colored circles flowing downward

Started: November 28, 2021; Completed: November 28, 2021

skills: Rust, WGPU, WGSL, render shaders, Winit, BUI (my core gui lib), Constrainer (now "archived indefinitely" tool for creating CAD-like GUI), desktop software, Windows software, Linux software, audio visualization, async software, async in Rust

I adapted a JavaScript/p5.js tutorial by ExecuteBig which itself was an adaptation from a HackClub tutorial to use Rust and my own GUI libraries/tools which are fully GPU accelerated.

Usage: place a sound file named "input.mp3" next to the downloaded executable/binary file and run the executable or specifify the location of the file as the first argument when executing from a terminal

Clayton playing png against Bob. Revealed names and Bob's favorite programming language.

Completed: January 21, 2020

skills: JavaScript, HTML, CSS, p5.js, p5.sound, web apps, software audio playback, Node.js, Websockets, socket.io, real-time multiplayer, multiplayer on the web, multiplayer client prediction and rollback, multiplayer matchmaking

A real-time multiplayer pong clone made for a Repl.it competition. Instead of just playing to a score, winning a point reveals information about the other player (that they submit) so that they can get to know each other a bit. Physics calculations are done server-side to prevent cheating. Optional singleplayer is available.

Picture of the 2 key keypad 3D printed in red filament with kalih box brown key switches.

Completed: July 22, 2020

skills: OpenSCAD, Arduino, C++, microcontrollers, peripheral dev, CAD, FreeCAD, FDM 3D Printing, Debouncing, Soldering

An extremely cheap ($10) 2 key keyboard for playing Osu!, a rhythm game, with an Arduino Pro Micro base. Case designed by me in FreeCAD, keycaps designed by rsheldiii and customized with OpenSCAD, all 3D printed on my MP Select Mini V2 in PLA. Code was developed by me using Arduino's pre-built tools and C++.

Decoded "hello" from BirbText

Completed: June 4, 2019

skills: web apps, JavaScript, HTML, p5.js

Created a web app with p5.js to make visually translating between cryptic "fonts" easier. Made for the Game Theory ARG.

Screenshot showing time and interval

Completed: August 20, 2018

skills: C, low-level/embedded software, Pebble UI

A timer for keeping track of cross country or track running intervals and other repeating timer needs. Also functions as a stopwatch. Uses the native Pebble SDK.

Cat made from dogs

Started: July 22, 2022

skills: WGPU, Rust, CLI

Makes images from images using the GPU so it's much faster. Will update so that it also works in the web and desktop without CLI.

Cat made from dogs

Completed: May 26, 2018

skills: JavaScript, p5.js, HTML, CSS, web apps

I made a program that takes a bunch of images and forms them into another image by color matching.

Completed: October 9, 2019

skills: JavaScript, Node.js, ExpressJS, HTML, CSS, API, web apps

Allows a single player to control multiple Kahoot "users" from an entirely separate website. Also allows keyboard controls without the use of external hotkey software so that one can answer faster on a Chromebook.

Does not work for now due to changes in Kahoot's API

Example of giving multiple lingots.

Started: August 12, 2020; Completed: August 30, 2020

skills: reverse engineering APIs, JavaScript, HTML, REST API, browser extensions, browser extension publishing

A browser extension to allow users of Duolingo to give multiple lingots at the same time to users for their contributions to the forums or helping them understand a new topic.

Note: Lingots no longer exist so the extension no longer works..

Started: March 30, 2018; Completed: April 3, 2018

skills: Python, FFmpeg, desktop software, Windows software, Linux software, Mac software, API, YouTube API

Gets royalty free music from creators and automatically gives them credit to play during live streams through integration with OBS

Open Source Contributions

Showing repeat option selected while playing timer

Started: January 9, 2022; Completed: January 9, 2022

skills: C++, firmware development, FreeRTOS software, LittleVGL

I purchased a new PineTime watch which uses the Infinitime firmware. I had previously used my own app (PebbleXCTimer) on my old Pebble Time for this function but it's not portable and the Infinitime firmware does not have the function built in or sideloading. So, I added the functionality to the timer app already built in.

Note: PR is unmerged but code is functional. They said they want it to be put into a separate app but I haven't gotten to it yet.

Started: May 28, 2020; Completed: May 29, 2020

skills: Android Native, Android layouts/views, Java, REST API, mobile apps

Comments on the LBRY website were already present but they were not available on the Android app. I like to read comments so I decided I should add them to the Android app so I analyzed how their website (ReactJS) was able to get comments from the LBRY REST backend server and adapted a similar technique to make comments available on the Android app.

Note: I only included the first page of comments in my PR because I didn't see a way with their API to ensure that the comments were kept in sync (if a comment was added or removed before a user would scroll, comments may be missing or duplicated on the user's screen) without fetching all the pages at once (defeating the purpose of pagination of saving memory and bandwidth). I thought they were going to add something to their API or something but after my PR, they just went with the latter solution and fetched all the pages at once.

Started: October 2, 2020; Completed: October 2, 2020

skills: Android Native, Android layouts/views, Java, REST API, mobile apps

Unpublishing and deleting videos are separate actions on the LBRY platform. However, the LBRY Android app did not make this distinction and performed both actions. So, I added another button and fixed some UI logic around it.

Abandoned Projects

Started: July 20, 2021

skills: VR app development, OpenXR, Godot, FFI, Desktop Games, Windows Games, TCP Sockets, real-time multiplayer, async software, desktop software, Windows software, Linux software

A micro voxel-world VR game. Never finished but it was a good exercise in making VR games and using Rust/FFI in game engines for optimal performance. Likely applicable to other engines like Unity and Unreal. This game would probably require a custom rendering pipeline to make performant at all so if this were to be fully developed, a custom engine would be used.

Tidbits

Desktop: custom

OS: Windows 10
CPU: i7-6700
GPU: RTX 2060
RAM: 32GB
Monitors: 1 to 1.5 (average 1.25)

Laptop: Framework 13

OS: NixOS
WM: Sway
CPU: 12 Gen Intel i5-1240P0
RAM: 64GB

Programming Environment

IDE: NeoVim
Terminal: Alacritty
Shell: Bash
Release channel preference: LTS

Personal Server

Host: Linode
RAM: 2GB
CPU: 1 core Xeon E5-2697
OS: NixOS
Proxy: Nginx
Server: Nextcloud

<3 Software Stack

Rust

<3 Web Stack

Backend: Rust w/ Actix
Client: static HTML/CSS/JS generated from OCaml
Database: Postgres

Sports

Ex-Cross Country/Track
Tennis
Cycling