Clayton Hickey

I'm a 18 year old self-taught fullstack web/software developer. Prospective bioengineer and software engineer. I have have been teaching myself programming since 2nd grade by just going for it. I'm currently working on developing an educational software suite to compete with Anki, Quizlet, Kahoot, GimKit, Google Classroom, and Duolingo that runs on all platforms (desktop, web, & mobile) and is federated (similar to Mastodon), free, and open source. It's being developed with my own gui/software framework, BUI Basic. The language learning portion of the suite's development is being documented on Twitter: @LanguageTutorRS.

Headshot of Clayton Hickey

Experiences

Projects

a simple example of Conway's game of life

Started: Jul. 13, 2022; Completed: Jul. 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: Feb. 22, 2022; Last updated: Jul. 14, 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.

Note: Development is very active. Latest update is likely not pushed.

Started: Aug. 13, 2021; Last updated: Jul. 14, 2022

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

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

Note: Development is very active. Latest update is likely not pushed.

Students playing Micro VSRG with RC robots

Started: Nov. 12, 2021; Completed: Nov. 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: Jul. 05, 2021; Completed: Jul. 05, 2021; Last updated: Jul. 15, 2022

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

The site you are viewing is generated statically with Rust and the Maud templating engine.

screenshot of a word search solved with Word Search Cheats

Completed: Feb. 01, 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 searchesso they can solve them quickly. Developed because I am very bad at word searches.

Last updated: Dec. 28, 2021

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: Apr. 07, 2019; Completed: Apr. 07, 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: Nov. 28, 2021; Completed: Nov. 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: Jan. 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: Jul. 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: Jun. 04, 2019; Last updated: Jul. 19, 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.

Losing Russian Roulette

Completed: Apr. 01, 2018

skills: JavaScript, HTML, p5.js, p5.sound, web apps, game development

Made a Russian Roulette game against my friend to see who could do it better, he didn't finish but I had fun making it anyway.

Screenshot showing time and interval

Completed: Aug. 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: Jul. 22, 2022; Last updated: Aug. 17, 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: Oct. 09, 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: Aug. 12, 2020; Completed: Aug. 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: Duolingo is deprecating Lingots and throttling API requests which causes the extension to go slow sometimes.

Started: Mar. 30, 2018; Completed: Apr. 03, 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. (integration with OBS through changing files).

Open Source Contributions

Showing repeat option selected while playing timer

Started: Jan. 09, 2022; Completed: Jan. 09, 2022; Last updated: Feb. 08, 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 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: Oct. 02, 2020; Completed: Oct. 02, 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: Jul. 20, 2021; Last updated: Jul. 23, 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.

Note: Latest development version isn't pushed

Tidbits

Desktop: custom

OS: Arch Linux
WM: LeftWM
CPU: i7-6700
GPU: RTX 2060
RAM: 32GB
Monitors: 2.8

Laptop: Samsung Chomebook 3

OS: Arch Linux
WM: Sway
CPU: 12 Gen Intel i5-1240P0
RAM: 16GB
Brand: Framework

Programming Environment

IDE: VSCode
Terminal: Alacritty
Shell: Bash
Release channel prefrence: nightly (LTS if has desired features)

Personal Server

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

<3 Software Stack

Main Language: Rust
GUI Framework: BUI Basic
Windower: Winit
Graphics Library: WGPU + BUI
Android bridge: android-ndk-rs

<3 Web Stack

Main Language: Rust
Framework: Rocket.rs
Templater: Maud
Database: Postgres (want to replace with my own)
Database Driver: Diesel

HS Clubs

TSA: President
TEAMS: President
Science Olympiad: President
Esports: Vice President
GMSGA: Historian
Spanish Club

Sports

Cross Country
Winter/Spring Track
Tennis