Welcome! This website serves as a portfolio for me, Adam Harvey. Below, you'll find a list of projects I've worked on; click on any of them to see more.
Most of them include built-in browser-based demos for you to try out yourself, but the rest still come with written explanations, as well as downloads of the project and its source code, if applicable.
Of course, this site itself is a project of mine too! I set up this server from scratch, and put together all the pages by hand - click here to learn more!
IMatch is an image-matching algorithm designed to match identical portions of images - even after scaling, rotation, transformation, flipping, image artifacting and more!
It uses OpenCV's implementation of ORB to find image features, then performs Hamming nearest-neighbor searches using Locality-Sensitive Hashing, before using RANSAC to find the appropriate transform to overlay the images with.
You can run it in your browser, on any device, by clicking here!
Physital is a browser-based n-body orbital mechanics simulation, which models gravity and collisions in a 3-dimensional universal reference frame.
Internally, it uses a home-made RKF-45 ODE solver to model the gravitational forces between pairs of bodies.
I designed it specifically to run smoothly on all devices, so give it a try on yours by clicking here!
Scrambled Pizza is an image-to-image encryption algorithm: it takes an image and a password as input, and returns a "scrambled" image of the same dimensions.
While not a practical encryption method for most uses, it does produce a file which is visibly safe and easy to handle, due to its usage of a standard lossless image format (PNG).
Early versions were written in Java, but you can try out a new browser-based version (using web workers) by clicking here!
The Huffman Compressor is a lightweight browser-based implementation of a Huffman Coding, the optimal method for symbol-by-symbol encoding with a known distribution.
While its compression ratio is less than that of a more complex dictionary, arithmetic, or Golomb coding, I find it an interesting and approachable example of how compression works. Click here to try compressing some text of your own!
Upon joining, each user is assigned a human-legible username based on a hash of their IP address. Click here to try it out - preferably with some friends to help you test it!
Hyper Operator is a simple browser-based idle game; the player accrues resources over time, then spends them to increase the rate at which they accrue.
The main point of this project is that there's no maximum value - I implemented my own arbitrary-precision binary format to handle the large numbers involved, as well as a system to let the user save their game as a string. Click here to try it out!