Hi there
I'm JT. Also occasionally James Taylor.
I do cool stuff with JavaScript.
I still haven't figured out what to do with this site.
But in the meantime…
I made some things
I guess it's a lot less meaningful these days to show off cool things that you made, when anyone can trivially generate something similar completely from scratch.
Nevertheless, these are some personal projects of which I am reasonably proud. Each exists primarily as an exercise in my own exploration & understanding; they represents stuff I thought about and figured out for myself.
Anyway, I think they're kinda neat.
-
Waveform
Early 2022-ish — Inspired by a YouTube video, I wanted to visualise how an image and its luma waveform could be thought of as different 2-d represenatations of the same 5-d data. Uses WebGL and a bunch of matrix maths. Quite heavy* on the GPU if you dial it up to the maximum; please don't blame me if your computer catches fire. Also features a photo of my neighbour's cat.
-
Globe
Sometime around 2015 — A cool 3-d globe with a depth-of-field effect, mainly because I wanted to explore how to calculate an optically-accurate Circle of Confusion radius for each point†. Also features a nice Fibonacci-spiral-based dot lattice because it annoyed me how every existing example at the time used an ugly latitude-longitude grid. (A previous version used a subdivided-icosahedron hexagonal grid; I could never get the 12 necessary order-5 points to land somewhere nice.)
-
Game Boy emulator
A bored summer in 2014 — At least at the time, it felt like practically every developer would go through a phase of deciding to build a Game Boy emulator and I was no different. My goal specifically was to make something as small as possible without sacrificing performance, while still maintaining full support for Game Boy Color emulation. I revisit this every couple of years and shave more bytes off. Currently stands somewhere around 7.65kb minified & gzipped.
-
tiny-hashes
Sometime early 2011 — Have you ever needed to generate an md5, sha-1, or sha-256 hash in JavaScript, but need that JavaScript to be as small as possible? Well that was my motivation for this. Implementations as small as I can possibly make them. I can't promise that they are 100% bulletproof and cryptographically accurate (I suspect they fail if given null characters for example) but they have been in use for many years without issue. Featuring some extremely cursed JavaScript.