Unfinished projects and failed ideas
A walkthrough of my private GitHub reposMy GitHub profile is a bit like an iceberg. At the time of writing, I have made nearly 8 and a half thousand commits to nearly a thousand repositories. Since July 2018, I have made an effort to go no more than 3 consecutive days without writing code, and I have only broken that streak 6 times (each of those being a 4-day break).
I remember making myself a GitHub account back in 8th grade (August 16, 2016 to be exact). Ever since then, I have published every single personal project I have made to GitHub.
My goal at the time was simply to use GitHub as a free file storage platform for my little side-projects, but it ended up having two interesting side-effects:
- My profile is an accurate representation of my work, since it is my work. No filler or template projects needed!
- You can see my progression as a programmer by looking through my timeline.
Since I send potential employers directly to my GitHub profile, I have a few rules for how I manage the account. The important one for this post is:
Only finished and documented projects are made public. (Some WIP projects may also be public for various reasons)
This means that while I currently have 476 finished personal projects (yes, I write a lot of code), I also have roughly the same number of unfinished projects that’ll likely never see the light of day.
Showcase
My goal for this post is to showcase some of the interesting failed ideas I have had in the past. Before I get to the whole list, here are a few recent projects of mine that are worth mentioning in their own section:
A near success
This is a project that may actually be finished some day, considering how its nearly production ready.
In mid-late 2021, I was building a custom graphics pipeline for some friends. After finishing work on [data::loss], a group of us started prototyping various concepts for future games. Continuing off of this, @demilurii and I began looking at integrating 3D layout and rigging tools into our 2D asset pipeline.
Thus, strangle
was born. Strangle is a little tool that allows super easy project and asset management through various tools using Pixar’s USD as a data interchange format.
strangle
can handle the MagicaVoxel, Blender, Maya 2022, and Houdini DCCs in a layering approach, where each DCC is used to add their specialty to an asset. This means that magica could be used for modeling, blender for texturing and shading, maya for layout, rigging and animation, and houdini for lighting and FX.
This whole pipeline works flawlessly, but the tooling was never released due to some less-than-ideal design choices in how the tools interface with each other across OSes.
A public failure
I actually published one of my failed projects as reference material for other developers.
https://github.com/ewpratten/animal-loader
animal-loader
(A not-so-acronym for “A Native Mod Loader”) is an experimental, unfinished project to allow the @kleientertainment games Don’t Starve and Don’t Starve Together to load native mods written in rust, and support WebAssembly plugins.
After starting work on this project, I learned that the game I was attempting to mod was never compiled with support for dynamic library loading through its LUA interface, so I was unable to continue without considerable effort.
A little bit of IOT hacking
mitechlib
, another unfinished project of mine, is a Rust library that allows me to programmatically interface with the laundry machines in the building I live in.
The only reason it exists is because I thought it would be funny to walk into a laundry room, and wash my clothes with a laptop connected to a washing machine.
The list
With the power of APIs, I threw together a little GraphQL query to grab all my private repos:
query {
viewer {
repositories (privacy: PRIVATE, first: 100, after: null) {
edges {
node {
name
description
}
}
pageInfo {
endCursor
}
}
}
}
I then vetted the list a bit, and converted it to a web-ready format.
Here is the new and improved list of my project ideas that never saw the light of day:
CardStudio
- A tool for working with various RFID cards using Proxmark devices
proxmark-rs
- A Proxmark3 client library for Rust
render-test
- An experimental game that only uses ASCII art for rendering
ewpratten-commit-stats
- A private api for querying my GitHub ranking in Canada
dst-rpc
- Discord RPC (Rich Presence) support for @kleientertainment’s Don’t Starve Together (precursor to animal-loader)
blink-camera-api
- A partial API client for Amazon/Blink cameras
blink-client
- A simple client for Blink home security cameras
MultiAuth
- A development tool to allow a mix of premium and “offline mode” accounts to join a Minecraft server
multirss
- A minimalist RSS aggregator
dynmap-viewer
- A high-performance desktop client for Dynmap
wtf
- A utility for dumping large amounts of information about a host
microfetch
- An over-simplistic portable command-line system information tool
mitechlib
- A library for interacting with Mitech smart connected laundry machines
rc2d
- A 2D raycasting library for line-of-sight lighting in 2D games
MuchPerformance
- A minecraft performance modpack
tiny-osc
- Morse code practice ocillator built on the Atmel ATtiny85 platform
EmmetMob
- A minecraft mod that turns my friend into an entity
amprdns
- An alternate DNS service, only avalible to 44net hosts
betaroute
- A peer-to-peer routing tool
MiwuStickers
- A custom sticker pack
shoot-to-interact
- A game with one option: shoot
protocrypt
- An experimentation in XOR-ing data
tinylink
- An alternate repeater linking project
repeaterstack
- A full amateur radio simplex node / remote repeater
hamscan
- Frequency monitoring and web visualization based on
rtl_power
- Frequency monitoring and web visualization based on
strangle
- Experimental voxel art pipeline
vox2usd
- Convert from the Magica Voxel file format to Universal Scene Description
usd-tutorial-files
- Scripts from Pixar’s USD tutorials
discolytica
- A tool for tracking discord data into an analytics database
ampr-minecraft
- Minecraft server for stress-testing an edge router
darkdns
- A standalone Docker-based DNS server that resolves lesser-recognized domains
r3_pipeline
- Video game and animation production pipeline (Used for [data::loss])
egf
- Evan’s Game Framework: Everything you need to build a 2D game
tyler
- A custom
tiled
map loader
- A custom
sonr
- A voice chat control library built on Serenity and Songbird
discord-map
- Generates a graphviz map of all your Discord servers
ewc
- C-compatible core library for quick development shortcuts in various languages
cloth-toy
- 2D cloth simulation toy
morsencode
- Experimental data encoding algorithm based around morse code
kobodash
- A simple dashboard application for the Kobo Aura
gpu-avg
- Learning experiment for executing headless compute shaders
rtiod
- Ray-Tracing In One Day: A random project to fill my time
spac
- Abstract mathematical types for library interop with easy-to-use interfaces
vec-convert
- A translation layer between the many Rust vector types
open-echo-proxy
- An open-source echolink proxy server
discord-framework
- Easily build Discord bots by defining them using JSON data
tinygl-rs
- Rust bindings to tinygl
network-monitor
- A tool for logging network drops
fileshare
- Personal file-sharing service
disco
- Simple network discoverability service
zndfrm
- A procedural audio engine
egui-raylib-rs
- Raylib integration for egui
error-adaptor
- Utility macros for wrapping external error types in Rust
xplre
- XPLRE: A small 2d game
strands
- Basic and experimental physics toys
minecraft-wasmtime-experiment
- Experiment in loading plugins into Minecraft with Wasmtime
csrpc
- Crazy Simple RPC library
tiny-analytics
- Small and efficient analytics engine for my personal projects
ut
- Usage Tracking API
zzarl
- VA3ZZA Amateur Radio Logging software
kx2-rs
- Rust library for serial control of the Elecraft KX2/KX3 transceivers
kxsvc
- Local gRPC service for programmatic control of Elecraft KX2 and KX3 transceivers
nv
- An environment management tool
pathwarn
- A library for providing useful feedback about invalid paths passed to Rust applications
tvdsb-student-api-rs
- Rust API for interacting with Thames Valley District School Board student information
ludum-dare-48-rework
- A design rework of our Ludum Dare 48 game: Deep Breath
ewpose
- “ewpratten’s positioning library”
vision-types
- Datatypes and utils related to computer vision targets
ampersand
- A build tool for Rust-based Android apps
gnn
- An experiment in building a generic neural network
pixyusb2-rs
- Rust bindings for
libpixyusb2
- Rust bindings for
mdviz
- Multi-dimensional graphing tool
lightpanel
- A tool for turning my computer monitors into configurable light sources for my room
improc
- Image processing and filtering in Rust
leapmotion-rs
- Rust bindings for the LeapMotion V2 API
wg-dash
- A dashboard for WireGuard servers
lmvn
- A small tool for managing local maven repositories
packtool
- A tool for managing Minecraft modpacks
breaktrack
- A simple crawler for broken URLS on a webpage
stratosphere-r6
- A tool for estimating Rainbow Six Siege match results
autojson
- Automatic JSON serialization and deserialization macros for Rust
ZZALOG
- VA3ZZA’s Amateur Radio logging software
repeatermon
- A tool for monitoring repeater activity
lcx
- LaunchControlX: A custom macro pad
git-time
- Graph time spent on a Git project
spawn-server
- Experimental Minecraft server infrastructure
aprtwt
- APRS <-> Twitter bridge
raylib-tessellation
- A bridge between Lyon and Raylib, allowing easy GPU path tessellation
slyce
- An experiment in low-complexity game development
GameTK
- A game development and 3D rendering framework
raylib-imgui-rs
- Raylib + Dear ImGui. In Rust
cone-of-vision-demo
- A small app demonstrating cone-of-vision rendering in 2D
raylib-tweaks
- Some small tweaks and extensions on raylib to make it a little more Rust-friendly
bdl
- Small and fast HTTPS file downloader
burstfetch
- A very simple BitTorrent implementation
tinyos
- A tiny OS
nodelink
- Dockerized internet radio nodes
path3d
- A demonstration of 3D path solving
repeater-info
- Web-based amateur radio repeater information
avr-rust-utils
- Some utility functions for working with Rust AVR code
py-aprsfi-api
- An aprs.fi API client for Python
hambadges
- Embeddable badges for amatuer radio operators
ham-status
- An experimental dashboard for amatuer radio operators
logbook
- Clean and simple log-keeping program for amateur radio operators
propagation-app
- A simple android app for displaying HF and VHF propagation information
tws-bs-x-morse
- Platform-agnostic Rust driver for the TWS-BS series high-power wireless transmitter modules. This driver is specifically for sending data encoded as morse code
wxbcn
- A project to create a local area CW beacon providing temprature and light level informaiton
twentytwo
- A Minecraft server plugin that adds a new music disc type
rayray-demo
- 3D rendering 3D objects, ray-traced in 3D. An experiment
maven-edge
- Tools to deploy personal maven edge servers anywhere, any time
mathutils-rs
- Rust port of my MathUtils library
basic-control
- Basic systems and controllers for Python
control-rs
- Rust ports of various basic control loops and systems
mathutils-py
- Python port of MathUtils
bionic
- A robotics framework
glass-engine
- A dead simple 2d game engine build from past experience
update-notifier
- A small Java library to provide software update notifications to users
plugin-core
- Core API shared across my Spigot / PaperMC plugins
rq
- A scalable rendering pipeline
jarcon
- A lot of recon in a little bit of jar (A tool for hiding telemetry services in Java applications)
SDRInterface
- Web front-end for my WebSDR server
MapLink
- The missing link between Dynmap and your Minecraft client
hookback
- Remote monitoring for Java applications
ChatBridge
- Bridge Minecraft chat to a Discord channel
PlayerStats
- A Minecraft server plugin for tracking client-server activities
sdrexplorer
- A web tool for exploring WebSDR servers globally
tooltips
- Meta extensions to Java, allowing custom tooltips in source
VarStrings
- Non-constant String types for Java
LiteIO
- A lightweight HAL for systems I commonly use
openbandplan
- A web-viewer for ITU region 2 band plans
baremetal-avr
- C++ tools for working with AVR microprocessors
AutoBCN
- Simple CW beacon driver
repeaterbook2gqrx
- A tool for exporting a list of repeaters from RepeaterBook as a GQRX bookmark file
koctl
- A tool for interacting with Kobo hardware on-device
RayJava
- Raylib bindings to Java using cross-compiled JNI
rayconsole
- A graphical debug console for use in Java RayLib applications
codestyle.css
- CodeStyle is a small CSS+JS project I built to nicely style Kramdown code blocks
toy.social
- A personal learning project where I create a simple social platform for sharing text-based posts
nativetools
- My personal toolchain for developing code using the Java Native Interface
rules_teensy
- A collection of Bazel rules for the teensy microcontroller family
xlog
- Cross-platform PWA for logging radio contacts, and syncing between devices
open-london
- A simple API for querying data about the city of London Ontario
repeatermap
- An interactive map showing VHF and UHF amateur radio repeaters throuought the world
robolib
- A Python library containing various tools I developed during my time in highschool robotics
no-wurst-logo
- A small fabric mod to completely disable the Wurst client logo
quicksds
- A small Python library that extends dataclasses to allow packing and unpacking
REGEXResolver
- A small and simple asset resolver for the Pixar USD framework, based on REGEX rules
flashbg
- Flash BattleGrounds is a fast-paced multiplayer arena battle game
amongus_hooks
- A Python library for interacting with a local instance of Among Us on a Windows host
mobile_cv_passthrough
- An experimental Android app for running basic OpenCV video pipelines on-device
dynmap_heatmap
- A GUI tool to generate a real-time heatmap of the positions of Minecraft players via the Dynmap API
vscode-poetry
- Visual Studio Code extension for the Poetry build tool
quickxor
- A tool and file format for encoding and decoding data with an ASCII key
fastrender
- Quick, simple, and easy to use graphics
launchlib
- Interact with MIDI controllers
lp2joy
- Convert Novation Launchpad inputs to Joystick buttons
smtp-send
- A tool for sending email using direct SMTP connection
backblaze
- Rendering improvements for Minecraft
thirdparty-mod-docs
- Automatic Javadoc generation for other people’s Minecraft mods
voxelmc-pipeline
- Sponge schematic -> VOX data processing pipeline
grafana-nt
- A Grafana datasource for NetworkTables servers
snapfinder
- A tool for scraping snapchat accounts out of instagram bios
randomart
- Generates SSH randomart from any file
mc-analytics
- A tool for analyzing Minecraft server logs
textual
- A web graphics engine based around visual story telling
offload
- Multi-host hardware interfaces with RPC-over-serial
combat-tracer
- Adds the “Tracing” enchantment to Minecraft, allowing the player to mark entities by hitting them
amongus-hacking
- Playing with the Among Us multiplayer protocol
remoduino
- A project to turn AVR-based Arduino devices into scriptable devices over UART
jekyll-wiki
- A small and lightweight jekyll wiki theme
coreserv
- Fast and easy minecraft server hosting inside a docker container
icebucket
- A small server-side plugin to allow players to add frost-walker to an iron bucket
playergraph
- Graph the vitals of every player on a Minecraft server in real time
mapcap
- A tool for taking “screenshots” of a minecraft map by hooking into dynmap
shift3
- A fast re-implementation of https://github.com/Ewpratten/shift
dynfolio
- Dynfolio is a web tool for displaying your Instagram profile as a photography portfolio
tinygc
- A small learning experiment in garbage collection
shotpredict
- ShotPredict is a software library for predicting the trajectory of objects launched through the air
backblast
- The UI/UX framework I use for web frontends when I don’t want to do web work
obfuj
- A demonstration of visually obfuscating Java code
simple-sensor-fusion
- A small Java library and Android webapp for pose estimation of an FRC robot
SnapAbuse
- A script for quickly dealing with spam snapchat accounts to determine what they are trying to do.
fsession
- A simple library for sorting files based on the current session
sliding-arm-manipulation
- A project to design a system with a single jointed arm on a slider
tapatalk-api
- Interact with tapatalk via Python
bust_scripts
- Experimental bustabit betting scripts
celltrackd
- A tool for tracking people based on their network connectivity
vessl
- An experiment in isometric game development
statix
- Easily configurable and scriptable status bars
tvdsb-student-life
- The TVDSB Student Life app
rules_avr
- Bazel rules for build code using AVRC
roborank
- A tool for ranking FRC teams
learning-drake
- Source code from my process of learning how to use DRAKE
driverstation
- A tool for transmitting X-Input data to robot controllers running FRCNetComm
ewvector
- Vectors, Quantities, and Sizes
yubiparse
- A simple library for parsing yubikey OTP strings
tictacsolve
- A program for deciding the optimal move in tac-tac-toe for any given board state
Rayzor2
- A faster implementation of the Rayzor rendering engine
libJames
- Query @rsninja722’s life from inside Python
PathChaser
- An experiment in autonomous movement inside an urban environment
pixypose
- An experiment in pose estimation with computer vision
pysnapcode
- Python scripts for working with snapcodes
swarm
- A virtual experiment in swarm-based robotics
homebase
- A webapp for tracking meeting participants
GhostStat
- Share your Google Fit or Apple HealthKit stats in SnapChat
snapterm
- Share your terminal to SnapChat
containerFIRST
- An entire FRC software development toolsuite in a Docker container
pastefs
- A filesystem based around hosting your files in someone else’s cloud
guikit
- Build simple GUI programs in Java (an extension of PicoEngine)
Language statistics
Wow! You made it to the end of the list!
As a reward, here are some language statistics for the project list above. This does not include all languages, just the first few I queried from GitHub off the top of my head.