too many bees


of things, which I, the author of this website, have done


Beglitch (not to be confused with glitch, because I am bad at naming things) is a tiny framework to attach fragment shader effects to DOM elements on web pages.

It uses html2canvas to paint the target DOM node in pixels, then overlays that atop the target node while keeping text selectable and links clickable.

While any shader can be used with it, I used one that partially scrambles the appearance of the target node as a visual metaphor for the difficulty surrounding discussions of depression and suicide.

Too Many Webrings!

This project is a statically generated/hosted webring, inspired by Amy Cheng's Webring 2020, another static webring built with Glitch.

This implementation was designed to take advantage of the GitHub ecosystem, namely:

  • Free GitHub Pages hosting
  • Membership requests & approval are covered by Pull Requests
  • Automatic rebuilds on merge

This is purely a design experiment that tickles my 2000s-era nostalgia.

Brooklyn JS

Gluing The Web And WebAssembly Together

This presentation is a technical talk that describes how to add convenience code that makes running WebAssembly easier. wasm-bindgen and emscripten generate convenient glue code automagically, but because I distrust magic (ironic for a Ruby on Rails programmer) I had to figure how it really worked under the hood before I was willing to let a library do the heavy lifting.

This talk begins from the very first problem–WebAssembly's limit of just four primitive data types–and builds toward a working interactive game of hangman. The result is a set of JavaScript snippets that can be used to make WebAssembly easy to load and run; or at least to better understand how the automated tools do it.

OpenNI2 for Rust

OpenNI2 is a (now abandoned) library developed by PrimeSense to read video streams from devices like the Xbox Kinect, a camera that records both visual data and depth through an infrared sensor.

OpenNI2 for Rust is a safe wrapper around OpenNI2's C API.

This project will eventually combine with a NiTE2 for Rust library to recreate the SimpleOpenNI library for Processing.


The Great Line Art Swap

This Figment installation is an art exchange where visitors can color pre-drawn line art, or draw line art to leave for others.

The result is a constant flow of art between visitors.

Art gallery is currently being editedOHMYGOSH it's a legit use case for an under construction gif! 👷🏻‍♂️ 🚧 👷‍♀️

Queens JS

Ads Are Evil, But I'm Worse

I have never learned more about JavaScript and the web than when I've reverse engineered malicious advertisements.

This presentation describes a mysterious ad which I discovered after it tried to cover its tracks a little too conspicuously.

As the titles of my original blog post and presentation suggest, I first describe how JavaScript can be used to conclusively determine if a browser's JS console is open. And then I describe the terrible things I do with JS in an attempt to vaccinate pages against the technique.

I don't recommend the procedure to anyone, but then I also don't recommend running dozens of video ads ten-at-a-time hidden behind a static image to rack up fraudulent video ad impressions until the user's browser tab crashes. What? I'm not mad. 🙃


Rainbow Mirror

(Also named Glitch for its accidental development.) Utilizes an Asus Xtion Pro Live (basically an XBox Kinect) to mirror visitors' bodies in strobing color.

A grayscale video frame that captures a lot of flickering noise around the edges of moving bodies, especially hair.

I tried making a toy visualization that "red shifted" people as they moved toward or away from the camera. Several wrong calculations and integer overflows later, I ended up with a flickering grayscale mess, pictured.

I eventually fixed the math errors, and discovered it wasn't nearly as fun as my glitched-out art, so I took my piece in that direction instead.

I installed it on Governor's Island in the basement of Fort Jay, a cavernous pitch-black bunker perfect for projecting a light show.

Avatar Verifier

I learned Ruby so I could stop making so many typos when writing MUD areas.

From 2002 to ~2015 I played a Merc-derived MUD called AVATAR. A rare area building contest was hosted by the Immortal staff, and after writing a tiny newbie area filled with sleepy ents and one angry warlock, I was offered the privilege of writing areas regularly.

AVATAR's codebase hails all the way from 1990's DikuMUD, and its area file format grew harder to manually read and write with each new feature added to its syntax. AvVerify was my first ever Ruby program—I learned as I went—built to parse area files and report possible errors.

MUD areas contain the entirety of the game's lore, and with enough contributors it sort of becomes a shared fanfiction of itself. I spent countless hours researching in-game lore to find interesting story lines to pick up, and concoct mysteries that I hoped other writers would investigate and embellish on their own.

I should emphasize that area building was one of the most rewarding creative pursuits of my youth (and young adulthood). In retrospect, I wish I hadn't stopped, but a combination of d̻e̠͉͔p̟̟̰ͅr̘̦e̩̫̗̟̜s̗͍s̻̝i̞͖o͉̻̪̩n͚̰ ̞͈̻̬͔a̝͖͉̳̻̰͈n̦̝̘͓̞d s̤̙o̻̘̱m̞̦e͉ l̩̯͎̼̦̣o̶̶͍̬o̯̙̙̱͚̻̙ͫ̆ͦ͋m̧͍̻͜i̧͓̩̲͚̹͕̺͘n̴͇͔̱̩͉̠͝ͅg̝̦͇̦͟͝ͅ i̛͏̨̛̯͚̥̺̟̪̫̙̗s̷̢̛̛̰͇̻͖͈͉̙̮͍͙̪͓̥̤͔̳͝sͦ̍͑̄̅̌͏͇̭̜͔̺̹̖ͅų̣̘̜̳̲̘̘̣̣̰̦͘̕ȩ̢̱͙͉̤̮̬̹͖s̢͏̢͔̹̯͙̣̺̹̩̥̥͕̠̙̠̦̬̠ kept me from keeping up contact with my peers. 😶

Spamusement Pop Quiz!

A lot of people my age cut their teeth on web development through Neopets. For me, the first software I wrote outside of a school setting was a quiz based on Spamusement! fan comics.

From 2004 to 2007, Steven Frank created Spamusement! which he accurately described as "Poorly-drawn cartoons inspired by actual spam subject lines!"

A lively fan following grew on its forums, the central focus being the Spamuser Comics section, where members drew their own art to email subject lines that landed in their inboxes. (For the young'uns reading this, there was a time when email spam was truly surreal, rather than bland hyper-targeted product offers.)

After a few years, the Spamusers forums contained quite the body of work, and for fun I made a quiz to test forum regulars' spam-instincts. It was monstrously bad, as first attempts at web dev usually are, and it still has a special place in my heart.

The Spamusers fan comics collection has been decimated in the decade(s) following its heyday, by purges from the likes of ImageShack, policy changes to Photobucket, etc. I wish I could have saved more comics before they were lost, but I'm glad I could keep this little slice of internet art safe and sound.

Love you guys. 💛